260411

接下来我们就要实现 Follow 功能了。

这个功能呢...由于我们目前并不打算上视觉模型,因此我们打算额外创建一个“旗帜”的仿真模型,通过持续发布“旗帜”的位姿信息,来让小车自主导航到目标旗帜地点,在距离旗帜一定距离后就停下来,同时也可以起到跟随的效果。

同时,我们的机器人在这个过程中需要学会自行避障,这种情况下就需要接入一个高速旋转的雷达作为传感器了,对周围的环境利用算法进行简单的建模,来达到避障/沿着障碍运动的效果。

我们可以分成三个阶段:

一、无避障的目标跟随

  • 先让机器人只靠旗帜位姿,能朝旗帜走过去,并在一定距离停下

这一阶段只需要:

  • 一个旗帜模型
  • 一个旗帜位姿 topic
  • 一个 follow_controller 节点
  • FOLLOW 模式接入

这一步的控制逻辑可以非常简单:

  1. 订阅机器人自身位姿
    • 先用 /odom
  2. 订阅旗帜位姿
    • 我们可以发布成 geometry_msgs/msg/PoseStamped
  3. 计算:
    • 机器人到旗帜的距离
    • 机器人朝向与目标方向的夹角
  4. 输出速度:
    • 角度偏差大:先转向
    • 角度偏差小:边转边前进
    • 到达 stop_distance:发 0 速

二、给机器人接入激光雷达

让机器人开始具备最基础的环境感知能力。

  1. 在机器人模型上加一个 2D LiDAR 传感器
  2. 让 Gazebo 发布扫描数据
  3. 用 ros_gz_bridge 桥接成 ROS 的 /scan

这里我们也可以直接输出标准信息——sensor_msgs/msg/LaserScan

三、最小反应式避障

不做地图,也不做全局规划,只要我们的机器人能绕开眼前障碍这样的局部障碍就可以了。

就目前来说,我们采用“目标跟踪 + 前向扇区避障”混合法就可以了。