ROS2与Open-RMF仿真教程#Jazzy版#-多台turtlebot3使用free_fleet
文章说明
- 本教程主要说明如何结合多台turtlebot3使用free_fleet
前提准备
- 本次例程使用的nav2中内置的tb3仿真
$ sudo apt update && sudo apt install ros-jazzy-nav2-bringup ros-jazzy-turtlebot3-simulations
操作步骤
- 本次的多机器人仿真示例仅用于测试,因为其设置方式与
free_fleet的预期使用方式不同 - 在该示例中,仿真会生成两个带命名空间的TB3机器人,而
free_fleet的架构设计要求是:一个不带命名空间的机器人节点,与一个带命名空间的机器人节点,通过zenoh-bridge-ros2dds进行配对通信

- 在这个示例中,两个机器人共用同一个未带命名空间的
Zenoh桥 - 该桥输出的
zenoh消息,与为每个机器人分别运行独立的(带命名空间对应的)zenoh桥时的输出是等效的 - 这种设计使得
free_fleet_adapter可以在同一个仿真环境中同时控制这两个机器人,实现协同工作

- 启动tb3仿真
$ export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
$ export TURTLEBOT3_MODEL=waffle
# Launch the simulation
$ ros2 launch nav2_bringup unique_multi_tb3_simulation_launch.py autostart:=true
- 启动zenoh
$ zenohd
- 启动zenoh-bridge-ros2dds桥接通信,加载对应配置文件
$ zenoh-bridge-ros2dds -c ~/ros2_free_fleet_ws/src/free_fleet/free_fleet_examples/config/zenoh/nav2_unique_multi_tb3_zenoh_bridge_ros2dds_client_config.json5
- 同时可以通过不同
ROS_DOMAIN_ID的机器上启动RMF,如果在不同机器上启动,也需提前装好open-rmf环境
$ export ROS_DOMAIN_ID=55
$ ros2 launch free_fleet_examples turtlebot3_world_rmf_common.launch.xml
free_fleet_adapter加载当前示例配置,验证nav2_tb3环境是否已被添加进去
$ export ROS_DOMAIN_ID=55
$ ros2 launch free_fleet_examples nav2_unique_multi_tb3_simulation_fleet_adapter.launch.xml
- 使用
dispatch_patrol脚本方式创建任务
$ export ROS_DOMAIN_ID=55
# robot1 to run clockwise around the map
$ ros2 run rmf_demos_tasks dispatch_patrol \
-p north_west north_east south_east south_west \
-n 3 \
-st 0 \
-F turtlebot3 \
-R robot1
# robot2 to run anti-clockwise around the map
$ ros2 run rmf_demos_tasks dispatch_patrol \
-p south_west south_east north_east north_west \
-n 3 \
-st 0 \
-F turtlebot3 \
-R robot2
- 或者通过rmf-web方式创建任务
# 新开终端,启动rmf-web的后端程序
$ cd ~/ros2_rmf_ws/src/rmf-web/packages/api-server
$ pnpm start
# 新开终端,启动rmf-web的前端程序
$ cd ~/ros2_rmf_ws/src/rmf-web/packages/rmf-dashboard-framework
$ pnpm start:example examples/demo

- 可参照视频里的操作,创建巡逻任务

参考资料
演示视频
- 视频中的示例均是在
ROS_DOMAIN_ID=0的环境下进行,但经后续测试在不同ROS_DOMAIN_ID环境下也是能正常通信的
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


















