最近从零开始学习做一台SLAM激光雷达小车,遇到了很多问题,看了很多博主的文章,有些方法记不太清,所以想自己写个文章记录一下
Ubuntu安装
首先是安装ubuntu系统,使用虚拟机或者树莓派,我安装的是Ubuntu20.04
虚拟机安装方法指路VMware虚拟机安装Ubuntu20.04详细图文教程
树莓派安装方法指路树莓派安装ubuntu20.04、图形桌面、ROS笔记
ssh连接我使用的是vscode,没有遇到什么问题,这个教程很多
ros安装
这一部分可以参考ROS官方教程
我推荐这个教程1.2.4 安装 ROS · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程
测试的话roscore就可以了,还可以跑个小乌龟
激光雷达
激光雷达读取数据需要USB转TTL驱动(一般ubuntu自带)和雷达的功能包(买雷达会给吧)
下面写几个常用的功能
创建工作空间
创建ROS工作空间指路ubuntu20.04安装ros noetic以及创建ros工作空间catkin_ws
最后要打开.bashrc文件
cd ~
gedit .bashrc
来到文件最底部,看到以下两行就成功了
串口别名设置
串口别名设置指路在ubuntu系统下给串口起别名
查看已连接的usb设备
lsusb
这个CP210x就是激光雷达
查看串口名
ll /dev/|grep ttyUSB
这个ttyUSB0就是默认的串口名,下面那个wheeltec_lidar是我自己创建的别名
启动雷达
roslaunch lslidar_driver lslidar_serial.launch
这个是我自己买的雷达的启动代码,运行自己的雷达的launch文件就好
在雷达的launch文件按中可以查看雷达的相关信息,包括发布的话题,正常的话这个时候就可以通过rviz查看雷达的点云图像了
话题相关
写几个常用的rostopic命令
rostopic list
列出当前所有的话题列表
rostopic info [topic name]
显示某个话题的消息类型、发布者和订阅者
rostopic echo [topic name]
查看某个话题的具体信息
rosnode list
列出当前正在运行的节点
建图
安装gmapping
rivz软件一般ros自带,打开新终端输入rviz即可查看
gmapping需要根据自己的ros版本下载,roscore可以查看ros版本信息,我是noetic
安装方法如下
sudo apt install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control
sudo apt-get install ros-noetic-turtlebot-*
sudo apt install ros-noetic-gmapping
关于gmapping算法还有一篇不错的文章,指路保姆级Gmapping算法介绍到复现
tf转换问题
gmapping程序需要订scan和tf两个话题,前者是激光雷达数据,后者是坐标系转换参数。因为我只有一个激光雷达,没有里程计,因此是没有直接的tf话题的,所以tf转换是走不通的,具体查看tf转换的指令如下
rosrun rqt_tf_tree rqt_tf_tree
无里程计建图需要用到功能包laser_scan_matcher,援引相关文章的介绍,laser_scan_matcher 功能包是增量激光扫描配准工具,该软件包允许扫描连续的sensor_msgs/LaserScan消息之间的匹配,并将估计的激光位置发布为geometry_msgs/Pose2D或tf变换。该包可以在没有其他传感器提供的任何测距估计的情况下使用,因此,它可以作为独立的里程计算器估算器。
在GitHub - CCNYRoboticsLab/scan_tools: ROS Laser scan tools下载功能包,复制到ros工作区的src文件夹中,进行编译
catkin_make
通常会出现没有csm的报错,这时下载一下
sudo apt install ros-noetic-csm
之后要修改launch文件,有一篇非常好的文章
文章链接ROS:激光雷达+laser_scan_matcher 运行gmapping
此时可以实现建图,判断自身位置和姿态
roslaunch laser_scan_matcher demo_gmapping.launch
保存和调用地图
需要用到map_server功能包
下载功能包
sudo apt-get install ros-noetic-map-server
这个功能包可以保存和发布地图,地图会保存为一个pgm文件和一个yaml文件,前者是地图的图片文件,后者用于描述地图信息
保存地图
rosrun map_server map_saver -f file_name
调用地图
rosrun map_server map_server file_name.yaml
定位
amcl功能在navigation功能包中
下载功能包
sudo apt-get install ros-noetic-navigation