導航堆疊
導航堆疊是一整套軟體,它把像「去廚房」這樣一句簡單的指令,轉化為移動機器人真正到達那裡所需的、源源不斷的轉向和速度指令流。之所以叫「堆疊」,是因為它像一座由相互協作的層疊搭起來的塔,每一層負責一件事,並把結果向上或向下傳給下一層,就像餐廳裡一份點單從顧客傳到服務生、再傳到後廚、最後傳到廚師那樣。沒有任何單獨一塊能包辦一切;導航之所以能成立,正是因為所有這些層被接在一起,連成了一條流水線。
大致從下往上看,導航堆疊會讀入空間的地圖,以及對機器人此刻在地圖上位置的持續估計(定位)。它會建構一張代價地圖,標出哪裡行駛安全、哪裡有風險。接著,全域規劃器在整張地圖上勾畫出一條從機器人到目標的粗略路線,而局部規劃器則反覆地把眼前精細的轉向補充進來——精確地決定接下來一兩秒內如何拐彎、減速、躲避——並對全域方案預先不知道的情況做出反應,比如有人橫穿路徑。最終輸出是一串發送給輪子的速度指令,整個循環每秒會重複許多次,好讓機器人隨著世界的變化不斷修正。
把導航當作一套可複用的「堆疊」來對待之所以強大,是因為只要把其中個別的層換進換出,同一套總體結構就能驅動差別很大的機器人——家用掃地機、倉庫料車、人行道送貨車。一個著名的例子是 ROS(機器人作業系統,一套被廣泛共享的開源工具集)中的導航系統:各團隊會按需搭配不同的規劃器、為自己的機器調校代價地圖,而不必從零重寫整套導航。
你在醫院地圖上點一個位置;導航堆疊先給料車定位,再沿走廊規劃出一條全域路線,它的局部規劃器在讓車繞過一輛經過的病床推車後再繼續前進,整個過程無需任何人操控方向。
輸入一句指令,輸出一串安全的轉向。
人們口中常說的具名導航堆疊,主要是 ROS 1 裡的「move_base」和 ROS 2 裡的「Nav2」;它們是開源的參考實作,而非建構導航的唯一方式。