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

使用ROS强大机器人功能,建立ROS可以识别的机器人模型是第一步,也是无法绕过去的环节。Unified Robot Description Format (URDF) 就是描述机器人硬件尺寸布局的模型语言。它是同ROS沟通的渠道,有了机器人的物理尺寸,ROS就可以有效的进行Navagation和碰撞检测(collision detect)了。

未来,该语言会从ROS独立出来,集成到Ubuntu官方包发布。必须承认,URDF 是个很难懂的语言,但有RViz的强大仿真功能,我们很容易调试它。今天我们就以经常见到智能四轮驱动小车为例介绍它的使用。

1.  软件环境

OS: Ubuntu 14.04

ROS: Indigo Full package

2.  小车形状与尺寸

具体实际的物理小车的建立请看我的文章树莓派搭建 ROS 系统下四论驱动车,并用 IPad, 手机控制。该车有两层,4个轮子,头部还有一个hc-sr04超声波和舵机。

基座(base_link): 长 27cm 宽 15cm  每层板厚度3mm 下层高度4.5cm  上层高度7.8cm

轮子 直径6.8cm 这个尺寸必须非常精确,影响测速和轨迹运算。厚度2.5cm

该车名字 SP1S (顺跑1 Smart)

3. 创建Ros package

<span style="font-size:18px;">$ catkin_create_pkg sp1s std_msgs rospy roscpp urdf
$ cd sp1s/
$ mkdir urdf</span>
catkin_create_pkg最后一个参数是引入urdf 库。创建urdf目录存放urdf文件。

**必须已经创建好了一个workspace的情况下,使用该命令创建package.

4. 创建lauch文件启动Rviz

创建目录launch并新建文件dispaly.launch  建立好urdf文件后就使用该文件launch

<launch>
	<arg name="model" />
	<arg name="gui" default="False" />
	<param name="robot_description" textfile="$(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 $(find urdf_tutorial)/urdf.rviz" required="true" />
</launch>
该文件可以帮助启动RViz来观察机器人。其中有三个node,一个是rviz,另外两个joint_state_publisher robot_state_publisher是必须的node。

第一个输入参数 model 就是要启动的urdf文件路径。

第二个输入参数 gui 指定是否启用关节转动控制面板窗口

5. 创建基座base_link

ROS里面把每个零件称为link,作为基座的link统一称为base_link.在官方的所有事例文章里面到处可以看到base_link,所以最好也延续该名称。其它的link都要依附到base_link上。这里我们把下层的板作为base_link. 新建一个文件sp1s.urdf,描述代码如下:

<pre name="code" class="html"><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>
</robot></span>

 

link可以指定许多属性:

  • <inertial>    定义惯性
  • <visual>     定义一个link的外观,大小,颜色和材质纹理贴图
  • <collision>定义碰撞检测属性

我们详细看一下<visual>的定义:

  • <geometry> 定义了几何形状为一个立方体,三个参数分别为长宽高,单位是米(m). 这里我们指定下层小车板子的板的尺寸。<geometry>可以有好几个选项:<box> 立方体  <cylinder>圆柱体  <sphere>球体
  • <material> 指定颜色rgb和透明度a.  它们取值范围都是[0,1] 区间。

使用下面命令启动RViz来查看我们刚刚完成的机器人模型:

roslaunch sp1s display.launch model:=urdf/sp1s.urdf

这时只是显示了一个半透明的长方体,就是我们的主体部分。中间的黄色点代表了base_link的原点,也是整个RViz世界的原点。

6. 创建轮子

下面我们开始创建四个轮子,它们的名字分别为tyer_front_left, tyer_front_right, tyer_back_left, tyer_back_right. 尺寸大小直径6.8cm 厚度2.5cm. 先以一个轮子为例:

<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>
  
  <joint name="base_to_front_left" type="fixed">
    <parent link="base_link"/>
    <child link="tyer_front_left"/>
  </joint>
</robot>
</span>

  • 定义黄色的轮子tyer_front_left
  • 添加了一个关节 joint将base_link和tyer_front_left关联在一起,为了简单将joint定义为fixed类型。下一篇文章里将会改成continuous,并详细解释joint的作用
  • 两个及以上的link定义到一个文件里必须使用joint关联,否则出错

<span style="font-size:18px;">roslaunch sp1s display.launch model:=urdf/sp1s.urdf</span>

可以看到黄色的轮子显示到了车身的中央,因为它的原点origin和base_link的origin重合. 选中TFcheckbox,就会显示出XYZ坐标轴,红色为X 绿色为Y蓝色为Z


下一篇文章将讲述如何使用joint将轮子平移到左上方并旋转。


版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值