🤖 roboto_origin_03 Wiki
首页 / URDF / 执行器与控制接口

本文档聚焦 atom01 人形机器人在 MuJoCo 仿真环境中的执行器建模策略与控制接口设计。MuJoCo 的 MJCF 格式采用 23 组理想扭矩电机直接驱动关节,配合分层默认动力学参数与全套执行器状态传感器,为强化学习训练提供了直接力控接口。理解这一设计的前提是区分 URDF 的“关节限位语义”与 MJCF 的“电机控制语义”——前者描述硬件属性,后者定义仿真控制律。

Sources: atom01.xml

执行器架构总览

atom01 在 MJCF 中定义了 23 个 <motor> 执行器,覆盖除浮动基座外的全部驱动关节。其控制链路遵循“策略输出 → 控制向量 → 电机扭矩 → 关节动力学 → 状态反馈”的闭环结构,整体架构如下:

flowchart LR
    A[策略/控制器<br/>ctrl ∈ ℝ²³] --> B["MuJoCo Motor<br/>τ = gear × ctrl"]
    B --> C[关节动力学<br/>含阻尼/摩擦/惯量]
    C --> D[刚体运动<br/>q, q̇]
    D --> E[执行器传感器<br/>pos / vel / frc]
    D --> F[IMU 传感器<br/>ori / vel / acc]
    E --> A
    F --> A

该架构的核心特征是 直接扭矩控制(Direct Torque Control)。每个 <motor> 元素的 gear="1" 意味着控制输入 ctrl 直接映射为关节轴上的扭矩值(单位 N·m),不经过位置或速度伺服中间层。这种设计使得外部策略(如强化学习策略)可直接输出连续扭矩指令,绕过了传统伺服电机的 PD 增益调参。

Sources: atom01.xml, atom01.xml

执行器清单与参数

下表汇总了全部 23 个执行器及其控制参数。所有电机统一采用 gear="1"ctrllimited="true",控制量程均为 [-200, 200] N·m。

执行器名称 关联关节 所属肢体 控制量程 (N·m) 传动比
left_thigh_yaw_joint left_thigh_yaw_joint 左腿 [-200, 200] 1
left_thigh_roll_joint left_thigh_roll_joint 左腿 [-200, 200] 1
left_thigh_pitch_joint left_thigh_pitch_joint 左腿 [-200, 200] 1
left_knee_joint left_knee_joint 左腿 [-200, 200] 1
left_ankle_pitch_joint left_ankle_pitch_joint 左腿 [-200, 200] 1
left_ankle_roll_joint left_ankle_roll_joint 左腿 [-200, 200] 1
right_thigh_yaw_joint right_thigh_yaw_joint 右腿 [-200, 200] 1
right_thigh_roll_joint right_thigh_roll_joint 右腿 [-200, 200] 1
right_thigh_pitch_joint right_thigh_pitch_joint 右腿 [-200, 200] 1
right_knee_joint right_knee_joint 右腿 [-200, 200] 1
right_ankle_pitch_joint right_ankle_pitch_joint 右腿 [-200, 200] 1
right_ankle_roll_joint right_ankle_roll_joint 右腿 [-200, 200] 1
torso_joint torso_joint 躯干 [-200, 200] 1
left_arm_pitch_joint left_arm_pitch_joint 左臂 [-200, 200] 1
left_arm_roll_joint left_arm_roll_joint 左臂 [-200, 200] 1
left_arm_yaw_joint left_arm_yaw_joint 左臂 [-200, 200] 1
left_elbow_pitch_joint left_elbow_pitch_joint 左臂 [-200, 200] 1
left_elbow_yaw_joint left_elbow_yaw_joint 左臂 [-200, 200] 1
right_arm_pitch_joint right_arm_pitch_joint 右臂 [-200, 200] 1
right_arm_roll_joint right_arm_roll_joint 右臂 [-200, 200] 1
right_arm_yaw_joint right_arm_yaw_joint 右臂 [-200, 200] 1
right_elbow_pitch_joint right_elbow_pitch_joint 右臂 [-200, 200] 1
right_elbow_yaw_joint right_elbow_yaw_joint 右臂 [-200, 200] 1

Sources: atom01.xml

电机模型与扭矩控制接口

MuJoCo 的 <motor> 是一种理想力源(Ideal Force Source),其数学模型极为简洁:施加于关节的扭矩 τ 等于传动比 gear 与控制输入 ctrl 的乘积。当 gear="1" 时,τ = ctrlctrllimited="true"ctrlrange="-200 200" 在控制输入层面施加硬饱和,即:

τ_actual = clamp(ctrl, -200, 200)

这一设计意味着:

  1. 无内置伺服环:电机不维护位置或速度设定点,策略必须自行实现 PD 控制律或其他反馈机制;
  2. 统一量程的仿真友好性:虽然 200 N·m 对踝部或手臂关节而言远大于 URDF 中定义的硬件 effort 上限,但在强化学习探索阶段,统一量程简化了动作空间的归一化;
  3. 控制频率与仿真步长解耦:控制指令通过 mj_step() 逐仿真步(timestep="0.001")注入,而策略推理频率可由外部循环决定。

Sources: atom01.xml

关节动力学参数体系

执行器产生的扭矩最终通过关节动力学传递至连杆。MJCF 在 <default> 中定义了三类关节参数类,分别覆盖腿部、腰部与手臂关节:

classDiagram
    class default {
        +joint limited=true
        +motor ctrllimited=true
    }
    class leg_joint_param {
        +damping 0.01
        +frictionloss 0.01
        +armature 0.01
    }
    class waist_joint_param {
        +damping 0.01
        +frictionloss 0.01
        +armature 0.01
    }
    class arm_joint_param {
        +damping 0.01
        +frictionloss 0.01
        +armature 0.01
    }
    default <|-- leg_joint_param
    default <|-- waist_joint_param
    default <|-- arm_joint_param

参数语义与工程含义

参数 取值(默认类) 物理意义 控制影响
damping 0.01 与关节速度成正比的粘性阻力系数 提供速度相关的耗散项,抑制高频振荡
frictionloss 0.01 库仑摩擦(静摩擦/动摩擦近似) 在速度过零时产生不连续阻力,影响低扭矩跟踪精度
armature 0.01 电机转子等效惯量 增加关节轴的等效惯性,使系统响应更平滑,但降低加速度

值得注意的是,踝部关节(ankle_pitch / ankle_roll)在实例层级覆盖了 frictionloss,将值提升至 0.05。这反映了足端接触对摩擦敏感性的工程考量——更高的库仑摩擦有助于在足底接触地面时提供被动稳定性,减少姿态漂移。

Sources: atom01.xml

URDF 与 MJCF 控制参数映射差异

URDF 文件通过 <limit effort="..." velocity="..."/> 描述硬件级关节约束,而 MJCF 的 <motor> 通过 ctrlrange 定义仿真控制约束。两者在数值与语义上存在显著差异,开发者在将控制算法从 ROS/Gazebo 迁移至 MuJoCo 时需特别注意。

Effort 与 Velocity 限位对比

关节分组 URDF effort (N·m) URDF velocity (rad/s) MJCF ctrlrange (N·m) 差异说明
大腿/躯干主关节 120 25.0 [-200, 200] MJCF 控制上限显著高于 URDF 硬件上限
踝部关节 27 8.0 [-200, 200] 同上,踝部限位未在 MJCF 中体现
手臂关节 27 8.0 [-200, 200] 同上

关节运动范围差异

下表仅列出 URDF 与 MJCF 存在不一致的关节(其余关节范围相同)。这些差异通常源于 MJCF 针对特定仿真任务(如行走、跌倒恢复)所做的运动学空间调整。

关节名称 URDF lower URDF upper MJCF range 差异特征
left_thigh_roll_joint -0.2 1.0 [-0.2, 2.0] MJCF 上限更宽
left_thigh_pitch_joint -1.57 1.57 [-2.5, 0.8] MJCF 改为非对称范围,允许更大后摆
left_knee_joint -0.2 2.5 [0, 2.5] MJCF 禁止反向过伸
left_ankle_pitch_joint -0.6 0.6 [-0.7, 0.7] MJCF 范围略宽
right_thigh_roll_joint -1.0 0.2 [-2.0, 0.2] MJCF 下限更宽
right_thigh_pitch_joint -1.57 1.57 [-2.5, 0.8] 同左大腿,非对称调整
right_knee_joint -0.2 2.5 [0, 2.5] 同左膝,禁止反向过伸
right_ankle_pitch_joint -0.6 0.6 [-0.7, 0.7] MJCF 范围略宽
torso_joint -3.14 3.14 [-2.62, 2.62] MJCF 范围收窄
left_arm_pitch_joint -3.14 1.57 [-3.14, 2.57] MJCF 上限显著放宽
left_arm_yaw_joint -1.57 1.57 [-2.6, 2.6] MJCF 范围显著放宽
left_elbow_pitch_joint -0.6 1.57 [-1.0, 3.57] MJCF 范围大幅放宽
right_arm_pitch_joint -3.14 1.57 [-3.14, 2.57] 同左臂
right_arm_yaw_joint -1.57 1.57 [-2.6, 2.6] 同左臂
right_elbow_pitch_joint -0.6 1.57 [-1.0, 3.57] 同左臂

上述差异意味着:若控制器在 URDF 限定的关节范围内规划轨迹,迁移到 MuJoCo 时可能因范围不同而触发意外限位;反之,利用 MJCF 更宽的非对称范围进行动作设计时,需评估在真实硬件上的可行性。

Sources: atom01.urdf, atom01.xml

执行器状态反馈传感器

MJCF 在 <sensor> 中为每个执行器配置了三类传感器,共 69 个执行器相关传感通道,加上 IMU 构成完整的本体感知系统:

flowchart TB
    subgraph 执行器传感器 ["执行器传感器 (69 channels)"]
        direction LR
        P[actuatorpos<br/>23× 位置] --> V[actuatorvel<br/>23× 速度]
        V --> F[actuatorfrc<br/>23× 力矩]
    end
    subgraph IMU传感器 ["IMU 传感器 (9 channels)"]
        direction LR
        O[framequat<br/>4× 姿态] --> POS[framepos<br/>3× 位置]
        POS --> G[gyro<br/>3× 角速度]
        G --> A[accelerometer<br/>3× 加速度]
        A --> M[magnetometer<br/>3× 磁场]
    end

传感器类型与属性

传感器类型 数量 命名后缀 user 标记 噪声配置 物理含义
actuatorpos 23 _p 13 执行器位置(即关节角度,rad)
actuatorvel 23 _v 13 执行器速度(即关节角速度,rad/s)
actuatorfrc 23 _f 13 noise="1e-3" 执行器输出力矩(N·m),含高斯噪声

user="13" 为 MuJoCo 的自定义元数据字段,其语义取决于上层消费框架(如 Isaac Gym 转换器或自定义 RL 包装器),在原生 MuJoCo 中不影响物理仿真。

actuatorfrc 上的 noise="1e-3" 表示力矩读数叠加了标准差为 0.001 N·m 的高斯白噪声。这一微弱噪声模拟了真实关节力矩传感器的测量误差,在强化学习中可提升策略的鲁棒性,同时不至于掩盖主要的动力学信号。

Sources: atom01.xml

控制接口的工程视角与强化学习集成

从控制系统架构来看,atom01 的 MJCF 模型采用了**“最小干预”执行器哲学**:仅提供理想力源与被动动力学(阻尼/摩擦/惯量),将伺服控制律的自主权完全交给外部策略。这种设计对强化学习训练具有深远影响:

  1. 动作空间设计:策略直接输出 23 维连续向量,每个维度通过 tanh 等函数映射至 [-200, 200]。若需更贴近硬件,应在训练代码中额外施加 URDF 的 effort 限位(120 N·m 或 27 N·m),而非修改 MJCF;
  2. 状态空间设计actuatorpos + actuatorvel + actuatorfrc 提供了完整的本体感知基线。通常与 IMU 数据拼接后输入策略网络;
  3. Sim-to-Real 间隙:统一量程 ±200 与真实的关节力矩上限差异较大,若计划部署到实体机器人,建议在仿真后期引入“域随机化”(Domain Randomization),对 ctrlrangedampingfrictionloss 进行随机扰动;
  4. 接触稳定性:踝部关节的 frictionloss="0.05" 是一项被动稳定性设计,在足端接触时可等效提供一定的零速保持能力,减少站立时的主动控制能耗。

Sources: atom01.xml, atom01.xml

阅读导航

理解执行器与控制接口后,建议继续深入以下关联主题: