一,主要参考的几个网站。
http://blog.csdn.net/crazyquhezheng/article/details/42840955
这个里面讲了怎样写urdf对应的launch文件,以及建立小车的底板的urdf文件
http://blog.csdn.net/crazyquhezheng/article/details/42974817
这个讲了完整的小车的urdf文件。
学习到的东西:
<span style="font-size:18px;"><?xml version="1.0"?>
<robot name="sp1s">
<link name="base_link">
<visual>
<geometry>
<box size="0.27 .15 .003"/>
</geometry>
<material name="white">
<color rgba="1 1 1 .5"/>
</material>
</visual>
</link>
<link name="front_left">
<visual>
<geometry>
<cylinder length=".025" radius="0.034"></cylinder>
</geometry>
<material name="yellow">
<color rgba="1 1 0 1"/>
</material>
</visual>
</link>
<joint name="base_to_front_left" type="<span style="color:#FF0000;"><strong>continuous</strong></span>">
<origin rpy="1.57075 0 0" xyz="0.06 0.064 -0.011"/>
<parent link="base_link"/>
<child link="front_left"/>
<axis xyz="0 0 1"/>
</joint>
</robot></span>
其中
<link></link>
<script type="math/tex" id="MathJax-Element-1705">></script>之间的部分只是决定这个link的各种属性。
link可以指定许多属性:
<inertial>
<script type="math/tex" id="MathJax-Element-1706">
</script>定义惯性
<visual>
<script type="math/tex" id="MathJax-Element-1707">
</script>定义一个link的外观,大小,颜色和材质纹理贴图
<collision>
<script type="math/tex" id="MathJax-Element-1708">
</script>定义碰撞检测属性
我们详细看一下
<visual>
<script type="math/tex" id="MathJax-Element-1709">
</script>的定义:
<geometry>
<script type="math/tex" id="MathJax-Element-1710">
</script> 定义了几何形状为一个立方体,三个参数分别为长宽高,单位是米(m). 这里我们指定下层小车板子的板的尺寸。
<geometry>
<script type="math/tex" id="MathJax-Element-1711">
</script>可以有好几个选项:
<box>
<script type="math/tex" id="MathJax-Element-1712">
</script> 立方体
<cylinder>
<script type="math/tex" id="MathJax-Element-1713">
</script>圆柱体
<sphere>
<script type="math/tex" id="MathJax-Element-1714">
</script>球体
<material>
<script type="math/tex" id="MathJax-Element-1715">
</script> 指定颜色rgb和透明度a. 它们取值范围都是[0,1] 区间。
只有
<joint></joint>
<script type="math/tex" id="MathJax-Element-1716">
</script>之间的才是定义的两个link之间的位置关系。
1. 首先定义的是关节的类型,将joint的类型改为”continuous” ,设置的是两个关节之间的转动关系。还有“fixed”,就是表示第二个关节相对于第一个关节是不运动的。
2. 转动的位置就是由 origin定义的,它同时定义了tyer_front_left的原点,就是这个原先相对于上一个链接之间的关系。
pry 是分别以 x y z 轴为中心转动的角度(弧度制) 1.57075 就是90度。
3. axis重新定义转动轴在原点的方向,它是一个矢量,只指示方向,它们必须满足 x * x + y * y + z * z = 1,所以这里定义Z轴方向为转动方向。
二,我需要根据这个做的事情
1)我现在存在的问题是jaco2的urdf,和kinova ros package中调用的kinova API不能对应起来。我需要自己试图建立能够对应起来的urdf,从而检测我建立的urdf是否正确。就是在kinova-ros的kinova_description文件夹中建立一个新的urdf的文件,然后写一个新的launch的文件就可以。
2)或许我的问题可以通过只修改最后一个joint的rpy参数就可以解决,可以先试一下这个。最后确实是修改了这一部分之后才没有问题了。
三,发现ros tutorial中比较有用的东西。http://wiki.ros.org/urdf
因为现在在搞gazebo仿真的部分,需要用到jaco2的urdf文件,我的做法是看懂xacro文件中写的内容,然后自己动手将xacro文件改成需要格式的urdf文件。改得差不多了之后,去看了ros官方的关于urdf的tutorial,发现很多东西很有价值。
第一条,xacro转换成urdf的命令。
rosrun xacro xacro.py `rospack find pr2_description`/robots/pr2.urdf.xacro -o /tmp/pr2.urdf
第二条,check urdf的命令,直接可以得到link之间的连接关系。
check_urdf pr2.urdf
我得到的结果
robot name is: j2n6a300
---------- Successfully Parsed XML ---------------
root Link: root has 1 child(ren)
child(1): j2n6a300_link_base
child(1): j2n6a300_link_1
child(1): j2n6a300_link_2
child(1): j2n6a300_link_3
child(1): j2n6a300_link_4
child(1): j2n6a300_link_5
child(1): j2n6a300_link_6
child(1): j2n6a300_end_effector
child(2): j2n6a300_link_finger_1
child(1): j2n6a300_link_finger_tip_1
child(3): j2n6a300_link_finger_2
child(1): j2n6a300_link_finger_tip_2
child(4): j2n6a300_link_finger_3
child(1): j2n6a300_link_finger_tip_3
第三条,将urdf文件用图表的形式表示出来。
urdf_to_graphiz pr2.urdf
上述三条完全解决了我今天自己阅读xacro文件需要的问题。