毕业设计打算做三维激光SLAM,记录一些学习历程,也给后面人一点帮助。本教程不涉及SLAM基本概念(如果没有自行补充),主要包含以下几部分内容。
在完成上一节的内容后,直接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线的模拟。
turtlebot是使用最多的机器人模拟器,如果没安装的话请先安装
sudo apt-get install ros-noetic-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中添加地图也可以不显示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