MoveIt介绍
·
1.Moveit的主要功能
- 运动学求解
- 运动规划
- 碰撞检测

2.Move Group 的具体职责

Move Group 的工作流程:
输入:目标位姿/关节角度
↓
Move Group 协调:
1. 查询当前状态(从关节状态话题)
2. 检查碰撞(通过规划场景)
3. 调用规划器(如OMPL、CHOMP)
4. 验证轨迹(动力学、碰撞检查)
5. 发送到控制器(轨迹执行)
↓
输出:机器人运动
Move Group 提供的接口:
1. Action 接口:
- /move_action (主要运动接口)
- /execute_trajectory (执行轨迹)
2. Service 接口:
- /get_planning_scene
- /apply_planning_scene
- /compute_ik
- /compute_fk
3. Topic 接口:
- /display_planned_path (RViz显示)
- /planning_scene (环境更新)
系统依赖关系

在程序运行过程中,Move Group 必须是 Active 状态。
3.Move Group 的内部架构
主要组件:
class MoveGroupCore:
def __init__(self):
self.planning_scene_monitor # 规划场景监控
self.planning_pipeline # 规划管道
self.trajectory_execution # 轨迹执行
self.planning_scene_interface # 场景接口
self.robot_model # 机器人模型
self.robot_state # 机器人状态
数据流图:
用户请求
↓
MoveGroup Action Server
├──→ 验证请求
├──→ 更新规划场景
├──→ 调用规划器
├──→ 轨迹优化
├──→ 碰撞检查
└──→ 发送到控制器
↓
控制器管理器
↓
Gazebo/Robot
4.Gazebo + MoveIt 集成中的关键作用
实时协调:
# Move Group 在 Gazebo 集成中的关键任务:
1. 同步状态:
- 从 /joint_states 获取 Gazebo 中的真实位置
- 更新内部机器人模型
2. 轨迹适配:
- 将规划轨迹适配到 Gazebo 的控制器接口
- 处理时间缩放、动力学限制
3. 反馈处理:
- 监控执行进度
- 处理执行失败(如碰撞)
控制器管理:
# move_group 的控制器配置:
controller_list:
- name: arm_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
joints: [joint1, joint2, joint3, joint4, joint5, joint6]
5.完整的启动顺序:
# 正确的启动顺序:
1. 启动 Gazebo
ros2 launch your_robot_gazebo robot.launch.py
2. 启动 MoveIt(自动启动 move_group)
ros2 launch your_robot_moveit_config demo.launch.py
# 这会:
# - 加载 move_group 节点
# - 配置规划器
# - 启动 action 服务器
3. 启动控制器管理器
ros2 run controller_manager spawner joint_state_broadcaster
ros2 run controller_manager spawner arm_controller
4. 运行控制代码
python3 your_control_script.py
6.Move Group 配置详解
配置文件位置:
~/ros2_ws/src/your_robot_moveit_config/config/
├── moveit_controllers.yaml # 控制器配置
├── ompl_planning.yaml # OMPL规划器配置
├── kinematics.yaml # 运动学配置
├── joint_limits.yaml # 关节限制
└── sensors_3d.yaml # 传感器配置
关键参数:
# move_group 的核心参数
move_group:
# 规划组
planning_groups:
arm: # 规划组名称
default_planner_config: RRTConnect
# 轨迹执行
trajectory_execution:
execution_duration_monitoring: true
allowed_execution_duration_scaling: 1.2
allowed_goal_duration_margin: 0.5
# 规划场景
planning_scene_monitor:
publish_planning_scene: true
publish_geometry_updates: true
publish_state_updates: true
publish_transforms_updates: true
7.等待 Move Group 就绪:
import rclpy
from rclpy.node import Node
from rclpy.action import ActionClient
from moveit_msgs.action import MoveGroup
class RobotController(Node):
def __init__(self):
super().__init__('robot_controller')
# 创建 Action 客户端
self.move_action_client = ActionClient(
self,
MoveGroup,
'move_action'
)
# 等待 Move Group 就绪(关键!)
self.wait_for_move_group()
def wait_for_move_group(self):
"""等待 Move Group 变为 active"""
self.get_logger().info('等待 Move Group...')
# 方法1:等待 action 服务器
if not self.move_action_client.wait_for_server(timeout_sec=10.0):
self.get_logger().error('Move Group 未启动!')
return False
# 方法2:检查话题(可选)
# from rclpy.wait_for_message import wait_for_message
# try:
# wait_for_message('/move_group/status',
# rclpy.duration.Duration(seconds=5))
# except:
# self.get_logger().warning('未收到 Move Group 状态')
self.get_logger().info('Move Group 已就绪')
return True
更多推荐



所有评论(0)