文章目录
一、所用功能包和串口
1.功能包
本项目采用几个开源项目的功能包实现基于激光雷达进行SLAM建图和导航。所用代码可在码云上进行下载。
该功能包需要在主从机上各自留存一份并编译一份。
2.串口
在本项目中采用树莓派作为上位机进行开发,需要将雷达和下位机与树莓派进行串口通讯。此处通过测试,我的雷达串口为 /dev/ttyUSB1 ,下位机串口为 /dev/ttyUSB0 。
如果你不知道自己的串口,可以通过插拔器件然后使用指令 ls /dev/ttyUSB* 进行查看所用串口。
你需要根据自己的实际情况,修改如下文件:
下位机串口
修改功能包zxcar下launch文件夹内的文件bringup.launch,将自己的串口号下图所示位置。
雷达串口
修改功能包zxcar下文件夹launch/lidar 中文件rplidar.launch ,将自己的雷达串口填入下图位置中。
二、创建工作空间与编译
1.创建工作空间
建立新的工作空间并将下载的功能包置入其下文件夹src中。
2.编译
在工作空间下进行编译,初次编译可能会出现报错,根据报错提示进行下载相关依赖即可。
具体方式可参考:ROS依赖包安装问题
此处使用指令sudo apt-get install ros-melodic-geographic-msgs安装所需依赖包,随后再次进行编译即可。
3.权限
在linux中运行python文件需要给予其可执行权限,为减少麻烦,此处直接运行指令 **sudo chmod -R +x src/**赋予所有功能包内文件可执行权限。
4.刷新环境
为了方便之后运行ROS程序时,无需重复刷新环境,此次将source命令写入 .bashrc文件中确保了每次开启命令行时,直接进行刷新。
sudo vi ~/.bashrc
在文件末尾写上内容:
source ~/ws/devel/setup.bash
三、校准
由于imu在安装时可能存在倾斜等问题,需要进行校准。
1.校准imu
首先在树莓派端(主机端)启动zxcar功能包下的bringup.launch文件,待出现字样 “zxcar_driver start success!” 即表示为启动成功。
roslaunch zxcar bringup.launch
随后另起命令行,继续在主机端启动do_calib节点进行imu的校准。在进行此操作时,小车应当静止平放在地面上,不要用手触碰小车以确保校准的精度。
rosrun imu_calib do_calib
根据提示 Press [ENTER] once done. 敲击回车键进行下一步测量。共计需要测量六次
待校准完成后,将会在当前目录下生成文件imu_calib.yaml,需要将该文件替换 /zxcar/param/imu 目录下的同名文件。
roscd zxcar/param/imu/
sudo rm -rf imu_calib.yaml
mv ~/imu_calib.yaml ~/ws/src/zxcar/param/imu/
2.校准角速度
在树莓派端(主机端)启动zxcar功能包下的bringup.launch文件并另开命令行启动calibrate_angular节点。待出现字样 “Bring up rqt_reconfigure to control the test.” 即表示为成功启动。
在PC端(从机端)根据提示启动rqt工具。
rosrun rqt_reconfigure rqt_reconfigure
此处可修改的参数如下:
- test_angle :测试旋转的角度
- speed :测试旋转的速度
- tolerance : 测试的误差范围
保持默认参数不变,将手机指南针调出并平方在小车上方,记录当前角度值后勾选start_test,开始测试并记录手机上最终的角度,计算小车旋转的角度。
此处我的小车旋转了355度,就用355/360,计算缩放系数。再次测量旋转的效果,取多次测量的平均数目填入bringup.launch文件中。
roscd zxcar/launch/
sudo vi bringup.launch
3.校准线速度
同样,需要对线速度进行校准
主机中分别在两个命令行中运行如下指令:
roslaunch zxcar bringup.launch
rosrun zxcar_nav calibrate_linear.py
待出现 Bring up rqt_reconfigure to control the test. 提示后,在从机上运行rqt工具
rosrun rqt_reconfigure rqt_reconfigure
同样点击start_test后进行测试,并用卷尺测量小车行走距离。此处我测量行走了1.02米,除以1米后将所得缩放系数填入bringup.launch文件中。
roscd zxcar/launch/
sudo vi bringup.launch
四、雷达建图与导航
完成校准后即可进行雷达的建图工作。
1.建图
在主机中启动 lidar_slam.launch文件
roslaunch zxcar lidar_slam.launch
初次启动报错如下,需要安装相关依赖。
sudo apt-get install ros-melodic-gmapping
sudo apt-get install ros-melodic-move-base
sudo apt-get install ros-melodic-amcl
sudo apt-get install ros-melodic-map-server
sudo apt-get install ros-melodic-global-planner
sudo apt-get install ros-melodic-dwa-local-planner
安装完成后再次运行即可,出现字样 odom received! 表明启动成功。
随后需要在从机上运行 lidar_slam_rviz.launch文件启动RVIZ界面并同时启动节点 teleop_twist_keyboard。
roslaunch zxcar lidar_slam_rviz.launch
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
节点 teleop_twist_keyboard用于操控小车进行行走,使用方法如提示一样:
通过操控小车进行行走,可以在RVIZ中查看到建图的效果。
2.保存图纸
通过操控小车行走实现雷达建图后,需要将建好的图保存在 zxcar/maps下。
从机上运行如下指令即可保存图纸。
roscd heimarobot/maps
rosrun map_server map_saver -f house
待完成保存后,即可在主机上停止lidar_slam.launch文件。
3.导航
从机上运行如下指令,同样显示字样**odom received!**表示启动成功。
roslaunch zxcar navigate.launch
主机上则运行指令启动RVIZ
roslaunch zxcar navigate_rviz.launch
此时需要使用RVIZ上方工具栏中的2D Pose Estimate画笔标定小车的初始位置,随后即可使用2D Nav Goal进行导航。