,指定相对于父link的坐标变换,其中xyz为相对的位置..._ros urdf">
当前位置:   article > 正文

ROS中URDF格式和使用_ros urdf

ros urdf

URDF定义

URDF格式是ROS用来描述机器人的符合XML语言规范的描述文件。 为了方便查看,将常用的urdf格式文件的元素定义做成了一张简表。

<joint>name="joint nane",type="continuous(无限旋转)/fixed(固定关节)/revolute(旋转)/prismatic(移动)"
<origin xyz="1,2,3", rpy="0,0,0">,指定相对于父link的坐标变换,其中xyz为相对的位置,rpy为相对的方向
<parent link="link nane">,指定父link的名称。
<child link="link nane" />,指定子link的名称。
<axis xyz="1 0 0 " />,指定那个轴为运动轴,如"0 1 0 "表示运动轴为y轴,默认为"1 0 0 "。
<limit lower='0' upper='3.14159' effort='300' velocity='1'>,对于旋转和移动关节是必需的,设置它的运动范围、作用力以及速度的限制。
<link> name="link name"
<visual> <origin>,同joint->origin
<geometry <box size:="1.0 2.0 3.0">,size为xyz方向上的尺寸
<cylinder length="1.0" radius="1.0" />
<sphere radius="1.0" />
<mesh filename="xxx" scale="1.0" />,模型文件可以是.dae、.stl。
<material> name="xxx"
<color rgba="1 2 3 4" />
<texture filename="xxx" />
<inertial> <origin>,同joint->origin,指定连杆的惯性坐标系的方位。且惯性坐标系原点与重心须一致。
<mass value="1.0" />,指定连杆的质量
<inertia ixx="0" ixx="0" ixx="0" ixx="0" ixx="0" ixx="0" />,指定连杆的惯性二阶矩。 inertial.png
<collision> 说明:碰撞模型通常与外观模型一样,且为减少计算量应尽可能精简。
name="nane"
<origin>,同joint->origin。
<geometry>,同link->visual中的geometry。
# Xacro扩展 #### 常量定义 ```xml ``` #### 常量使用 使用${}。其中还可包含常用数学运算,例如: ```xml ``` #### 宏定义 ```xml ... ``` #### 宏定义的使用 ```xml ``` #### 文件包含 ```xml ```

urdf文件的检查和显示

可以采用如下命令检查urdf文件的合法性:

check_urdf myrobot.urdf
  • 1

对于扩展的myrobot.xacro文件,可以使用如下方法:

check_urdf < (xacro myrobot.xacro)
  • 1

模型的显示有两种方法:

  1. 方法一,直接在shell中使用命令:
roslaunch urdf_tutorial display.launch model:='$(find myrobot_config)/config/myrobot.xacro'
  • 1

其中myrobot_config是一个关于机器人配置的package。另外,model后面也可以接一个绝对的文件路径。

  1. 方法二,编写一个launch文件,内容如下:
<launch>
  <arg name="model" default="$(find myrobot_config)/config/myrobot.xacro"/>
  <arg name="gui" default="true" />
  <arg name="rvizconfig" default="$(find urdf_tutorial)/rviz/urdf.rviz" />

  <param name="robot_description" command="$(find xacro)/xacro.py $(arg model)" />
  <param name="use_gui" value="$(arg gui)"/>

  <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 $(arg rvizconfig)" required="true" />
</launch>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

机械臂的urdf示例

首先,需要对机器人的link和joint的定义以及编号有一个清晰的认识。我们选择采用《机器人学导论》中的link和joint描述方法。现在以一个2dof的简单机械臂作为示例来编写一个URDF文件并在rviz中展示。该机械臂的描述见下图:
URDF格式-robot.jpg

该图中将joint_0的坐标原点与joint_1的坐标原点重合,z轴重合,这样可以简化运动学的计算。同时,加入base_link也是为了rviz的显示需要,在rviz中需要一个固定的坐标系,默认是取用一个fixed类型的joint的坐标系。而URDF中定义joint必须定义与之关联的前后两个link。因此就加入一个base_link。

下面就根据每一个joint,以及前后的link来逐步的手工编写urdf文件。首先是joint_0,其父link为base_link,子link为link_0。其内容为:

<link name="base_link"/>
    <visual>
        <geometry>
            <box size='0.14 0.11 ${H_b}' />
        </geometry>
    </visual>
</link>
<joint name='joint_0' type='fixed'>
    <origin xyz='0 0 ${H_b/2+H_0+H_1/2}' rpy='0 0 0' />
    <parent link='base_link' />
    <child link='link_0' />
</joint>
<link name='link_0'>
    <visual>
        <oring xyz='0 0 ${-(H_1/2+H_0/2)}' rpy='0 0 0' />
        <geometry>
            <cylinder lenght='${H_0}' radius='${R_0}' />
        </geometry>
    </visual>
</link>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

上面使用了xacro扩展的常量定义,H_b、H_0和H_1分别表示各个link的高度,R_0表示圆柱型link_0的半径。注意,我们将joint_0的坐标原点上移到与joint_1重合的位置。但由于link_0的放置坐标是基于joint_0的,而其自身的坐标中心为其重心,因此放置时需要将其向下偏移。

然后为joint_1以及对应的link_1:

<joint name='joint_1' type='revolute'>
    <limit effort='300' velocity='1' lower='0' upper='${PI}' />
    <origin xyz='0 0 0' rpy='0 0 0' />
    <parent link='link_0' />
    <child link='link_1' />
    <axis xyz='0 0 1' />
</joint>
<link name='link_1' >
    <visual>
        <origin xyz='0 0 0' rpy='0 0 0' />
        <geometry>
            <box size='0.08 0.08 ${H_1}' />
        <geometry>
    </visual>
</link>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

对于joint_1,由于其是一个旋转关节,因此就必须为其添加limit信息。同时也必须通过指定其绕z轴旋转,因为默认是绕x轴旋转的。

joint_2的处理稍微复杂一点,其坐标系相对于joint_1进行了绕x轴90度的旋转。在urdf中使用RPY角度来描述旋转,因此绕x轴90度对应的值为"pi/2 0 0"。同时link_2的中心也相较于joint_2的坐标原点在x轴上进行了偏移。所以关于joint_2和linke_2的定义为:

<joint name='joint_2' type='revolute'>
    <limit effort='300' velocity='1' lower='0' upper='${PI}' />
    <origin xyz='0 0 0' rpy='${PI/2} 0 0' />
    <parent link='link_1' />
    <child link='link_2' />
    <axis xyz='0 0 1' />
</joint>
<link name='link_2' >
    <visual>
        <origin xyz='${L_2/2} 0 0' rpy='0 0 0' />
        <geometry>
            <box size='${L_2} 0.05 0.03' />
        <geometry>
    </visual>
</link>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

通过rviz可以得到如下的显示效果,并能通过joint_state_publisher的小窗口中的滑块让机械臂运动起来
rviz_disp.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/700221
推荐阅读
相关标签
  

闽ICP备14008679号