You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ROS2 Humble中用虚拟控制器结合MoveIt2实现RViz轨迹可视化?

可行,以下是具体操作步骤

1. 准备MoveIt2配置包

确保你已为目标机器人生成MoveIt2配置包(可通过moveit_setup_assistant工具创建),配置包需包含机器人URDF/SRDF、运动学插件配置等核心文件。

2. 启动无控制器模式的move_group节点

启动move_group时通过参数跳过控制器加载,仅启用轨迹可视化相关功能,在终端执行:

ros2 launch <你的机器人MoveIt配置包> move_group.launch.py use_sim_time:=False load_robot_description:=True load_controller:=False
  • load_controller:=False:禁用ROS2控制器加载
  • use_sim_time:=False:使用系统时间(无需Gazebo仿真时间)

3. 配置RViz的MoveIt2可视化插件

启动RViz:

rviz2

在RViz中完成以下配置:

  • 添加RobotModel插件,设置Robot Description为robot_description,确认机器人模型正常显示
  • 添加MotionPlanning插件(MoveIt2轨迹可视化核心):
    • 在Planning Scene选项卡中,将Planning Scene Topic设为/move_group/monitored_planning_scene
    • 在Planned Path选项卡中,勾选Show Robot Visual和Show Trail,分别用于显示机器人轨迹跟随预览和轨迹路径

4. 生成并可视化轨迹

方式一:通过RViz插件手动规划

  • 在MotionPlanning插件的Planning选项卡中,选择目标规划组(如arm)
  • 拖动机器人末端执行器到目标位姿,点击Plan按钮,MoveIt2会自动规划轨迹并在RViz中实时展示虚拟机器人的运动预览
  • 点击Execute,此时不会驱动物理机器人,但RViz内的虚拟机器人会完整复现轨迹执行过程

方式二:通过代码发布预定义轨迹

若有预定义轨迹,可编写ROS2节点将轨迹发布到/move_group/display_planned_path话题,RViz会自动接收并可视化。示例Python代码片段:

import rclpy
from rclpy.node import Node
from moveit_msgs.msg import DisplayTrajectory
from trajectory_msgs.msg import JointTrajectory

class TrajectoryVisualizer(Node):
    def __init__(self):
        super().__init__('trajectory_visualizer')
        self.publisher_ = self.create_publisher(DisplayTrajectory, '/move_group/display_planned_path', 10)
        
        # 构造示例轨迹(替换为你的实际轨迹数据)
        display_traj = DisplayTrajectory()
        display_traj.trajectory_start.joint_state.name = ["joint_1", "joint_2", "joint_3"]
        display_traj.trajectory_start.joint_state.position = [0.0, 0.0, 0.0]
        
        traj = JointTrajectory()
        traj.joint_names = ["joint_1", "joint_2", "joint_3"]
        traj.points = [
            {'positions': [0.5, 0.5, 0.5], 'time_from_start': {'sec': 1}},
            {'positions': [1.0, 0.0, 1.0], 'time_from_start': {'sec': 2}}
        ]
        display_traj.trajectory.append(traj)
        
        self.publisher_.publish(display_traj)
        self.get_logger().info("轨迹已发布,RViz将开始可视化")

def main(args=None):
    rclpy.init(args=args)
    node = TrajectoryVisualizer()
    rclpy.spin_once(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

运行该节点后,RViz会自动展示发布的轨迹。

关键注意事项

  • 忽略move_group启动时的控制器相关报错(因已禁用控制器加载)
  • 若机器人模型无法显示,通过ros2 param list检查robot_description参数是否正确加载
  • 确保配置包中的运动学插件(如KDLKinematicsPlugin)配置正确,否则无法生成轨迹

内容的提问来源于stack exchange,提问作者Andi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:52:34