利用urdf建立机器人小车模型

在一个真实的机器人上编程很让我们更好的理解机器人的控制方式,因为真实的机器人会给我们反馈。但是在没有真实机器人供我们实践的时候,ROS的仿真功能是一个不错的选择。

ROS通过URDFUnifiedRobot Description Format) 就是描述机器人硬件尺寸布局.

一,软件环境

OS:Ubuntu 14.04,16.04也可以用

ROS:Indigo Full package/kinetic也可以

二,智能车尺寸数据

1.创建Rospackage命名为smartcar

           catkin_create_pkg smartcar std_msgs rospy roscpp urdf 

   2.建立文件夹launchurdf分别用来存放.launch文件和.urdf文件


三、建立urdf文件

smartcar文件夹下建立urdf文件夹,创建智能车的描述文件smartcar.urdf,描述代码如下:

[html]  view plain  copy
  1. xml version="1.0"?>  
  2. <robot name="smartcar">  
  3.   <link name="base_link">  
  4.     <visual>  
  5.       <geometry>  
  6.         <box size="0.25 .16 .05"/>  
  7.     geometry>  
  8.     <origin rpy="0 0 1.57075" xyz="0 0 0"/>  
  9.     <material name="blue">  
  10.         <color rgba="0 0 .8 1"/>  
  11.     material>  
  12.     visual>  
  13.  link>  
  14.   
  15.  <link name="right_front_wheel">  
  16.     <visual>  
  17.       <geometry>  
  18.         <cylinder length=".02" radius="0.025"/>  
  19.       geometry>  
  20.       <material name="black">  
  21.         <color rgba="0 0 0 1"/>  
  22.       material>  
  23.     visual>  
  24.   link>  
  25.   
  26.   <joint name="right_front_wheel_joint" type="continuous">  
  27.     <axis xyz="0 0 1"/>  
  28.     <parent link="base_link"/>  
  29.     <child link="right_front_wheel"/>  
  30.     <origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/>  
  31.     <limit effort="100" velocity="100"/>  
  32.     <joint_properties damping="0.0" friction="0.0"/>  
  33.   joint>  
  34.   
  35.   <link name="right_back_wheel">  
  36.     <visual>  
  37.       <geometry>  
  38.         <cylinder length=".02" radius="0.025"/>  
  39.       geometry>  
  40.       <material name="black">  
  41.         <color rgba="0 0 0 1"/>  
  42.       material>  
  43.     visual>  
  44.   link>  
  45.   
  46.   <joint name="right_back_wheel_joint" type="continuous">  
  47.     <axis xyz="0 0 1"/>  
  48.     <parent link="base_link"/>  
  49.     <child link="right_back_wheel"/>  
  50.     <origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/>  
  51.     <limit effort="100" velocity="100"/>  
  52.     <joint_properties damping="0.0" friction="0.0"/>  
  53.  joint>  
  54.   
  55.  <link name="left_front_wheel">  
  56.     <visual>  
  57.       <geometry>  
  58.         <cylinder length=".02" radius="0.025"/>  
  59.       geometry>  
  60.       <material name="black">  
  61.         <color rgba="0 0 0 1"/>  
  62.       material>  
  63.     visual>  
  64.   link>  
  65.   
  66.   <joint name="left_front_wheel_joint" type="continuous">  
  67.     <axis xyz="0 0 1"/>  
  68.     <parent link="base_link"/>  
  69.     <child link="left_front_wheel"/>  
  70.     <origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/>  
  71.     <limit effort="100" velocity="100"/>  
  72.     <joint_properties damping="0.0" friction="0.0"/>  
  73.   joint>  
  74.   
  75.   <link name="left_back_wheel">  
  76.     <visual>  
  77.       <geometry>  
  78.         <cylinder length=".02" radius="0.025"/>  
  79.       geometry>  
  80.       <material name="black">  
  81.         <color rgba="0 0 0 1"/>  
  82.       material>  
  83.     visual>  
  84.   link>  
  85.   
  86.   <joint name="left_back_wheel_joint" type="continuous">  
  87.     <axis xyz="0 0 1"/>  
  88.     <parent link="base_link"/>  
  89.     <child link="left_back_wheel"/>  
  90.     <origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/>  
  91.     <limit effort="100" velocity="100"/>  
  92.     <joint_properties damping="0.0" friction="0.0"/>  
  93.   joint>  
  94.   
  95.   <link name="head">  
  96.     <visual>  
  97.       <geometry>  
  98.         <box size=".02 .03 .03"/>  
  99.       geometry>  
  100.       <material name="white">  
  101.           <color rgba="1 1 1 1"/>  
  102.       material>  
  103.     visual>  
  104.   link>  
  105.   
  106.   <joint name="tobox" type="fixed">  
  107.     <parent link="base_link"/>  
  108.     <child link="head"/>  
  109.     <origin xyz="0 0.08 0.025"/>  
  110.   joint>  
  111. robot>  

.图形化显示URDF模型

我们现在已经完成了一个简单的URDF模型创建,ROS提供了相应的工具可以让URDF图像化显示出来。

urdf_to_graphiz  /home/daniel/catkin_ws/src/smartcar/urdf/smartcar.urdf
   
   
   
   
  • 1
  • 1.

四,创建display.launch文件

[html]  view plain  copy
  1. <launch>  
  2.     <arg name="model" />  
  3.     <arg name="gui" default="False" />  
  4.     <param name="robot_description" textfile="($find urdf——tutorial)home/wjq/catkin_ws/src/smatcar/urdf/smartcar.urdf)" />  
  5.     <param name="use_gui" value="$(arg gui)"/>  
  6.     <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />  
  7.     <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />  
  8.     <node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.rviz" required="true" />  
  9. launch>  

link可以指定许多属性:

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

我们详细看一下的定义:

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

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


切换到launch文件夹下,使用下面命令启动rviz来查看我们刚刚完成的机器人模型:

roslaunch urdf_tutorial display.launch model:=urdf/smartcar.urdf

   
   
   
   
  • 1
  • 2
  • 1
  • 2

这里完成了三件事情: 
 加载特定的模型到参数服务器 
 运行节点来发布关节状态和转换 
 运行rviz及其配置文件 
这个launch文件假设smartcar.urdf在你所运行命令的文件夹的urdf子文件夹中(所以切记这里的roslaunch语句应该在smartcar文件夹下运行,不然会出现错误:No such file or directory: u'urdf/smartcar.urdf'),否则,你可以用:model:=’$(find pkg-name)/urdf/smartcar.urdf’。这里pkg-name是这个文件所在包的名称。这里所有的例程都在urdf_tutorial包中。 
我们可以看到下面的画面: 
利用urdf建立机器人小车模型_第1张图片 
如果运行:

 roslaunch urdf_tutorial display.launch model:=urdf/smartcar.urdf gui:=true

   
   
   
   
  • 1
  • 2
  • 1
  • 2

你会顺便看到弹出一个控制面板… 
利用urdf建立机器人小车模型_第2张图片 

 


参考:

1.Learning ROS for Robotics Peogramming

2.ROS探索总结(五)——创建简单的机器人模型smartcar

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

你可能感兴趣的:(ros)