二维栅格地图只回答一个问题:这里有没有障碍。对轮式小车来说往往够用,但四足机器人能上台阶、跨电缆沟,地上一块凸起到底算障碍还是能走的台阶,二维地图说不清。高程图(elevation map)就是为这个问题准备的。本文介绍的是公开资料里常见的通用做法,未经实机验证,参数需要按自己的平台和雷达来调。
【高程图存的是什么】 高程图仍然是栅格,只是每个格子里存的不是“占用或空闲”,而是这个位置地面的高度,通常再附带一个方差,表示这次估计有多可信。所以也有人叫它 2.5D 地图:平面上是二维栅格,每格一个高度值。 它的输入就是上装雷达的点云。官网二次开发内容把多楼层与楼梯场景列为建图导航的一部分,而四足走楼梯,前提就是能“看见”台阶的高度。官网常见的机器狗上装组合里多用 Livox Mid-360 这类 360° 雷达,近处地面点比较丰富,适合做这件事。
【从点云到高程】 大致分四步。 一是坐标变换。把点云转换到以机器人为中心、随机身移动的局部地图坐标系。四足机身一直在晃,这一步依赖准确的位姿和雷达外参,外参错一点,台阶边缘就会被抹平。 二是落格。每个点按 x、y 落入对应格子,同一格里有多个点时,可以取高点、取均值,或者做卡尔曼式的融合。融合时把距离和入射角算进方差,远处、斜射的点权重低一些。 三是处理时间。机器人移动后,老数据的可信度下降,常见做法是随时间或随位移放大方差,让新观测更容易覆盖旧值。 四是补洞。被遮挡或打不到的格子会是空的,小洞可以插值,大洞保留为未知,不要硬填。 另外,自身的腿和上装外壳打到的点要先剔除,否则机器人会把自己的腿当成脚下的障碍。
【从高程到可通行代价】 高程本身不能直接给规划器用,还要再算几层特征。 坡度:用相邻格子的高度拟合平面,算出法向量与重力方向的夹角。 台阶高度:一个邻域内高低之差,判断是否超过平台能跨越的高度。 粗糙度:拟合平面的残差,碎石路残差大,平地残差小。 三者加权,得到每个格子的通行代价,超过阈值的直接标记为不可通行。阈值要以厂商给的越障能力为参考,再留出余量;加了上装之后重心变高,实际能力可能打折,要实测确认。 得到的代价层可以作为一层插件接入 Nav2 的代价地图。全局规划仍然用原来的二维地图,局部避障再叠加这一层,比较容易和原有系统共存。
【算力和更新频率】 高程图的计算量不小,格子分辨率细、地图范围大的时候尤其明显。可以从三个方向控制:局部地图只覆盖机器人周围几米;分辨率按任务选,楼梯场景细一些,开阔地粗一些;落格和特征计算放到 GPU 上做。 官网组合的算力从 Orin Nano 8GB 到 AGX Orin 64GB 不等,入门算力上就要更节省,比如降低更新频率,或者只在检测到台阶区域时才启用细分辨率。这部分开销要和定位、识别、视频回传放在一起算总账,不要单独看。
【小结】 高程图把“有没有东西”升级成“地面长什么样”,再通过坡度、台阶和粗糙度变成通行代价。它对位姿、外参和自身滤波都很敏感,机器狗上装改动了结构,这些前提就要重新核对一遍,否则地图会悄悄变形。
机器狗二次开发:www.yuanzhirobot.com/zh/service/… 本文部分内容由 AI 辅助生成。