实验器材:四轮差速转向小车(底盘)、16线固态激光雷达、高精度惯导、工控机(操作系统为Ubuntu18.04)。
hdl_localization是一个ROS软件包,用于使用3D激光雷达进行实时3D定位。它首先根据IMU数据估计激光雷达传感器的姿态,然后在全球地图点云和输入点云之间执行多线程NDT扫描匹配,以校正估计的姿态。如果禁用基于IMU的姿势预测,系统将使用无IMU信息的等速模型。
经实测,建议使用imu,防止小车快速转向造成点云匹配失败而丢失位姿信息。
安装方法:
cd /your/catkin_ws/src
git clone https://github.com/koide3/ndt_omp
git clone https://github.com/SMRT-AIST/fast_gicp --recursive
git clone https://github.com/koide3/hdl_localization
git clone https://github.com/koide3/hdl_global_localization
cd /your/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE=Release
该包发布的/odom话题即为定位信息,frame_id:为 "map",child_frame_id:是激光雷达的frame_id ,可在launch文件中设置。
全球地图就是pcd地图(三维地图),move_base需要二维栅格地图(png格式),这些通过cartographer生成。https://github.com/cartographer-project/cartographer_roshttps://github.com/cartographer-project/cartographer_ros
需要二维地图(全局代价地图,通过map_server发布)
需要定位信息(通过hdl_localization获取)
需要二维激光雷达点云(用于生成局部代价地图,将现有三维点云转换成二维点云获得)
https://github.com/ros-perception/pointcloud_to_laserscanhttps://github.com/ros-perception/pointcloud_to_laserscan
输出“cmd_vel”(控制底盘)
特别指出,需要建立正确的“tf树”
首先,ROS查看tf树指令:
rosrun rqt_tf_tree rqt_tf_tree
hdl_localization提供map到激光雷达的tf转换,move_base需要map到底盘的tf转换,因此我们发布一个激光雷达到底盘的tf转换,因为激光雷达是装在小车上的,所以这是一个静态tf转换。
参考:ROS发布静态tf变换_清风丶腾云的博客-CSDN博客_ros发布静态tf方法一:#include
move_base的配置参考 Autolabor OSROS软件包下载 - Autolabor开源ROS机器人底盘 - 官方网站autolabor,ROS软件开发包,ROS驱动包,ROS Ubuntu16.04镜像下载.http://www.autolabor.com.cn/download
move_base_launch.launch
代价地图配置参考costmap代价地图_qq_32115101的博客-CSDN博客_代价地图0x00 什么是costmap代价地图在机器人进行路径规划时,我们需要明白规划算法是依靠什么在地图上来计算出来一条路径的。依靠的是gmapping扫描构建的一张环境全局地图,但是仅仅依靠一张原始的全局地图是不行的。因为这张地图是静态的,无法随时来更新地图上的障碍物信息。在现实环境中,总会有各种无法预料到的新障碍物出现在当前地图中,或者旧的障碍物现在已经从环境地图中被移除掉了,那么我们就需要来随...https://blog.csdn.net/qq_32115101/article/details/81121220
注:
测试是在柏油地面上进行的,如果使用dwa算法,小车会先到达目标位置,然后原地转向到目标方向。原地转向时底盘会打滑,造成位移,使小车无法到达目标。后边改用teb算法,并增大 xy_goal_tolerance 和 yaw_goal_tolerance ,效果明显改善。
增大 controller_frequency 可改善行车停顿问题。