【ROS】古月《ROS机器人开发实践》第6章-1_学习URDF文件
一、什么是URDF
1、URDF(Unified Robot Description Format):统一机器人描述格式
URDF格式的文件可以创建机器人模型,使用xml格式的标记语言对机器人的关节、连杆、外观、属性等进行描述,然后在仿真环境中将机器人模型展现出来。
2、相关标签
<robot> 标签 | 是机器人模型的根标签,<link>、<joint>标签都要包含在<robot>标签中 |
---|---|
<link>标签 | 用来描述机器人某个刚体(连杆)部分的外观和物理属性 |
<joint>标签 | 用来描述机器人某个关节的运动学和动力学属性 |
<gazebo>标签 | 用来描述机器人模型在Gazebo中仿真所需要的参数 |
二、自己对URDF文件的一些理解
- 在rviz界面中存在一个世界坐标系,是固定不动的,是整个机器人模型的起点。
- 在界面中,坐标系代表关节(joint),显示出来的实体代表刚体(link)。(其中坐标系是由红 绿 蓝 3个直线段两两垂直组成的,红色代表x轴,绿色代表y轴,蓝色代表z轴)
- 创建link:创建link时的 起始坐标(origin) 是相对于与其父link连接的joint的坐标系而言的。(第一个link除外,第一个link的起始坐标是相对于世界坐标系而言的)
- 创建joint:创建joint时的 起始坐标(origin) 是相对于上一个joint的坐标系而言的。
- 子link与joint之间是固接 (固定连接) 的,会随着joint的转动(移动)而转动(移动)。
- 坐标系代表joint,但是界面中会多出一个坐标系,多出来的那个坐标系便是世界坐标系(可以理解成是世界坐标系(parent)与第一个link(child)之间的joint,只不过该joint坐标系与世界坐标系重合,且类型为固定不动(fixed))
三、解读代码
以古月《ROS机器人开发实践》第6章的mrobot_chassis.urdf文件为例,学习一下URDF文件。
1、首先是第一行,用来声明该文件使用XML描述。
<?xml version="1.0" ?>
2、整个机器人模型都包含在<robot>标签当中。name属性是该机器人模型的名字。
<robot name="mrobot_chassis">
...
</robot>
3、<robot>标签下包含了<link>和<joint>两个子标签,分别用来定义连杆和关节。
<link name="base_link">
<visual>
<origin xyz=" 0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="0.005" radius="0.13"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 0.5"/>
</material>
</visual>
</link>
首先是<link>元素,<link>下的<visual>标签用来定义连杆的外形。其中
<origin> :设置连杆的起始坐标,xyz单位为m,角度单位为弧度制;
<geometry>:定义连杆的几何外形;
<cylinder>:圆柱型,以m为单位,z轴方向为轴向,x、y轴方向为径向;
<material>下的子标签<color>:定义外观的颜色,rgb为三原色,a为透明度,都是归一化单位(0-1)。
<joint name="base_left_motor_joint" type="fixed">
<origin xyz="-0.055 0.075 0" rpy="0 0 0" />
<parent link="base_link"/>
<child link="left_motor" />
</joint>
然后是<joint>元素,name属性定义关节名字,type属性定义关节的类型,描述关节是如何运动的。
<origin>:设置关节的起始坐标,xyz单位为m,角度单位为弧度制;
<parent >:定义关节的父link;
<child>:定义关节的子link;
<axis>:如果是转动关节,则是设置绕哪个轴转动,置1的轴为转动轴。因为是固定关节,所以上述代码没有该标签。
关节的类型有以下6种:
四、在rviz中显示模型
使用launch文件:
<param name="robot_description" textfile="$(find mrobot_description)/urdf/mrobot_chassis.urdf" />
在参数服务器中设置一个名为robot_description的变量,保存了mrobot_chassis.urdf文件的路径。
<param name="use_gui" value="true"/>
在参数服务器中设置一个名为use_gui的变量,值为"true",显示关节控制插件。
<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
运行joint_state_publisher_gui节点,发布机器人的关节状态 。
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
运行robot_state_publisher节点,发布TF。
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mrobot_description)/config/mrobot_urdf.rviz" required="true" \>
运行rviz可视化界面。
参考:
古月居《ROS机器人开发实践》