自动驾驶—两轮差速机器人基于PID控制下轨迹跟踪
主要分为两种方式:一种是基于PID控制器的设计方案(Proportional-Integral-Differential),另一种则采用模型预测控制(MPC)方法(Model Predictive Control)。其中重点阐述了PID控制器的实现原理及其优势,在当前研究中发现仅关注转向角的位置反馈就可满足基本需求,并未对速度进行严格调节。我的观点是认为只要能够达到目标位置即可;对于复杂的情形,则会在后续章节详细探讨;此外,在无人驾驶领域中广为人知的是MPC方法的应用
由于在Matlab环境下进行实验验证,在此建议您首先构建一个两轮差速模型的具体内容参考我的上一篇关于机器人差速模型的文章:[差速转向机器人数学模型_Jack Ju的博客-博客_差速转向];具体内容参考我的上一篇关于机器人差速模型的文章:[diff... ];链接地址为 "diff... ]
然后有状态空间的表达式如下:



基于被控对象的数学模型后, 我们随后开始编写代码. 项目的matlab代码仓库如下:[GitHub - JackJu-HIT/TrajectoryControl: 用于无人船轨迹跟踪控制](https://github.com/JackJu-HIT/TrajectoryControl "GitHub - JackJu-HIT/TrajectoryControl: 用于无人船轨迹跟踪控制)
首先观察到我的仿真结果中设置不同参数:分别设定x值为2,y值为1,θ值分别为π/6和π/2时,在终点位置上仅施加约束条件为x等于10,y等于10;通过这种设置方式可以得到两个不同的轨迹图形(仅仅改变了航向角θ值的选择,你可以根据具体需求选择初始点坐标)。


然后我们开始分析要源码和工程思路了。
这里是初始化的设置,起始位置和航向角设置。
%%%%两轮差速履带车数学模型建立%%%%%%
%%参数设置
L=4;%两个轮子间的距离
T=0.1;%采样时间
x=2;%初始化位置x坐标
y=1;%初始化位置y坐标
theta=pi/2;%初始化位置theta坐标
x_goal=10;%终点位置坐标
y_goal=10;%终点位置坐标
这部分是核心内容吗?涉及数学模型及PID控制技术。在这一部分中仅采用了比例反馈控制,并选取了比例系数为10。
while((x-x_goal)^2+(y-y_goal)^2 >0.01&&(x-x_goal<=0))
%%%%%%%%%这一段设置跟踪器,跟踪一段直线%%%%%%
%%%计算当前与目标的朝向误差
theta_goal=atan((y_goal-y)/(x_goal-x));
theta_error=theta-theta_goal;
u=-k*(theta_error);
%%%%控制输入,左电机和右侧电机。
vr=4+u;%控制输入需要你去更改//4代表着你想让车走多快,我这里未考虑到。
vl=4;%控制输入需要你去更改
%%%%process model
%%%运动模型
v=(vl+vr)/2;%中心速度
w=(vr-vl)/L;
x=x+v*cos(theta)*T;
y=y+v*sin(theta)*T;
theta=theta+w*T;
x_push=[x_push;x];
y_push=[y_push;y];
theta_push=[theta_push;theta];
end
该系统的PID控制器设计较为完善,在航向控制过程中能够有效实现偏差的自动调节。具体而言,在偏航方向左侧时,控制器会相应进行右侧输出的调节以恢复航线。通过这种动态平衡机制确保了系统的稳定运行。未来可以考虑加入积分和微分环节以进一步优化控制性能。目前建立的数学模型表现非常出色,在参数选择上也经过了精心校准。值得注意的是系统输出波形无超调现象表明其响应特性具有良好的稳定性特征 因此无需额外环节干预即可维持稳定运行状态。
后面继续优化好了,就写成C++代码,毕竟还要在Linux上用。
20200709
鞠春宇
于研究室
———————————————————————————————————————————
如果觉得写得还不错,就关注一下我的微信公众号,最新动态会分享在此。

