1.4.3 里程计案例以及案例分析
1.案例需求
需求:编写程序,订阅机器人的里程计消息,然后生成并发布机器人的运动轨迹信息。
2.案例分析
在上述案例中,需要关注的要素有三个:
- “轨迹”使用的消息接口;
- “轨迹”消息的生成与发布实现;
- 作为订阅方的rviz2。
在机器人的里程计信息中包含了机器人某一时刻的位姿状态,我们可以订阅里程计消息,然后按条件将多个位姿点组合到一起从而生成机器人的运行轨迹并发布,最后再通过rviz2可视化的显示运行轨迹。
该案例中同时包含发布和订阅实现。要订阅的里程计消息接口,上一节已经有所介绍了,但是如果要完成这个案例,还需要再了解一下被发布的轨迹(路径)相关消息接口。
3.流程简介
如上所述,因为路径相关消息接口(主要是nav_msgs/msg/Path
)之前并未介绍,所以我们需要先了解该接口消息的格式(可以通过ROS2内置指令工具查看),然后再着手该案例实现。具体到其实现,主要步骤如下:
- 编写程序;
- 编辑配置文件;
- 编译;
- 执行;
- 使用rviz2查看结果。
案例我们会采用C++和Python分别实现,二者都遵循上述实现流程。
4.准备工作
终端下进入工作空间的src目录,调用如下两条命令分别创建C++功能包和Python功能包。
ros2 pkg create cpp00_odom --dependencies rclcpp nav_msgs geometry_msgs
ros2 pkg create py00_odom --build-type ament_python --dependencies rclpy nav_msgs geometry_msgs
里程计、路径接口依赖于nav_msgs包,位姿接口依赖于geometry_msgs包。