ROS学习(1)使用URDF创建机器人3D仿真模型

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

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

一,软件环境

OS:Ubuntu 14.04

ROS:Indigo Full package

二,智能车尺寸数据

因为建立的是一个非常简单的机器人,所以我们尽量使用简单的元素:使用长方体代替车模,使用圆柱代替车轮,具体尺寸如下:

准备:

1.创建Rospackage命名为smartcar

catkin_create_pkgsmartcar  std_msgs rospy roscpp urdf 

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


三、建立urdf文件

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

<?xml version="1.0"?>
<robot name="smartcar">
  <link name="base_link">
    <visual>
      <geometry>
        <box size="0.25 .16 .05"/>
	</geometry>
	<origin rpy="0 0 1.57075" xyz="0 0 0"/>
    <material name="blue">
		<color rgba="0 0 .8 1"/>
	</material>
    </visual>
 </link>

 <link name="right_front_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="right_front_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="right_front_wheel"/>
    <origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="right_back_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="right_back_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="right_back_wheel"/>
    <origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
 </joint>

 <link name="left_front_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="left_front_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="left_front_wheel"/>
    <origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="left_back_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="left_back_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="left_back_wheel"/>
    <origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="head">
    <visual>
      <geometry>
        <box size=".02 .03 .03"/>
      </geometry>
	  <material name="white">
		  <color rgba="1 1 1 1"/>
	  </material>
    </visual>
  </link>

  <joint name="tobox" type="fixed">
    <parent link="base_link"/>
    <child link="head"/>
    <origin xyz="0 0.08 0.025"/>
  </joint>
</robot>

该文件可以帮助启动RViz来观察机器人。其中有三个node,一个是rviz,另外两个joint_state_publisher robot_state_publisher是必须的node。

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

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

四,创建display.launch文件

<launch>
	<arg name="model" />
	<arg name="gui" default="False" />
	<param name="robot_description" textfile="($find smartcar)/urdf/smartcar.urdf)" />
	<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>



link可以指定许多属性:

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

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

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

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


运行

roslaunch smartcar display.launch gui:=true 



ROS学习(1)使用URDF创建机器人3D仿真模型_第1张图片




参考:

1.Learning ROS for Robotics Peogramming

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

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

你可能感兴趣的:(ROS)