机器人统一描述格式urdf
urdf介绍
Unified Robot Description Format, 统一机器人描述(URDF)是种用于描述机器人机器结构, 关节, 自由度等的xml格式文件
ROS中的urdf功能包包含一个URDF的C++解析器, URDF文件使用XML格式描述机器人模型
URDF语法规范见:
http://wiki.ros.org/urdf/XML
urdf中机器人创建以树的格式
1 | <robot name="test_robot"> |
urdf文件编写
常见标签
- link标签
标签 | 功能 |
---|---|
连接的可视化, 碰撞和惯性属性设置 | |
设置连接的可视化属性 | |
设置连接的碰撞计算属性 | |
设置连接的惯性属性 | |
输入模型的形状; 提供box, cylinder(圆柱), sphere(球体)等形态 | |
设置相对于连接相对坐标系的移动和旋转 | |
设置连接的颜色和纹理 | |
连接重量(单位: kg)的设置 |
- joint标签
标签 | 功能 |
---|---|
与连接的关系和关节类型的设置 | |
关节的父连接 | |
关节的子连接 | |
将父连接坐标系转换为子连接坐标系 | |
设置旋转轴 | |
设置关节的速度, 力和半径(仅当关节是revolutei(后旋的)或prismatic(棱柱)时) |
- transmission标签
<transmission>
是与ROS-CONTROL一起运行所必须的标签, 它输入关节与舵机之间的命令接口
标签 | 功能 |
---|---|
设置关节和舵机之间的变量 | |
设置力的传递方式的形状 | |
设置关节信息设置 | |
设置硬件接口 | |
设置舵机信息 | |
设置舵机与关节之间的齿轮比 |
物理属性与碰撞属性
如果想要在gazebo或者其他仿真软件上进行机器人仿真, 就需要添加物理属性和碰撞属性
这意味着我们需要设定几何尺寸来计算可能的碰撞, 例如设定重量我们才能够计算惯性等
需要保证模型文件中的所有连接都有这些参数, 否则就无法对这些机器人进行仿真
要为所有连接添加collision
和inertial
属性, 因为如果不这样做, gazebo将无法使用这些模型
1 | <link name="base_link"> |
3D可视化与仿真
1 | <launch> |
运行launch文件, 启动rviz查看自己创建的模型
检查urdf文件语法是否有误
check_urdf smartcar.urdf
查看检查urdf模型的整体结构
urdf_to_graphiz robot.urdf
使用xacro优化urdf
xacro介绍
xacro是一种宏语言(macro language)
xacro程序(xacro program)运行所有宏并输出结果
xacro作用:
- 精简模型代码: 创建宏定义, 文件包含
- 提供可编程接口: 常量, 变量, 数学计算, 条件语句
xacro使用
- 常量
常量定义
<xacro:property name="M_pi" value="3.14159"/>
常量使用<origin xyz="0 0 0" rpy="${M_PI/2} 0 0" />
类似于C语言中的宏定义, 在头部定义, 如
<xacro:property name="WIDTH" value="0.2" />
, 以${WIDTH}
的方式进行使用
经常会看到的一个常量定义,<property name="prefix" value="my_" />
, 后面关节名字就可以类似的进行更新<joint name="${prefix}joint" type="revolute" />
- 数学计算
<origon xyz="0 ${(motor_length+wheel_length)/2} 0" rpy="0 0 0" />
所有数学计算都会转换成浮点数运行
- 宏定义
1 | <xacro:macro name="default_origin"> |
1 | <xacro:macro name="default_link" params="prefix"> |
不单由这样简单的参数, 还可以使用块参数
- 文件包含
很多模型都是以宏的形式进行定义, 并以最小集团分成很多个文件
而最终的机器人描述就变得非常简单了
<xacro:include filename="$(find mbot_description)/urdf/xacro/mbot_base.xacro" />
- 显示xacro文件的方法
方法1:
将.xacro文件转化成urdf文件:xacro --inorder model.xacro > model.urdf
1 | <!--调用解析器--> |