ROS系统实践(1) - URDF实践


URDF(nified Robot Description Format) 统一机器人描述格式。

我们可以通过编辑自己的URDF文件来创建自己的机器人模型,以下就通过构建一个简单的小车模型来说明如何创建机器人模型。

1.描述整体的结构

整体的结构用部件(Link)和关节(Joint)来描述,关节用来连接部件;

我们要描述一个带有4个轮子的车子,那么首先有5个部件(车身、轮子)和4个关节:

<robot name="test_robot">
    <link name="base_link"/>
    <link name="wheel_1"/>
    <link name="wheel_2"/>
    <link name="wheel_3"/>
    <link name="wheel_4"/>
    
    <joint name="joint_base_wheel1" type="fixed">
        <parent link="base_link">
        <child  link="wheel_1">
    </joint>
    
    <joint name="joint_base_wheel2" type="fixed">
        <parent link="base_link">
        <child  link="wheel_2">
    </joint>

    <joint name="joint_base_wheel3" type="fixed">
        <parent link="base_link">
        <child  link="wheel_3">
    </joint> 

    <joint name="joint_base_wheel4" type="fixed">
        <parent link="base_link">
        <child  link="wheel_4">
    </joint> 
</robot>

我们可以采用 check_urdf xxx.urdf 命令来检查我们写好的urdf文件的语法正确性

2.部件和关节的详细属性说明

我们的小车各部件还没有形状和大小的描述,在URDF中可以用
visual 用来描述模块的视觉效果。
geometry 用来描述模块的形状和大小。
origin 用来描述模块的位置。

添加好上述属性的urdf文件:

<robot name="test_robot"> 
  <link name="base_link"> 
    <visual> 
       <geometry> 
         <box size="0.2 .3 .1"/>  
       </geometry> 
       <origin rpy="0 0 0" xyz="0 0 0.05"/> 
    </visual> 
  </link> 
  
  <link name="wheel_1"> 
    <visual> 
      <geometry> 
        <cylinder length="0.05" radius="0.05"/>  
      </geometry> 
      <origin rpy="0 1.5 0" xyz="0.1 0.1 0"/> 
    </visual> 
  </link> 
  
  <link name="wheel_2"> 
    <visual> 
      <geometry> 
        <cylinder length="0.05" radius="0.05"/>  
      </geometry> 
      <origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/> 
    </visual> 
  </link> 
  
  <link name="wheel_3"> 
    <visual> 
      <geometry> 
        <cylinder length="0.05" radius="0.05"/>  
      </geometry> 
      <origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/> 
    </visual> 
  </link> 
  
  <link name="wheel_4"> 
    <visual> 
      <geometry> 
        <cylinder length="0.05" radius="0.05"/>  
      </geometry> 
      <origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/> 
    </visual> 
  </link> 
  
  <joint name="joint_base_wheel1" type="fixed"> 
    <parent link="base_link"/> 
    <child link="wheel_1"/> 
  </joint> 
  
  <joint name="joint_base_wheel2" type="fixed"> 
    <parent link="base_link"/> 
    <child link="wheel_2"/> 
  </joint> 
  
  <joint name="joint_base_wheel3" type="fixed"> 
    <parent link="base_link"/> 
    <child link="wheel_3"/> 
  </joint> 
  
  <joint name="joint_base_wheel4" type="fixed"> 
    <parent link="base_link"/> 
    <child link="wheel_4"/> 
  </joint> 
</robot> 

3.在rviz中查看增加颜色属性

<robot name="test_robot"> 
  <link name="base_link"> 
    <visual> 
       <geometry> 
         <box size="0.2 .3 .1"/>  
       </geometry> 
       <origin rpy="0 0 0" xyz="0 0 0.05"/> 
       <material name="white"> 
         <color rgba="1 1 1 1"/>  
       </material> 
    </visual> 
  </link> 
  
  <link name="wheel_1"> 
    <visual> 
      <geometry> 
        <cylinder length="0.05" radius="0.05"/>  
      </geometry> 
      <origin rpy="0 1.5 0" xyz="0.1 0.1 0"/> 
      <material name="black"> 
        <color rgba="0 0 0 1"/>  
      </material> 
    </visual> 
  </link> 
  
  <link name="wheel_2"> 
    <visual> 
      <geometry> 
        <cylinder length="0.05" radius="0.05"/>  
      </geometry> 
      <origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/> 
      <material name="black"/> 
    </visual> 
  </link> 
  
  <link name="wheel_3"> 
    <visual> 
      <geometry> 
        <cylinder length="0.05" radius="0.05"/>  
      </geometry> 
      <origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/> 
      <material name="black"/> 
    </visual> 
  </link> 
  
  <link name="wheel_4"> 
    <visual> 
      <geometry> 
        <cylinder length="0.05" radius="0.05"/>  
      </geometry> 
      <origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/> 
      <material name="black"/> 
    </visual> 
  </link> 
  
  <joint name="joint_base_wheel1" type="fixed"> 
    <parent link="base_link"/> 
    <child link="wheel_1"/> 
  </joint> 
  
  <joint name="joint_base_wheel2" type="fixed"> 
    <parent link="base_link"/> 
    <child link="wheel_2"/> 
  </joint> 
  
  <joint name="joint_base_wheel3" type="fixed"> 
    <parent link="base_link"/> 
    <child link="wheel_3"/> 
  </joint> 
  
  <joint name="joint_base_wheel4" type="fixed"> 
    <parent link="base_link"/> 
    <child link="wheel_4"/> 
  </joint> 
</robot> 

当然ROS提供的属性描述tag还有很多,具体参见:
urdf_description

创建好的模型如下:


car_urdf.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,752评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,350评论 19 139
  • 祝好
    瑞芘兔阅读 216评论 0 0
  • 我不喜欢旅游 从来就不喜欢。 每次和别人聊天,通常对方是喜欢旅游的那个,我都会为了配合他/她,说好羡慕之类的话。连...
    逆五芒星阅读 413评论 0 2
  • 首先看一下大体的HTML结构: li是左侧的一级菜单,div.submenu是相应的二级菜单,正常情况下是隐藏的。...
    你好星期四阅读 448评论 0 1

友情链接更多精彩内容