本文档深入解析 Atom01(V1.0)与 Roboto Origin(V2.0)人形机器人 URDF 模型中各连杆的质量、质心(COM)与惯性张量(Inertia Tensor)数据,揭示两版模型在动力学属性上的关键差异,并指出 V1.0 惯性数据中存在的一个对仿真精度有显著影响的参考系偏差问题。阅读本文前,建议先熟悉 URDF 模型的拓扑结构与关节配置,以便理解惯性参数在运动链中的传递关系。
Sources: Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.csv
数据生成方法与坐标系约定
两版 URDF 的惯性参数均源自 SolidWorks 的 "SolidWorks to URDF Exporter" 插件导出流程。在 SolidWorks 装配体中,通过为每个零件或子装配体指定材料密度(PLA/碳纤维/铝合金等),软件自动计算质量、质心位置与关于质心的惯性张量。导出后的 URDF 中,每个连杆的 <inertial> 块包含三个核心要素:<origin> 定义了以连杆本体坐标系为参考的质心位姿(仅含平移,无旋转,即 rpy="0 0 0"),<mass> 给出连杆总质量(单位 kg),<inertia> 则以 3×3 对称矩阵的独立分量(ixx, ixy, ixz, iyy, iyz, izz,单位 kg·m²)描述质心处的转动惯量。V1.0 额外提供了一个 CSV 表格文件,记录了与 URDF 同名连杆的原始导出数据,但需注意该 CSV 中的质量与惯量数值显著低于同版本 URDF,推测其仅涵盖纯机械结构(不含电机、轴承与紧固件),而 URDF XML 经过后续整合,包含了完整装配体的质量属性。
Sources: Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.csv
核心发现:V1.0 惯性张量的参考系偏差
通过对 V1.0 与 V2.0 对应连杆的惯性参数进行逐层比对,可以发现一个对动力学仿真至关重要的系统性差异:V1.0 URDF 中大量连杆的惯性张量并非关于质心(COM)计算,而是关于连杆本体原点(Link Origin)计算的。这导致其 <inertia> 数值被人为放大,其增量恰好符合平行轴定理(Parallel Axis Theorem)的预测。以 torso_link 为例,V2.0 的 ixx 为 0.0690 kg·m²,而 V1.0 为 0.1415 kg·m²;两者之差约 0.0725,恰好等于 V1.0 质量 7.656 kg 乘以质心 Z 向偏移 0.096 m 的平方(7.656 × 0.096² ≈ 0.0706)。同样的规律在 left_thigh_pitch_link(V1.0 Ixx 0.1120 vs V2.0 0.0202,差值 ≈ 2.347 × 0.198² ≈ 0.0921)、left_knee_link、left_arm_yaw_link 等连杆上均得到验证。这意味着若直接将 V1.0 URDF 导入 Pinocchio、RBDL 或 MuJoCo 等动力学引擎,连杆的等效转动惯量会被显著高估,进而导致接触力、关节力矩与角加速度的仿真结果出现系统性偏差。V2.0 已修正此问题,其惯性张量严格遵循 URDF 规范——定义在由 <origin> 指定的质心坐标系中。
Sources: Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.urdf, roboto_origin.urdf
以下 Mermaid 图示阐明了 URDF 中三个关键坐标系的关系,以及 V1.0 与 V2.0 在惯性张量参考系选择上的本质区别。
graph LR
subgraph 连杆本体帧 Link Frame
O[Link Origin<br/>本体原点]
end
subgraph 惯性帧 Inertial Frame
C[COM<br/>质心]
end
subgraph 惯性张量定义
V2[I_about_COM<br/>V2.0 正确]
V1[I_about_Origin<br/>V1.0 偏差]
end
O -- origin xyz --> C
C -- 正确做法 --> V2
O -- 错误做法 --> V1
style V1 fill:#faa,stroke:#f66
style V2 fill:#afa,stroke:#6f6
关键连杆参数对比
以下表格按身体部位汇总了 V1.0 与 V2.0 中代表性连杆的质量、质心位置与主惯性矩。为控制篇幅,对角惯量 ixx/iyy/izz 保留六位有效数字,交叉项因数值极小且对整体动力学影响有限而省略展示。
基座与躯干
| 连杆 | 版本 | 质量 (kg) | 质心 X (m) | 质心 Y (m) | 质心 Z (m) | ixx (kg·m²) | iyy (kg·m²) | izz (kg·m²) |
|---|---|---|---|---|---|---|---|---|
base_link |
V1.0 | 5.380 | -0.048747 | -0.000095 | -0.011341 | 0.028035 | 0.026061 | 0.037746 |
base_link |
V2.0 | 5.513 | -0.047008 | -0.000002 | -0.008628 | 0.030526 | 0.015362 | 0.030062 |
torso_link |
V1.0 | 7.656 | -0.002312 | -0.000092 | 0.096196 | 0.141497 | 0.128902 | 0.039837 |
torso_link |
V2.0 | 7.582 | -0.002348 | -0.000005 | 0.098445 | 0.069041 | 0.056795 | 0.038886 |
基座质量在两版之间几乎持平(约 5.5 kg),但 V2.0 的 iyy 显著降低,表明其腰部结构在前后方向的质量分布更贴近质心。躯干的 ixx 与 iyy 差异最为刺眼:V1.0 的数值约为 V2.0 的两倍有余,这正是平行轴定理偏差的直接体现。若将 V2.0 的躯干惯量通过平行轴定理平移至本体原点,可得到约 0.139 kg·m²,与 V1.0 的 0.141 kg·m² 高度吻合。
Sources: Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.urdf, roboto_origin.urdf
下肢关键连杆(左腿)
| 连杆 | 版本 | 质量 (kg) | 质心 Z (m) | ixx (kg·m²) | iyy (kg·m²) | izz (kg·m²) |
|---|---|---|---|---|---|---|
left_thigh_yaw_link |
V1.0 | 1.702 | -0.057289 | 0.007321 | 0.009036 | 0.003309 |
left_thigh_yaw_link |
V2.0 | 1.718 | -0.056123 | 0.003198 | 0.002441 | 0.002517 |
left_thigh_pitch_link |
V1.0 | 2.347 | -0.198455 | 0.111978 | 0.112313 | 0.002432 |
left_thigh_pitch_link |
V2.0 | 2.346 | -0.198581 | 0.020190 | 0.021588 | 0.003029 |
left_knee_link |
V1.0 | 1.790 | -0.145540 | 0.050390 | 0.049871 | 0.001463 |
left_knee_link |
V2.0 | 1.702 | -0.152083 | 0.010135 | 0.009820 | 0.001101 |
left_ankle_roll_link |
V1.0 | 0.320 | -0.029605 | 0.000402 | 0.000892 | 0.000655 |
left_ankle_roll_link |
V2.0 | 0.335 | -0.029086 | 0.000134 | 0.000543 | 0.000589 |
下肢是偏差最集中的区域。大腿俯仰连杆(thigh_pitch_link)与膝关节连杆(knee_link)的 ixx/iyy 在 V1.0 中达到了 V2.0 的 5 倍以上,而 ankle 连杆因质心接近本体原点,平行轴效应较弱,偏差相对较小。值得注意的是,left_ankle_pitch_link 在两版中采用了完全一致的简化参数(质量 0.084 kg,对角惯量 8.63×10⁻⁶ kg·m²),说明该连杆为几何占位符,其惯性由设计者手工设定而非 SolidWorks 导出。
Sources: Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.urdf, roboto_origin.urdf
上肢关键连杆(左臂)
| 连杆 | 版本 | 质量 (kg) | 质心 Z (m) | ixx (kg·m²) | iyy (kg·m²) | izz (kg·m²) |
|---|---|---|---|---|---|---|
left_arm_pitch_link |
V1.0 | 0.481 | 0.000138 | 0.001385 | 0.000124 | 0.001420 |
left_arm_pitch_link |
V2.0 | 0.473 | 0.000000 | 0.000156 | 0.000082 | 0.000189 |
left_arm_yaw_link |
V1.0 | 1.150 | -0.105785 | 0.019242 | 0.019207 | 0.000403 |
left_arm_yaw_link |
V2.0 | 1.153 | -0.106159 | 0.006196 | 0.006158 | 0.000331 |
left_elbow_yaw_link |
V1.0 | 0.680 | 0.000032 | 0.000281 | 0.003260 | 0.003262 |
left_elbow_yaw_link |
V2.0 | 0.681 | -0.000020 | 0.000245 | 0.001326 | 0.001326 |
上肢的轻量化改进在 V2.0 中体现得尤为明显。left_arm_pitch_link 的 ixx 从 0.001385 骤降至 0.000156(降幅约 89%),说明 V2.0 对手臂根部结构进行了大幅减重与质量集中化设计。left_elbow_yaw_link 的 iyy 与 izz 也缩减至 V1.0 的 40% 左右,这意味着末端执行器在偏航方向的等效转动惯量显著降低,有利于提升手臂响应速度与降低肘关节电机的负载。
Sources: Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.urdf, roboto_origin.urdf
质量分布与对称性分析
将全机 24 个连杆的质量按身体区域聚合,可得两版模型的总质量与分布特征。单腿(6 连杆)在 V1.0 中约为 7.95 kg,V2.0 约为 7.85 kg;单臂(5 连杆)在 V1.0 约为 2.52 kg,V2.0 约为 2.48 kg。全机总质量两版基本持平,均约为 33.7–34.0 kg。这意味着 V2.0 的机械优化并非单纯追求减重,而是通过重新分配材料、引入镂空结构与优化电机支架布局,将质量向关节驱动轴线集中,从而降低了等效转动惯量。
| 身体区域 | V1.0 质量 (kg) | V2.0 质量 (kg) | 变化趋势 |
|---|---|---|---|
| 基座 (base_link) | 5.38 | 5.51 | 基本持平 |
| 躯干 (torso_link) | 7.66 | 7.58 | 基本持平 |
| 单腿 (6 连杆) | ~7.95 | ~7.85 | 略降 |
| 单臂 (5 连杆) | ~2.52 | ~2.48 | 略降 |
| 整机合计 | ~34.0 | ~33.7 | 基本持平 |
对称性方面,V2.0 展现出严格的左右镜像一致性:左腿与右腿、左臂与右臂的同名连杆在质量与质心坐标上完全对称(Y 坐标取反),交叉惯量项 ixy/iyz 也呈精确的符号镜像。V1.0 则存在轻微的不对称,例如 left_thigh_yaw_link 质量为 1.702 kg,而 right_thigh_yaw_link 为 1.686 kg;左臂与右臂的 arm_roll_link 与 elbow_pitch_link 质量也存在约 2% 的差异。这种不对称源于 V1.0 的 SolidWorks 装配体中左右件可能使用了略微不同的简化模型或材料赋值,而 V2.0 通过标准化的参数化建模消除了此类不一致。
Sources: Atom01_urdf.urdf, roboto_origin.urdf, Atom01_urdf.urdf, roboto_origin.urdf
对仿真与控制的动力学影响
惯性参数的偏差与优化对后续算法开发有多方面的实际影响。首先,基于 V1.0 URDF 的动力学仿真会系统性地高估关节所需力矩。以单腿摆动相为例,大腿俯仰连杆的等效转动惯量若被高估 5 倍,根据 τ = Iα,在相同角加速度指令下,仿真输出的关节力矩需求将远超实际电机能力(80 N·m),导致控制器在实机部署时出现力矩饱和与跟踪误差。其次,V2.0 中手臂惯量的显著降低直接改善了上肢的敏捷性,对于需要快速摆臂维持平衡的双足行走控制(Angular Momentum Regulation)而言,更低的臂部惯量意味着更小的 torso 反作用力矩,从而降低了腰部电机的补偿负担。
此外,V2.0 基座 base_link 的 iyy 从 0.0261 降至 0.0154(降幅 41%),表明骨盆结构在俯仰方向的集中质量更少。这一变化对线性倒立摆(LIPM)模型的质心高度估计与角动量计算具有直接影响:在推导全身动力学模型时,建议以 V2.0 参数为基准重新标定质心轨迹规划中的惯性耦合项。
Sources: roboto_origin.urdf, Atom01_urdf.urdf, roboto_origin.urdf
读取与使用建议
对于计划在 PyBullet、MuJoCo、Drake 或 ROS2/Gazebo 中加载本 URDF 的高级开发者,建议遵循以下原则以充分利用惯性数据并规避潜在陷阱。
第一,优先使用 V2.0 URDF 进行任何新的动力学仿真或控制算法开发。V2.0 不仅修正了 V1.0 的参考系偏差,还在碰撞体简化(大腿与小腿的包围盒、手臂的圆柱体近似)上提供了更合理的几何代理,可直接用于接触动力学仿真。第二,若因历史原因必须基于 V1.0 开展工作,应对存在大质心偏移的连杆(如 thigh_pitch_link、knee_link、arm_yaw_link、torso_link)手动修正惯性张量:利用平行轴定理,将 V1.0 的惯性值减去 m·d²(其中 d 为质心到本体原点的欧氏距离),得到关于质心的真实惯量后再填入 URDF。第三,在读取 URDF 时,务必确认所使用的解析器(如 urdfdom、yourdfpy、pinocchio::urdf)对 <inertial> 块的语义实现符合 ROS/URDF 官方规范,即 <origin> 描述的是惯性坐标系(质心坐标系)相对于连杆本体的位姿,而 <inertia> 必须定义在该惯性坐标系中。
Sources: Atom01_urdf.urdf, roboto_origin.urdf, roboto_origin.urdf
后续阅读建议
掌握连杆的惯性参数与质量属性后,建议继续深入以下主题,以形成从几何模型到动力学控制的完整知识闭环:
- URDF 模型结构与关节配置 — 回顾 24 连杆的拓扑树、关节轴向与限位,理解惯性参数如何在运动链中逐层传递。
- 仿真环境接入与开发指南 — 学习如何将修正后的 URDF 加载到主流仿真器中,并基于真实惯量编写站立与行走控制器。
- V2.0 机械结构设计原理 — 从机械设计角度理解 V2.0 如何通过结构镂空与材料替换实现手臂与躯干的惯量优化。
- 电机与主控板适配说明 — 了解 URDF 中的
effort与velocity限制如何与实机电机选型及惯性负载匹配。