260411
接下来我们就要实现 Follow 功能了。
这个功能呢...由于我们目前并不打算上视觉模型,因此我们打算额外创建一个“旗帜”的仿真模型,通过持续发布“旗帜”的位姿信息,来让小车自主导航到目标旗帜地点,在距离旗帜一定距离后就停下来,同时也可以起到跟随的效果。
同时,我们的机器人在这个过程中需要学会自行避障,这种情况下就需要接入一个高速旋转的雷达作为传感器了,对周围的环境利用算法进行简单的建模,来达到避障/沿着障碍运动的效果。
我们可以分成三个阶段:
一、无避障的目标跟随
- 先让机器人只靠旗帜位姿,能朝旗帜走过去,并在一定距离停下
这一阶段只需要:
- 一个旗帜模型
- 一个旗帜位姿 topic
- 一个 follow_controller 节点
- FOLLOW 模式接入
这一步的控制逻辑可以非常简单:
- 订阅机器人自身位姿
- 先用 /odom
- 订阅旗帜位姿
- 我们可以发布成 geometry_msgs/msg/PoseStamped
- 计算:
- 机器人到旗帜的距离
- 机器人朝向与目标方向的夹角
- 输出速度:
- 角度偏差大:先转向
- 角度偏差小:边转边前进
- 到达 stop_distance:发 0 速
二、给机器人接入激光雷达
让机器人开始具备最基础的环境感知能力。
- 在机器人模型上加一个 2D LiDAR 传感器
- 让 Gazebo 发布扫描数据
- 用 ros_gz_bridge 桥接成 ROS 的 /scan
这里我们也可以直接输出标准信息——sensor_msgs/msg/LaserScan
三、最小反应式避障
不做地图,也不做全局规划,只要我们的机器人能绕开眼前障碍这样的局部障碍就可以了。
就目前来说,我们采用“目标跟踪 + 前向扇区避障”混合法就可以了。