提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
编写urdf的工作空间需要导入urdf xacro这两个依赖
如果使用gazebo还需要导入gazebo_ros gazebo_ros_control gazebo_plugins
一、一个简单的urdf展示
下面展示一个盒子的模型,直接运行可在rviz
新建文件 1.urdf
<robot name="box">
<!--建立基础杆件-->
<link name="base_link">
<!--子级编寫-->
<visual>
<!--盒子的基础属性-->
<geometry>
<!--盒子的大小-->
<box size="0.5 0.2 0.1" />
</geometry>
<!--盒子的颜色-->
<material name="white">
<!--前三个是 red green blue 最后后一个是透明度-->
<color rgba="1 1 1 1" />
</material>
<!--盒子的位置和偏转-->
<origin xyz="0 0 0" rpy="0 0 0" />
</visual>
</link>
</robot>
新建文件 1.launch
<launch>
<!--載入urdf文件-->
<param name="robot_description" textfile="$(find urdf01)/urdf/urdf/w_1.urdf" />
<!--起動rviz-->
<node pkg="rviz" type="rviz" name="rviz"/>
</launch>
二、urdf文件基本结构的分析
robot
最大的父级标签
<robot name="box">
~
</robot>
link
杆件
杆件的大部分属性都在这里编辑
<robot name="box">
<link name="base_link">
~
</link>
</robot>
visual
杆件的大部分属性都在这里编辑
<robot name="box">
<link name="base_link">
<visual>
~
</visual>
</link>
</robot>
geometry
<geometry>
<!--盒子-->
<!--box size="0.1 0.1 0.1"-->
<!--球体-->
<sphere radius="0.1">
<!--圆柱-->
<cylinder redius="0.1" length="0.1">
</geometry>
material
<material name="white">
<color rgba="1 1 1 1">
</material >
origin
<origin xyz="0 0 0" rpy="0 0 0">
joint
这是例子中没有给出来的部分,意思是关节,需要有两个及以上的link才能添加
<joint name="joint2" type="fixed">
<parent link="base_site" />
<child link="site"/>
<origin xyz="0 0 0" rpy="0 0 0" />
<axis xyz="0 1 0/>
</joint>
-
joint–type
-
continuous 单轴无限旋转
revolute 有限制的旋转
prismatic 有限制的平移
planer 在正交面上旋转平移
floating 可以平移和旋转
fixed 固定关节
joint–parent
- 父关节 joint–child
- 子关节 joint–axis
- 旋转轴
三.编写进阶-gazebo
新建一个urdf文件2.urdf
还是刚才的盒子
<robot name="box">
<!--建立基础杆件-->
<link name="base_link">
<!--子级编寫-->
<visual>
<!--盒子的基础属性-->
<geometry>
<!--盒子的大小-->
<box size="0.5 0.2 0.1" />
</geometry>
<!--盒子的颜色-->
<material name="white">
<!--前三个是 red green blue 最后后一个是透明度-->
<color rgba="1 1 1 1" />
</material>
<!--盒子的位置和偏转-->
<origin xyz="0 0 0" rpy="0 0 0" />
</visual>
<!--碰撞属性-->
<collision>
<geometry>
<box size="0.1 0.1 0.1">
</geometry>
</conision>
<inertial>
<origin rpy="0 0 0" xyz="0 0 0"/>
<!--质量-->
<mass value="1"/>
<inertia ixx=" " ixy=" " ixz=" " iyy=" " iyz=" " izz=" "/>
</intertial>
</link>
</robot>
现在我们给这个盒子添加了新的属性
<!--碰撞属性-->
<collision>
<geometry>
<box size="0.1 0.1 0.1">
</geometry>
</conision>
<inertial>
<origin rpy="0 0 0" xyz="0 0 0"/>
<!--质量-->
<mass value="1"/>
<inertia ixx=" " ixy=" " ixz=" " iyy=" " iyz=" " izz=" "/>
</intertial>
这里我们重点关注inertial>inertia中的6个参数
这是这个盒子的惯性矩阵,需要我们进行计算
假定质量为m
为写出的即为0
-
圆柱
- ixx: 1 / 12 m ( 3 r 2 + h 2 ) 1/12m(3r^2+h^2) 1/12m(3r2+h2)
- iyy: 1 / 12 m ( 3 r 2 + h 2 ) 1/12m(3r^2+h^2) 1/12m(3r2+h2)
-
izz:
1
/
2
m
3
1/2m^3
1/2m3
r为半径
h为高
长方体
- ixx: 1 / 12 m ( d 2 + h 2 ) 1/12m(d^2+h^2) 1/12m(d2+h2)
- iyy: 1 / 12 m ( w 2 + d 2 ) 1/12m(w^2+d^2) 1/12m(w2+d2)
-
izz:
1
/
12
m
(
w
2
+
h
2
)
1/12m(w^2+h^2)
1/12m(w2+h2)
w 宽度
h 高度
d 深度
球体
- ixx: 2 / 5 m r 2 2/5mr^2 2/5mr2
- iyy: 2 / 5 m r 2 2/5mr^2 2/5mr2
-
izz:
2
/
5
m
r
2
2/5mr^2
2/5mr2
r 半径
完结撒花!