基础知识
urdf
URDF :Unified Robot Description Format 统一机器人描述格式
urdf是ros中非常重要的机器人模型描述格式,可以解析URDF文件中使用XML格式描述的机器人模型,主要包含link和joint自身及相关属性的描述信息
robot
完整机器人模型的最顶层标签,link和joint标签都必须包含在robot标签内,一个完整的机器人模型,由一系列的link和joint组成
link
- 描述机器人某个刚体部分的外观和物理属性;
- 描述连杆尺寸(size)颜色(color)形状(shape)惯性矩阵(inertial matrix)碰撞参数(collision properties)
- 每个link都会成为一个坐标系
joint
- 描述两个link之间的关系,分为六种类型;
- 包括关节的位置和速度限制
- 描述机器人关节的运动学和动力学属性
关节类型 | 描述 |
---|---|
continuous | 旋转关节,可以围绕单轴无限旋转 |
revolute | 旋转关节,但是有旋转的角度极限 |
prismatic | 滑动关节,沿某一轴线移动的关节,带有位置极限 |
fixed | 固定关节,不允许运动的特殊关节 |
floating | 浮动关节,不允许进行平移、旋转运动 |
planar | 平面关节,允许在平面正交方向上平移或者旋转 |
从零手写移动机器人URDF模型
以下代码在使用中需要将中文注释去除,下面的注释为了便于理解
<?xml version="1.0"?>
<robot name="mbot">
<!-- ///
COLOR定义颜色 /-->
<material name="Black">
<color rgba="0 0 0 1"/>
</material>
<material name="White">
<color rgba="1 1 1 0.95"/>
</material>
<material name="Blue">
<color rgba="0 0 1 1"/>
</material>
<material name="Yellow">
<color rgba="1 0.4 0 1"/>
</material>
<!-- // BASE -->
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry> <!--定义几何形状-->
<cylinder length="0.16" radius="0.20" /> <!--定义圆柱体的高度和半径-->
</geometry>
<material name="Yellow"/> <!--定义材质,特指颜色-->
</visual>
</link>
<!-- // WHEEL -->
<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/> <!--这里rpy的单位都是弧度 1.5707==90° 这里定义的是轮子相对于坐标系原点的距离-->
<geometry>
<cylinder length = "0.025" radius="0.06"/>
</geometry>
<material name="White"/>
</visual>
</link>
<joint name="left_wheel_joint" type="continuous"> <!--type代表其活动性质-->
<origin xyz="0 0.19 -0.05" rpy="0 0 0"/> <!--轮子坐标系相对于base_link的偏移-->
<parent link="base_link"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/> <!--定义其相对于那个轴做运动-->
</joint>
<!-- // CASTER 创建支撑 -->
<link name="front_caster_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.015"/> <!--创建球形-->
</geometry>
<material name="Black"/>
</visual>
</link>
<joint name="front_caster_joint" type="fixed">
<origin xyz="0.18 0 -0.095" rpy="0 0 0"/> <!--0.095=0.08(底座高度的一半)+0.015(球形的直径)此时球距离底盘是有半个球形的距离-->
<parent link="base_link"/>
<child link="front_caster_link"/>
</joint>
<link name="back_caster_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.015"/>
</geometry>
<material name="Black"/>
</visual>
</link>
<joint name="back_caster_joint" type="fixed">
<origin xyz="-0.18 0 -0.095" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="back_caster_link"/>
</joint>
<!-- // LASER -->
<link name="laser_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder length = "0.04" radius="0.04"/>
</geometry>
<material name="Black"/>
</visual>
</link>
<joint name="laser_joint" type="fixed">
<origin xyz="0 0 0.1" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="laser_link"/>
</joint>
<!-- // KINECT -->
<link name="kinect_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 1.5707"/>
<geometry>
<!--这里通过添加模型的方式,进行构建,导入dae模型还需要有对应的jpg和tga文件,才会更加逼真-->
<mesh filename="package://mbot_description/meshes/kinect.dae"/>
</geometry>
<material name="Black"/>
</visual>
</link>
<joint name="kinect_joint" type="fixed">
<origin xyz="0.15 0 0.1" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="kinect_link"/>
</joint>
</robot>
常用命令
检查urdf模型整体结构
urdf_to_graphiz <urdf文件>
执行完该命令之后,会在文件夹下,生成.gv和.pdf两个格式的文件,打开pdf后缀的文件,我们就可以看到整个urdf文件的结构
检查urdf语法
check_urdf <urdf文件>
该命令在urdf文件所在位置执行,或者后面加上urdf所在路径,会对urdf文件的语法进行检查