一、什么是 OctoMap?

OctoMap 是一个开源的 C++ 库,用于基于概率的、可更新的三维地图构建。它的核心数据结构是 八叉树

  • 八叉树:一种用于表示三维空间的树状数据结构。它将一个立方体空间递归地等分为八个子立方体(因此得名“八叉”),直到达到所需的分辨率。
  • 概率占据:八叉树中的每个体素(三维像素)不简单地是“有”或“无”,而是用一个概率值来表示该空间被占据的可能性。这允许地图处理传感器噪声和动态变化。
  • 主要特点
    • 高效存储:只存储被占据或自由的体素,对未知的大片空间不浪费内存。
    • 多分辨率查询:可以快速在不同细节层级上查询地图。
    • 动态更新:可以随时插入新的传感器数据来更新地图,新的扫描可以清除之前可能错误的占据信息。

二、核心工具介绍

OctoMap 库提供了一系列命令行工具,其中最常用的两个是:

  1. octomap_server建图节点/服务器

    • 功能:这是最核心的建图工具。它通常作为一个节点(尤其在 ROS 中)运行,订阅来自 3D 传感器(如激光雷达、深度相机)的点云数据,并实时地构建和更新八叉树地图。
    • 输入:3D 点云数据(例如来自 Kinect, Velodyne 等)。
    • 输出:八叉树地图文件(.bt.ot 格式)。
    • 简单来说octomap_server生产者,它负责“创造”地图。
  2. octovis可视化工具

    • 功能:专门用于可视化 OctoMap 生成的地图文件(.bt.ot)。它提供了一个交互式的 3D 窗口,让用户可以直观地查看建图结果。
    • 主要特性
      • 三维浏览:可以自由旋转、缩放、平移视角。
      • 多分辨率显示:可以调整显示的体素大小,以不同细节程度查看地图。
      • 显示模式:可以切换显示被占据的体素、自由空间、甚至未知区域。
      • 轨迹显示:如果地图中包含了机器人的轨迹信息,可以将其显示出来。
      • 截圖:可以保存当前视角的截图。
    • 简单来说octovis查看器,它负责“展示”地图。

关系:通常的流程是:传感器数据 -> 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 提供了 binvox2btbt2ot 等工具进行格式转换。

# 将 .bt 转换为更高效的 .ot
bt2ot input.bt output.ot

# 将 .ot 转换回 .bt(如果需要查看文件头等信息)
ot2bt input.ot output.bt

四、一个完整的建图与查看示例(在ROS中)

假设您在使用 ROS 和一台深度相机(如 Intel RealSense):

  1. 启动传感器

    roslaunch realsense2_camera rs_camera.launch
    
  2. 启动 octomap_server 来建图:

    roslaunch octomap_server octomap_mapping.launch
    

    这个节点会订阅深度相机发出的点云话题(如 /camera/depth/points),并开始构建地图。

  3. 控制机器人移动手持传感器扫描环境

  4. 保存地图:当扫描完成后,保存当前地图:

    rosrun octomap_server octomap_saver -f my_map.bt
    # 或者保存为 .ot 格式
    rosrun octomap_server octomap_saver -f my_map.ot
    
  5. 查看地图:使用 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环境中自由探索生成的地图。

希望这个详细的介绍能帮助你更好地理解和使用八叉树地图工具!

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐