文章底部 可获取:例程开源链接
初始设定与启动
首先,我们启动小车并观察其运行情况。小车通过测量左右轮的路程差来进行方向调节。一旦找到寻迹的黑色线,即开始寻迹操作。我们使用了5个寻迹感应管来实现精确的寻迹功能。
寻迹过程
在第一圈中,我们可以看到小车迅速定位并开始寻迹。每一圈结束后,小车进行角度调整,通过调整左右轮的路程差来实现方向调节。寻迹过程中,小车沿着预设的角度前行,一旦再次检测到黑色线,即刻重新开始寻迹操作。
控制策略概述
总体而言,我们的控制策略相对简单明了:在空白区域通过左右轮的路程差进行实时方向调节,并在寻迹模块检测到线时立即切换到寻迹模式。在达到ABCD点后,我们先进行方向调整,将车辆转向设定方向,然后执行路程差控制。
其中路程差进行方向调节实现代码如下:
void task0(void)
{
IR_Check(); if(FLAG_ONir==1&&timecount>=300) //有传感器了,声光提示,停下
{
StartFlag=0;
setspeedr=0;setspeedl=0; // 停车
R_Pid_Ctrl(0,SPEED_RIGHT);
L_Pid_Ctrl(0,SPEED_LEFT); beeponflag=1;
}
else
{
setrightroad=5000;
setleftroad=5000;
if(Flag_PID>=1)
{ if(rightroad>leftroad+10)
{Flag_PID=0; Car_turnright(80,40);}
else if(leftroad>rightroad+10)
{Flag_PID=0; Car_turnright(40,80);}
else
{Flag_PID=0; Car_turnright(80,80);}
R_Pid_Ctrl(setspeedr,SPEED_RIGHT);
L_Pid_Ctrl(setspeedl,SPEED_LEFT); } }
}
车辆转角实现代码如下:(以下代码为左轮速不动,右轮转动调角度)
void ToangleR(unsigned int targetangl, unsigned int picha)
{
do
{
if(Flag_PID>=1)
{ Flag_PID=0; R_Pid_Ctrl(15,SPEED_RIGHT);
}
if(Flag_Encode == 1) //标志位检测执行 10ms 实时速度显示
{
Encode_Speed();Flag_Encode=0; }
}while(targetangl+picha<RealAngl||RealAngl+picha<targetangl) ;
}
此外,左右轮速度的控制也至关重要。我们采用闭环电机速度控制,确保在寻迹过程中左右轮速度能够精确控制,以提高运动稳定性和直线行驶效果。
PID速度闭环实现代码如下:(以下代码为左轮速度闭环控制代码。)
void L_Pid_Ctrl(unsigned int Target,unsigned int Real) //PID速度控制函数
{
int Error=0; //本次差值,上次差值 float j=0.0,i;
if(Target==0)
{ LastError=0;
dError=0;
SumError=0;
outpwml=0;
ATIM_SetCompare2B(outpwml); return;
}
Error =(Target-Real); //本次偏差 if(SumError*L_Ki>1600) //计算积分项
{
SumError=1600;
SumError=SumError/L_Ki;
} // 输出到最大值后,不再累计偏差,抗积分饱各
else SumError +=Error;
dError=Error-LastError; //微分项,偏差的变化
LastError=Error; //记录本次偏差,用于下次计算
i=L_Kp;
j=Errori;
i=L_Ki;
* j=j+SumError*i;
i=L_Kd;
j=j+dError*i;
if(j>1600)outpwml=1600+1;
else if(j<1)outpwml=1;
else outpwml=j;
ATIM_SetCompare2B(outpwml);
}
调试过程中的挑战
在实际调试过程中,我们遇到了几个挑战。首先是PID参数调节,这直接影响到小车的稳定性和精确性。其次是寻迹过程中的速度调整和转向角度的精确控制,这些都需要仔细调整以保证最佳性能。
综上所述,项目中涉及到多个参数,它们的合理调整直接影响小车的最终运行效果。我设定的是跑6圈,但实际上小车可以持续运行更多圈数,每一轮的积累反而会减小误差,从而提高稳定性和准确性。
例程开源链接
链接:https://pan.baidu.com/s/1PpacwWdcqvmT4xJEspaojw?pwd=6edb
提取码:6edb
扫码加入QQ群,3群| 610403240