了解URDF文件
注意路径package://dobot_rviz/meshes/cr10/Link1.STL,在Isaac Sim中,如果不能解析package://,需要换成本地真实路径。关节自身不包含外观/碰撞/惯性,这些都定义在相应的link里。可以将URDF理解为机器人的“3D蓝图”,各类仿真器(Isaac Sim、Gazebo、MoveIt、ROS控制器等)都可以基于URDF生成机器人模型。用于表示两个
在Isaac Sim中,机器人模型通常使用USD格式文件。而我手上的CR10AF机械臂模型目前只有URDF格式,因此在导入前,需要将URDF转换为USD。在转换之前,需要先弄清楚URDF文件是什么,究竟包含了哪些信息。
一、准备工作
在后续示例中,我使用的机器人模型是越疆CR10AF六自由度机械臂,是越疆CRA系列的一款工业级协作机器人。CR10AF与CR10外形和参数完全一致,只是CR10AF多了力控模块。因此厂家提供的ROS2支持包中仅包含CR10的文件,但CR10AF也可直接使用这些文件。
产品官网:越疆CRAF力控系列协作机器人-人机协作机器人-DOBOT越疆科技
ROS2支持包:https://github.com/Dobot-Arm/DOBOT_6Axis_ROS2_V4

基础参数:
- 自由度:6轴
- 最大工作半径:1300mm
- 最大负载:10kg
- 重复定位精度:±0.03mm
- 重量:约40.5kg
- 通信接口:支持ROS2,通过厂家提供的ROS2包可获取URDF、MoveIt配置等资源
厂家提供了CR10AF的完整URDF文件及配套资源包,其中包含:
- 机械臂的网格模型(STL/DAE)
- 关节和连杆的参数定义
- 运动学与动力学配置
- MoveIt规划组及控制配置
这些文件将在本项目中用于在Isaac Sim中导入并转换为USD格式,以便在Isaac Lab环境中配置强化学习任务并进行训练。
二、URDF是什么
URDF(Unified Robot Description Format)是一种XML格式的机器人描述文件,主要描述:
- 机器人结构:有哪些零件(link)以及它们的连接方式(joint);
- 运动学信息:关节类型、旋转轴方向、位置与姿态;
- 动力学信息:质量、惯性矩阵、摩擦系数等;
- 外观:几何形状、颜色与材质;
- 碰撞模型:仿真中用于碰撞检测的几何体。
注意:URDF文件本身不包含控制算法、传感器驱动或运动规划等功能。这些功能需要由其他程序结合URDF来实现。
可以将URDF理解为机器人的“3D蓝图”,各类仿真器(Isaac Sim、Gazebo、MoveIt、ROS控制器等)都可以基于URDF生成机器人模型。
三、URDF的核心结构
几乎所有URDF都包含三种主要标签:<robot>、</link>、</joint>。
1.<robot>
顶层标签,包住所有link和joint,有一个name属性用于指定机器人名称,在ROS/仿真环境中作为命名空间。
2.<link>(连杆)
表示机器人一个刚体部分(机械臂的一节、底座、末端工具)。其定义内容包括:
惯性属性<inertial>:质量、惯性矩阵及质心位置。
外观<visual>:渲染时使用的外观模型;
碰撞形状<collision>:物理引擎进行碰撞检测时使用的几何体;
每个link都有自己的坐标系。
示例:
<link name="Link1">
<inertial>
<origin xyz="-1.6635E-06 -0.010819 0.0028389" rpy="0 0 0" />
<mass value="4.1649" />
<inertia
ixx="0.020714"
ixy="-1.9343E-07"
ixz="1.6036E-07"
iyy="0.018824"
iyz="-9.6731E-05"
izz="0.014575" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="package://dobot_rviz/meshes/cr10/Link1.STL" />
</geometry>
<material name="">
<color rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="package://dobot_rviz/meshes/cr10/Link1.STL" />
</geometry>
</collision>
</link>
该示例描述了CR10AF的连杆Link1。
(1)<inertial>表示连杆的惯性参数。origin表示质心位置相对于Link1原点的偏移(单位m),这里质心略微向y方向(-10.8mm)和z方向(+2.84mm)偏移;mass表示连杆的质量为4.1649kg;inertia是惯性张量,表示该部件对不同轴旋转的惯性阻力。
(2)<visual>表示连杆的外观模型。使用Link1.STL网格作为外观模型,颜色为白色。注意路径package://dobot_rviz/meshes/cr10/Link1.STL,在Isaac Sim中,如果不能解析package://,需要换成本地真实路径。
(3)<collision>表示连杆的碰撞模型。物理引擎用Link1.STL作为碰撞检测几何体。
3.<joint>(关节)
用于表示两个link之间的连接方式,并决定它们的相对运动方式(转动、滑动、固定),关节也是坐标系的转换点。
常见属性:
- type:关节类型(有限位旋转关节revolute、无限位旋转关节continuous、滑动关节prismatic、固定连接fixed);
- parent/child:父子link名;
- origin:关节位置与姿态(相对父link);
- axis:运动轴方向;
- limit:运动范围、最大速度、最大力矩。
示例:
<joint name="joint1" type="revolute">
<origin xyz="0 0 0.1765" rpy="0 0 0" />
<parent link="base_link" />
<child link="Link1" />
<axis xyz="0 0 1" />
<limit lower="-6.27" upper="6.27" effort="0" velocity="0" />
</joint>
该示例描述了CR10AF的关节joint1。
(1)<joint> / <origin> / <parent> / <child>:
type="revolute"表示该关节类型为有限位旋转关节;
origin xyz="0 0 0.1765"表示关节轴心位于父连杆(base_link)坐标系Z向上0.1765m;
<parent link>与<child link>指定该关节把base_link→Link1连接起来。关节自身不包含外观/碰撞/惯性,这些都定义在相应的link里。
(2)<axis xyz="0 0 1">表示关节绕关节坐标系的正Z轴旋转(右手法则确定正方向)。
(3)<limit lower="-6.27" upper="6.27" effort="0" velocity="0">:
表示该关节的角度范围为下限−6.27rad,上限+6.27rad,约为±359.4°(接近一整圈);
四、如何阅读URDF
以cr10_robot.urdf为例:
1.找robot名
<robot name="cr10_robot">
名字是cr10_robot,ROS/Isaac会用它做命名空间
2.列出所有link
base_link、link1~link6、dummy_link。
3.列出所有joint
joint1~joint6(旋转关节)、dummy_joint(固定关节)
4.绘制关节树(拓扑结构)
从base_link开始一路往下画:
base_link
└──joint1→link1
└──joint2→link2
└──joint3→link3
└──joint4→link4
└──joint5→link5
└──joint6→link6
└──dummy_joint→dummy_link
很显然,CR10AF的结构是串联6轴+一个末端工具位。
5.检查物理属性与mesh路径
- 质量与惯性矩阵是否合理
- package://dobot_rviz/meshes/...路径是否能正确找到STL文件
五、URDF自查要点
要检查一个URDF文件是否与真实机械臂结构一致,需要检查:
- 结构正确:关节数与实际一致,父子关系无环
- 物理属性合理:质量非零,惯性矩阵对称且正定
- mesh路径有效:本地能找到STL/DAE文件
- 限位合理:lower/upper与机械臂实际运动范围匹配
总之,URDF是机器人在仿真中的结构与物理蓝图;导入前务必核对网格路径(或配置package://)、尺度与惯性一致、关节限位与轴向正确。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)