前言
随着科技的发展,无人驾驶的技术被一步一步的研究实现,SLAM,全名是simultaneous localization and mapping,即时定位与地图构建,就是走向无人驾驶的一大步技术。SLAM要求机器人能够即使的感知到自己的位置,并且建立地图,进行定位导航,得以实现各种各样的功能。而如今机器人领域已经迎来了开源共享式的时代,ROS就是其中的代表之一,许多不论软件还是硬件,都加以开源,为业界的行业标准的统一添砖加瓦。Turtlebot是不论教学还是实验都十分基础并且友善的开源硬件与移动地盘,价格适宜,是许多高校、实验室机器人的首选;Rplidar_a3,即思岚科技(SLAMTEC)开发的一款360度激光测距扫描雷达,是低成本2D激光雷达产品中,性价比较为高的一款激光雷达。
本文介绍如何使用Turtlebot2(下文简称TB2)以及Rplidar_a3(下文简称rplidar或laser)进行建图、定位以及导航。
需要什么
- Kobuki 移动基站(即TB2的移动底座)
- 至少一台的笔记本电脑(或者嵌入式板,本文以笔记本电脑为例,配置:华硕;inter i5)
- 停靠站(充电站,充电方式有两种 1.直接对底部电池充电(需拆卸) 2.使用停靠站对机器人充电(只需要机器人底部的金属与充电站重合,黄灯灭,即表示在充电)
- (可选)如果有两台电脑可以选择一台作为上网本(放在TB2上),一台作为工作站(无需移动)
- 遥控鼠标键盘或者手柄(如果有工作站可不用)
- usbhub
硬件安装
- kobuki与上网本的链接参考此处;
- rplidar可以放在第二层或者第三层或者最高一层(如果有两台电脑,可以将上网本放在第二第三层)
- 将rplidar的驱动与电脑usb链接,供电端也可以用usb口供电(5v 0.5A)也可以用其他的移动电源供电。
rplidar的运作视频
软件安装
- 系统:Ubuntu16.0(可以直接单系统安装或者双系统安装,参考:只需要安装ubuntu即可,其他的先不用 )
- ROS版本:kinetic(参考此处安装)
- turtlebot2包的安装及简单测试(参考此处的TB2base pkg)
sudo apt-get update sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-kobuki-ftdi ros-kinetic-ar-track-alvar-msgs ros-kinetic-turtlebot-simulator
手动下载rocon_qt_gui和turtlebot_simulation(这个教程已经过时,需要换成turtlebot_simulator下载)
- 安装rplidar的驱动(参考此处)
!!!注意:
此处的launch文件里有一个发布laser到baselink的tf,其坐标变换其实是错误的
<node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.18 0 0.0 0.0 base_link laser 100"/>
args="0.0 0.0 0.18 0 0.0 0.0 表示 x=0 y=0 z=0.18 pitch=0 roll=0 yaw=0,但是其实laser得到的数据和baselink应该是180度pitch翻转的,所以正确的tfnode应该为
<node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.18 3.14 0.0 0.0 base_link laser 100"/>
测试底盘、以及rplidar
底盘测试通过minimal.launch 以及键盘控制node,参考此处
rplidar通过驱动哭的 view_rplidar_a3.launch查看数据是否正确(转速大概在8HZ,是正常现象)
下载SLAM代码安装测试
基于2D激光的SLAM算法有很多,gmapping、karto_slam、cartographer,其中gmapping是不带回环检测的,后面两个都是基于图优化的,cartographer是目前的2D state of art(?)
这篇文章有三种算法的下载安装
切忌之前laser的tf变换需要180度的翻转,否则会出现如同这里一样的现象
注意调整tf_tolerance 如果用两台电脑,那么工作站和上网本的延时很可能造成建图过程中出现下面这个错误,无法继续建图(建议使用手柄或者遥控键盘控制)
Could not get robot pose, cancelling reconfiguration Extrapolation Error looking up robot pose: Lookup would require extrapolation into the past.
定位与导航
得到地图了之后,就可以开始进行定位以及导航了,具体参考这两篇文章
src下的所有代码打包(karto_slam)
我上传了github工程,将所有更改过的cw(catkin_workspace)下src的文件都上传,请自行下载