在 MoveIt Config 包中,切换 RViz 纯仿真 与 真实机器人 / Gazebo 仿真 主要通过 控制器配置 YAML 文件 和 启动参数 共同控制。核心配置文件位于 config/ 目录下moveit.github.io。
一、核心控制器 YAML 文件
-
fake_controllers.yaml-
用途 :纯 RViz 仿真(无实体、无 Gazebo)
-
机制 :使用
FakeControllerManager,轨迹仅在 RViz 中模拟执行moveit.github.io。 -
典型内容 :
yaml
controller_list: - name: fake_arm_controller type: FollowJointTrajectory joints: - joint1 - joint2 - ...
-
-
controllers.yaml(或ros_controllers.yaml)-
用途 :真实机器人 或 Gazebo 仿真
-
机制 :使用
SimpleControllerManager或ROSControlControllerManager,连接真实硬件或 Gazebo 的ros_control接口moveit.github.io。 -
典型内容 :
yaml
controller_list: - name: arm_controller action_ns: follow_joint_trajectory type: FollowJointTrajectory default: True joints: - joint1 - joint2 - ...
-
二、如何切换(通过 Launch 文件)
切换并非直接修改 YAML,而是在 启动命令 或 Launch 文件 中选择加载哪个 YAML,并指定 ControllerManager。
1. 启动 RViz 纯仿真(默认)
bash
运行
roslaunch <robot>_moveit_config demo.launch
- 内部默认:
moveit_controller_manager:=fake- 加载
fake_controllers.yaml
2. 启动真实机器人 / Gazebo
bash
运行
roslaunch <robot>_moveit_config demo.launch moveit_controller_manager:=simple use_sim_time:=false
- 关键参数:
moveit_controller_manager:=simple:加载真实控制器use_sim_time:=false:使用系统真实时间- 内部自动加载
controllers.yaml
三、Launch 文件内部原理(关键片段)
在 move_group.launch 或 trajectory_execution.launch 中:
xml
<!-- 选择控制器管理器 -->
<arg name="moveit_controller_manager" default="fake" />
<!-- 加载对应 YAML -->
<rosparam file="$(find myrobot_moveit_config)/config/fake_controllers.yaml" if="$(eval moveit_controller_manager=='fake')" />
<rosparam file="$(find myrobot_moveit_config)/config/controllers.yaml" unless="$(eval moveit_controller_manager=='fake')" />
四、总结
- RViz 仿真 :使用
fake_controllers.yaml+moveit_controller_manager:=fake - 真实机器人 / Gazebo :使用
controllers.yaml+moveit_controller_manager:=simple