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
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ROS小车的URDF模型可以根据具体的小车类型和设计进行创建,下面是一个简单的示例: ```xml <?xml version="1.0"?> <robot name="ros_car"> <!-- 定义小车的基座 --> <link name="base_link"> <visual> <geometry> <box size="0.5 0.3 0.2"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="blue"> <color rgba="0.2 0.2 0.8 1"/> </material> </visual> <collision> <geometry> <box size="0.5 0.3 0.2"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> </collision> <inertial> <mass value="1.0"/> <origin rpy="0 0 0" xyz="0 0 0"/> <inertia ixx="0.1" ixy="0.0" ixz="0.0" iyy="0.1" iyz="0.0" izz="0.1"/> </inertial> </link> <!-- 定义小车的轮子 --> <link name="wheel_link"> <visual> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> <origin rpy="0 1.5708 0" xyz="0 0 0"/> <material name="black"> <color rgba="0 0 0 1"/> </material> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.05"/> </geometry> <origin rpy="0 1.5708 0" xyz="0 0 0"/> </collision> <inertial> <mass value="0.1"/> <origin rpy="0 0 0" xyz="0 0 0"/> <inertia ixx="0.0005" ixy="0.0" ixz="0.0" iyy="0.0005" iyz="0.0" izz="0.0005"/> </inertial> </link> <!-- 定义小车的轮子连接 --> <joint name="wheel_joint" type="continuous"> <parent link="base_link"/> <child link="wheel_link"/> <origin xyz="0.25 0 -0.1" rpy="0 0 0"/> <axis xyz="0 1 0"/> </joint> <!-- 定义小车的传感器 --> <link name="sensor_link"> <visual> <geometry> <cylinder length="0.05" radius="0.02"/> </geometry> <origin rpy="0 0 0" xyz="0.2 0 0"/> <material name="red"> <color rgba="1 0 0 1"/> </material> </visual> <collision> <geometry> <cylinder length="0.05" radius="0.02"/> </geometry> <origin rpy="0 0 0" xyz="0.2 0 0"/> </collision> <inertial> <mass value="0.05"/> <origin rpy="0 0 0" xyz="0 0 0"/> <inertia ixx="0.00005" ixy="0.0" ixz="0.0" iyy="0.00005" iyz="0.0" izz="0.00005"/> </inertial> </link> <!-- 定义小车的传感器连接 --> <joint name="sensor_joint" type="fixed"> <parent link="base_link"/> <child link="sensor_link"/> <origin xyz="0.25 0 0.1" rpy="0 0 0"/> </joint> </robot> ``` 在这个示例中,我们定义了一个名为"ros_car"的机器人,它由基座、轮子和传感器组成。基座由一个长方体表示,轮子由一个圆柱体表示,传感器由一个较小的圆柱体表示。连接由各自的关节表示。您可以根据您的小车类型和设计进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值