gazebo世界场景

在launch文件中加入 gazebo世界场景的配置

场景选择了软件博物馆,其中场景的结构比较丰富,适于激光雷达建图定位,颜色也比较丰富,后期还可用于相机的建图定位.

    <!-- 设置gazebo世界   -->
    <arg name="world" value="$(find robot_sim_demo)/worlds/ROS-Academy.world"/>   <!-- 加载gazebo世界:软件博物馆 加载速度还可以场景丰富 -->

    <!-- 启动gazebo世界   -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="world_name" value="$(arg world)"/> 
        <arg name="paused" value="false"/> 
        <arg name="use_sim_time" value="true"/> 
        <arg name="gui" value="true"/> 
        <arg name="headless" value="false"/> 
        <arg name="debug" value="false"/> 
        <arg name="verbose" value="true"/>
    </include>

场景如下:
在这里插入图片描述

AGV模型

搭建一个简单的AGV小车,不用外观多么漂亮,主要能用就行.

设计一个简单的车体

  • 一个长方体作为车身
  • 4个圆柱体作为轮子
  • 在车身前放加个小正方体,来识别车头
    就ok了

在这里插入图片描述
在这里插入图片描述
XACRO如下:(主要部分,所有部分可以留言索取)
车体部分

  <link name="base_footprint">
      <visual>
          <origin xyz="0 0 0" rpy="0 0 0" />
          <geometry>
              <box size="0.001 0.001 0.001" />
          </geometry>
          <material name="Green" />
      </visual>

      <collision>
          <origin xyz="0 0 0" rpy="0 0 0" />
          <geometry>
              <box size="0.001 0.001 0.001" />
          </geometry>
      </collision>
  </link>
<!-- Macro for base_link -->
  <link name="base_link">
      <juxing_inertial_matrix  m="20" a="0.25" b="0.16" c="0.05" />

      <visual>
           <geometry>
               <box size="0.25 0.16 0.05"/>
           </geometry>
       <origin rpy="0 0 0" xyz="0 0 0"/>
           <material name="blue" />
      </visual>

      <collision>
          <origin rpy="0 0 0" xyz="0 0 0"/>
          <geometry>
              <box size="0.25 0.16 0.05" />
          </geometry>
      </collision>
  </link>
  <gazebo reference="base_link">
    <material>Gazebo/Blue</material>
    <turnGravityOff>false</turnGravityOff>
  </gazebo>

  <joint name="base_footprint_joint" type="fixed">
      <origin xyz="0 0 0.04" rpy="0 0 0" />
      <parent link="base_footprint"/>
      <child link="base_link" />
  </joint>

轮子部分

    <wheel prefix="qleft" x="1" y="1" z="1"/>
    <wheel prefix="qright" x="1" y="-1" z="1"/>
    <wheel prefix="hleft" x="-1" y="1" z="1"/>
    <wheel prefix="hright" x="-1" y="-1" z="1"/>

    <gazebo reference="qright_front_wheel">
      <material>Gazebo/FlatBlack</material>
    </gazebo>

    <gazebo reference="hright_front_wheel">
        <material>Gazebo/FlatBlack</material>
    </gazebo>

    <gazebo reference="qleft_front_wheel">
        <material>Gazebo/FlatBlack</material>
    </gazebo>

    <gazebo reference="hleft_front_wheel">
        <material>Gazebo/FlatBlack</material>
    </gazebo>

车头部分

 <!-- HEAD Link -->
  <link name="head_link">
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
        <box size="${x_length/1} ${y_length/1} ${z_length/1}"/>
      </geometry>
    </collision>

    <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
        <box size="${x_length/1} ${y_length/1} ${z_length/1}"/>
      </geometry>
     <material name="SwivelGreen" /> 
    </visual>

    <inertial>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <mass value="${m_scale*0.1}"/>
      <inertia
        ixx="1.0" ixy="0.0" ixz="0.0"
        iyy="1.0" iyz="0.0"
        izz="1.0"/>
    </inertial>
  </link>

  <gazebo reference="head_link">
    <material>Gazebo/Red</material>
  </gazebo>


    <joint name="head_base_joint" type="fixed">  
        <origin xyz="0.14 0 0" rpy="${0*DEG2RAD} ${0*DEG2RAD} ${0*DEG2RAD}"/>
        <parent link="base_link"/>
        <child link="head_link"/>
    </joint>

轮子的控制器

  <gazebo>
    <plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so">
      <alwaysOn>true</alwaysOn>
      <updateRate>100</updateRate>
      <leftFrontJoint>qleft_front_wheel_joint</leftFrontJoint>
      <rightFrontJoint>qright_front_wheel_joint</rightFrontJoint>
      <leftRearJoint>hleft_front_wheel_joint</leftRearJoint>
      <rightRearJoint>hright_front_wheel_joint</rightRearJoint> 
      <wheelSeparation>0.16</wheelSeparation> 
      <wheelDiameter>0.05</wheelDiameter>
      <torque>20</torque>
      <commandTopic>cmd_vel</commandTopic>
      <odometryTopic>odom</odometryTopic>
      <odometryFrame>odom</odometryFrame>
      <robotBaseFrame>base_footprint</robotBaseFrame>
      <broadcastTF>1</broadcastTF>
    </plugin>
 </gazebo>

Velodyne 激光雷达

AGV小车有了,下面需要安装激光雷达了
需要下载 velodyne_sim_gazebo的ROS功能包,该功能包可以在gazebo中模拟该激光雷达.

然后在 xacro中加入下面代码

  <xacro:include filename="$(find velodyne_description)/urdf/VLP-16.urdf.xacro"/>
  <VLP-16 parent="base_link" name="velodyne" topic="/velodyne_points">
    <origin xyz="0 0 0.1" rpy="0 0 0" />
  </VLP-16>

此时我们的仿真场景就搭建好了
在这里插入图片描述
整体如下:
在这里插入图片描述

测试

可以在rviz中测试下激光雷达的数据
现在好 Fixed Frame后
添加 PointCloud2 消息
Topic 选择/velodyne_points
在这里插入图片描述
之后就可以看到点云了:
在这里插入图片描述
通过发布/cmd命令可以控制车移动