ROS中使用URDF

来源:互联网 发布:nba骑士vs公牛数据 编辑:程序博客网 时间:2024/05/21 12:51

在没有机器人实物的情况下,ROS里面的机器人仿真软件是个不错的选择。

1.软件环境:

ubuntu 16.04 lts

ros kinetic full package

2.准备:

在终端输入以下内容,

mkdir -p ~/catkin_ws/src#创建catkin工作环境

cd ~/catkin_ws/src#来到src目录

初始化一下,

cd  ..#来到catkin_ws目录下

catkin_init_workspace

初始化之后我们编译一下我们的工作空间,

catkin_make

更新环境配置,

source devel/setup.bash

3.创建Rospackage命名为smartcar

在src目录下面执行以下操作,

catkin_create_pkg smartcar std_msgs rospy roscpp urdf#创建这些格式的目录

4.在smartcar文件夹launch和urdf分别来存放.launch文件和.urdf文件

在smartcar文件夹下建立urdf文件夹,创建智能车的描述文件smart.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>  
在urdf文目录下我们检查描述文件:

check_urdf smartcar.urdf

然后在终端可以
看到

robot name is:smartcar

-------------successfully parsed xml-------------

robot link: base-link has 5 child(ren)

child(1): left_back_wheel

child(2): left_front_wheel

chlid(3): right_back_wheel

child(4): right_front_wheel

child(5): head

5.创建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>  
这个文件可以帮助启动Rviz来观察机器人。其中有三个node,一个是rviz,另外两个是joint_state-publisher robot_state_publisher是必须的node。

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

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

link可以指定许多属性:

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

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

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

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