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

文章目录

  • 引言
  • 第二节:搭建仿真环境
    • 下载velodyne激光模拟功能包
    • 安装turtlebot3模拟器
    • 安装三维激光雷达到turtlebot3上
    • 构建Gazebo地图
    • 添加动态障碍物
    • 操作机器人建图
    • 最终效果

引言

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

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

第二节:搭建仿真环境

下载velodyne激光模拟功能包

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

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

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

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

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

roslaunch velodyne_description example.launch 

然后你就会看到机器人在场景中,以及rviz显示的点云图,它提供了16线和32线的模拟。
从零开始的三维激光雷达SLAM教程第二讲(搭建Gazebo仿真环境,并添加动态障碍物)_第1张图片

安装turtlebot3模拟器

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

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

安装三维激光雷达到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>

具体内容看我给的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>

添加动态障碍物

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

<actor name="actor">
  <skin>
    <filename>walk.daefilename>
  skin>
  <animation name="walking">
    <filename>walk.daefilename>
    <interpolate_x>trueinterpolate_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>

操作机器人建图

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

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

使用功能包控制机器人运行并建图,也可以先录制成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

最终效果

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

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

你可能感兴趣的:(slam,机器人)