🤖 roboto_origin_03 Wiki
首页 / 项目根 / 执行器与传感器选型

ATOM01 原型机采用 23 自由度 的关节配置,全部使用达妙科技(DM)系列关节电机驱动,并搭配单颗超核(HiPNUC)惯性测量单元实现姿态感知。本页从工程选型的视角,系统梳理执行器与传感器的型号规格、关节分布逻辑、通信拓扑以及关键的控制参数映射关系,为硬件采购、仿真建模与部署调参提供统一的参考基准。

Sources: BOM.md, robot_interface.hpp

执行器系统概览

ATOM01 全身共配置 23 台关节电机,覆盖下肢、腰部与双臂。其中髋关节、膝关节与腰部等承载整机重量与高动态冲击的关节选用大扭矩型号;踝关节与手臂关节则选用体积更紧凑、扭矩适中的型号。所有电机均通过 CAN 总线接入主控,支持 MIT 阻抗控制模式,可在位置、速度、力矩与刚度阻尼的混合空间内实时响应策略指令。

下图展示了执行器系统的层次化架构:从顶层的策略推理节点,经过机器人接口层,通过多路 CAN 总线并行下发至各关节电机驱动器。

graph TD
    A[推理节点 / ONNX Policy] --> B[RobotInterface]
    B --> C[CAN0: 左腿 6电机]
    B --> D[CAN1: 右腿+腰 7电机]
    B --> E[CAN2: 左手 5电机]
    B --> F[CAN3: 右手 5电机]
    C --> M1[DM10010L ×4<br/>髋部+膝部]
    C --> M2[DM4340P ×2<br/>踝关节]
    D --> M3[DM10010L ×5<br/>髋部+膝部+腰部]
    D --> M4[DM4340P ×2<br/>踝关节]
    E --> M5[DM4340P ×5<br/>手臂]
    F --> M6[DM4340P ×5<br/>手臂]

Sources: robot.yaml, robot_interface.cpp

电机型号与关节分布

项目选用达妙科技两种型号的关节电机,通过扭矩与体积的差异化组合实现成本与性能的平衡。固件层通过枚举值 DM4340P_48V = 0DM10010L_48V = 1 区分型号,并在运行时根据配置表加载对应的限幅参数。

电机型号参数对比

参数 DM4340P(48V) DM10010L(48V)
部署数量 14 台 9 台
峰值扭矩 28 N·m 200 N·m
最大速度 20 rad/s 25 rad/s
位置限幅 ±12.5 rad ±12.5 rad
外环 Kp 上限 500 500
外环 Kd 上限 5 5
典型应用场景 踝关节、手臂 髋关节、膝关节、腰部

上表中的峰值扭矩与速度限幅直接来源于驱动固件的参数表定义,这些值在 MIT 控制帧打包时用于 12 bit/16 bit 的量化映射,决定了实际控制指令的有效动态范围。

Sources: dm_motor_driver.cpp, dm_motor_driver.hpp

关节-电机映射关系

robot.yaml 中的 motor_model 数组按电机 ID 顺序定义了型号分布。结合 URDF 中的关节名称与 motor_num 的总线分配,可得到完整的映射关系如下:

总线 电机 ID 关节名称 电机型号 URDF 力矩限幅 URDF 速度限幅
can0 1 left_thigh_yaw_joint DM10010L 120 N 25.0 rad/s
can0 2 left_thigh_roll_joint DM10010L 120 N 25.0 rad/s
can0 3 left_thigh_pitch_joint DM10010L 120 N 25.0 rad/s
can0 4 left_knee_joint DM10010L 120 N 25.0 rad/s
can0 5 left_ankle_pitch_joint * DM4340P 27 N 8.0 rad/s
can0 6 left_ankle_roll_joint * DM4340P 27 N 8.0 rad/s
can1 7 right_thigh_yaw_joint DM10010L 120 N 25.0 rad/s
can1 8 right_thigh_roll_joint DM10010L 120 N 25.0 rad/s
can1 9 right_thigh_pitch_joint DM10010L 120 N 25.0 rad/s
can1 10 right_knee_joint DM10010L 120 N 25.0 rad/s
can1 11 right_ankle_pitch_joint * DM4340P 27 N 8.0 rad/s
can1 12 right_ankle_roll_joint * DM4340P 27 N 8.0 rad/s
can1 13 torso_joint DM10010L 120 N 25.0 rad/s
can2 14 left_arm_pitch_joint DM4340P 27 N 8.0 rad/s
can2 15 left_arm_roll_joint DM4340P 27 N 8.0 rad/s
can2 16 left_arm_yaw_joint DM4340P 27 N 8.0 rad/s
can2 17 left_elbow_pitch_joint DM4340P 27 N 8.0 rad/s
can2 18 left_elbow_yaw_joint DM4340P 27 N 8.0 rad/s
can3 19 right_arm_pitch_joint DM4340P 27 N 8.0 rad/s
can3 20 right_arm_roll_joint DM4340P 27 N 8.0 rad/s
can3 21 right_arm_yaw_joint DM4340P 27 N 8.0 rad/s
can3 22 right_elbow_pitch_joint DM4340P 27 N 8.0 rad/s
can3 23 right_elbow_yaw_joint DM4340P 27 N 8.0 rad/s

* 注:带 * 的踝关节电机属于闭链机构,其电机空间与关节空间需要通过运动学解耦进行转换。

Sources: robot.yaml, atom01.urdf

传感器系统概览

ATOM01 当前配置仅依赖单颗惯性测量单元(IMU)完成本体状态估计,未在部署层使用足底力传感器或关节力矩传感器。IMU 数据(四元数与角速度)与关节编码器反馈共同构成强化学习策略的观测向量。这种极简的传感器配置降低了硬件成本与布线复杂度,同时也对 IMU 的精度与输出频率提出了更高要求。

IMU 规格与接口配置

项目选用 超核(HiPNUC)HI13 M0-USB 模块,通过 USB 串口与主控通信。其默认工作参数如下:

参数 配置值 说明
型号 HiPNUC HI13 M0-USB 9 轴惯性测量单元
接口类型 Serial(USB 转串口) 虚拟串口设备 /dev/ttyUSB0
波特率 921600 需与上位机配置保持一致
输出频率 ≥ 200 Hz(推荐 500 Hz) 频率过低会导致姿态估计滞后
IMU ID 8 协议层标识
输出数据 四元数(w, x, y, z)、角速度、线加速度 用于计算机身姿态与角速度观测

robot_interface 在读取 IMU 原始四元数后,会将其与 extrinsic_R 定义的外参旋转矩阵进行坐标变换,以统一 IMU 坐标系与机身基坐标系的朝向关系。默认配置中 extrinsic_R 为单位矩阵,表示两者轴向完全对齐。

Sources: robot.yaml, robot_interface.hpp, README_CN.md

通信拓扑与总线分配

由于 23 台电机全部挂在 CAN 总线上,为避免单路总线负载过高并提升实时性,项目采用 4 路独立 CAN 总线 并行通信的方案。每路总线通过独立的 USB2CAN 适配器接入主控,借助 udev 规则绑定固定端口,实现即插即用。

graph LR
    subgraph 主控板
        A[USB Hub]
    end
    A --> B[USB2CAN 0<br/>can0]
    A --> C[USB2CAN 1<br/>can1]
    A --> D[USB2CAN 2<br/>can2]
    A --> E[USB2CAN 3<br/>can3]
    A --> F[IMU<br/>ttyUSB0]
    B --> G[左腿 6电机]
    C --> H[右腿+腰 7电机]
    D --> I[左手 5电机]
    E --> J[右手 5电机]

各总线的挂载数量与位速率配置如下:

总线接口 挂载电机数 对应肢体 位速率
can0 6 左腿 1 Mbps
can1 7 右腿 + 腰部 1 Mbps
can2 5 左手 1 Mbps
can3 5 右手 1 Mbps

部署层通过 ThreadPool 对 4 路总线执行并行下发,从而将单周期通信时间控制在毫秒级以内。离线阈值 offline_threshold_ 设置为 25 个周期,用于检测电机通信异常。

Sources: robot.yaml, robot_interface.cpp, README_CN.md

踝关节闭链机构

ATOM01 的踝关节并非简单的串联构型,而是采用 5 杆并联闭链机构 实现俯仰(pitch)与横滚(roll)两个自由度。该设计的核心优势在于将 ankle pitch 与 ankle roll 的驱动电机上移至小腿部位,从而减轻末端惯量、提升足端动态响应。但代价是引入了电机空间与关节空间的非线性耦合,必须在控制回路中实时进行正逆运动学解算。

robot.yaml 中通过 close_chain_motor_id: [5, 6, 11, 12] 标记了 4 台参与闭链的踝关节电机。RobotInterface::apply_action() 在执行控制指令前,会调用 DecoupleAtom01 完成以下变换:

  1. 正向变换(motor → joint):根据当前电机角度,通过解析法求解 ankle pitch 与 roll 的关节角、角速度与力矩;
  2. 控制计算:在关节空间内计算阻抗控制量;
  3. 逆向变换(joint → motor):将关节空间的目标力矩映射回电机空间,再下发 MIT 控制帧。

闭链机构的连杆参数固化在 decouple_atom01.cpp 中,其中长连杆长度 180 mm、短连杆长度 110 mm,连杆间距 42.35 mm(左右对称取反)。这些几何参数直接决定了 Jacobian 矩阵的形态,因此若对机械结构进行改装,必须同步更新解耦算法中的常量定义。

Sources: robot.yaml, robot_interface.cpp, decouple_atom01.cpp

控制参数与映射关系

每台电机在部署时不仅受限于自身的硬件限幅,还受到上层 robot.yaml 配置中刚度、阻尼与方向符号的约束。理解这些参数的含义是后续调参与安全标定的前提。

刚度与阻尼配置

kpkd 数组定义了各关节在 MIT 阻抗控制模式下的外环刚度与阻尼系数。数值越大,关节对目标位置的跟踪越刚性,但也更容易放大高频噪声与接触冲击。当前配置呈现出明显的分区特征:

方向符号与零位偏移

motor_sign 数组用于校准电机正方向与 URDF 关节正方向的一致性。若某关节的电机实际旋转方向与 URDF 定义相反,则将该位置的符号设为 -1motor_zero_offset 用于补偿机械装配导致的零位偏差,当前仅 torso_joint(ID 13)存在约 2.093 rad 的预设偏移。

此外,master_id_offset 设为 16,表示主控节点在 CAN 协议中的响应 ID 为 motor_id + 16,这是达妙电机 MIT 协议的固有约定,修改时需与电机上位机中的配置保持一致。

Sources: robot.yaml, robot_interface.cpp

选型逻辑与权衡分析

ATOM01 的执行器与传感器选型体现了“低成本、高可复现、适度冗余”的设计哲学。以下从三个维度总结选型背后的工程权衡:

维度 设计选择 优势 代价与风险
执行器 DM 系列关节电机(国产,淘宝可购) 供应链成熟,单台成本低,支持 MIT 模式 峰值扭矩与功率密度低于国际高端型号,高动态跳跃场景易触发过流保护
传感器 单 IMU + 关节编码器,无力传感器 布线极简,成本低,观测空间维度小便于策略收敛 无法直接感知足底接触力,需通过加速度与关节力矩间接估计,地面适应性受限
通信 4 路 CAN + USB2CAN 适配器 接口标准化,故障隔离性好,单路负载低 USB 扩展链增加了延迟抖动,对实时内核与 udev 规则配置有要求

对于希望复刻或改装的开发者,建议在初期严格遵循上述型号与总线分配方案;待整机基础 Locomotion 稳定后,再逐步尝试更高性能的电机或增加足底六维力传感器等扩展感知模块。

Sources: BOM.md, README_cn.md

延伸阅读与下一步

掌握执行器与传感器的选型逻辑后,建议按照以下顺序深入后续环节:

  1. 如需了解机械结构的装配细节与电气走线,请阅读 V2.0机械结构与装配工艺电路板设计与电气集成
  2. 如需配置电机 ID、CAN 总线与 IMU 串口并开始部署,请阅读 电机驱动与CAN总线通信IMU驱动与传感器集成
  3. 如需从零位标定开始让机器人上电并进入安全状态,请阅读 安全操作与零位标定