当前位置:   article > 正文

从零开始的三维激光雷达SLAM教程第二讲(搭建Gazebo仿真环境,并添加动态障碍物)_3d激光ros仿真

3d激光ros仿真

引言

毕业设计打算做三维激光SLAM,记录一些学习历程,也给后面人一点帮助。本教程不涉及SLAM基本概念(如果没有自行补充),主要包含以下几部分内容。

  1. 搭建激光SLAM的运行环境并运行数据集
  2. 在Gazebo中构建仿真地图并添加动态障碍物,使用仿真小车采集激光数据。
  3. A-LOAM详解,算法+代码
  4. Lego-LOAM详解,算法+代码
    完整代码链接在第一讲中

第二节:搭建仿真环境

下载velodyne激光模拟功能包

在完成上一节的内容后,直接clone这个包,然后编译

git clone https://github.com/lmark1/velodyne_simulator.git
  • 1

需要根据你自己的ros版本安装对应包

sudo apt-get install ros-kinetic-velodyne-*
  • 1

然后运行即可,运行如果gazebo一直卡住,参考解决方案

roslaunch velodyne_description example.launch 
  • 1

然后你就会看到机器人在场景中,以及rviz显示的点云图,它提供了16线和32线的模拟。
在这里插入图片描述

安装turtlebot3模拟器

turtlebot是使用最多的机器人模拟器,如果没安装的话请先安装

sudo apt-get install ros-noetic-turtlebot3-*
  • 1

安装三维激光雷达到turtlebot3上

我是默认你对urdf有一点了解的,当然其实也很简单,本质上还是个xml文件,每个标签代表了机器人的一部分。我们先在/opt/ros/xxx/share目录下找到turtlebot3的description功能包,为了不修改,我们把urdf文件托到自己功能包下修改,并增加VLP模块。VLP模块也要拖到自己功能包下,仿照velodyne_description中给的例子修改(需要注释掉inertial标签,因为激光的重量会造成机器人的翻倒)。
PS:gpu这个变量非常重要,只有设置为gpu的时候,才可以检测到动态障碍物,但是对性能要求更高

  <xacro:include filename="$(find 3d_slam_simulation)/urdf/VLP-16.urdf.xacro"/>
  <xacro:VLP-16 parent="base_link" name="velodyne" topic="/velodyne_points" hz="10" samples="440" gpu="false">
    <origin xyz="0 0 0.2" rpy="0 0 0" />
  </xacro:VLP-16>
  • 1
  • 2
  • 3
  • 4

具体内容看我给的github链接

构建Gazebo地图

可以参考这篇博客自己搭建仿真环境,当然我功能包里面有一个搭好的环境。在gazebo中添加地图也可以不显示GUI界面,后台运行,你操作机器人移动可以看激光雷达,在电脑运行不过来GUI的时候可以这么做,对虚拟机友好。

  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find 3d_slam_simulation)/world/gallery.world"/>
    <arg name="paused" value="false"/>
    <arg name="use_sim_time" value="true"/>
    <arg name="gui" value="false"/>
    <arg name="headless" value="false"/>
    <arg name="debug" value="false"/>
  </include>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

添加动态障碍物

Gazebo中添加了actor单位,可以通过指定巡航点的方式让其在环境中自行运动(当然也可以自己写插件,实现更复杂的运动规划)官方教程,其实很容易看懂,skin就是导入了一个人形的皮肤;animation就是让人以什么动作运动(可以跑步、走路、太空漫步等),然后运动做插值可以更顺畅;script里面是如何规划运动,直接使用trajectory标签就是根据waypoint点巡航,运动点首位相接就形成反复绕圈的景象,不相接会瞬间移动。

<actor name="actor">
  <skin>
    <filename>walk.dae</filename>
  </skin>
  <animation name="walking">
    <filename>walk.dae</filename>
    <interpolate_x>true</interpolate_x>
  </animation>
  <script>
    <trajectory id="0" type="walking">
      <waypoint>
        <time>0</time>
        <pose>0 2 0 0 0 -1.57</pose>
      </waypoint>
      <waypoint>
        <time>2</time>
        <pose>0 -2 0 0 0 -1.57</pose>
      </waypoint>
      <waypoint>
        <time>2.5</time>
        <pose>0 -2 0 0 0 1.57</pose>
      </waypoint>
      <waypoint>
        <time>7</time>
        <pose>0 2 0 0 0 1.57</pose>
      </waypoint>
      <waypoint>
        <time>7.5</time>
        <pose>0 2 0 0 0 -1.57</pose>
      </waypoint>
    </trajectory>
  </script>
</actor>
  • 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

操作机器人建图

安装键盘操作机器人运行的功能包

sudo apt-get install ros-kinetic-teleop-twist-keyboard
  • 1

使用功能包控制机器人运行并建图,也可以先录制成rosbag后再播放建图,对电脑压力小一些。
aloam要先启动地图,再启动算法(不清楚为什么,不然会出现问题)

roslaunch 3d_slam_simulation gazebo_turtlebot3.launch 
roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch 
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
  • 1
  • 2
  • 3

最终效果

在这里插入图片描述

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/87145
推荐阅读
相关标签
  

闽ICP备14008679号