本次任务需要基于 ROS2 框架和 Docker 容器完成一个简单的两节点之间互相通信的 C++ 代码实现。
- 使用 C++ 编写 ROS2 节点,包含一个发布节点
publisher_component和一个订阅节点subscriber_component- 话题类型使用
geometry_msgs/msg/Quaternion - 发布节点生成四元数消息,并在终端打印对应的 Roll、Pitch、Yaw 值
- 订阅节点接收四元数后转换为 Roll、Pitch、Yaw,并打印四元数与 Roll、Pitch、Yaw 值
- 两边的 Roll、Pitch、Yaw 值需要相差
$\pi$ 的整数倍
- 话题类型使用
- 编写
basic_topic.launch.py文件,支持一键启动两个节点 - 编写 Docker 配置文件,支持两种运行模式
- Dev 模式:编写
Dockerfile.dev,作为主要开发环境,需要在容器内尝试通过编译以及一键启动两个节点,录制效果视频 - Deploy 模式:编写
Dockerfile.deploy和docker-compose.deploy.yml,要求发布与订阅节点分别运行在两个容器中,并且能够实现只执行docker compose -f docker/docker-compose.deploy.yml up -d后两个容器能够互相通信,录制效果视频
- Dev 模式:编写
需要修改的部分都以 TODO 注释标记,主要涉及以下文件:
- 主要功能包:
basic_topic - Docker 相关文件:
docker- Dev 容器:
Dockerfile.dev - Deploy 容器:
Dockerfile.deploy、docker-compose.deploy.yml
- Dev 容器:
可根据需求增加其他文件
编译 ROS2 包:
source /opt/ros/${ROS_DISTRO}/setup.bash
colcon build --symlink-install
source install/setup.bash启动 ROS2 节点:
ros2 run <package_name> <executable_name>
ros2 launch <package_name> <launch_file.launch.py>ROS2 调试:
ros2 topic list # 列出当前所有话题
ros2 topic echo <topic_name> # 监听话题消息
ros2 node list # 列出当前所有节点
ros2 node info <node_name> # 查看节点信息Docker 部署:
docker compose -f <docker-compose-file.yml> up -dDocker 调试:
docker exec -it <container_name> bash # 进入容器
docker logs -f <container_name> # 查看容器日志如果你在完成作业过程中遇到困难,可以逐步完成以下 Checkpoints:
- 在 Dev 容器中编译 ROS2 包,并且能够看到编译成功的信息
- 在 Dev 容器中分别启动 ROS2 节点,并且能够看到正确的通信信息
- 在 Dev 容器中一键启动 ROS2 节点,并且能够看到正确的通信信息
- 使用 Deploy 容器一键部署 ROS2 节点,并且能够看到正确的通信信息