我在上篇里写了想要实时发布接收点云建图,又刚到手了mid360,这下可以试一试。
思想就和这篇博客里的差不多。
想要实现我这篇里的内容,你需要:
1.已经安装编译好octomap,是可以修改源码的那种。
2.已经可以使用mid360或其他雷达,收到点云数据。
现在,我们就来实现使用mid360激光雷达实时发布点云数据,让octomap_server接收到点云数据生成八叉树地图。
1.需要看现有launch文件
(1)mid360发布的点云话题是livox/lidar
(2)octomap的launch文件:octomap_mapping.launch
<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!) -->
<!-- 固定的地图坐标系 -->
<param name="frame_id" type="string" value="livox_frame" /> #修改1
<!-- 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 -->
<remap from="cloud_in" to="/livox/lidar" /> #修改2
</node>
</launch>
这是我已经修改过的文件,作了两个修改:
一是:更改“frame_id”为“livox_frame”,使其与雷达的一致。不然octomap_server会报错,把雷达信息滤除。(但这里我也存有疑惑,这里涉及了TF变换,做个标记),先贴一个不更改的时候的节点图:
二是:更改remap话题为“/livox/lidar”,使其接收雷达发布的点云。
2.准备运行
#启动雷达
cd catkin_livox_ros_driver2 #换成你自己的工作空间
source devel/setup.bash
roslaunch livox_ros_driver2 rviz_MID360.launch
#启动建图
cd octomap_mapping_ws #换成自己的工作空间
source devel/setup.bash
roslaunch octomap_server octomap_mapping.launch
#地图保存
rosrun octomap_server octomap_saver -f my_map1.bt
#查看保存的地图
cd octomap_mapping_ws
octovis my_map.bt
3.结果展示
这里保存地图的时候我觉得也有点奇怪,因为它保存地图的时间似乎是一定的,在我还没想结束的时候它就停止保存了,也就是说,这样保存的地图似乎只是静态的?不知道是不是我理解有误,欢迎各位大佬指出!
可以调调看分辨率?:
好了,这样就完成了使用mid360发布点云,octomap建图啦!还有的问题留待后面解决。
最后还有一点,我觉得直接用octomap接收点云建图效果不好,而且他好像不能实时更新,也就是不能滤除已经不需要的部分。看了一些其他教程,我觉得或许可以先使用一个slam来建图。把建的点云地图传给octomap建三维占据地图。比如这个:使用mid360从0开始搭建实物机器人入门级导航系统,基于Fast_Lio,Move_Base | AI技术聚合
后面再尝试尝试吧!不过我要先在平台上把现有的给部署上。