0


硬核,机器人只需5秒就跟踪上了爱心曲线


🔥 作者:FrigidWinter

🔥 简介:主攻机器人与人工智能领域的理论研究和工程应用,业余丰富各种技术栈。主要涉足:【机器人(ROS)】【机器学习】【深度学习】【计算机视觉】

🔥 专栏

  • 《机器人原理与技术》
  • 《计算机视觉教程》
  • 《机器学习》
  • 《嵌入式系统》

目录

0 前言

硬核,这年头机器人都开始自学“倒车入库”了这篇文章本质上属于机器人的镇定问题。本文仍基于差速轮式机器人模型完成一个轨迹跟踪应用,使机器人在尽可能短的时间内跟踪上爱心轨迹

仿真效果动图如下所示,看完本文相信你也可以做到!(文末有实际机器人运行效果图!)

在这里插入图片描述

1 什么是轨迹跟踪?

轨迹跟踪以稳定性和快速性为核心,基于时间微分约束(如速度、加速度),规划路径点间的运动状态 ,轨迹规划赋予路径规划时间信息。简单来说:就是控制机器人用最短的时间跟上期望的轨迹。

和上一期的镇定问题做个对比,镇定问题是设计一个控制律在有限时间内使误差衰减到0,当前位姿稳定在参考位姿上。

这两次博文讨论的问题表面上轻松简单,但背后的应用极为广泛,常见于智能车竞赛的循线、平衡等赛题,学术界方面也有相当的论文研究这两个问题,感兴趣的同学可以继续深入了解,我把相关的参考论文放在文章最后。

2 开始编程实现

2.1 选择轨迹

  1. R =5.0;
  2. T =40.0;
  3. w =2 * pi / T;
  4. ref = @(t)[R*(2*sin(w*t)-sin(2*w*t)), R*(2*cos(w*t)-cos(2*w*t))];

打印出来看看
在这里插入图片描述

2.2 编写轨迹跟踪算法

  1. function dpdt = wmrTrackOde45Func(t, p, ref)

获取机器人当前状态

  1. % robot state
  2. x = p(1);
  3. y = p(2);
  4. theta = p(3);

获取参考位姿信息

  1. % reference path
  2. pRef = ref(t);
  3. xRef = pRef(1);
  4. yRef = pRef(2);
  5. vRef =1;
  6. wRef =0;

获取目标向量

  1. % predict reference path
  2. targetVec =[xRef - x;
  3. yRef - y];if targetVec(2)>0
  4. thetaRef = acos(targetVec(1) / sqrt(targetVec(1)^2 + targetVec(2)^2));else
  5. thetaRef = - acos(targetVec(1) / sqrt(targetVec(1)^2 + targetVec(2)^2));
  6. end

控制器参数设置

  1. % controller parameters
  2. Kx =15;
  3. Ky =25;
  4. Kt =10;

控制

  1. % controller
  2. ex = cos(theta) * (xRef - x) + sin(theta) * (yRef - y);
  3. ey = -sin(theta) * (xRef - x) + cos(theta) * (yRef - y);
  4. u =[ vRef * cos(thetaRef - theta) + Kx * ex;
  5. wRef + vRef*(Ky * ey + Kt * sin(thetaRef - theta))];v= u(1);
  6. w = u(2);
  7. dpdt =[v*cos(theta); v*sin(theta); w];
  8. end

然后把这个函数封装成ode45的被调函数,让Matlab帮我们迭代计算即可。

2.3 测试跟踪性能

其中绿色是机器人初始位置,蓝色是机器人实际轨迹。
在这里插入图片描述
再来看看误差曲线,大概在5s的时候各参数全部跟踪上预期曲线,这个效果可以通过调节控制器参数来观察变化,加深对控制作用的理解,上文代码中的控制器是我个人整定的,大家可以按需调整。
在这里插入图片描述
对其他轨迹的效果怎么样呢?看看下面圆轨迹的跟踪效果,即使初始位置很偏也没有任何问题。
在这里插入图片描述

2.4 制作动图

  1. figure(1)
  2. trackProcess = VideoWriter('video/trackProcess.avi');
  3. open(trackProcess);
  4. movie = moviein(t);
  5. % 画参考轨迹
  6. plot(refPos(:,1),refPos(:,2), "--b", 'LineWidth', 1);
  7. grid on
  8. hold on
  9. % 画初始位置
  10. handler = plotPose(initPos, 0.8, 0.3, 'r', size);fori=1:length(t)
  11. delete(handler);
  12. handler = plotPose(actualPos(i,:));
  13. plot(actualPos(i,1), actualPos(i,2), 'Marker', '.', 'color', [0,0.5,0]);
  14. movie(:, i)= getframe;
  15. writeVideo(trackProcess, movie(:, i));
  16. end
  17. hold off
  18. close(trackProcess);

3 真车实战

由于限制5M,只放出部分动图,后续补充完整视频。
在这里插入图片描述

4 参考文献

希望做相关研究的同学可以进一步阅读下面的文献

[1]杨士超. 非完整轮式移动机器人的反馈镇定和轨迹跟踪控制研究[D]. 长安大学.
[2]Kanayama Y , Kimura Y , Miyazaki F , et al. A stable tracking control method for an autonomous mobile robot[C]// IEEE International Conference on Robotics & Automation. IEEE, 1991.


本文转载自: https://blog.csdn.net/FRIGIDWINTER/article/details/122277074
版权归原作者 FrigidWinter 所有, 如有侵权,请联系我们删除。

“硬核,机器人只需5秒就跟踪上了爱心曲线”的评论:

还没有评论