URDF文件
URDF
简介
- Unified Robot Description Format,统一机器人描述格式,简称为URDF
- ROS中的urdf功能包包含一个URDF的C++解析器,URDF文件使用XML格式描述机器人模型
解析
<robot>
介绍
- 完整机器人模型的最顶层标签
- <link>和<joint>标签都必须包含在<robot>标签内
- 一个完整的机器人模型,由一系列<link>和<joint>组成
例子:
<robot name="robot_name"> <link>......</link> <link>......</link> <joint>......</joint> <joint>......</joint> </robot>
<link>
属性
name
(必需):link的名字
介绍
- urdf 中的 link 标签用于描述机器人某个部件(也即刚体部分)的外观和物理属性,比如:机器人底座、轮子、激光雷达、摄像头...每一个部件都对应一个 link, 在 link 标签内,可以设计该部件的形状(shape)、尺寸(size)、颜色(color)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等一系列属性
子标签
<visual>
:描述机器人link部分的外观参数<geometry>
:可视化对象的形状box
:矩形cylinder
:圆柱体sphere
:球体mesh
:网格,纹理(更为复杂的模型)
<origin>
:设置偏移量与倾斜弧度<material>
:可视化组件的材料color
:颜色
<texture>
:材料属性(纹理)
<inertial>
:描述link的惯性参数<origin>
:定义连杆质心坐标<mass>
:连杆的质量<inertia>
:惯性张量
<collision>
:描述link的碰撞属性<origin>
:碰撞组件的参考坐标系相对于连杆坐标系的参考坐标系<geometry>
:与上述geometry元素描述相同
例子:
<link name="my_link"> <inertial> <origin xyz="0 0 0.5" rpy="0 0 0"/> <mass value="1"/> <inertia ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <box size="1 1 1" /> </geometry> <material name="Cyan"> <color rgba="0 1.0 1.0 1.0"/> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <cylinder radius="1" length="0.5"/> </geometry> </collision> </link>
<joint>
介绍
- urdf 中的 joint 标签用于描述机器人关节的运动学和动力学属性,还可以指定关节运动的安全极限,机器人的两个部件(分别称之为 parent link 与 child link)以"关节"的形式相连接,不同的关节有不同的运动形式::旋转、滑动、固定、旋转速度、旋转角度限制等等,比如:安装在底座上的轮子可以360度旋转,而摄像头则可能是完全固定在底座上
- joint标签对应的数据在模型中是不可见的
属性
<name>
(必需):指定joint的名字(唯一的)type
(必需):指定joint的类型,有下列几种:
关节类型 | 描述 |
---|---|
continuous | 旋转关节,可以绕单轴无限旋转 |
revolute | 旋转关节,类似于 continues,但是有旋转角度限制 |
prismatic | 滑动关节,可以沿着一个轴滑动,有最大值和最小值限制 |
planer | 平面关节,允许在平面正交方向上平移或旋转 |
floating | 浮动关节,允许进行平移、旋转运动 |
fixed | 这不是一个实际的关节,因为它无法运动,所有的自由度都被锁定。这种类型的关节不需要指定轴、动力学特征、标度和最大值最小值限制 |
子标签
<parent>
:parent link的名字是一个强制的属性,是这个link在机器人结构树中的名字。 可以理解为parent是主体,child是固定在主体上的配件<child>
:child link的名字,是这个link在机器人结构树中的名字<origin>
:从parent link到child link的变换,joint位于child link的原点<calibration>
:关节的参考位置,用来校准关节的绝对位置rising
:当joint正向运动时,参考点会触发一个上升沿falling
:当joint正向运动时,参考点会触发一个下降沿
<axis>
:设置围绕哪个关节轴运动<dynamics>
:描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到damping
:joint的阻尼值friction
:joint的摩擦力值
<limit>
:描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等lower
:指定joint运动范围下界的属性,连续型的joint忽略该属性upper
:指定joint运动范围上界的属性,连续型的joint忽略该属性effort
:该属性指定了joint运行时的最大的力velocity
:该属性指定了joint运行时的最大的速度
<mimic>
:指定该joint来模仿已存在的jointjoint
:需要模仿的joint的名字multiplier
:指定上述公式中的乘数因子offset
:指定上述公式中的偏移项,默认值为0
<safety_controller>
:描述安全控制器参数soft_lower_limit
:该属性指定了joint安全控制边界的下界,是joint安全控制的起始限制点,默认为0soft_upper_limit
:该属性指定了joint安全控制边界的上界,是joint安全控制的起始限制点,默认为0k_position
:本属性用于说明位置和速度之间的关系k_velocity
:本属性用于说明力和速度之间的关系
例子:
<joint name="my_joint" type="floating"> <origin xyz="0 0 1" rpy="0 0 3.1416"/> <parent link="link1"/> <child link="link2"/> <axis xyz="0 0 1" /> <calibration rising="0.0"/> <dynamics damping="0.0" friction="0.0"/> <limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" /> <safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" /> </joint>
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现