Octomap建图复现记录——使用Mid360(3)

我在上篇里写了想要实时发布接收点云建图,又刚到手了mid360,这下可以试一试。

思想就和这篇博客里的差不多。

想要实现我这篇里的内容,你需要:

1.已经安装编译好octomap,是可以修改源码的那种。

Octomap复现记录(2)-CSDN博客

2.已经可以使用mid360或其他雷达,收到点云数据。

Livox_Mid-360激光雷达使用教程-CSDN博客

现在,我们就来实现使用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技术聚合

后面再尝试尝试吧!不过我要先在平台上把现有的给部署上。

### 关于Livox-Mid360与FAST_LIO源码的数据转换及定位信息缺失解决方案 在使用Livox-Mid360激光雷达配合FAST_LIO进行3D的过程中,如果发现数据转换后存在定位信息缺失的情况,通常可能是由于以下几个原因引起的: #### 1. 数据同步问题 FAST_LIO依赖IMU和LiDAR之间的严格时间戳同步。如果两者的时间戳不同步或者未正确配置,则可能导致无法生成有效的位姿估计。因此,在启动FAST_LIO之前,需确认IMU和LiDAR数据流已通过ROS话题或其他方式完成精确的时间戳匹配[^1]。 #### 2. 点云输入为空 当FAST_LIO接收到的点云数据为空时,会触发错误提示`Cannot create a KDTree with an empty input cloud!`。这表明某些帧中的点云未能成功传输到算法中。可以通过修改代码逻辑来处理这种情况,例如增加条件判断语句以跳过空点云帧: ```cpp if (!laserCloudNonFeatureFromLocal->empty()) { kdtreeNonFeatureFromLocal->setInputCloud(laserCloudNonFeatureFromLocal); } ``` 上述代码片段确保只有非空点云才会被传递给KD树构过程[^3]。 #### 3. IMU初始化失败 FAST_LIO需要利用IMU数据来进行初始姿态估计。如果IMU校准不充分或传感器噪声过大,可能会导致定位信息丢失。议检查IMU驱动程序设置以及硬件连接状态,并验证其输出频率是否满足FAST_LIO的要求(一般推荐大于等于100Hz)。此外,可以尝试调整FAST_LIO内部参数文件中的IMU相关选项,比如重力加速度阈值等[^2]。 #### 4. TF变换异常 在ROS环境中运行FAST_LIO时,TF框架用于描述各个坐标系间的相对关系。一旦这些变换矩阵计算有误,就会造成最终地显示位置漂移甚至完全无解算结果的现象。为此,应仔细核对launch文件里指定的世界参考系(world frame id)、机器人基座(base link)以及其他关联节点名称的一致性。 综上所述,针对Livox-Mid360搭配FAST_LIO实现高精度三维重过程中遇到的各种挑战,可以从以上几个方面逐一排查并优化系统性能表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值