两轮式移动机器人参考点位于机器人驱动轴中心模型分析:


控制目标是使机器人在二维平面中运动到指定位置,但由于轮式机器人不能进行平移运动,故其状态变量不能只取(x,y),应考虑车头朝向问题,所以小车的状态变量用向量表示为:
q=[x,y,θ]Tq=[x, y, \theta]^{T}q=[x,y,θ]T
(x,y)为机器人当前位置,theta为机器人的车头方向,机器人只能沿着垂直与驱动轴的方向移动,故移动机器人的运动约束为:
x˙sin⁡θ−y˙cos⁡θ=0\dot{x} \sin \theta-\dot{y} \cos \theta=0x˙sinθ−y˙​cosθ=0
将机器人驱动轴方向的运动力抵消掉
在这个约束条件下,移动机器人的运动学模型可以用
x˙=vcos⁡θy˙=vsin⁡θθ˙=ω\dot{x}=v \cos \theta \quad \dot{y}=v \sin \theta \quad \dot{\theta}=\omega x˙=vcosθy˙​=vsinθθ˙=ω
其中,v和omega分别表示移动机器人的线性速度和角速度
假设参考轨迹是可行的,并由以下虚拟机器人生成
x˙d=vdcos⁡θdy˙d=vdsin⁡θdθ˙d=ωd\dot{x}_{d}=v_{d} \cos \theta_{d} \quad \dot{y}_{d}=v_{d} \sin \theta_{d} \quad \dot{\theta}_{d}=\omega_{d} x˙d​=vd​cosθd​y˙​d​=vd​sinθd​θ˙d​=ωd​
qd=[xd,yd,θd]Tq_{d}=\left[x_{d}, y_{d}, \theta_{d}\right]^{T} qd​=[xd​,yd​,θd​]T
那么我们的控制目标是为移动机器人设计一个连续反馈控制律(v,ω),同时解决稳定和跟踪问题,控制目标为:
lim⁡t→∞(q(t)−qd(t))=0\lim _{t \rightarrow \infty}\left(q(t)-q_{d}(t)\right)=0 t→∞lim​(q(t)−qd​(t))=0
参考文献:
Simultaneous Stabilization and Tracking of Nonholonomic Mobile Robots: A Lyapunov-Based Approach

两轮式移动机器人参考点位于机器人驱动轴中心前偏离L模型分析:


机器人的状态变量用向量表示为:
x=[x,y,θ]Tx=[x, y, \theta]^{T}x=[x,y,θ]T
图中对于xp点有
xp=[x,y]⊤\mathbf{x}_{p}=\left[\begin{array}{ll} x, y \end{array}\right]^{\top} xp​=[x,y​]⊤
对于偏移点S(x)有
s(x)=xp+l[cos⁡(θ)sin⁡(θ)]s(\mathbf{x})=\mathbf{x}_{p}+l\left[\begin{array}{c} \cos (\theta) \\ \sin (\theta) \end{array}\right] s(x)=xp​+l[cos(θ)sin(θ)​]
这样S(x)点的运动将没有约束条件,机器人的运动学模型为:
x˙=[cos⁡(θ)0sin⁡(θ)001][vω]\dot{\mathbf{x}}=\left[\begin{array}{cc} \cos (\theta) & 0 \\ \sin (\theta) & 0 \\ 0 & 1 \end{array}\right]\left[\begin{array}{c} v \\ \omega \end{array}\right] x˙=⎣⎡​cos(θ)sin(θ)0​001​⎦⎤​[vω​]
s(x)的导数为:
s˙(x)=x˙p+lθ˙[−sin⁡(θ)cos⁡(θ)]\dot{s}(\mathbf{x})=\dot{\mathbf{x}}_{p}+l\dot{\theta}\left[\begin{array}{c} -\sin (\theta) \\ \cos (\theta) \end{array}\right] s˙(x)=x˙p​+lθ˙[−sin(θ)cos(θ)​]
得到:
s˙(x)=Rl(θ)[vω]\dot{s}(\mathbf{x})=R_{l}(\theta)\left[\begin{array}{l} v \\ \omega \end{array}\right] s˙(x)=Rl​(θ)[vω​]
其中
Rl(θ)=[cos⁡(θ)−lsin⁡(θ)sin⁡(θ)lcos⁡(θ)]R_{l}(\theta)=\left[\begin{array}{cc} \cos (\theta) & -l\sin (\theta) \\ \sin (\theta) & l \cos (\theta) \end{array}\right] Rl​(θ)=[cos(θ)sin(θ)​−lsin(θ)lcos(θ)​]
Rl−1(θ)=[cos⁡(θ)sin⁡(θ)−1lsin⁡(θ)1lcos⁡(θ)]R_{l}^{-1}(\theta)=\left[\begin{array}{cc} \cos (\theta) & \sin (\theta) \\ -\frac{1}{l} \sin (\theta) & \frac{1}{l} \cos (\theta) \end{array}\right] Rl−1​(θ)=[cos(θ)−l1​sin(θ)​sin(θ)l1​cos(θ)​]
最终有:
[vω]=Rl−1(θ)s˙(x)\left[\begin{array}{c} v \\ \omega \end{array}\right]=R_{l}^{-1}(\theta) \dot{s}(\mathbf{x}) [vω​]=Rl−1​(θ)s˙(x)
这样就可以根据s˙(x)\dot{s}(\mathbf{x})s˙(x)求出机器人的线速度与角速度,进而对机器人进行控制
参考文献:
The Robotarium: Globally Impactful Opportunities, Challenges, and Lessons Learned in Remote-Access, Distributed Control of Multirobot Systems

MATLAB仿真

根据上述关系,我们最终要输出的为机器人的线速度与角速度,进而控制机器人跟踪期望轨迹,假定期望位置为
xr,yr{x}_{r} ,{y}_{r} xr​,yr​
在x,y,θ\thetaθ方向上的误差分别为:
ex=xr−x,ey=yr−y,eθ=θr−θ{e}_{x}={x}_{r}-x,{e}_{y}={y}_{r} -{y},{e}_{\theta}={\theta}_{r} -{\theta} ex​=xr​−x,ey​=yr​−y,eθ​=θr​−θ
定义位姿跟踪误差:
qe=[xeyeθe]=[cos⁡θsin⁡θ0−sin⁡θcos⁡θ0001][xr−xyr−yθr−θ]q_{e}=\left[\begin{array}{c} x_{e} \\ y_{e} \\ \theta_{e} \end{array}\right]=\left[\begin{array}{ccc} \cos \theta & \sin \theta & 0 \\ -\sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{l} x_{r}-x \\ y_{r}-y \\ \theta_{r}-\theta \end{array}\right] qe​=⎣⎡​xe​ye​θe​​⎦⎤​=⎣⎡​cosθ−sinθ0​sinθcosθ0​001​⎦⎤​⎣⎡​xr​−xyr​−yθr​−θ​⎦⎤​
求导得到:
x˙e=−θ˙sin⁡θ(xr−x)+cos⁡θ(x˙r−x˙)+θ˙cos⁡θ(yr−y)+sin⁡θ(y˙r−y˙)=θ˙[−sin⁡θ(xr−x)+cos⁡θ(yr−y)]−v+νr(cos⁡θrcos⁡θ+sin⁡θrsin⁡θ)=ωye−v+vrcos⁡θe\begin{aligned} \dot{x}_{e} &=-\dot{\theta} \sin \theta\left(x_{r}-x\right)+\cos \theta\left(\dot{x}_{r}-\dot{x}\right)+\dot{\theta} \cos \theta\left(y_{r}-y\right)+\sin \theta\left(\dot{y}_{r}-\dot{y}\right) \\ &=\dot{\theta}\left[-\sin \theta\left(x_{r}-x\right)+\cos \theta\left(y_{r}-y\right)\right]-v+\nu_{r}\left(\cos \theta_{r} \cos \theta+\sin \theta_{r} \sin \theta\right) \\ &=\omega y_{e}-v+v_{r} \cos \theta_{e} \end{aligned} x˙e​​=−θ˙sinθ(xr​−x)+cosθ(x˙r​−x˙)+θ˙cosθ(yr​−y)+sinθ(y˙​r​−y˙​)=θ˙[−sinθ(xr​−x)+cosθ(yr​−y)]−v+νr​(cosθr​cosθ+sinθr​sinθ)=ωye​−v+vr​cosθe​​

y˙e=−θ˙cos⁡θ(xr−x)−sin⁡θ(x˙r−x˙)−θ˙sin⁡θ(yr−y)+cos⁡θ(y˙r−y˙)=−θ˙[cos⁡θ(xr−x)+sin⁡θ(yr−y)]+νr(−cos⁡θrsin⁡θ+sin⁡θrcos⁡θ)=−ωxe+vrsin⁡θe\begin{aligned} \dot{y}_{e} &=-\dot{\theta} \cos \theta\left(x_{r}-x\right)-\sin \theta\left(\dot{x}_{r}-\dot{x}\right)-\dot{\theta} \sin \theta\left(y_{r}-y\right)+\cos \theta\left(\dot{y}_{r}-\dot{y}\right) \\ &=-\dot{\theta}\left[\cos \theta\left(x_{r}-x\right)+\sin \theta\left(y_{r}-y\right)\right]+\nu_{r}\left(-\cos \theta_{r} \sin \theta+\sin \theta_{r} \cos \theta\right) \\ &=-\omega x_{e}+v_{r} \sin \theta_{e} \end{aligned} y˙​e​​=−θ˙cosθ(xr​−x)−sinθ(x˙r​−x˙)−θ˙sinθ(yr​−y)+cosθ(y˙​r​−y˙​)=−θ˙[cosθ(xr​−x)+sinθ(yr​−y)]+νr​(−cosθr​sinθ+sinθr​cosθ)=−ωxe​+vr​sinθe​​
整理位姿误差微分方程为:
[x˙ey˙eθ˙e]=[ωye−v+vrcos⁡θe−ωxe+vrsin⁡θeωr−ω]\left[\begin{array}{c} \dot{x}_{e} \\ \dot{y}_{e} \\ \dot{\theta}_{e} \end{array}\right]=\left[\begin{array}{c} \omega y_{e}-v+v_{r} \cos \theta_{e} \\ -\omega x_{e}+v_{r} \sin \theta_{e} \\ \omega_{r}-\omega \end{array}\right] ⎣⎡​x˙e​y˙​e​θ˙e​​⎦⎤​=⎣⎡​ωye​−v+vr​cosθe​−ωxe​+vr​sinθe​ωr​−ω​⎦⎤​
根据上述得到的运动学方程,自主导航车轨迹跟踪的问题转化为设计输入控制量q=(vw)Tq=\left(\begin{array}{ll}v & w\end{array}\right)^{T}q=(v​w​)T使闭环系统位姿误差pe{p}_{e}pe​凡能够全局一致有界,并且当t→∞t \rightarrow \inftyt→∞,系统在任意的初始跟踪误差下有lim⁡t→∞[∣xe(t)∣+∣ye(t)∣+∣θe(t)∣]=0\lim _{t \rightarrow \infty}\left[\left|x_{e}(t)\right|+\left|y_{e}(t)\right|+\left|\theta_{e}(t)\right|\right]=0limt→∞​[∣xe​(t)∣+∣ye​(t)∣+∣θe​(t)∣]=0。

  根据自主导航车的位姿误差微分方程,可以选取函数如下:
V=k12(xe2+ye2)+2(sin⁡θe2)2≥0\mathrm{V}=\frac{k_{1}}{2}\left(x_{e}^{2}+y_{e}^{2}\right)+2\left(\sin \frac{\theta_{e}}{2}\right)^{2} \geq 0 V=2k1​​(xe2​+ye2​)+2(sin2θe​​)2≥0
将其微分得:
V˙=k1(xex˙e+yey˙e)+2sin⁡θe2cos⁡θeeθ˙e=k1[xe(vrcos⁡θe−v+yeω)+ye(vrsin⁡θe−xeω)]+(ωr−ω)sin⁡θe=k1[xevrcos⁡θe−vxe]+k1ycvrsin⁡θe+(ωr−ω)sin⁡θe\begin{aligned} \dot{\mathrm{V}} &=k_{1}\left(x_{e} \dot{x}_{e}+y_{e} \dot{y}_{e}\right)+2 \sin \frac{\theta_{e}}{2} \cos \frac{\theta_{e}}{e} \dot{\theta}_{e} \\ &=k_{1}\left[x_{e}\left(v_{r} \cos \theta_{e}-v+y_{e} \omega\right)+y_{e}\left(v_{r} \sin \theta_{e}-x_{e} \omega\right)\right]+\left(\omega_{r}-\omega\right) \sin \theta_{e} \\ &=k_{1}\left[x_{e} v_{r} \cos \theta_{e}-v x_{e}\right]+k_{1} y_{c} v_{r} \sin \theta_{e}+\left(\omega_{r}-\omega\right) \sin \theta_{e} \end{aligned} V˙​=k1​(xe​x˙e​+ye​y˙​e​)+2sin2θe​​coseθe​​θ˙e​=k1​[xe​(vr​cosθe​−v+ye​ω)+ye​(vr​sinθe​−xe​ω)]+(ωr​−ω)sinθe​=k1​[xe​vr​cosθe​−vxe​]+k1​yc​vr​sinθe​+(ωr​−ω)sinθe​​
由此可得控制律为:
q=[vw]=[vrcos⁡θe+k2xewr+k1vrye+k3sin⁡θe]q=\left[\begin{array}{c} v \\ w \end{array}\right]=\left[\begin{array}{c} v_{r} \cos \theta_{e}+k_{2} x_{e} \\ w_{r}+k_{1} v_{r} y_{e}+k_{3} \sin \theta_{e} \end{array}\right] q=[vw​]=[vr​cosθe​+k2​xe​wr​+k1​vr​ye​+k3​sinθe​​]
其中,控制参数k2,k3>0k_{2}, k_{3}>0k2​,k3​>0。
(上述控制律的实验效果并不好,可能是参数数值选取的不恰当,可自行尝试,下面进行单纯比例控制实验)

单纯比例控制:

我们的目标是跟踪误差为0,即ex,ey{e}_{x},{e}_{y}ex​,ey​为0

我们设
e˙x=−Kex,e˙y=−Key\dot{e}_{x}=-K{e}_{x},\dot{e}_{y}=-K{e}_{y} e˙x​=−Kex​,e˙y​=−Key​
这个系统的平衡点就为(0,0),相当对进行了比例控制,而针对有偏移参考点,可将模型看成一阶积分器,这样可将输入描述为:
x˙=ux,y˙=uy\dot{x}={u}_{x}, \dot{y}={u}_{y} x˙=ux​,y˙​=uy​
下面进行编程实现:
1,求出期望位置与当前位置的偏差
2,将偏差输入到控制器,根据变换关系[vω]=Rl−1(θ)s˙(x)\left[\begin{array}{c}v \\\omega\end{array}\right]=R_{l}^{-1}(\theta) \dot{s}(\mathbf{x})[vω​]=Rl−1​(θ)s˙(x)求出线速度与角速度
3,跟据x=x+δx,y=y+δy,θ=θ+δθ,{x}={x}+\delta x,{y}={y}+\delta y,{\theta}={\theta}+\delta \theta,x=x+δx,y=y+δy,θ=θ+δθ,求出下一时刻的位置及车头朝向
4,进行循环求解跟踪
跟踪效果如下:

附代码:

clear all;clc;%% define constant
l=0.2;
R=1;
K=0.1;
delta_T=0.5;%% define initialization
Pos=[0,12,3/2*pi]; %X,Y,Theta
T=linspace(0,2*pi,200);
desire_Pos=[16*power(sin(T),3);13*cos(T)-5*cos(2*T)-2*cos(3*T)-cos(4*T)];%%  Graphics
f3=figure;
xlabel('x (m)')
ylabel('y (m)')
grid on%%  robot dimensions
A.R_w = 1/2; % robot width/2
A.R_l=  2/2;   % robot length/2
A.a1 = [-A.R_l -A.R_w]';
A.b1 = [A.R_l -A.R_w/2]';
A.b2 = [A.R_l A.R_w/2]';
A.c = [-A.R_l A.R_w]';
A.P = [A.a1 A.b1 A.b2 A.c];A.Rot = [ cos(Pos(3)) -sin(Pos(3)); sin(Pos(3)) cos(Pos(3))]*A.P; %rotated car
A.Prot_trasl = A.Rot + [ ones(1,4)*Pos(1); ones(1,4)*Pos(2)]; % add offset of car's centerA.P_robot=patch(A.P(1,:),A.P(2,:),'b');
A.P_robot.XData=A.Prot_trasl(1,:)';
A.P_robot.YData=A.Prot_trasl(2,:)';%% define controller%% draw picture
h= animatedline('color','r','LineStyle','--');
h_car= animatedline('color','b');
h_car_model = animatedline('Marker','o','MaximumNumPoints',1);     %只显示1个新的点
axis([-20 20 -20 15])for k = 1:length(T)addpoints(h_car,Pos(1),Pos(2));addpoints(h_car_model,Pos(1),Pos(2));e_x=Pos(1)-desire_Pos(1,k);e_y=Pos(2)-desire_Pos(2,k);u_x=-K*e_x;u_y=-K*e_y;A_mat=[cos(Pos(3)) -l*sin(Pos(3));sin(Pos(3)) l*cos(Pos(3))];P=[cos(Pos(3)) 0;sin(Pos(3)) 0;0 1];U_mat=[u_x,u_y]';v_w_mat=A_mat\U_mat;Pos(1)=Pos(1)+v_w_mat(1)*cos(Pos(3))-v_w_mat(2)*l*sin(Pos(3));Pos(2)=Pos(2)+v_w_mat(1)*sin(Pos(3))+v_w_mat(2)*l*cos(Pos(3));Pos(3)=Pos(3)+v_w_mat(2)*delta_T;addpoints(h,desire_Pos(1,k),desire_Pos(2,k));A.Rot = [cos(Pos(3)) -sin(Pos(3)); sin(Pos(3)) cos(Pos(3))]*A.P; %rotated carA.Prot_trasl = A.Rot + [ones(1,4)*Pos(1); ones(1,4)*Pos(2)]; % add offset of car's centerA.P_robot.XData=A.Prot_trasl(1,:)';A.P_robot.YData=A.Prot_trasl(2,:)';frame=getframe(gcf);im = frame2im(frame); [imind,cm] = rgb2ind(im,256);if k==1imwrite(imind,cm,'experiment.gif','gif', 'LoopCount',inf,'DelayTime',0.000001);endif rem(k,2)==0imwrite(imind,cm,'experiment.gif','gif','WriteMode','append','DelayTime',0.000001);enddrawnow
end

能力有限仅供参考,欢迎提出宝贵意见!

MATLAB 轮式机器人轨迹跟踪仿真相关推荐

  1. 终端滑模matlab程序,机器人轨迹跟踪控制方法研究(含MATLAB程序)

    机器人轨迹跟踪控制方法研究(含MATLAB程序)(课题申报表,任务书,开题报告,中期检查表,外文翻译,论文15300字,程序,答辩PPT) 摘 要 机器人是一类复杂的.具有不确定性的.多输入多输出非线 ...

  2. 差速机器人的纯轨迹跟踪仿真(Matlab)

    差速机器人的纯轨迹跟踪仿真(Matlab) 刚入门,有的地方不对,烦请大家指正. 目录 差速机器人的纯轨迹跟踪仿真(Matlab) 1 差速机器人运动模型 1.1 运动学分析建模 1.2 差速机器人的 ...

  3. 基于matlab单目视觉焊缝跟踪系统,基于激光线结构光3D视觉的机器人轨迹跟踪方法与应用...

    摘要: 本文利用工控机.图像采集卡.工业相机和激光器,设计了激光线结构光3D视觉系统;利用工控机.运动控制卡.伺服驱动器和六轴串联机器人组成机器人运动系统;两者共同构成基于激光线结构光的机器人轨迹跟踪 ...

  4. 四旋翼飞行器轨迹跟踪仿真MATLAB simulink/simscape

    四旋翼飞行器轨迹跟踪仿真MATLAB simulink/simscape ID:6929669117089277

  5. 基于变增益自抗扰技术的机器人轨迹跟踪控制方法

    摘要 本文针对机器人轨迹跟踪控制精度和初始峰值问题,提出一种变增益自抗扰控制器轨迹跟踪控制方法.首先,采用跟踪微分器将逆运动学解处理为插值点区间,设定插值点选取规则及冲击力目标函数.然后,根据目标函数 ...

  6. 轮式移动机器人轨迹跟踪的MATHLAB程序,运用运动学和动力学模型的双闭环控制

    轮式移动机器人轨迹跟踪的MATHLAB程序,运用运动学和动力学模型的双闭环控制,借鉴自抗扰控制技术结合了非线性ESO,跟踪效果良好,控制和抗扰效果较优,可分享控制结构图. ID:13806483130 ...

  7. 四个翅膀的飞机Simulink与轨迹跟踪仿真

    数学建模 这一部分强烈建议看一篇知乎文章:zinghd的回答 其最终模型结果: 其中部分符号的定义可以参考上面给的知乎链接.下面给出角度的定义和飞行器的外观. 对于上图给出的四旋翼飞行器,其x轴为向量 ...

  8. 导轮式机器人_平面轮式机器人轨迹规划的解析式二阶导连续,是否代表机器人速度连续?...

    题主概念混乱. 轨迹连续, 是空间量. (x,y)的关系 速度连续, 是时空量. (x, t)的关系 所以, 可以做到轨迹连续而速度不连续. 比如: 我在一条直线上, 一顿一顿的走, 速度曲线是方波, ...

  9. 基于matlab的动态机器人轨迹模拟仿真

    目录 1.仿真效果 2.MATLAB仿真源码 1.仿真效果 matlab2021a仿真结果如下所示: 2.MATLAB仿真源码 %订阅用户如果对本专栏某一个算法有兴趣,可私信博主,留言文章链接和邮箱地 ...

  10. Matlab人形机器人建模与仿真

    DH 参数 DH 参数 Denavit-Hartenberg (DH) 提供各种修改版和标准版. 修改后的约定中的连杆和关节参数如下图所示: DH参数根据下表确定. The algorithm of ...

最新文章

  1. 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
  2. LiveVideoStack线上分享第三季(一):低延迟线上K歌玩法的思考与实践
  3. EKF优化:协方差coff公式、意义、SLAM中的Code优化
  4. 最长公共子序列及其引申问题
  5. 【转载】要有梦想-创造卓越的职业生涯
  6. 优秀logo设计解析_优秀Logo设计!字母造型解析
  7. flex实现最后一个元素居右
  8. 《Visual C# 从零开始学》
  9. 《企业架构的数字化转型》10000字有感
  10. 安卓APP应用启动流程详解
  11. 相关关系、因果关系、回归关系的区别
  12. python for循环写法_python中多重循环的写法
  13. Jim exclaimed, Damn man, this isn’t funny cheap air max 90
  14. actionbarsherlock 插件结合slidingmenu时,自定义actionbar布局
  15. Hazelcast Jet DAG原理
  16. win10发现网络计算机,Win10如何启用网络发现?Win10启用网络发现的方法
  17. 深度学习部署(十八): CUDA RunTime API _wa_仿射变换的实现
  18. 3D进阶之OSG:从VS2019编译osgEarth开始
  19. 前端第一阶段-11(HTML之flex弹性)
  20. hiper工具查看页面加载时间

热门文章

  1. 【Try to Hack】masscan
  2. 直播app源代码 直播软件开发的iOS直播推流之h264/aac 硬编码
  3. matlab10b有32位吗,win10系统有32位吗?win1032位和win1064位区别是什么
  4. axure导出html侧边栏,Axure模板库(5)-侧边栏
  5. 【泛微Ecology9.0】安装\启用非标功能
  6. Java保留小数位数两种简单方法
  7. 不动产 - 权属性质代码
  8. 必须收藏的文档:IronPython脚本在TIBCO Spotfire中的使用
  9. SSM框架整合以及使用思路梳理
  10. catia 桥接曲面圆角_CATIA建模教程_二_圆角及桥接在空间曲线中的应用