主题
单臂与双臂
单臂使用 Arm("left") 或 Arm("right");双臂使用 DualArm(),通过 .left 和 .right 访问两侧。每臂有七个臂关节及一个独立夹爪。关节目标单位为 rad,速度单位为 rad/s,力矩单位为 N·m。
接口
| 调用形式 | 行为 / 返回值 |
|---|---|
arm.move_joints(angles, speed_percent=30, blocking=True) | 七关节平滑位置运动,不控制夹爪 |
arm.set_mode(mode) | 仅切换七个臂关节;mode="mit" 或 "pos_vel",无 joints 参数,夹爪不受影响 |
arm.get_angles() | 七维 list[float | None],顺序为 ARM_JOINT_NAMES(j1..j7) |
arm.num_joints | 固定为 7,不包含夹爪,不随连接状态变化 |
arm.get_state() | ArmState |
arm.get_end_pose() | CartesianPose;所需反馈缺失时抛异常 |
dual_arm.move_joints(left_angles, right_angles, speed_percent=30, blocking=True) | 双臂七关节运动,共同时间轴 |
dual_arm.set_mode(mode) | 两侧七关节模式,均不影响夹爪 |
dual_arm.get_angles() | 两个七维位置列表组成的元组 |
dual_arm.get_state() | DualArmState |
dual_arm.get_end_pose() | DualArmPose(left, right);未连接或缺位置反馈的一侧为 None |
目标与速度
angles 接受七维角度列表或非空 j1..j7 名称映射;映射未指定关节保持当前反馈位置,不能包含夹爪。越界或非有限目标会被拒绝,不静默限幅。运动前必须使能,所需位置和速度反馈必须有效。
speed_percent 为 1~100,默认 30,相对交付运动速度上限,不是绝对 rad/s。高层接口自动持续发送目标,无需编写刷新循环。
完成与失败
阻塞运动在轨迹下发结束且位置、速度反馈连续满足到位条件后返回 True。非阻塞运动返回 ArmMotion,详见 运动任务与取消。完成后持续保持最终目标,退出上下文时停止并断开,不自动失能。
状态字段
八轴状态顺序为 JOINT_NAMES:j1, j2, j3, j4, j5, j6, j7, gripper;七关节目标顺序为 ARM_JOINT_NAMES:j1..j7。
| 类型 | 主要字段 |
|---|---|
MotorState | pos、vel、torq;缺反馈均为 None。t_mos / t_rotor 为可选温度(°C) |
ArmState | 八维 pos / vel / torq / mode;state["j3"] 返回 MotorState |
ArmState.ok | 八轴位置都有反馈 |
ArmState.q7 | 前七轴角度列表;任一位置缺失抛 RuntimeError |
DualArmState | left / right 为 ArmState |
timestamp_ns 为单调时钟纳秒,不是日历时间。未知关节名访问状态抛 KeyError;无反馈不填零。state["gripper"].require_pos("gripper") 返回有效位置,缺失时抛 RuntimeError,示例用它避免将缺失值用于运动。
请将状态快照作为只读数据使用;需要修改列表或字典时,先用 state.model_copy(deep=True) 创建独立副本。