Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

A7 Lite 机械臂

A7 Lite 机械臂文档。

快速开始

from linkerbot import A7lite

with A7lite(
    side="left",
    interface_name="can0",
) as arm:
    arm.enable()  # 使能机械臂所有 7 个关节电机
    arm.home()  # 将机械臂移动到零位
    arm.disable()  # 失能机械臂所有 7 个关节电机

构造参数

参数类型默认值说明
side"left" | "right"必填左臂或右臂
interface_namestr必填CAN 接口名,如 "can0"
interface_typestr"socketcan"CAN 接口类型
tcp_offsetlist[float][0.0, 0.0, 0.0]TCP 偏移量
world_frame"urdf" | "maestro""urdf"世界坐标系约定

构造时会自动检查所有 7 个电机是否在线。

前置依赖: A7 Lite 依赖 Pinocchio 进行运动学计算,需要安装 kinetix 可选依赖:

pip install linkerbot-py[kinetix]

Windows 用户:Pinocchio 不支持 pip 安装,请使用 conda install pinocchio -c conda-forge

异常:

  • ImportError: 未安装 kinetix 可选依赖(Pinocchio)
  • ValueError: sideworld_frame 参数非法
  • StateError: 电机未响应 CAN 总线 / 上报数据超时

URDF 文件路径src/linkerbot/arm/kinetix/urdf/a7_lite__left.urdfa7_lite__right.urdf

坐标系说明

A7 Lite 支持两种世界坐标系,通过 world_frame 参数选择。

URDF 坐标系(默认)

URDF 模型文件的坐标系,原点位于机器人左右臂肩关节连线中点处,如图所示:

coordinate

  • X 轴:机器人背后指向机器人前方为 X 轴正方向
  • Y 轴:机器人视角左手边(面对机器人站立右手边)为 Y 轴正方向
  • Z 轴:由右手定则确定上方为 Z 轴正方向
  • Rx, Ry, Rz:表示按照 Z,Y,X 轴顺序,逆时针为正进行旋转

Maestro 坐标系

Maestro 坐标系,相对 URDF 坐标系进行了两步变换,如图所示:

coordinate

  1. 原点平移:将世界坐标原点从基座中心平移到 Joint 2(肩部第二关节)中心处
  2. Z 轴旋转 90°:在新原点将 URDF 坐标轴绕 Z 轴逆时针旋转 +90°

变换后:

  • X 轴:机器人视角右手边(面对机器人站立左手边)为 X 轴正方向
  • Y 轴:机器人背后指向机器人前方,为 Y 轴正方向
  • Z 轴:由右手定则确定上方为 Z 轴正方向

注意:这两种坐标的定义方式主要影响move_pmove_l涉及到Pose的部分,不影响move_j控制

关节定义

零位定义

所有关节角度为 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] 时,机械臂应当处于“自然下垂“姿态(关节相互垂直);调用 home() 可回到零位,如下图所示:

home

角度正方向定义

角度正方向遵从右手定则:以右手拇指指向旋转轴正方向,四指弯曲方向为正角度增大方向。

由于 URDF 中各关节轴可能为负方向(如 0 -1 0),实际正角度方向与直觉相反:

  • 轴为 0 -1 0(Y 轴负方向):发送更大角度时,关节绕 Y 轴方向旋转,即 Y 轴正方向指向自己时顺时针旋转。
  • 轴为 -1 0 0(X 轴负方向):发送更大角度增大时,关节绕 X 轴方向旋转,即 X 轴正方向指向自己时顺时针旋转。
  • 轴为 0 0 1(Z 轴正方向):发送更大角度时,关节绕 Z 轴正方向旋转,即从上方看为逆时针。

A7 Lite 左臂关节一览(URDF 坐标系)

索引关节名称物理含义旋转轴(URDF)角度范围(rad)
0L1_JOINT肩部俯仰Y 轴负方向(0 -1 0[-2.18, 3.75]
1L2_JOINT肩部横滚X 轴负方向(-1 0 0[-3.33, 0.19]
2L3_JOINT肩部偏转(上臂扭转)Z 轴正方向(0 0 1[-2.26, 2.26]
3L4_JOINT肘部俯仰Y 轴负方向(0 -1 0[-0.78, 1.74]
4L5_JOINT肘部偏转(前臂扭转)Z 轴正方向(0 0 1[-2.96, 2.96]
5L6_JOINT腕部俯仰Y 轴负方向(0 -1 0[-1.57, 1.57]
6L7_JOINT腕部横滚X 轴负方向(-1 0 0[-1.57, 1.57]

A7 Lite 右臂关节一览(URDF 坐标系)

索引关节名称物理含义旋转轴(URDF)角度范围(rad)
0R1_JOINT肩部俯仰Y 轴正方向(0 1 0[-3.75, 2.18]
1R2_JOINT肩部横滚X 轴负方向(-1 0 0[-0.19, 3.33]
2R3_JOINT肩部偏转(上臂扭转)Z 轴正方向(0 0 1[-2.26, 2.26]
3R4_JOINT肘部俯仰Y 轴正方向(0 1 0[-1.74, 0.78]
4R5_JOINT肘部偏转(前臂扭转)Z 轴正方向(0 0 1[-2.96, 2.96]
5R6_JOINT腕部俯仰Y 轴正方向(0 1 0[-1.57, 1.57]
6R7_JOINT腕部横滚X 轴负方向(-1 0 0[-1.57, 1.57]

Pose(TCP 位姿)表示

Pose 表示 TCP(Tool Center Point,工具中心点)位姿,是一个 Pydantic 模型,包含 6 个字段:

from linkerbot import Pose

pose = Pose(x=0.3, y=0.1, z=0.5, rx=0.0, ry=0.5, rz=0.0)
字段含义单位
x, y, z空间坐标位置米(m)
rx绕 X 轴旋转(Roll),范围 [-π, π]弧度(rad)
ry绕 Y 轴旋转(Pitch),范围 [-π/2, π/2]弧度(rad)
rz绕 Z 轴旋转(Yaw),范围 [-π, π]弧度(rad)
  • 姿态使用外旋 ZYX 欧拉角表示:先绕世界坐标轴的 Z 轴旋转 rz,再绕世界坐标轴的 Y 轴旋转 ry,最后绕世界坐标轴的 X 轴旋转 rx。

生命周期管理

API 参考

方法说明
enable()使能所有 7 个关节电机,会导致短暂失能。
disable()失能所有 7 个关节电机。
emergency_stop()紧急停止机械臂。此方法会阻塞约 2 秒。
calibrate_zero()将当前位置设为零位。需要机械臂处于失能状态。
reset_error()重置所有关节的错误状态。
close()关闭连接:等待运动完成后停止 CAN 调度器。使用 with 语句时会自动调用。

注意事项

  1. 调用 arm.enable() 使能时会导致机械臂短暂失能。
  2. 设置零位需要机械臂处于失能状态。
  3. emergency_stop() 是阻塞调用,会等待约 2 秒。

控制模式

当前仅支持 PP(Profile Position)模式,调用 enable() 时会自动设置。

ControlMode 枚举可从 linkerbot 导入:

from linkerbot import ControlMode

CAN 总线

interface_name 指定 CAN 接口名称(如 "can0"),interface_type 指定接口类型(默认 "socketcan")。

更多信息(包括 Windows 用法)请参阅 CAN 总线配置

功能模块

模块文档
运动控制(move_j/move_p/move_l)motion.md
运动学(FK/IK/关节限位)kinematics.md
状态读取(角度/速度/扭矩/温度)state.md
参数配置(速度/加速度/PID)config.md