2.4 舱内航图:知识表示与状态表征


2.4 舱内航图:知识表示与状态表征

本节摘要:估计出的读数要以什么结构存放,决定了规划舱能做哪类推理。本节对比符号表示(语义网络、框架、本体)与向量表征(嵌入、自监督学习)的能力边界,给出几何、拓扑、语义三层航图的分层设计——表征不是存储问题,是智能体的能力上限问题,也是感知舱交给规划舱的最终契约。

同一座仓库,人走进去看到的是"通道、货架、配货区",机器人的内存里此刻只有一亿个带置信度的占据点。两种表象都能称为"知道这个世界",差别在于能推理什么:人能回答"配货区在哪个方向"并规划一条绕开死胡同的路,占据点集合却回答不了这种问题——它只支持"这一格能不能走"。表征决定推理,这是感知舱与规划舱接壤处的最重要事实。本节要解决的问题随之清晰:把估计读数组织成什么样的航图,才配得上下一章要装的导航计算机。

同一个世界,两套画法

知识表示的经典方案是符号表示:把世界离散成对象与关系。语义网络用节点和边表达"托盘属于货物、货物在配货区";框架表示给每类对象一张带槽位的结构卡(托盘有位置、载重、状态三个槽);本体则是顶层设计——规定"通道"与"障碍"互斥、"危险区"必属于某区域,防止知识库自相矛盾。符号表示的优势是可解释、可精确推理:查"所有在危险区里的货物"是一次干净的逻辑查询,出错能追责到某条断言。

向量表征是另一套画法:把对象压成高维空间里的一个点,语义相近的对象点距相近。词嵌入让"通道"与"走廊"比邻,图像嵌入让新看到的货架对齐到记忆里见过的那类货架,自监督学习则让这一切无需人工标注。向量表示的优势是容忍模糊、可泛化:看到的物体换个角度、换种光照,嵌入空间里仍然认得出。代价是可解释性——两个向量距离近,说不出"为什么近"。

维度 符号表示 向量表征
推理类型 精确逻辑、规则、查询 相似检索、聚类、泛化识别
可解释性 强(逐条断言可查) 弱(距离近无因果解释)
模糊容忍 差(非真即假) 好(自然容忍噪声与变化)
构建成本 靠人工梳理知识 靠数据与训练管线
典型失效 知识库不完备即哑火 相似不等于正确,会认错

成熟的智能体不用二选一,而是分层混用:底层用向量做感知对齐与相似检索,上层用符号做规则推理与任务约束,两层之间用受控的接口兑换——向量匹配给出候选,符号层校验后采信。这条"神经符号"路线的工程含义是:每一层失效都有另一层兜底,与全册的冗余哲学一脉相承。

三层航图:本册的定型方案

综合估计层的输出与两类表征的能力,本册把舱内航图定为三层,自下而上逐级抽象:

几何层直接承接估计器:占据栅格(每格带占据概率)、点云、代价地图。它回答"这一格能不能过、离障碍多远",服务局部避障与轨迹规划。更新最频繁,生命周期最短——每拍都在刷新。

拓扑层把空间抽象成节点与边:节点是通道口、分区、泊位,边是可达关系与通行代价。它回答"从 A 区到 B 区走哪条通道",服务全局路由。更新缓慢,只在感知发现结构性变化(新货架、封路)时修订。全局规划的搜索空间因此从百万格缩到几百个节点——第 3 章搜索算法的效率,一半是表征给的。

语义层在拓扑节点上挂符号知识:这个节点是"配货区"、那片区域是"危险区限速"、某货架"属于订单 ABC"。它回答任务级问题——"去能充电的地方"需要知道哪些节点带充电桩标签。语义层是符号表示的主场,规则、约束、任务描述都以它为地基。

from dataclasses import dataclass, field @dataclass class TopoNode: id: str kind: str # 语义标签:配货区 / 通道口 / 充电桩 center: tuple # 几何坐标,通往几何层 edges: dict = field(default_factory=dict) # 邻居 -> 通行代价 class CabinMap: """三层航图:几何层快照 + 拓扑图 + 语义索引。""" def __init__(self, grid, topological, semantics): self.grid = grid # 几何层:占据栅格,每拍刷新 self.topo = topological # 拓扑层:节点边图,低频修订 self.sem = semantics # 语义层:标签到节点的倒排索引 def refresh_geometry(self, occupancy_update): self.grid.apply(occupancy_update) # 高频、局部、带置信度 def find_by_kind(self, kind): """语义查询:'去能充电的地方'的入口。""" return self.sem.get(kind, []) def route(self, src_node, dst_node): """拓扑路由:把长程问题缩小到节点级搜索。""" return self._dijkstra_on_topo(src_node, dst_node) def localize_cost(self, world_xy): """几何查询:给路径点查局部通行代价。""" cell = self.grid.world_to_cell(world_xy) return self.grid.cost_at(cell) # 含占据概率加权

接口设计的用意是规划舱只看抽象,不看栅格:全局问题在拓扑层求解、局部问题在几何层求解、任务约束在语义层翻译。三层各管一段,规划舱的算法复杂度就被表征结构预先压住了。

层间一致性的机制载体是修订事件,把它的处理骨架补上:

class TopologyRevisionHandler: """结构性变化的修订流程:几何证据 -> 拓扑修订 -> 语义联动。""" def __init__(self, cabin_map, memory): self.map = cabin_map self.memory = memory def on_blockage(self, edge, evidence_id, confidence): if confidence < CONFIRM_BAR: # 单次目击不修图 self.memory.record("topo_suspect", {"edge": edge, "conf": confidence}) return None old_cost = self.map.topo.edge_cost(edge) self.map.topo.block(edge) # 拓扑层封路 self.map.sem.tag(edge, "封路") # 语义层同步标注 event_id = self.memory.record("topo_revised", {"edge": edge, "old": old_cost, "evidence": evidence_id}) return event_id # 事件号入日志供对账

联调与故障排查

航图层的联调围绕跨层一致性:拓扑层的每条边在几何层必须对应一条实际可通的走廊——注入"封路"事件,验证拓扑修订与几何代价同步变化;语义标签抽查,"充电桩"节点坐标必须真的落在充电桩几何位置上。一致性跑偏的故障很有迷惑性:智能体"知道"该去哪(拓扑层对),却总在半路卡死(几何层已变),症状像是规划太差,病根是层间失同步。

排查口诀按层递进:局部撞擦查几何层(栅格分辨率、代价权重、刷新延迟);绕远路、走死路查拓扑层(边的代价是否过期、修订是否有事件触发);任务级跑偏(去错区域、无视约束)查语义层(标签错挂、倒排索引陈旧)。层间失同步统一用事件对账——结构性变化必须触发拓扑修订事件,事件号写进航行日志,第 5 章的黑匣子会用到这条对账记录。

⚠️ 常见坑:一层打天下。用纯栅格做全局路由,搜索空间爆炸;用纯拓扑做局部避障,分辨率不够。层的存在意义就是分工,混用边界等于没有分层。

本节要点回顾

  • 表征决定推理:占据点回答不了方向问题;选表征就是选能力上限,感知舱的最终产出是航图而不是读数堆。
  • 符号与向量:符号可解释可精确推理但不耐模糊,向量可泛化但不透明;分层混用、互为兜底。
  • 三层航图:几何层高频避障、拓扑层低频路由、语义层任务翻译,规划舱只看抽象接口。
  • 搜索空间是表征给的:拓扑抽象把百万格压成百节点,第 3 章搜索效率的一半在表征设计里。
  • 层间一致性:结构性变化必须触发拓扑修订事件并入日志;按层递进排障。

至此感知舱交舱:三层航图摆上导航台。下一章进规划舱——导航计算机怎么把"去配货区"拆成航点、连成航线、备好绕飞预案。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U