在之前的教程中,我们已经成功的安装了激光雷达驱动,成功复现了FAST_LIO,并使用OCtomap将点云地图转为栅格地图。
但是之前我们是建图生成了.PCD文件后,读取pcd文件进行离线octomap转栅格地图,这样在实际的场景中并不完全适用,所以现在我需要改成在线的方式,也就是:一边进行同步定位与建图,一边将其转为栅格地图。
一、确保激光雷达能够使用
传送门:Mid-360 快速配置指南 | JiaFan's Blog
二、确保建图能够使用
传送门:https://github.com/66Lau/NEXTE_Sentry_Nav/tree/main?tab=readme-ov-file
三、确保安装octomap源码
注意,是源码!好多教程都是不能修改源码的
传送门:octomap(3):搭建一个完整的octomap建图工作空间-CSDN博客
以上如果有问题可以去看我前面的教程!
四、修改octpomap源码,使其可以在线建栅格图
这个修改十分的简单,因为我们只需要对齐输入和坐标系。
先理清一下思路:我想使用建图后配准的点云输入octomap,转为栅格地图。
那么只需要找到建图后配准的点云在哪个话题发布?使用的坐标系是什么?找清楚这两个就可以了。
直接用rqt_graph查看建图的话题,发现是/cloud_registered输出了配准后的点云,那就让octomap订阅这个点云话题。
先来看看源码中的launch文件octomap_mapping.launch
<!--
Example launch file for octomap_server mapping:
Listens to incoming PointCloud2 data and incrementally builds an octomap.
The data is sent out in different representations.
Copy this file into your workspace and adjust as needed, see
www.ros.org/wiki/octomap_server for details
-->
<launch>
<!-- 启动octomap_server节点 -->
<node pkg="octomap_server" type="octomap_server_node" name="octomap_server">
<!-- 设置分辨率参数,表示八叉树中每个体素的大小 -->
<param name="resolution" value="0.05" />
<!-- fixed map frame (set to 'map' if SLAM or localization running!) -->
<!-- 固定的地图坐标系 -->
#此处我已经对坐标系做了修改,将原来的"odom_combined"修改为"camera_init",和建图一个坐标系
<param name="frame_id" type="string" value="camera_init" />
<!--param name="frame_id" type="string" value="odom_combined" />-->
<!--param name="frame_id" type="string" value="livox_frame" />-->
<!-- maximum range to integrate (speedup!) -->
<!-- 最大传感器整合范围,超过此范围的数据将被忽略,以提高处理速度 -->
<param name="sensor_model/max_range" value="5.0" />
<!-- data source to integrate (PointCloud2) -->
<!-- 数据源重映射,将输入数据源从cloud_in重映射到/narrow_stereo/points_filtered2 -->
#此处我已经对输入话题进行了修改,将原来的"/narrow_stereo/points_filtered2" 修改为“/cloud_registered”
<!--remap from="cloud_in" to="/livox/lidar" />-->
<!--remap from="cloud_in" to="/narrow_stereo/points_filtered2" />-->
<remap from="cloud_in" to="/cloud_registered" />
</node>
</launch>
修改后先运行雷达,再运行建图,最后运行这个launch文件就可以得到结果啦!
五、话题
最后让我们直观的看看整个过程的话题是怎么走的,这样对我们理解代码也有很大帮助
1.雷达点云
![](https://i-blog.csdnimg.cn/direct/70813f81e04d452bb4a5305ec58e4945.png)
2.FAST_LIO建图![](https://i-blog.csdnimg.cn/direct/1f03fc7e249842a4a6535d886d20b656.png)
可以看到,雷达发布了两个话题信息/livox/imu和/livox/lidar,这两个话题被/laserMapping节点订阅,然后被发布到三个话题,其中/cloud_registered是配准后的点云。
3.octoma转点云地图为栅格地图
这是整个完整流程的graph,octomap_sercer订阅了配准后的点云用于转栅格地图,然后把它发布到/octmap_full这个话题,所以我们在rviz里选择这个话题就能看到建成的栅格图
好啦,到此结束,有些细节有问题的话可以在评论里讨论。!