03_单臂运动规划¶

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日

成都长数机器人有限公司