⚙ 开发指南
> SDK
> API
> 数据结构
运动控制参数(ArmControlOptions)#
ArmControlOptions 是与 P6 目录对应的栏目名称;P7 SDK 没有同名类。P7 将运动选项拆分为
JointMoveOptions、CartesianMoveOptions、EEFMoveOptions、JointWaypointsMoveOptions 和
CartesianWaypointsMoveOptions 五类可修改 dataclass。模型会检查部分类型和数值范围,但当前控制模式和具体方法
决定字段是否真正发送。对象成功创建并不表示参数组合适合当前机械臂。
选项模型#
| 类型 | 使用入口 | 主要字段组 |
|---|---|---|
JointMoveOptions |
move_joint() |
关节 planning、Servo、MIT 与阻塞字段 |
CartesianMoveOptions |
单次笛卡尔 PTP/LIN/CIRCLE 和位姿 Servo | 位姿规划、OMPL、seed、碰撞与阻塞字段 |
EEFMoveOptions |
move_eef() |
EEF CSP/MIT 的 effort、torque、增益与阻塞字段 |
JointWaypointsMoveOptions |
move_joint_waypoints() |
关节逐段规划、融合、seed 和序列完成字段 |
CartesianWaypointsMoveOptions |
move_end_pose_waypoints() |
笛卡尔逐段规划、融合、seed 和序列完成字段 |
JointMoveOptions 在 planning、Servo 和 MIT 下读取的字段不同。例如 planning 使用规划类型、缩放和
采样参数,Servo 忽略这些规划字段,MIT 使用 torque、kp 和 kd。详细矩阵见
接口总览及各运动规划页面。
使用前检查#
- 浮点标量与向量元素都应通过
math.isfinite()检查;当前范围比较不能可靠拒绝NaN。 eff、seed、MIT 和 EEF 向量应在发送前检查长度;模型构造阶段不会统一检查。Literal类型注解不等于完整运行时枚举校验,只传文档列出的motion_type和 planner 名称。- waypoint 的非空
segments数量必须等于len(waypoints) - 1,且各段sampling_time一致。 timeout_ms属于运动方法,不是 options 字段,也不等于实际轨迹执行时长。
import math
def require_finite(values: list[float], name: str) -> None:
if not all(math.isfinite(float(value)) for value in values):
raise ValueError(f"{name} contains a non-finite value")
P7 规划名称#
单次关节 planning 使用 "ptp" 或 "ompl"。单次笛卡尔 PTP 使用 move_end_pose();直线与圆弧
分别使用专用 LIN 和 CIRCLE 方法。笛卡尔 waypoint 段使用 "ptp"、"lin" 或 "ompl"。
具体 OMPL 搜索器通过 ompl_planner_type 选择,不应把 "rrt_connect" 写入 motion_type。
请按任务继续阅读 PTP 点到点规划、 LIN 直线轨迹规划、CIRC 圆弧轨迹规划 或多段轨迹融合规划。