4. 环境感知与静态地图构建

无人船要“知道自己在哪、周围有什么”,就必须先把外部世界转换成船载计算机能理解的地图。本节聚焦静态地图构建:电子海图、栅格地图、障碍物表示、水深与岸线数据的使用,以及从感知数据到地图的映射流程。静态地图是任务规划与避碰决策的底图,它不随每一帧传感器刷新,但决定了后续动态感知的“坐标系与语义框架”。

一、电子海图:带语义的矢量底图

电子海图(ENC)以 S-57/S-101 标准组织,本质是矢量要素集合:每个要素有几何(点、线、面)、属性(水深、航标类型、禁航区、锚地)和拓扑关系。与图片不同,电子海图可查询、可计算。例如读取一个面要素的 OBJL=71(航道)与 DRVAL1/DRVAL2(可用水深范围),就能判断某区域是否满足吃水要求。工程上常用 GDAL/OGR 或 S-57 解析库把 ENC 转成 GeoJSON 或直接读入内存,再按船位裁剪出局部区域,避免全图加载。

使用电子海图的关键是坐标基准统一。ENC 通常基于 WGS-84 经纬度,而船载局部栅格地图多用米制平面坐标。必须先确定投影(如 UTM 或局部墨卡托),并明确“北向为 +Y、东向为 +X”的约定,全文与图示保持一致。否则海图要素与雷达点云叠加时会出现系统性偏移。

二、栅格地图:把连续世界离散化

栅格地图把关注水域划分为规则网格,每个格子存储一个值。常用两种:占据栅格(0 空闲、1 占据、未知)用于避碰;代价栅格(0~255)用于路径规划,把浅水、禁航区、离岸距离折算成通行代价。分辨率是核心参数:内河航道可取 0.5 m/格,开阔水域可取 2 m/格。分辨率越细,障碍物边界越精确,但内存与计算量按平方增长。

栅格原点与索引约定必须写清楚:设原点 (x0, y0),分辨率 r,则格 (i, j) 的中心坐标为 x = x0 + (i+0.5)·r,y = y0 + (j+0.5)·r。反算索引用 i = floor((x−x0)/r)。这一组公式是“感知数据落格”的基础,务必在代码与文档中统一。

三、障碍物表示方法

静态障碍物来源不同,表示方式也不同:

  • 点障碍:孤立航标、桩、礁石点,用中心点加安全半径表示,落格时把半径覆盖的格子置为占据。
  • 线障碍:堤坝、桥墩连线、养殖网箱边界,用折线加膨胀宽度表示,沿线段做栅格化(类似 Bresenham 加粗)。
  • 面障碍:浅滩、禁航区、码头,用多边形填充,常用扫描线算法把多边形内部格子置为占据或高代价。

无论哪种,工程上都要做安全膨胀:按船体半宽加安全余量(示例取 1.5 m)向外扩张障碍物,把“船是一个点”的假设转化为“障碍物变大、船为质点”,简化后续规划。膨胀半径必须与船型、航速、定位精度匹配,属于可调参数而非固定值。

四、水深与岸线数据的使用

水深数据来自海图等深线、测深点或公开水深网格。构建时可生成水深栅格:对每个格子取该处水深值,低于船吃水加富余水深(示例:吃水 0.8 m + 富余 0.5 m = 1.3 m)的格子标记为不可通行。等深线是线要素,需先插值成面或栅格,不能直接当边界用。

岸线数据用于界定可航水域边界。把岸线多边形作为“外部障碍”,其内部(陆地侧)置为占据,同时可计算每个可航格到岸线的距离,形成离岸距离场,作为代价栅格的附加项,让规划倾向走航道中央。岸线数据常有简化误差,需与最新影像或现场感知比对后再用。

感知数据 → 静态地图映射链 电子海图 ENC 矢量要素/属性 水深/等深线 测深点/网格 岸线多边形 陆地/水域边界 雷达/激光点云 障碍物观测 投影与坐标统一 WGS-84 → 局部米制 栅格化/插值 点线面 → 格子 安全膨胀 船半宽+余量 落格与属性赋值 占据/代价/水深 静态地图图层(叠加) ① 矢量语义层:航道/禁航区/锚地 ② 占据栅格:障碍物=1,空闲=0 ③ 水深栅格:低于阈值不可通行 ④ 代价栅格:离岸距离/风险加权 落格公式(全文统一约定:+X 东、+Y 北) 格中心:x = x0 + (i+0.5)·r ,y = y0 + (j+0.5)·r 反算索引:i = floor((x−x0)/r) ,j = floor((y−y0)/r)

五、感知数据到地图的映射流程

静态地图构建不是一次性导入,而是“先验底图 + 观测修正”的融合过程。以雷达点云为例,映射分四步:

  1. 坐标变换:雷达输出为极坐标(距离、方位角),先转船体坐标,再经船位与艏向转局部地图坐标。方位角约定从 +X 轴逆时针为正,与前述坐标系一致。
  2. 落格:用上面的索引公式把每个点映射到格子。为避免单点噪声造成虚假障碍,采用概率占据更新:命中格按对数几率累加(示例:命中 +0.4,未命中 −0.2),超过阈值(如 0.7)判为占据。
  3. 与先验融合:海图已知障碍直接置为高置信占据;观测与海图冲突时,保留两者并标记“待确认”,不盲目覆盖先验。
  4. 膨胀与输出:对融合后的占据栅格做安全膨胀,生成最终避碰层,再与水深、代价层叠加成规划用地图。
实践建议:把“分辨率、原点、膨胀半径、水深阈值、占据阈值”作为一组地图参数集中管理,并在日志中记录每次构建所用的参数版本。这样出现“船贴障碍太近”或“规划绕远”时,能快速定位是参数问题还是数据问题。

六、结果如何判断

地图构建完成后,可从三方面检查:一是几何一致性,把海图岸线与观测点云叠加,看岸线附近点云是否贴合;二是可通行性,抽查若干格子的水深与占据值是否符合预期;三是规划可用性,在已知航道内跑一次规划,看路径是否避开膨胀后的障碍且不穿越浅水区。若出现系统性偏移,优先查投影与原点;若出现零散虚假障碍,优先查落格阈值与噪声过滤。静态地图是后续动态避碰与任务规划的共同基础,其坐标约定与参数版本必须在全船软件中保持一致。