赞
踩
机器人轨迹跟踪一般有两种方式,一是基于PID,二是基于MPC模型预测控制方法。本文主要介绍了PID控制,这里我只采用了航向角的控制,对速度没有控制,因为,我认为,小车只要能到达目标点即可,复杂的我后续再分析分析以及还有在无人驾驶中比较有名的·MPC控制。
因为是在Matlab做的实验验证, 首先你需要一个建立一个两轮差速模型,详情见我上一次的机器人差速模型博客:差速转向机器人数学模型_Jack Ju的博客-CSDN博客_差速转向;
然后有状态空间的表达式如下:
有了被控对象的数学模型,我们就开始写代码了,我的Matlab源码参见我的github:GitHub - JackJu-HIT/TrajectoryControl: 用于无人船轨迹跟踪控制
首先看一下我的仿真结果,x = 2,y = 1,theta = pi / 6,终点只是限制x = 10,y = 10; x = 2,y = 1,theta = pi / 2,终点只是限制x = 10,y = 10; 可以得到两个不同的轨迹图(只是修改了航向角theta,你也可以修改起点坐标)
然后我们开始分析要源码和工程思路了。
这里是初始化的设置,起始位置和航向角设置。
- %%%%两轮差速履带车数学模型建立%%%%%%
- %%参数设置
- 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
鞠春宇
于研究室
———————————————————————————————————————————
如果觉得写得还不错,就关注一下我的微信公众号,最新动态会分享在此。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。