ROS之初学URDF

初学ROS(一)之URDF

首先在下小白刚开始学ROS,写此是为了记录和帮助有可能遇到和我一样问题的人,大佬有问题请指出  0.0

可能大部分人都像我这样穷学生没钱买ROS支持的机器人,不过ROS还是很Nice的考虑到了这一群体,提供了模拟器支持。(明明是为了更快速的软件开发,喂!)

本想从ROS网站的培训教程开始http://wiki.ros.org/urdf/Tutorials开始的,不过本着实践为本的目的,我们还是以《Learning ROS for Robostic Programming》为基础吧。

参考文献

1.ROS学习之URDF

2.ROS urdf教程

2. 《Learning ROS for Robostic Programming》

3.urdf 学习笔记一     一篇不错的教程(小车):

软件环境

ubuntu 16.04 lts

ros kinetic full package

准备工作

安装urdf_tutorial包

$sudo apt-get install ros-kinetic-urdf-tutorial
$roscore
$rosrun rviz rviz
新建工作区和包
$mkdir -p ~/catkin_ws/src                                  #创建catkin工作环境
$cd ~/catkin_ws/src                                        #来到src目录
$cd  ..                                                    #来到catkin_ws目录下
$catkin_init_workspace
$catkin_make
更新环境配置
$source devel/setup.bash
创建Rospackage命名为smartcar:在src目录下面执行以下操作
$catkin_create_pkg smartcar std_msgs rospy roscpp urdf    #创建这些格式的目录
在smartcar文件夹中创建launch和urdf分别来存放.launch文件和.urdf文件

当然,没有运行roscore你的rviz也无法启动。不过如果错误显示你的rviz找不到执行文件的话

学习写urdf有几个地方需要注意

  • 一定要记住它使用的是右手坐标系。x正方向朝左, y 正方向向内, z轴正方向朝上
  • 构建树结构, 即写link和joint
  • 每个link的参考坐标系都在它的底部,并与关节的参考坐标系正交,为了添加尺寸,需要指定偏移从一个link到它的关节的子link, 这通过添加origin到每个节点解决。
  • 这么说origin表示的是关节相对于父关节的距离和旋转, xyz和rpy

建模使用参数

  1. <link> tag描述各个部件;

eg:<link name="base_link" /> 

  1. <joint> tag描述各个关节;

eg:

<joint name="joint_base_wheel1" type="fixed">  

    <parent link="base_link"/>  

    <child link="wheel_1"/>  

  </joint>  

  1. <parent>和<child>描述关节连接的部件;
  2. <visual>tag 定义一个link的外观,大小,颜色和材质纹理贴图;用来描述模块的视觉效果;
  3. <visual>定义:<geometry> 定义了几何形状为一个立方体,三个参数分别为长宽高,单位是米(m). 这里我们指定下层小车板子的板的尺寸。<geometry>可以有好几个选项:<box> 立方体  <cylinder>圆柱体  <sphere>球体

<link name="wheel_1">  

    <visual>  

      <geometry>  

        <cylinder length="0.05" radius="0.05"/>  

      </geometry>  

      <origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>  

    </visual>  

  </link>  

  1. <inertial>  定义惯性;
  2. <geometry>tag 用来描述模块的形状和大小;
  3. <origin>tag用来描述模块的位置;
  4. 使用<material> tag并且设置<color> tag     上色
  5. <material> 指定颜色rgb和透明度a.  它们取值范围都是[0,1] 区间。

代码示例:第一个部件必须是base_link非常重要

<robot name="test_robot">  
  <link name="base_link">  
    <visual>  
       <geometry>  
         <box size="0.2 .3 .1"/>  
       </geometry>  
       <origin rpy="0 0 0" xyz="0 0 0.05"/>  
       <material name="white">  
         <color rgba="1 1 1 1"/>  
       </material>  
    </visual>  
  </link>  
  
  <link name="wheel_1">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>  
      <material name="black">  
        <color rgba="0 0 0 1"/>  
      </material>  
    </visual>  
  </link>  
  
  <link name="wheel_2">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/>  
      <material name="black"/>  
    </visual>  
  </link>  
  
  <link name="wheel_3">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/>  
      <material name="black"/>  
    </visual>  
  </link>  
  
  <link name="wheel_4">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/>  
      <material name="black"/>  
    </visual>  
  </link>  
  
  <joint name="joint_base_wheel1" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_1"/>  
  </joint>  
  
  <joint name="joint_base_wheel2" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_2"/>  
  </joint>  
  
  <joint name="joint_base_wheel3" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_3"/>  
  </joint>  
  
  <joint name="joint_base_wheel4" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_4"/>  
  </joint>  
</robot> 

我们可以用如下命令来检查urdf文件是否有语法问题。 

check_urdf 01_skeleton.urdf  

只要得到如下结果就表明语法没问题。 

robot name is: test_robot  
---------- Successfully Parsed XML ---------------  
root Link: base_link has 4 child(ren)  
    child(1):  wheel_1  
    child(2):  wheel_2  
    child(3):  wheel_3  
    child(4):  wheel_4  

现在通过如下命令,你就通过rviz查看你的小车模型啦。

roslaunch  smartcar_description  base.urdf.rviz.launch  gui:=true

猜你喜欢

转载自blog.csdn.net/weixin_42693104/article/details/81086880