JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

我在哪裡?定位問題入門

機器人在一張已知地圖裡醒來,卻不知道自己站在哪裡;本文講它如何先猜測、再逐步確認。

拿著地圖,卻在大樓裡迷了路

想像你在一棟大辦公樓裡醒來,手裡握著一張完美的平面圖。你知道每條走廊、每扇門、每段樓梯——可你依然不知道自己正站在哪個房間。地圖回答的是「世界長什麼樣」,卻回答不了「我此刻在哪裡」。後面這個問題,正是定位的全部工作:在一張機器人已經信任的地圖裡,算出它自己的位姿——它的位置,以及它正朝著哪個方向。

請注意,定位的前提是地圖已經給定。這正是它與更難的「邊走邊建圖」問題的區別——後者叫做SLAM(同步定位與建圖)。在定位裡,地圖是固定且可信的——常常是一張佔據柵格地圖:一塊細密的棋盤,每個格子被標為空閒、被佔據或未知。機器人唯一的謎題,是它自己的所在。

為什麼光數輪子轉了多遠還不夠

輪式機器人的第一反應,是靠數輪子轉了多少圈來追蹤自己。如果知道輪子向前滾了多少公分,就能把這段位移加到上一個已知位姿上,更新自己的猜測。這種對運動的累加叫做里程計;而只憑自身運動、不借助任何外部參照來推算位置的更廣做法,叫做航位推算

麻煩在於,每一步都會帶來一點點誤差,而這些誤差永遠不會相互抵消——它們只會累積。輪子在濕磁磚上打滑、某個輪胎氣壓略低於另一個、於是走過的距離也略短、地面有一點緩坡。每個小毛病都很微小,但里程計不斷把新的位移疊加到一個已經有偏差的估計之上,於是猜測就慢慢偏離真相。這種持續累積叫做漂移。輪式編碼器的量化會再疊加一點感測器雜訊,但真正的禍首,是系統性誤差被一步又一步地積分起來。只靠里程計跑得足夠久,機器人可能信心十足地認定自己在廚房,實際卻停在走廊裡。

解藥是向外看。像雷射雷達這樣的測距感測器會掃過房間,報告到附近牆面的距離。這些測量可以拿去和地圖核對:如果機器人真的站在它以為的位置,那麼它看到前方三公尺處的牆,就應當對上地圖上畫在前方三公尺處的牆。當讀數與地圖不符,機器人就抓住了自己的漂移,從而修正猜測。於是定位就成了一場持續的拉鋸:一邊是會漂移的運動估計,一邊是把估計拉回地圖上的感測器讀數。

一團猜測,投票投出真相

機器人如何同時兼顧漂移與修正?最直觀的答案之一,是蒙地卡羅定位。機器人不去押注唯一的最佳猜測,而是把成百上千個「猜測的位姿」撒滿整張地圖。每個猜測都是一個微小的假設——「也許我在這裡,朝著這個方向」——而這一大群猜測合起來,就叫做粒子濾波器。每一個猜測就是一顆粒子。

這個濾波器反覆運行一個簡單的三拍循環。每一拍都很廉價,神奇之處在於每秒重複許多次。

  1. 移動每個猜測。機器人向前走時,就把所有粒子按同一里程計估計向前推——再加一點隨機抖動,因為運動本身就不確定。整團粒子雲便跟著機器人挪動。
  2. 給每個猜測打分。拿最新的雷射雷達掃描,對每顆粒子發問:「若機器人真站在這裡,這些距離讀數會和地圖吻合嗎?」凡是想像出的視野與真實讀數吻合的粒子,就獲得高權重;凡是本該看見牆、感測器卻看見空曠的粒子,就只得低權重。
  3. 重採樣。按權重比例抽取粒子,組成新的一群——吻合好的猜測被複製許多份,吻合差的往往消失。讀數排除之處,粒子雲變稀;讀數契合之處,粒子雲變密。

當機器人沿走廊前進、反覆運行這個循環時,令人欣慰的事情發生了:散開的粒子雲會收攏。隨著越來越多的掃描排除越來越多的錯誤位置,倖存的粒子越擠越緊,最終聚攏在唯一能解釋感測器所見一切的那個位姿周圍。機器人就此從「我可能在任何地方」走到「我就在這裡」——靠的不是某一次聰明的計算,而是讓眾多猜測彼此競爭、讓證據來投票。這正是遞迴貝氏估計的一張具體面孔:對自己身處何方保有一個信念,並用每一次新測量去精煉它。

追蹤已知起點,與「被綁架的機器人」

並非所有定位問題都一樣難,差別全在於起步時你知道多少。簡單的一類是位姿追蹤:你已大致知道機器人起點在哪,只需在它移動時讓這個估計保持準確。此時粒子一開始就能聚成緊緊一團,圍在已知的起始位姿周圍,而整個循環的全部任務,就是推著這團粒子前進、抵抗漂移。

困難的一類是全域定位:機器人醒來時完全不知身在何處,正像我們那位迷失在辦公樓裡的人。此時粒子必須一開始就撒滿整張地圖,濾波器得篩遍整個空間,粒子雲才能收攏。蒙地卡羅定位在這裡大放異彩,恰恰因為一大群猜測能同時鋪滿許多房間——若只有一個最佳猜測的估計,連從何起步都無從談起。

最棘手的版本有個外號:被綁架的機器人問題。設想一台已經自信定位的機器人,被人抱起來、放到一個完全不同的地方。它的粒子還全擠在那個舊的、如今已錯的位置,彼此自得地相互附和——卻沒有一顆靠近真相。一個好的定位器,必須察覺到每個猜測忽然都很難解釋感測器讀數,進而有意撒出新粒子,重新搜遍地圖。這尖銳地提醒我們:一團緊湊而自信的粒子雲,並不等於一團正確的粒子雲。