通过前面从光电传感器获取信号确认小车和黑线的偏离角度,通过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算法的实现过程啦,大家快去试一试吧。