03_单臂运动规划¶
单臂轨迹规划技巧与应用¶
掌握单个机械臂的运动规划方法和实用技巧。
1. 单臂规划概述¶
1.1 规划空间¶
OpenArmX单臂有两种规划方式:
关节空间规划 (Joint Space):
直接指定7个关节的目标角度
优点:
✓ 无逆运动学计算
✓ 保证有解
✓ 关节轨迹可控
缺点:
✗ 末端轨迹难预测
✗ 不直观
笛卡尔空间规划 (Cartesian Space):
指定末端执行器的位置和姿态
优点:
✓ 直观(XYZ + 姿态)
✓ 易于任务描述
缺点:
✗ 可能无逆运动学解
✗ 可能存在多个解
1.2 单臂运动特点¶
左臂 (left_arm):
CAN接口: can0
关节: left_joint_1 ~ left_joint_7
末端坐标系: left_link_7
工作空间: 基座左侧
右臂 (right_arm):
CAN接口: can1
关节: right_joint_1 ~ right_joint_7
末端坐标系: right_link_7
工作空间: 基座右侧
2. 使用RViz进行单臂规划¶
2.1 基本规划流程¶
步骤详解:
1. 启动MoveIt
↓
2. 选择Planning Group: left_arm
↓
3. 设置目标姿态(3种方式)
↓
4. 配置规划参数
↓
5. 执行规划
↓
6. 检查轨迹
↓
7. 执行运动
启动:
source ~/openarmx_ws/install/setup.bash
ros2 launch openarm_bimanual_moveit_config demo.launch.py
在RViz中:
MotionPlanning面板:
┌────────────────────────────┐
│ Planning Group: │
│ [left_arm ▼] │
│ │
│ Query: │
│ Goal State:
│ [Update] [Random Valid] │
│ │
│ Planning: │
│ Velocity Scaling: 0.3 │
│ [Plan] [Execute] │
└────────────────────────────┘
2.2 方式1: 交互标记规划¶
最直观的方式:
出现交互标记:
选择left_arm后,3D视图中出现:
- 蓝色球形标记(末端位置)
- 红绿蓝箭头(X/Y/Z轴)
- 红绿蓝环(绕X/Y/Z轴旋转)
拖动到目标:
拖动蓝球: 移动末端位置
拖动箭头: 沿轴移动
拖动环: 旋转末端姿态
观察预览:
拖动时,机器人实时预览目标姿态
- 白色/半透明: 目标状态
- 绿色: 当前状态
规划轨迹:
点击 [Plan]
- 等待几秒
- 橙色轨迹出现: 成功
- 红色或无: 失败
执行:
检查橙色轨迹合理
点击 [Execute]
观察机器人运动
示例任务: 抓取桌面物体
场景:
桌子位置: X=0.5, Y=-0.3, Z=0.4 m
物体位置: X=0.5, Y=-0.3, Z=0.45 m
步骤:
1. 将交互标记拖到物体上方
X=0.5, Y=-0.3, Z=0.6 m (物体上方15cm)
2. 调整末端姿态
- 拖动环,使夹爪朝下
3. Plan & Execute
- 机械臂移动到上方
4. 继续拖到抓取位置
X=0.5, Y=-0.3, Z=0.46 m
5. Plan & Execute
- 下降到抓取高度
6. (单独控制夹爪闭合)
2.3 方式2: 随机目标规划¶
用于系统测试和学习:
点击 [Select Random Valid Goal]
MoveIt自动生成:
- 有效的关节配置
- 满足限位
- 无碰撞
- 可达
然后:
点击 [Plan]
点击 [Execute]
用途:
验证MoveIt配置正确
探索机器人工作空间
学习关节运动范围
测试规划器性能
2.4 方式3: 关节滑块规划¶
精确控制关节角度:
切换到 Joints 标签:
┌────────────────────────────────┐
│ left_joint_1: [-3.14, 3.14] │
│ [────────●────────] 0.523 rad │
│ │
│ left_joint_2: [-1.57, 1.57] │
│ [──●──────────────] -0.342 rad │
│ │
│ left_joint_3: [-3.14, 3.14] │
│ [──────────●──────] 0.125 rad │
│ │
│ ... (其余关节) │
│ │
│ [Plan to Target] [Execute] │
└────────────────────────────────┘
使用:
1. 拖动各滑块到期望角度
2. 观察3D视图中的预览
3. 点击 [Plan to Target]
4. 点击 [Execute]
应用场景:
避免逆运动学奇异点
精确重现关节配置
调试特定关节问题
学习关节空间
3. 规划技巧¶
3.1 提高规划成功率¶
技巧1: 合理的目标姿态
✓ 避免关节极限位置
✓ 保持肘部适度弯曲
✓ 末端姿态避免奇异
✗ 不要完全伸直
✗ 不要过度扭曲
技巧2: 分步规划
# 不推荐: 一步到位
arm.set_pose_target(final_pose)
arm.go()
# 推荐: 分步规划
arm.set_pose_target(intermediate_pose)
arm.go()
arm.set_pose_target(final_pose)
arm.go()
技巧3: 调整规划参数
# 增加规划时间
arm.set_planning_time(10.0) # 默认5秒
# 增加尝试次数
arm.set_num_planning_attempts(20) # 默认10次
# 尝试不同算法
arm.set_planner_id("RRTstar") # 默认RRTConnect
3.2 避免碰撞¶
添加场景物体:
# 添加桌子
box_pose = geometry_msgs.msg.PoseStamped()
box_pose.header.frame_id = "base_link"
box_pose.pose.position.x = 0.5
box_pose.pose.position.y = 0.0
box_pose.pose.position.z = 0.4
box_pose.pose.orientation.w = 1.0
scene = moveit_msgs.msg.PlanningSceneInterface()
scene.add_box("table", box_pose, size=(1.0, 0.6, 0.05))
自碰撞检查:
# 已默认开启
# 可以在SRDF中配置disable_collisions
3.3 速度和加速度控制¶
# 谨慎起步
arm.set_max_velocity_scaling_factor(0.1) # 10%速度
arm.set_max_acceleration_scaling_factor(0.1)
# 逐步提高
arm.set_max_velocity_scaling_factor(0.3) # 30%速度
arm.set_max_acceleration_scaling_factor(0.3)
# 熟练后
arm.set_max_velocity_scaling_factor(0.8) # 80%速度
arm.set_max_acceleration_scaling_factor(0.8)
5. 总结¶
5.1 单臂规划要点¶
✓ 熟练使用三种规划方式(交互/随机/关节)
✓ 掌握Python API编程
✓ 笛卡尔路径用于直线/插入任务
✓ 分步规划提高成功率
✓ 合理设置速度和加速度
5.2 最佳实践¶
□ 首次测试使用低速度(0.1-0.3)
□ 规划前检查周围环境
□ 使用笛卡尔路径进行精确运动
□ 复杂任务分解为简单步骤
□ 添加场景物体避免碰撞
□ 监控规划成功率
5.3 下一步¶
双臂独立控制 - 左右臂协调运动
轨迹录制与回放 - 录制复杂示教轨迹
高级应用 - 力控和柔顺控制
本文档版本: v1.0.0
最后更新: 2025年11月5日
成都长数机器人有限公司