码迷,mamicode.com
首页 > 其他好文 > 详细

ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 joint 使用

时间:2015-01-21 22:39:06      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:ros   机器人   urdf   导航   地图构建   

我们接着上文  ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 link使用继续完成创建带四个可以转动轮子的双层小车。

一 建立可以转动的joint

<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>

1. 将joint的类型改为"continuous" 这样front_left相对base_link就是一个转动的装置

2. 转动的位置就是由 origin定义的,它同时定义了tyer_front_left的新原点,之前它的原点默认就是base_link的原点

     xyz 是相对相对parant base_link原点的偏移, 它把轮子移动到了左前方。其中:

     z = -0.011m = 6.8cm/2 - 4.5cm,保证轮子是在地上的

       y = 0.064m = 15cm/2 - 2.5cm / 2 (轮子厚度) + offset

     pry 是分别以 x y z 轴为中心转动的角度(弧度制) 1.57075 就是90度。 围绕x轴旋转90度轮子就竖了起来。

3. axis重新定义转动轴在原点的方向,它是一个矢量,只指示方向,它们必须满足 x * x + y * y + z * z = 1   原点Z轴已经被旋转90度变成水平方向,所以这里定义Z轴方向为转动方向

技术分享

   


二  重复添加四个轮子

其它三个轮子只有origin正负值的调整

<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="tyer_front_left">
    <visual>
      <geometry>
       <cylinder length=".025" radius="0.034"></cylinder>
      </geometry>
      <material name="yellow">
          <color rgba="1 1 0 1"/>
      </material>  
    </visual>
  </link>

  <link name="tyer_front_right">
    <visual>
      <geometry>
       <cylinder length=".025" radius="0.034"></cylinder>
      </geometry>
      <material name="yellow">  
          <color rgba="1 1 0 1"/>  
      </material>  
    </visual>
  </link>
  
  <link name="tyer_back_left">
    <visual>
      <geometry>
       <cylinder length=".025" radius="0.034"></cylinder>
      </geometry>
      <material name="yellow">  
          <color rgba="1 1 0 1"/>  
      </material>  
    </visual>
  </link>
  
  <link name="tyer_back_right">
    <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="continuous">
    <origin rpy="1.57075  0  0" xyz="0.06  0.064  -0.011"/>
    <parent link="base_link"/>
    <child link="tyer_front_left"/>    
    <axis xyz="0 0 1"/>
  </joint>

  <joint name="base_to_front_right" type="continuous">
    <origin rpy="1.57075  0  0" xyz="0.06  -0.064  -0.011"/>
    <parent link="base_link"/>
    <child link="tyer_front_right"/>    
    <axis xyz="0 0 1"/>
  </joint>

  <joint name="base_to_back_left" type="continuous">
    <origin rpy="1.57075  0  0" xyz="-0.06  0.064  -0.011"/>
    <parent link="base_link"/>
    <child link="tyer_back_left"/>    
    <axis xyz="0 0 1"/>
  </joint>

  <joint name="base_to_back_right" type="continuous">
    <origin rpy="1.57075  0  0" xyz="-0.06  -0.064  -0.011"/>
    <parent link="base_link"/>
    <child link="tyer_back_right"/>    
    <axis xyz="0 0 1"/>
  </joint>
</robot>
</span>

技术分享


三  添加四个柱子

上下层的四个角上是高3cm的柱子. 在上面urdf的基础上再添加下面的内容添加一个左前方的柱子。

<span style="font-size:18px;">  <link name="pillar_front_left">
    <visual>
      <geometry>
       <cylinder length=".03" radius="0.0025"></cylinder>
      </geometry>
      <origin xyz="0 0 0.015"/>  
      <material name="silver">  
          <color rgba=".86 .86 .86 1"/>  
      </material>
    </visual>
  </link>

  <joint name="base_to_pillar_front_left" type="fixed">
    <origin xyz="0.13  0.07  0.0015"/>
    <parent link="base_link"/>
    <child link="pillar_front_left"/>
  </joint></span>
1. 柱子不转动,所以joint的类型为 fixed

2. joint里面定义改变了柱子的原点为 xyz="0.13 0.07 0.0015" 是相对base_link的

3. link里面也定义了原点为xyz="0 0 0.015", 这里只是显示上的偏移,它相对于joint里面定义的原点,但并不改变joint里面定义的物理原点

4. 接下来重复加三个柱子,详见最后一段的urdf定义


四 添加上层

上层和base_link一样,它们之间通过fixed joint相连。在 Z 轴方向上偏移3cm。

  <link name="top_link">
    <visual>
      <geometry>
        <box size="0.27 .15 .003"/>
      </geometry>
      <material name="white">
         <color rgba="1 1 1 .5"/>
    </material>
    </visual>
  </link>

  <joint name="base_to_top" type="fixed">
    <origin xyz="0  0  0.03"/>
    <parent link="base_link"/>
    <child link="top_link"/>
  </joint>

五  完整的urdf

<?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="tyer_front_left">
    <visual>
      <geometry>
       <cylinder length=".025" radius="0.034"></cylinder>
      </geometry>
      <material name="yellow">
          <color rgba="1 1 0 1"/>
      </material>  
    </visual>
  </link>

  <link name="tyer_front_right">
    <visual>
      <geometry>
       <cylinder length=".025" radius="0.034"></cylinder>
      </geometry>
      <material name="yellow">  
          <color rgba="1 1 0 1"/>  
      </material>  
    </visual>
  </link>
  
  <link name="tyer_back_left">
    <visual>
      <geometry>
       <cylinder length=".025" radius="0.034"></cylinder>
      </geometry>
      <material name="yellow">  
          <color rgba="1 1 0 1"/>  
      </material>  
    </visual>
  </link>
  
  <link name="tyer_back_right">
    <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="continuous">
    <origin rpy="1.57075  0  0" xyz="0.06  0.064  -0.011"/>
    <parent link="base_link"/>
    <child link="tyer_front_left"/>    
    <axis xyz="0 0 1"/>
  </joint>

  <joint name="base_to_front_right" type="continuous">
    <origin rpy="1.57075  0  0" xyz="0.06  -0.064  -0.011"/>
    <parent link="base_link"/>
    <child link="tyer_front_right"/>    
    <axis xyz="0 0 1"/>
  </joint>

  <joint name="base_to_back_left" type="continuous">
    <origin rpy="1.57075  0  0" xyz="-0.06  0.064  -0.011"/>
    <parent link="base_link"/>
    <child link="tyer_back_left"/>    
    <axis xyz="0 0 1"/>
  </joint>

  <joint name="base_to_back_right" type="continuous">
    <origin rpy="1.57075  0  0" xyz="-0.06  -0.064  -0.011"/>
    <parent link="base_link"/>
    <child link="tyer_back_right"/>    
    <axis xyz="0 0 1"/>
  </joint>

  <link name="pillar_front_left">
    <visual>
      <geometry>
       <cylinder length=".03" radius="0.0025"></cylinder>
      </geometry>
      <origin xyz="0 0 0.015"/>  
      <material name="silver">  
          <color rgba=".86 .86 .86 1"/>  
      </material>
    </visual>
  </link>

  <link name="pillar_front_right">
    <visual>
      <geometry>
       <cylinder length=".03" radius="0.0025"></cylinder>
      </geometry>
      <origin xyz="0 0 0.015"/>  
      <material name="silver">  
          <color rgba=".86 .86 .86 1"/>  
      </material>
    </visual>
  </link>

  <link name="pillar_back_left">
    <visual>
      <geometry>
       <cylinder length=".03" radius="0.0025"></cylinder>
      </geometry>
      <origin xyz="0 0 0.015"/>  
      <material name="silver">  
          <color rgba=".86 .86 .86 1"/>  
      </material>
    </visual>
  </link>

  <link name="pillar_back_right">
    <visual>
      <geometry>
       <cylinder length=".03" radius="0.0025"></cylinder>
      </geometry>
      <origin xyz="0 0 0.015"/>  
      <material name="silver">  
          <color rgba=".86 .86 .86 1"/>  
      </material>
    </visual>
  </link>

  <joint name="base_to_pillar_front_left" type="fixed">
    <origin xyz="0.13  0.07  0.0015"/>
    <parent link="base_link"/>
    <child link="pillar_front_left"/>
  </joint>

  <joint name="base_to_pillar_front_right" type="fixed">
    <origin xyz="-0.13  0.07  0.0015"/>
    <parent link="base_link"/>
    <child link="pillar_front_right"/>
  </joint>

  <joint name="base_to_pillar_back_left" type="fixed">
    <origin xyz="0.13  -0.07  0.0015"/>
    <parent link="base_link"/>
    <child link="pillar_back_left"/>
  </joint>

  <joint name="base_to_pillar_back_right" type="fixed">
    <origin xyz="-0.13  -0.07  0.0015"/>
    <parent link="base_link"/>
    <child link="pillar_back_right"/>
  </joint>

  <link name="top_link">
    <visual>
      <geometry>
        <box size="0.27 .15 .003"/>
      </geometry>
      <material name="white">
         <color rgba="1 1 1 .5"/>
    </material>
    </visual>
  </link>

  <joint name="base_to_top" type="fixed">
    <origin xyz="0  0  0.03"/>
    <parent link="base_link"/>
    <child link="top_link"/>
  </joint>
</robot>

技术分享






ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 joint 使用

标签:ros   机器人   urdf   导航   地图构建   

原文地址:http://blog.csdn.net/crazyquhezheng/article/details/42974817

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!