ros urdf 文件格式描述

----ROS机器人模型urdf简明笔记----


ROS库--URDF

  1. 使用URDF从头开始构建可视机器人模型

    了解如何构建一个可以在Rviz中查看的机器人的视觉模型

  2. 使用URDF构建可移动机器人模型

    了解如何在URDF中定义活动关节

  3. 向URDF模型添加物理和冲突属性

    了解如何向链接添加碰撞和惯性属性,以及如何为关节添加关节动力学。

  4. 使用Xacro清理URDF文件

    学习一些技巧,以减少使用Xacro URDF文件中的代码量


----

全部源码:http://download.csdn.net/detail/zhangrelay/9775629


1 简单的几何形状

这里包括形状,大小,位置,角度和材质等。以下面代码为例,简单介绍一下:

[html] view plain copy print ?
  1. xml version="1.0"?>  
  2. <robot name="visual">  
  3.   
  4.   <material name="red">  
  5.     <color rgba="0.8 0 0 1"/>  
  6.   material>    
  7.   <material name="green">  
  8.     <color rgba="0 0.8 0 1"/>  
  9.   material>  
  10.   <material name="blue">  
  11.     <color rgba="0 0 0.8 1"/>  
  12.   material>  
  13.   <material name="black">  
  14.     <color rgba="0 0 0 1"/>  
  15.   material>  
  16.   <material name="white">  
  17.     <color rgba="1 1 1 1"/>  
  18.   material>  
  19.   
  20.   <link name="base_link">  
  21.     <visual>  
  22.       <geometry>  
  23.         <cylinder length="0.6" radius="0.2"/>  
  24.       geometry>  
  25.       <material name="red"/>  
  26.     visual>  
  27.   link>  
  28.   
  29.   <link name="right_leg">  
  30.     <visual>  
  31.       <geometry>  
  32.         <box size="0.6 .1 .2"/>  
  33.       geometry>  
  34.       <origin rpy="0 1.57075 0" xyz="0 0 -0.3"/>  
  35.       <material name="blue"/>  
  36.     visual>  
  37.   link>  
  38.   
  39.   <joint name="base_to_right_leg" type="fixed">  
  40.     <parent link="base_link"/>  
  41.     <child link="right_leg"/>  
  42.     <origin xyz="0 -0.22 .25"/>  
  43.   joint>  
  44.   
  45.   <link name="right_base">  
  46.     <visual>  
  47.       <geometry>  
  48.         <box size="0.4 .1 .1"/>  
  49.       geometry>  
  50.       <material name="white"/>  
  51.     visual>  
  52.   link>  
  53.   
  54.   <joint name="right_base_joint" type="fixed">  
  55.     <parent link="right_leg"/>  
  56.     <child link="right_base"/>  
  57.     <origin xyz="0 0 -0.6"/>  
  58.   joint>  
  59.   
  60.   <link name="right_front_wheel">  
  61.     <visual>  
  62.       <origin rpy="1.57075 0 0" xyz="0 0 0"/>  
  63.       <geometry>  
  64.         <cylinder length="0.1" radius="0.035"/>  
  65.       geometry>  
  66.       <material name="black"/>  
  67.       <origin rpy="0 0 0" xyz="0 0 0"/>  
  68.     visual>  
  69.   link>  
  70.   <joint name="right_front_wheel_joint" type="fixed">  
  71.     <axis rpy="0 0 0" xyz="0 1 0"/>  
  72.     <parent link="right_base"/>  
  73.     <child link="right_front_wheel"/>  
  74.     <origin rpy="0 0 0" xyz="0.133333333333 0 -0.085"/>  
  75.   joint>  
  76.   
  77. ...............  
  78.   
  79.   <link name="head">  
  80.     <visual>  
  81.       <geometry>  
  82.         <sphere radius="0.2"/>  
  83.       geometry>  
  84.       <material name="white"/>  
  85.     visual>  
  86.   link>  
  87.   <joint name="head_swivel" type="fixed">  
  88.     <parent link="base_link"/>  
  89.     <child link="head"/>  
  90.     <origin xyz="0 0 0.3"/>  
  91.   joint>  
  92.   
  93.   <link name="box">  
  94.     <visual>  
  95.       <geometry>  
  96.         <box size=".08 .08 .08"/>  
  97.       geometry>  
  98.       <material name="green"/>  
  99.     visual>  
  100.   link>  
  101.   
  102.   <joint name="tobox" type="fixed">  
  103.     <parent link="head"/>  
  104.     <child link="box"/>  
  105.     <origin xyz="0.1814 0 0.1414"/>  
  106.   joint>  
  107. robot>  

----

其中,geometry中包含形状和大小,如cylinder box,大小依据形状不同采用不同表示,如length radius size等;

原点是origin;相对于该点的位置和角度分别用xyz rpy表示;parent link是父节点,child link是子节点。fixed frame固定坐标;

当然,还有颜色等其他配置属性。

使用下面命令查看效果,注意model路径:

[html] view plain copy print ?
  1. roslaunch urdf_tutorial display.launch model:=/home/relaybot/ROS_tutorial/src/urdf_tutorial-kinetic/urdf/05-visual.urdf  

----


----

2 由静到动让模型运动起来

这里只需要注意一个要点,就是关节joint,上节一般是fixed,这里可以有continuous,revolute,prismatic。

还需要补充的是robot_state_publisher和joint_state_publisher。分别如下图所示:

 


运行下面命令,注意模型路径:

[html] view plain copy print ?
  1. roslaunch urdf_tutorial display.launch model:=/home/relaybot/ROS_tutorial/src/urdf_tutorial-kinetic/urdf/06-flexible.urdf gui:=True  

----


----

3 添加物理和碰撞属性

需要注意亮点即可,碰撞collision,物理inertial。

[html] view plain copy print ?
  1. <link name="base_link">  
  2.   <visual>  
  3.     <geometry>  
  4.       <cylinder length="0.6" radius="0.2"/>  
  5.     geometry>  
  6.     <material name="blue"/>  
  7.   visual>  
  8.   <collision>  
  9.     <geometry>  
  10.       <cylinder length="0.6" radius="0.2"/>  
  11.     geometry>  
  12.   collision>  
  13.   <inertial>  
  14.     <mass value="10"/>  
  15.     <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>  
  16.   inertial>  
  17. link>  

----
[html] view plain copy print ?
  1. roslaunch urdf_tutorial display.launch model:=/home/relaybot/ROS_tutorial/src/urdf_tutorial-kinetic/urdf/07-physics.urdf  

----


----

4 使用xacro简化urdf文件

这里给出两个参考网址:xacro和在urdf中使用xacro。

[html] view plain copy print ?
  1. roslaunch urdf_tutorial display.launch model:=/home/relaybot/ROS_tutorial/src/urdf_tutorial-kinetic/urdf/08-macroed.urdf.xacro  

----


----

5 在Gazebo中使用urdf

参考网址:http://gazebosim.org/tutorials?tut=ros_urdf

完成配置后,启动命令:

[html] view plain copy print ?
  1. roslaunch urdf_tutorial gazebo.launch  

----


----

6 rviz和Gazebo中实现同步控制

运行下面命令:

[html] view plain copy print ?
  1. roslaunch urdf_tutorial control.launch  

----

 

----

附录:

TF:


Graph:


display.launch

[html] view plain copy print ?
  1. <launch>  
  2.   
  3.   <arg name="model" default="$(find urdf_tutorial)/urdf/r2d2.xacro"/>  
  4.   <arg name="gui" default="true" />  
  5.   <arg name="rvizconfig" default="$(find urdf_tutorial)/rviz/urdf.rviz" />  
  6.   
  7.   <param name="robot_description" command="$(find xacro)/xacro.py $(arg model)" />  
  8.   <param name="use_gui" value="$(arg gui)"/>  
  9.   
  10.   <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />  
  11.   <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />  
  12.   <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />  
  13.   
  14. launch>  


gazebo.launch

[html] view plain copy print ?
  1. <launch>  
  2.   
  3.     
  4.   <arg name="paused" default="false"/>  
  5.   <arg name="use_sim_time" default="true"/>  
  6.   <arg name="gui" default="true"/>  
  7.   <arg name="headless" default="false"/>  
  8.   <arg name="debug" default="false"/>  
  9.   <arg name="model" default="$(find urdf_tutorial)/urdf/r2d2.xacro"/>  
  10.   
  11.     
  12.   <include file="$(find gazebo_ros)/launch/empty_world.launch">  
  13.     <arg name="debug" value="$(arg debug)" />  
  14.     <arg name="gui" value="$(arg gui)" />  
  15.     <arg name="paused" value="$(arg paused)"/>  
  16.     <arg name="use_sim_time" value="$(arg use_sim_time)"/>  
  17.     <arg name="headless" value="$(arg headless)"/>  
  18.   include>  
  19.   
  20.   <param name="robot_description" command="$(find xacro)/xacro.py $(arg model)" />  
  21.   
  22.     
  23.   <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model"  
  24.         args="-z 1.0 -unpause -urdf -model robot -param robot_description" respawn="false" output="screen" />  
  25.   
  26.   <node pkg="robot_state_publisher" type="robot_state_publisher"  name="robot_state_publisher">  
  27.     <param name="publish_frequency" type="double" value="30.0" />  
  28.   node>  
  29.   
  30. launch>  


control.launch

[html] view plain copy print ?
  1. <launch>  
  2.   
  3.   <arg name="model" default="$(find urdf_tutorial)/urdf/r2d2.xacro"/>  
  4.   <arg name="rvizconfig" default="$(find urdf_tutorial)/urdf.rviz" />  
  5.   
  6.   <include file="$(find urdf_tutorial)/launch/gazebo.launch">  
  7.     <arg name="model" value="$(arg model)" />  
  8.   include>  
  9.   
  10.   <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" />  
  11.   
  12.     
  13.   <gazebo>  
  14.     <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">  
  15.       <robotNamespace>/robotNamespace>  
  16.     plugin>  
  17.   gazebo>  
  18.   
  19. robot>  


补充链接与资料:

1urdf http://wiki.ros.org/urdf

2xacro http://wiki.ros.org/xacro

----

End

----



你可能感兴趣的:(ros urdf 文件格式描述)