URDF的相关知识
实践出真知
1、创建功能包
- 1、打开到工作空间的src目录下
ubuntu@ubuntu:~/catkin_ws/src$ cd ~/catkin_ws/src/
- 2、新建功能包
ubuntu@ubuntu:~/catkin_ws/src$ catkin_create_pkg learning_urdf urdf xacro
Created file learning_urdf/CMakeLists.txt
Created file learning_urdf/package.xml
Successfully created files in /home/ubuntu/catkin_ws/src/learning_urdf. Please adjust the values in package.xml.
- 其中urdf xacro是功能包的依赖包。
- 3、功能包内创建文件夹
ubuntu@ubuntu:~/catkin_ws$ cd ~/catkin_ws/src/learning_urdf/
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf$ ls
CMakeLists.txt package.xml
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf$ mkdir config launch meshes urdf
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf$ ls
CMakeLists.txt config launch meshes package.xml urdf
- urdf用在存放urdf或xacro的文件
- meshes:放置URDF中引用的模型渲染文件
- launch:保存相关启动文件
- config:保存rviz的配合文件
2、创建urdf文件
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf$ cd ~/catkin_ws/src/learning_urdf/urdf/
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/urdf$ touch mbot.urdf
3、编写urdf文件
3.1先创建个简单的车体底盘
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/urdf$ gedit mbot.urdf
- 一般的模板:
<?xml version="1.0" ?>
<robot name="xxx">
<link name="xxx">
</link>
<joint name="xxx" type="xxx">
</joint>
</robot>
- 首先需要声明文档使用的是XML语言编写,版本号为1.0是否可以进行增加和更改
- robot的标签就是需要编写的机器人的模型,标签都是有开头结尾。
- 在robot标签中可以增加一些link和joint。
- 在link和joint中可以对这个形状进行设置其属性和参数
<?xml version="1.0" ?>
<robot name="mrobot">
<link name="link1">
<!--intertial-->
<!--/intertial-->
<visual>
<origin xyz=" 0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="0.3" radius="0.20"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
<!--collision-->
<!--/collision-->
</link>
</robot>
- 仅描述了link,在link中省略了intertial和collision标签。降低建模的复杂度。
- intertial是用于描述link的惯性参数。
- collision是用于描述link的碰撞属性
- visual是用于描述机器人link外观,其中包含了origin(原点)、geometry(形状)、material(翻译是衣料感觉就是外观的颜色)
- origin(原点)可以设置xyz的坐标,同时可以设置是否进行变换(根据xyz进行旋转)
- geometry(形状)
-
- 有box一个立方体,size属性包含三维的长度,原点在立方体中心;
-
- cylinder一个圆柱体,需指定radius(半径)和length(高)属性,原点在圆柱体中心;
-
- sphere一个球体,需指定radius(半径)属性,原点在球体中心;
-
- mesh一个不规则网线图,通过元素filename指定网线图文件,可选的元素scale用来指定缩放,缩放的为网线图的轴对称边界框围成的立方体.虽然.stl文件格式也被支持,但是为了得到最好的质地和颜色,推荐使用Collada的.dae文件格式.不能在多个机器上使用同一个模型.必须使用本地文件
- material修改材料其中就是颜色,其中rgba就是红绿蓝透明度四个参数最大为1
3.2创建编写launch文件(启动)
ubuntu@ubuntu:~$ cd ~/catkin_ws/src/learning_urdf/launch/
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/launch$ touch show_mbot_urdf.launch
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/launch$ gedit show_mbot_urdf.launch
- 编写内容
<launch>
<param name="robot_description" textfile="$(find learning_urdf)/urdf/mbot.urdf" />
<param name="use_gui" value="true"/>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find learning_urdf)/config/mbot_urdf.rviz" required="true" />
</launch>
launch标签就是launch文件内容的开始和结束
param标签第一个意义是设置机器人的路径参数,会查找testfile的文件
第二个也是一个参数是是否使用GUI的一个工具参数
node标签是运行一个节点,启动固定工功能包下的某个节点。
joint_state_publisher是向外广播关节状态的值
robot_state_publisher是描述tf坐标系的
rviz是运行rviz的
其中里面有固定功能包的查找文件,需要对功能包进行编译。
ubuntu@ubuntu:~$ cd ~/catkin_ws/
ubuntu@ubuntu:~/catkin_ws$ catkin_make
- 运行urdf的功能包的launch文件
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/launch$ roslaunch learning_urdf show_mbot_urdf.launch
-
- 3)关闭之前的打开的rviz重新执行roslaunch learning_urdf show_mbot_urdf.launch 语句。
- 打开之后如图
-
- 如果里面没有robotmodel需要电机标号3的add进行添加。如果有的话,可能会像现在这样报错,将标号1的map修改成编写的文件的第一个link1就可以。就会显示urdf编写的模型。如图
-
- 为了避免下次打开需要重新对rviz里面进行配置,可以将配置进行保存成一个配置文件放在功能包中的config中。
-
- 按ctrl+shift+s进行另存为。找到路径,编写文件名,点击保存
- 按ctrl+shift+s进行另存为。找到路径,编写文件名,点击保存
- 颜色变化的快捷方式,可以将颜色定义放在前面对其进行表述,后面如果想使用某一个颜色直接调用名称就行。调用是和定义时的语法不一样,请详细对比。
<?xml version="1.0" ?>
<robot name="mrobot">
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
<material name="blue">
<color rgba="0 0 1 1"/>
</material>
<material name="red">
<color rgba="1 0 0 1"/>
</material>
<material name="green">
<color rgba="0 1 0 1"/>
</material>
<material name="white">
<color rgba="1 1 1 1"/>
</material>
<link name="link1">
<visual>
<origin xyz=" 0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="0.3" radius="0.40"/>
</geometry>
<material name="blue"/>
</visual>
</link>
<joint name="left_joint" type="continuous">
<origin xyz="0 0.4 -0.10" rpy="0 0 0"/>
<parent link="link1"/>
<child link="link_left"/>
<axis xyz="0 1 0"/>
</joint>
<link name="link_left">
<visual>
<origin xyz=" 0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.12" length = "0.05"/>
</geometry>
<material name="white"/>
</visual>
</link>
</robot>
- 上面代码中增加了一个关节joint 和一个link。其中joint的名称是left_joint(可自定义),类型是continuous可以旋转。
jonit的类型 | 含义 |
---|---|
continuous | 旋转关节,可以围绕单轴无线旋转 |
revolute | 旋转关节,类似continuous ,担忧旋转角度的极限 |
prismatic | 滑动关节,沿某一轴线移动,带有位置极限 |
planar | 平面关节,允许在平面正交方向上平移或旋转 |
floating | 浮动关节,允许进行平移,旋转运动 |
fixed | 浮固定关节,不允许运动的特殊关节 |
- parent 和child 是必须指定的属性,两个link进行连接。
- axis 是根据什么方向旋转。
- 通过滑动窗口关节的值可以使轮子进行旋转,如果旋转的物体不是小轮子而是圆柱体,将config的配置文件进行删除,重新打开就可以了。
- 如果轮子转的不明显可以添加一个tf坐标系。
如图
- 在增加一个右轮,简单的小车底盘就完成了,也可以自己增加万向轮或者其他的部件。
检测urdf文件
- 打开目录带到urdf文件下,输入指令检测urdf文件
ubuntu@ubuntu:~/catkin_ws$ cd ~/catkin_ws/src/learning_urdf/urdf/
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/urdf$ urdf_to_graphiz mbot.urdf
Created file mrobot.gv
Created file mrobot.pdf
生成两个文件可以查看其结构是否存在问题。