智能循迹小车之PID控制算法

通过前面从光电传感器获取信号确认小车和黑线的偏离角度,通过PID算法算出左右车轮速度,控制小车前进或者后退。

一、PID算法

在小车的项目中,输入部分是传感器信号,而输出部分是左右轮子的速度差,可以理解为小车轮子旋转的速度。 

二、代码实现

APP_PATROL.h 

#ifndef __APP_PATROL_H__
#define __APP_PATROL_H__
#include "Int_Sensor.h"
#include "Int_Motor.h"

/**
 * @brief 循迹逻辑
 *
 */
void App_Patrol_Control();

#endif // !__APP_PATROL_H__

APP_PATROL.c

#include "App_Patrol.h"

// 定义PiD参数
#define KP           1000
#define KI           1
#define KD           600

#define MAX_INTEGRAL 1000

static char last_error = 0;
static int integral    = 0;

static char App_Patrol_GetPID()
{
    int result;
    char error;

    // 获取当前误差
    error = Int_Sensor_GetError();

    // 累计当前误差
    integral += error;
    if (integral > MAX_INTEGRAL)
    {
        integral = MAX_INTEGRAL;
    }
    else if (integral < -MAX_INTEGRAL)
    {
        integral = -MAX_INTEGRAL;
    }

    // 计算PID
    result     = KP * error + KI * integral + KD * (error - last_error);
    last_error = error;

    // 除对应系数,并返回最终结果
    result /= 50;
    if (result > 80)
    {
        result = 80;
    }
    else if (result < -80)
    {
        result = -80;
    }

    return result;
}

void App_Patrol_Control()
{
    char error;
    // 获取PID结果
    error = App_Patrol_GetPID();
    // 根据PID结果调节左右轮速
    Int_Motor_SetLeft(40 + error);
    Int_Motor_SetRight(40 - error);
}

 以上就是PID算法的实现过程啦,大家快去试一试吧。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值