机器人建模

URDF

为了在仿真软件里面加载机器人本体,我们通常需要对机器人进行建模。而ROS及一些仿真软件通常使用URDF(Unified Robot Description Format)格式的文件来对机器人建模

URDF是一种基于XML的机器人模型描述格式,主要用于定义机器人的连杆(links)、关节(joints)、几何形状和物理属性

基本结构

URDF文件以<robot>为根标签,包含<link>(描述刚体)和<joint>(描述连接关系)两类核心标签

1
2
3
4
5
6
7
<?xml version="1.0"?>
<robot name="my_robot">
<!-- 定义连杆 -->
<link name="base_link">...</link>
<!-- 定义关节 -->
<joint name="joint_1" type="revolute">...</joint>
</robot>

常用标签

在进行运动学和动力学仿真时,所需要的子标签不完全相同。如果仅进行运动学仿真,则不需要碰撞、摩擦、质量等子标签

robot

作为一个urdf的根标签,全局只有一个

描述机器人的一个刚体部件(如底座、轮子、传感器等)

子标签 作用 关键属性/子标签
<visual> 定义部件的可视化外观(形状、颜色、材质等) - <geometry>:形状(<box><cylinder><sphere><mesh>) - <origin>:偏移和旋转(xyzrpy) - <material>:颜色(rgba
<collision> 定义部件的碰撞几何体(用于物理仿真) <visual>类似,但通常更简化以提高性能
<inertial> 定义部件的质量、质心和惯性矩阵(动力学仿真必需) - <mass>:质量(value) - <inertia>:惯性矩阵(ixxixy等) - <origin>:质心位置

joint

描述2个连杆间的连接关系

子标签 作用 关键属性/子标签
<parent> 指定父<link>的名称(必需) link:父链接名称
<child> 指定子<link>的名称(必需) link:子链接名称
<origin> 定义关节坐标系相对于父/子链接的偏移和旋转 xyz:平移偏移 rpy:旋转角度(弧度)
<axis> 定义关节的运动轴(如旋转轴或平移方向) xyz:轴方向向量(如 "1 0 0" 表示绕X轴旋转)
<limit> 设置关节的运动限制(如角度、速度、力矩) lower/upper:位置限制 effort:最大力矩 velocity:最大速度
<dynamics> 定义关节的物理特性(如阻尼、摩擦) damping:阻尼系数 friction:静摩擦系数
<safety_controller> 设置安全控制器参数(防止关节超限) soft_lower_limit/soft_upper_limit:软限制边界
<mimic> 使当前关节模仿另一个关节的运动(如机械臂的联动) joint:被模仿的关节名 multiplier:运动比例。

合法性检查

1
check_urdf xxxx.urdf

rviz可视化

在使用URDF文件定义好了机器人后,需要通过一些node间的通信机制把信息发给rviz节点,然后rviz在收到对应的信息后,就可以显示机器人了

URDF定义的机器人模型是静态的,如果要控制其移动,也需要发送某些预定的topic

用途 预定话题
(rviz)获取机器人 URDF 模型描述 /robot_description(存储 URDF/Xacro 的 XML 字符串)
(rviz)实时获取各连杆(<link>)的坐标系变换关系 /tf/tf_static(发布父子坐标系间的位姿)
(rviz)获取关节(<joint>)的实时角度/位置 /joint_states(由 joint_state_publisher 或控制器发布)

image-20250529192157705

image-20250529191756893

可以看到,rviz如果要显示机器人,主要依靠的是/robot_description话题,他是由robot_state_publisher功能包中的同名node发送的,所以我们要启动这个node才行

xacro