构建语义地图时,最开始用的是 octomap_server,后面换成了 semantic_slam: octomap_generator,不过还是整理下之前的学习笔记。
一、增量构建八叉树地图步骤
为了能够让 octomap_server 建图包实现增量式的地图构建,需要以下 2 个步骤:
1.1 配置 launch 启动参数
这 3 个参数是建图必备:
- 地图分辨率
resolution
:用来初始化地图对象 - 全局坐标系
frame_id
:构建的全局地图的坐标系 - 输入点云话题
/cloud_in
:作为建图的数据输入,建图包是把一帧一帧的点云叠加到全局坐标系实现建图
<launch>
<node pkg="octomap_server" type="octomap_server_node" name="octomap_server">
<!-- resolution in meters per pixel -->
<param name="resolution" value="0.10" />
<!-- 增量式构建地图时,需要提供输入的点云帧和静态全局帧之间的 TF 变换 -->
<param name="frame_id" type="string" value="map" />
<!-- 要订阅的点云主题名称 /fusion_cloud -->
<remap from="/cloud_in" to="/fusion_cloud" />
</node>
</launch>
以下是所有可以配置的参数:
frame_id
(string
, default: /map)- Static global frame in which the map will be published. A transform from sensor data to this frame needs to be available when dynamically building maps.
resolution
(float
, default: 0.05)- Resolution in meter for the map when starting with an empty map. Otherwise the loaded file’s resolution is used
height_map
(bool
, default: true)- Whether visualization should encode height with different colors
color/[r/g/b/a]
(float
)- Color for visualizing occupied cells when ~heigh_map=False, in range [0:1]
sensor_model/max_range
(float
, default: -1 (unlimited))- 动态构建地图时用于插入点云数据的最大范围(以米为单位),将范围限制在有用的范围内(例如5m)可以防止虚假的错误点。
sensor_model/[hit|miss]
(float
, default: 0.7 / 0.4)- 动态构建地图时传感器模型的命中率和未命中率
sensor_model/[min|max]
(<