• 3D激光SLAM:ALOAM---gazebo仿真测试场景搭建


    3D激光SLAM:ALOAM---gazebo仿真测试场景搭建

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    轮子部分

        <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    车头部分

     <!-- 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    轮子的控制器

      <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    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>  
    
    • 1
    • 2
    • 3
    • 4

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

    测试

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

  • 相关阅读:
    基于OpenHarmony的智能阳台
    活动预告|“构建新安全格局”专家研讨会即将开幕
    Debian跳过grub页面
    Linux:管道
    LiveData常见问题
    PostgreSQL 与 Oracle 访问分区表执行计划差异
    yolov5模型代码怎么修改
    空洞卷积、可变形卷积、可变形ROI Pooling
    Android内存泄漏
    AI为方,产业为向:京东云数字人的技术攀爬
  • 原文地址:https://blog.csdn.net/qq_32761549/article/details/125780188