關心SLAM技術的人有兩種。一是像我這樣的研究者,為了瞭解其中各種方法和模組的原理。二是機器人技術的開發者,旨在將SLAM技術用到他們自己的機器人上。從數量上來說,第二類人數遠多於第一類,他們的需求也日益迫切。SLAM是許多機器人技術的基礎。沒有預計的位姿和地圖,大部分任務都無法完成。這種需求,也是我們研究者應當認真思考、正面對待的,也是SLAM從實驗室走向市場應用的第一步。
那麼,阻礙這種應用的困難在哪兒呢?是SLAM原理還不夠明確嗎?是視覺里程計、特徵匹配、迴環檢測的技術不夠先進嗎?事實上,有一個很重要的東西,是應用者們很關心,但研究者們經常忽視的:那就是SLAM方案的易用性。
反觀當前多數開源SLAM方案,它們幾乎都是研究者提出的。研究者做這些方案的目的,往往是為了實現自己某些新穎(但不一定可靠)的想法。實現出來之後,做幾個實驗,挑一部分漂亮的結果放在論文裡去。這當然是無可厚非,甚至可以說,做研究本來就是如此的。但從應用者的角度去考慮,他們會花大量的時間配置程式的執行環境,為了看看效果是否和論文裡相符(但通常失望的居多)。然後,他們會發現各式各樣的問題。攝像頭一快,匹配就跟不上了;地圖裡重複的東西一多,迴環就測不對了;走廊的長度往往比真實的要短,等等。許多開發者都有這種經歷,然而怎麼辦呢?只好去看原始碼。接著他們又發現,一個實際的工程專案程式碼很龐大,閱讀一遍還不如自己從頭實現一遍。
這就是所謂的易用性問題。
為何要單獨提這個問題呢?SLAM是眾多機器人技術的基礎。基礎是什麼?簡而言之,“沒有它不行,光有它沒用”。試問現在為什麼大家都想用SLAM?他們有各種不同的目的:想要機器人在房裡自主運動啦,想要按順序清掃整個地圖啦,想要聽到人的命令就跑去某個屋啦。如果機器人是一幢樓,開發者們更關心的是,如何在SLAM這個地基上建出高樓大廈。
對於地基,我們有什麼要求?無非是:簡單、有效、堅實。一個符合這樣條件的SLAM方案是什麼樣子?它是不是像現在開源方案那樣,應用一些先進的技術,(有時)跑出了華麗的效果?似乎不是這樣的。我們應該把易用性加到設計SLAM方案的考慮中來。甚至,我們還應該設計一個極端強調易用性的方案:
- 請問你有什麼感測器? ——鐳射/單目/雙目/RGBD/IMU等等。更可能同時有多個。它們應該是一種優雅地方式整合起來,容易配置。
- 你的位姿和地圖需要什麼形式? ——2D/3D位姿,柵格圖/拓撲圖/路標圖等。
然後,SLAM程式就自動決定用什麼影象特徵、閉環檢測方法等等的東西,嘩啦嘩啦地執行起來了。開發者可以直接使用這些結果,也可以更進一步地調整:
- 偏向於速度還是精度?
- 是否使用GPU?
- 匹配丟失後如何處置?
當然,這些應該是有預設的。至於這個SLAM裡頭的引數,應該是由研究者事先調節好的。應用開發人員不需要,也不應該關心它們的具體的值。
如果做一個強調易用性的SLAM,會不會有吸引力呢?