1. 初识grid_map:移动机器人的“2.5维”世界
大家好,我是老张,在机器人感知这个行当里摸爬滚打了十来年,从最早的激光雷达建图到现在的多传感器融合,踩过的坑比走过的路还多。最近几年,我发现越来越多的团队在搞复杂地形下的移动机器人,比如巡检机器人、救援机器人或者特种作业机器人。这些家伙不能只在光滑的瓷砖上跑,得能上坡下坎,甚至走草地、碎石路。这时候,传统的二维栅格地图(Occupancy Grid Map)就有点不够用了——它只能告诉你“这里能不能走”,却没法告诉你“这里是个坡还是个坑”。
这就要说到我们今天的主角:2.5维感知地图。你可以把它想象成一张有“厚度”的二维地图。在普通的二维地图里,每个格子(grid cell)只有一个值,比如“0”代表空闲,“100”代表障碍。而在2.5维地图里,每个格子可以存储多层(multiple layers) 信息。一个格子下面,可能同时存着“高度值”、“高度方差”、“颜色”、“地面摩擦系数”、“可通行性评分”等等。这样一来,机器人不仅知道那里有个障碍物,还能知道那是个30厘米高的台阶(高度层),表面可能比较滑(摩擦系数层),但整体上勉强能过(可通行性层)。这种数据结构,就是为了让机器人对世界有更丰富、更立体的理解,从而做出更智能的决策。
而 grid_map 库,就是专门为了高效管理和操作这种多层栅格地图而生的C++库。它最初来自苏黎世联邦理工学院(ETH Zurich),现在由ANYbotics公司维护,可以说是四足机器人、无人车等移动机器人领域的一个“宝藏”工具。我刚开始接触它的时候,感觉就像发现了一个新大陆,因为它把很多底层的数据管理、坐标转换、可视化问题都封装好了,让我能更专注于感知算法本身。不过,它的入门之路,尤其是编译和环境配置,对新手来说可能有点“劝退”。网上资料零散,官方文档又偏重API,很多朋友卡在编译报错上就放弃了。所以,我想通过这篇文章,手把手带你从零开始,把 grid_map 的环境搭起来,把第一个Demo跑通,亲眼看看这个2.5维地图长什么样。咱们不搞虚的,就讲实操,把我趟过的坑、绕过的路都告诉你。
2. 环境准备与安装:打好地基
万事开头难,尤其是配置开发环境。我见过不少朋友,一腔热血下载了代码,结果在编译这一步就被各种依赖和报错浇灭了热情。别担心,跟着我的步骤来,咱们一步步把地基打牢。
2.1 系统与ROS环境
首先,grid_map 是一个ROS(Robot Operating System)包,所以你得有一个正在运行的ROS环境。这篇文章我以 ROS Melodic 和 Ubuntu 18.04 为例,这也是目前很多机器人项目比较稳定的搭配。如果你用的是ROS Noetic(对应Ubuntu 20.04)或者更早的Kinetic,整体流程大同小异,主要注意包名和依赖库版本的区别就行。
确保你的ROS基础环境是好的。打开终端,输入 roscore,如果能正常启动没有报错,说明基础环境没问题。然后,创建一个专门的工作空间(workspace)来存放我们的 grid_map 代码和编译产物。我习惯在home目录下建一个 catkin_ws,但这次我们专门为grid_map建一个,避免和已有项目冲突。
mkdir -p ~/grid_map_ws/src
cd ~/grid_map_ws/src
2.2 安装官方二进制包(可选但推荐)
在编译源码之前,我强烈建议你先通过APT安装官方提供的二进制包。这有两个好处:第一,它能帮你自动解决大部分系统级的依赖;第二,即使后续源码编译遇到问题,你至少有一个能用的基础库。安装命令很简单:
sudo apt-get update
sudo apt-get install ros-melodic-grid-map ros-melodic-grid-map-msgs ros-melodic-grid-map-ros ros-melodic-grid-map-visualization ros-melodic-grid-map-loader ros-melodic-grid-map-rviz-plugin ros-melodic-grid-map-filters ros-melodic-grid-map-demos
这一串命令会把 grid_map 的核心库、ROS消息定义、可视化插件、过滤器以及演示程序都装上。安装过程中,你会看到终端里哗啦啦地下载和配置,如果最后没有报错,显示“正在设置 ros-melodic-grid-map...”,那就成功了。这一步相当于从“应用商店”安装了稳定版,我们后续编译源码,则是为了获取最新特性并能进行自定义修改。
2.3 获取与准备源码
安装好二进制包后,我们再来获取源码进行编译。这样即使编译暂时失败,也不影响我们通过二进制包了解库的基本功能。进入我们刚才创建的 src 目录,克隆官方仓库:
cd ~/grid_map_ws/src
git clone https://github.com/anybotics/grid_map.git
克隆完成后,src 目录下会多出一个 grid_map 文件夹,里面包含了所有子模块。接下来,我们需要安装一些关键的编译依赖。虽然二进制包解决了一些,但编译时需要开发头文件。
核心依赖1:Eigen3 grid_map 底层数据存储和运算大量使用了Eigen库,这是一个高性能的C++线性代数模板库。安装它的开发版:
sudo apt-get install libeigen3-dev
核心依赖2:ROS基础包 确保一些常用的ROS编译依赖已安装:
sudo apt-get install ros-melodic-catkin ros-melodic-roscpp ros-melodic-tf ros-melodic-filters ros-melodic-sensor-msgs ros-melodic-nav-msgs ros-melodic-cv-bridge ros-melodic-visualization-ms

:从零构建移动机器人2.5维感知地图&spm=1001.2101.3001.5002&articleId=148724918&d=1&t=3&u=e0e95be5ceb64fa5b6beb300b0d7827c)
1万+

被折叠的 条评论
为什么被折叠?



