ROS小车URDF模型

ROS小车URDF模型的构建

  构建小车urdf模型是一方面是为了构建出小车上各类传感器的TF坐标系,另一方面是为了小车在后续的导航建图中更具有展示度。

创建功能包并完成初始化

mkdir –p ~/myrobot/src
cd ~/myrobot/
catkin_make
cd myrobot/src
catkin_create_pkg  smart_car urdf
cd ..
catkin_make smart_car

创建URDF文件并检查

  在samrt_car功能包目录下,新建urdf文件,并完成tf坐标系的固定,具体程序如下:

<robot name="test_robot"> 
<!--  *********************** 车体 ******************************* -->
 <link name="base_link">  
   <visual>  
      <geometry>  
        <box size="0.2 .4 .1"/>  
      </geometry>  
      <origin rpy="0 0 0" xyz="0 0 0.05"/>  
      <material name="yellow">  
        <color rgba="255 153 0 1"/>  
      </material>  
   </visual>  
 </link>  

 <link name="base_link1">  
   <visual>  
      <geometry>  
        <box size="0.01 .1 .2"/>  
      </geometry>  
      <origin rpy="0 0 0" xyz="0.085 0.15 0.2"/>  
      <material name="silver">  
        <color rgba=".86 .86 .86 1"/>  
      </material>  
   </visual>  
 </link> 

<link name="base_link2">  
   <visual>  
      <geometry>  
        <box size="0.01 .1 .2"/>  
      </geometry>  
      <origin rpy="0 0 0" xyz="-0.085 0.15 0.2"/>  
      <material name="silver">  
        <color rgba=".86 .86 .86 1"/>  
      </material>  
   </visual>  
 </link> 

<link name="base_link3">  
   <visual>  
      <geometry>  
        <box size="0.18 .1 .01"/>  
      </geometry>  
      <origin rpy="0 0 0" xyz="0 0.15 0.3"/>  
      <material name="silver">  
        <color rgba=".86 .86 .86 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.15 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.15 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.15 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.15 0"/>  
     <material name="black"/>  
   </visual>  
 </link>  

 <link name="wheel_5">  
   <visual>  
     <geometry>  
       <cylinder length="0.05" radius="0.05"/>  
     </geometry>  
     <origin rpy="0 1.5 0" xyz="-0.1 0 0"/>  
     <material name="black"/>  
   </visual>  
 </link>  
 <link name="wheel_6">  
   <visual>  
     <geometry>  
       <cylinder length="0.05" radius="0.05"/>  
     </geometry>  
     <origin rpy="0 1.5 0" xyz="0.1 0 0"/>  
     <material name="black"/>  
   </visual>  
 </link> 


<!-- ****************雷达******************************** -->

 <link name="velodyne">
   <visual>
     <origin xyz="0 0 0" /> 
<!-- 这里的XYZ 是指模块的世界坐标原点 设为“0 0 0”即将该模块的世界坐标原点和base—link的世界坐标统一 -->
     <geometry>
       <cylinder length="0.05" radius="0.05" />
     </geometry>
     <material name="blue" />
     <color rgba="0 0 .8 1"/>
   </visual>
 </link>

<!-- ****************  IMU  ******************************** -->

 <link name="imu">
   <visual>
     <origin xyz="0 -0.15 .1" />
     <geometry>
       <cylinder length="0.01" radius="0.01" />
     </geometry>
     <material name="gray" />
   </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>  

 <joint name="joint_base_wheel5" type="fixed">  
   <parent link="base_link"/>  
   <child link="wheel_5"/>  
 </joint>

 <joint name="joint_base_wheel6" type="fixed">  
   <parent link="base_link"/>  
   <child link="wheel_6"/>  
 </joint> 

 <joint name="joint_base_link1" type="fixed">  
   <parent link="base_link"/>  
   <child link="base_link1"/>  
 </joint>

 <joint name="joint_base_link2" type="fixed">  
   <parent link="base_link"/>  
   <child link="base_link2"/>  
 </joint>   

 <joint name="joint_base_link3" type="fixed">  
   <parent link="base_link"/>  
   <child link="base_link3"/>  
 </joint>  

 <joint name="laser2link" type="fixed">
   <parent link="base_link" />
   <child link="velodyne" />
   <origin xyz="0 0.15 0.33" rpy="0 0 0" />
<!-- 这里的XYZ用于设定该模块的位置,这样设定后,该模块的TF将固定模块上 -->
 </joint>

 <joint name="imu2link" type="fixed">
   <parent link="base_link" />
   <child link="imu" />
   <origin xyz="0 0 0" rpy="0 0 0" />
 </joint>        
</robot> 

检查文件语法与配置是否正确

  URDF提供了一些命令行工具,可以帮助我们检查、梳理模型文件,需要在终端独立安装:

sudo apt install liburdfdom-tools

接着使用如下命令,检查文件的配置和语法:

check_urdf myrobot.urdf

在这里插入图片描述

  小车模型文件无误,可以运行测试。

查看URDF模型整体结构

  执行一下命令生成test_robot.gv和test_robot.pdf两个文件:

urdf_to_graphiz myrobot.urdf

在这里插入图片描述
在这里插入图片描述

编写launch启动文件

  在smart_car文件夹下,新建launch文件夹,并在该文件夹下新建myrobot.launch文件:

<?xml version="1.0"?>
<launch>
	<arg name="model"/>
	<arg name="gui" default="False"/>
	<param name="robot_description" textfile="$(arg model)"/>
	<para 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="robot_state_publisher"/>
</launch>

启动文件:

roslaunch myrobot.launch model:="../urdf/myrobot.urdf"

打开rviz界面,添加robotmodel和TF
在这里插入图片描述
在这里插入图片描述

后期将小车的urdf模型复制到导航建图算法中,即可使用,无需再写其他配置文件,如下图:
在这里插入图片描述

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值