ROS2学习——`octovis` 和八叉树地图工具的功能与使用方法
OctoMap是一个基于八叉树的开源C++库,用于构建概率化三维地图。其核心工具包括octomap_server(实时处理传感器数据生成地图)和octovis(可视化工具)。通过递归分割立方体空间,OctoMap能高效存储多分辨率三维环境信息,支持动态更新和概率占据表示。典型使用流程为:传感器数据→octomap_server生成.bt/.ot地图文件→octovis可视化查看。安装简便(Ubun
一、什么是 OctoMap?
OctoMap 是一个开源的 C++ 库,用于基于概率的、可更新的三维地图构建。它的核心数据结构是 八叉树。
- 八叉树:一种用于表示三维空间的树状数据结构。它将一个立方体空间递归地等分为八个子立方体(因此得名“八叉”),直到达到所需的分辨率。
- 概率占据:八叉树中的每个体素(三维像素)不简单地是“有”或“无”,而是用一个概率值来表示该空间被占据的可能性。这允许地图处理传感器噪声和动态变化。
- 主要特点:
- 高效存储:只存储被占据或自由的体素,对未知的大片空间不浪费内存。
- 多分辨率查询:可以快速在不同细节层级上查询地图。
- 动态更新:可以随时插入新的传感器数据来更新地图,新的扫描可以清除之前可能错误的占据信息。
二、核心工具介绍
OctoMap 库提供了一系列命令行工具,其中最常用的两个是:
-
octomap_server:建图节点/服务器- 功能:这是最核心的建图工具。它通常作为一个节点(尤其在 ROS 中)运行,订阅来自 3D 传感器(如激光雷达、深度相机)的点云数据,并实时地构建和更新八叉树地图。
- 输入:3D 点云数据(例如来自 Kinect, Velodyne 等)。
- 输出:八叉树地图文件(
.bt或.ot格式)。 - 简单来说:
octomap_server是生产者,它负责“创造”地图。
-
octovis:可视化工具- 功能:专门用于可视化 OctoMap 生成的地图文件(
.bt或.ot)。它提供了一个交互式的 3D 窗口,让用户可以直观地查看建图结果。 - 主要特性:
- 三维浏览:可以自由旋转、缩放、平移视角。
- 多分辨率显示:可以调整显示的体素大小,以不同细节程度查看地图。
- 显示模式:可以切换显示被占据的体素、自由空间、甚至未知区域。
- 轨迹显示:如果地图中包含了机器人的轨迹信息,可以将其显示出来。
- 截圖:可以保存当前视角的截图。
- 简单来说:
octovis是查看器,它负责“展示”地图。
- 功能:专门用于可视化 OctoMap 生成的地图文件(
关系:通常的流程是:传感器数据 -> octomap_server(处理并生成 map.bt) -> octovis map.bt(查看地图)。
三、使用方法详解
1. 安装 OctoMap
在 Ubuntu 系统上,最简单的方法是通过 apt 安装:
sudo apt-get install liboctomap-dev octomap-tools
octomap-tools 这个包就包含了 octovis 等命令行工具。你也可以从源码安装以获得最新版本。
2. 使用 octovis 查看地图(回答您的具体命令)
您的命令 octovis output.bt 就是最直接的使用方法。
-
基本命令:
octovis <你的八叉树地图文件.bt或.ot>例如:
octovis output.bt octovis my_office_map.ot -
操作指南(打开
octovis窗口后):- 鼠标控制:
- 左键 + 拖动:旋转视角。
- 右键 + 拖动:平移视角。
- 滚轮:缩放。
- 界面功能:
- 左侧有控制面板,可以:
- 调整 Resolution:改变显示体素的大小。调低可以看得更精细,调高可以快速浏览大场景。
- 开关 Viewer Settings 中的选项:如
EnableView BBX(显示边界框)。 - 在 Octomap Settings 中:
- 调整 Probability 阈值:高于此概率的体素才会被显示为占据。
- 选择显示内容:占据体素、自由空间等。
- 左侧有控制面板,可以:
- 鼠标控制:
3. 文件格式:.bt vs .ot
.bt(Binary Tree文件):是一种人类可读的二进制格式。文件开头是纯文本的头部信息(如分辨率、坐标系等),后面跟着二进制数据。文件相对较大,但易于调试。.ot(OctoMap文件):是一种完全二进制格式。更加紧凑,加载速度更快,是推荐用于存储和交换的格式。
转换工具:
OctoMap 提供了 binvox2bt 和 bt2ot 等工具进行格式转换。
# 将 .bt 转换为更高效的 .ot
bt2ot input.bt output.ot
# 将 .ot 转换回 .bt(如果需要查看文件头等信息)
ot2bt input.ot output.bt
四、一个完整的建图与查看示例(在ROS中)
假设您在使用 ROS 和一台深度相机(如 Intel RealSense):
-
启动传感器:
roslaunch realsense2_camera rs_camera.launch -
启动 octomap_server 来建图:
roslaunch octomap_server octomap_mapping.launch这个节点会订阅深度相机发出的点云话题(如
/camera/depth/points),并开始构建地图。 -
控制机器人移动或手持传感器扫描环境。
-
保存地图:当扫描完成后,保存当前地图:
rosrun octomap_server octomap_saver -f my_map.bt # 或者保存为 .ot 格式 rosrun octomap_server octomap_saver -f my_map.ot -
查看地图:使用
octovis查看生成的地图文件:octovis my_map.ot
五、关键参数与技巧
在建图时(通过 octomap_server),一些关键参数会影响地图质量:
- 分辨率(resolution):体素的大小,例如
0.05表示 5cm 的立方体。分辨率越高,地图越精细,但内存消耗也越大。 - 概率截断(clamping):设置概率的上下限(如
clamp_min=0.119,clamp_max=0.971)。这可以防止在多次观测后概率值过于极端,使得地图能够被后续的观测更新(例如,移走的物体留下的空间可以被“清除”)。 - 最大范围(max_range):只考虑传感器此范围内的点,忽略噪声较大的远处点。
总结
octovis是一个强大的、专门用于可视化八叉树地图(.bt/.ot文件)的图形化工具。- 它通常与**
octomap_server配合使用,后者是负责从传感器数据构建**八叉树地图的核心程序。 - 您使用的命令
octovis output.bt是查看建图结果的标准方式,通过鼠标即可在3D环境中自由探索生成的地图。
希望这个详细的介绍能帮助你更好地理解和使用八叉树地图工具!
更多推荐

所有评论(0)