去美國讀CS博士,方向是機器人導航,視覺方面,推薦一下相關編程方面準備?還有相關演算法需要學習哪些?

特別是這個方向會用到哪些數學,控制,機器學習,信號處理等方面的知識?


======更新======

下面說一些硬體和實驗上的知識儲備。首先Vision-based SLAM常用攝像機標定(Camera Calibration)的世界通用簡單方法,是張正友博士(Dr. Zhengyou Zhang,主頁Zhengyou Zhang"s Home Page)的方法(張正友博士是本領域裡少數的具有極其巨大影響力和貢獻的華人學者,已成腦殘粉嚶嚶嚶)。具體方法和實現,我在這裡推薦兩個,一個是Caltech工具箱:Camera Calibration Toolbox for Matlab ,以及相關paper:Camera Calibration Toolbox for Matlab。該方法的另一個實現,是Matlab最新版本內置的Camera Calibration的application,自動導入標定圖片並把得到的結果輸出給Matlab,更加自動化,更加便捷準確。更多的Camera Model理論知識請參考Multiple View Geometry。


至於RGB-D Camera,最常用的採集設備有兩種,一種是Microsoft Kinect,一個生態環境完備的RGBD Camera,可以直接用Visual Studio可Kinect SDK直接開發,也有大量開發好的程序以供借鑒參考,也可以用OpenNI和ROS採集處理,我就不多介紹了,畢竟微軟是對程序員最友好的公司沒有之一(微軟大法好)。另一個是Google的Project Tango,Google對於這個自家的神器還是很低調的,可以看看宣傳片ATAP Project Tango ,絕對酷炫——可惜我們lab剛剛買的那一台,我還沒有用過,所以對具體開發不太了解。


另外有幾個網上成熟的數據集和測試方法,一個是Malaga Dataset,一個西班牙的團隊採集的Malaga城市數據:The Málaga Stereo and Laser Urban Data Set,覆蓋了城市中汽車駕駛的各種情況(停車,加速,減速,行人,建築,綠化帶等),裡面提供了雙攝像頭,Laser,IMU等數據以及GPS的ground truth trajectory。不過該版本因為是在市中心,所以GPS的ground truth並不可靠。另一個是慕尼黑工業大學Computer Vision Lab的RGB-D

dataset https://vision.in.tum.de/data/datasets/rgbd-dataset,裡面提供了大量的室內的RGBD數據集,以及非常方便好用的benchmark tools。第三個是KITTI Dataset:The KITTI Vision Benchmark Suite,也是認可度很廣泛的汽車駕駛數據集。

======原答案======

謝 @冷哲 邀請嚶嚶嚶


首先搬出寶典:Multiple View Geometry in Computer Vision。這本書基本涵蓋了Vision-based SLAM這個領域的全部理論基礎!讀多少遍都不算多!另外建議配合Berkeley的課件學習。(更新:這本書書後附錄也可以一併讀完,包括附帶bundle adjustment最基本的levenberg marquardt方法,newton方法等)


只要是SLAM問題就要涉及optimization,就要用到各種least square演算法。所以另一個基礎理論是Sparse Matrix,這是大型稀疏矩陣處理的一般辦法。可以參考Dr. Tim Davis的課件:Tim Davis ,他的主頁里有全部的課程視頻和Project。針對SLAM問題,最常用的least square演算法是Sparse Levenberg Marquardt algorithm,這裡有一份開源的代碼以及具體實現的paper:Sparse Non-Linear Least Squares in C/C++


然後是框架級的工具。最常用的機器人框架是ROSROS.org | Powering the world"s robots,可以使用在Windows,Linux和MacOS等操作系統上,裡面包含一整套常用的機器人理論的演算法和工具的實現。另一個開源工具集是OpenSLAM OpenSLAM.org,其中的g2o是目前最流行的graph optimization的實現工具。另外OpenCV也是視覺相關必備的基礎工具,Multiple View教材中的常用演算法在OpenCV中都有常用的實現。(更新:OpenCV的文檔Camera Calibration and 3D Reconstruction 中,包含SLAM相關的基礎理論公式以及C/C++/Python實現的API)


另外多說一句題外話,因為Optimization和圖片的feature extraction是SLAM里最核心的兩個問題,而這兩個問題都是運算量極大的。好的SLAM框架要兼顧速度和精確度。目前大部分Vision或者RGBD的SLAM框架都是用C++來時實現完成的以確保運算速度。雖然我個人很欣賞Python,並且Python3也支持SciPy,OpenCV,ROS等重要工具,不過依然有大量的諸如g2o等基礎性庫在python下無法使用,而且如果要借鑒其他人的代碼,最方便的還是在C++中實現。所以如果提問者有志於在這個領域做深入研究,夯實的C++基礎是必不可少的。Introduction to Algorithms,以及 @vczh 推薦的C++ Primer等,都是在實際工作前要自己做好的功課。


openslam has been regarded as the collection of slam solutions for a long time. However, it consists code only and it is a little "old-fashion" in my personal viewpoint.

If you are interested, please fork GitHub - kanster/awesome-slam: A curated list of awesome SLAM tutorials, projects and communities.
It is a similar project as awesome-computer-vision. This repo is focused on SLAM problem and also other related topics such as Structure-from-Motion( from CV perspective), multivew geometry, visual odometry and probabilistic robotics.

It is only at the beginning stage right now, I find it helpful to organize the literature collected before when I write my thesis and I hope it can benefit more researchers or even people who only have interest in SLAM problem.

Thanks and regards
K

知乎處子回答:
立黨 的回復已經相當完善了,能補充就補充一點吧

首先搬出寶典:Multiple View Geometry in Computer Vision。這本書基本涵蓋了Vision-based SLAM這個領域的全部理論基礎!讀多少遍都不算多!另外建議配合Berkeley的課件學習。(更新:這本書書後附錄也可以一併讀完,包括附帶bundle adjustment最基本的levenberg marquardt方法,newton方法等)

========

MVGCV作為Hartley的經典之作,對數學的要求看的是非常深入的,之前一個PKU的師兄自說剛來我們實驗室的時候看了一年,每天晚上回家就是干這個,當然,能啃完這本書的都不會學術太差,他也是ICRA IROS一堆,再加上IJRR。另外上面說的levmar gaussian-newton都是很常用的梯度優化方法,在SLAM裡面是非常有用的。在這裡可以推薦一下 Manolis Lourakis" home page

SBA, LEVMAR的作者,個人非常常用的庫,做非線性優化都非常有用

只要是SLAM問題就要涉及optimization,就要用到各種least square演算法。所以另一個基礎理論是Sparse Matrix,這是大型稀疏矩陣處理的一般辦法。可以參考Dr. Tim Davis的課件:Tim Davis ,他的主頁里有全部的課程視頻和Project。針對SLAM問題,最常用的least square演算法是Sparse Levenberg Marquardt algorithm,這裡有一份開源的代碼以及具體實現的paper:Sparse Non-Linear Least Squares in C/C++

========

SLAM現在用least square已經是潮流了,儘管我的老闆是做EKF出家的,但是現在主流期刊上確實已經沒有濾波的文章了。其中大型稀疏矩陣的處理是現在大家正在玩弄的東西。在這裡推薦另外一個網上課程,Cyrill Stachniss 他教授的機器人基礎,定位,繪圖等等,個人覺得是很不錯的。有淺入深,就不僅僅包含graph based slam了。至於概率和KF的東西,其中說的也很多,儘管現在已經不算是熱點了,但是我覺得還是很有必要看看的,畢竟自己第一次接觸SLAM就是EKF的,還是有點懷念


然後是框架級的工具。最常用的機器人框架是ROSROS.org | Powering the world"s robots,可以使用在Windows,Linux和MacOS等操作系統上,裡面包含一整套常用的機器人理論的演算法和工具的實現。另一個開源工具集是OpenSLAM OpenSLAM.org,其中的g2o是目前最流行的graph optimization的實現工具。另外OpenCV也是視覺相關必備的基礎工具,Multiple View教材中的常用演算法在OpenCV中都有常用的實現。(更新:OpenCV的文檔Camera Calibration and 3D Reconstruction 中,包含SLAM相關的基礎理論公式以及C/C++/Python實現的API)

===============

ROS如果想做應用是必不可少的,我的工作也都是基於ROS的,自己學習中一個比較重要的視頻是https://www.youtube.com/watch?v=9IJDmd0DGe0list=PLDC89965A56E6A8D6 自帶梯子,還有一個比較好的個人經驗是,ROS中有很多很好的包,學好它們對自己有很大提高,比如openni-camera(自己用的是kinect) rgbdslam等等。G2O是最常用的slam後端優化軟體,很多成熟的slam package用的都是g2o,rgbdslam應該就是,還有比較新的lsd-slam貌似也是使用g2o的 OpenCV應該是必備技巧吧,就不說了


另外多說一句題外話,因為Optimization和圖片的feature extraction是SLAM里最核心的兩個問題,而這兩個問題都是運算量極大的。好的SLAM框架要兼顧速度和精確度。目前大部分Vision或者RGBD的SLAM框架都是用C++來時實現完成的以確保運算速度。雖然我個人很欣賞Python,並且Python3也支持SciPy,OpenCV,ROS等重要工具,不過依然有大量的諸如g2o等基礎性庫在python下無法使用,而且如果要借鑒其他人的代碼,最方便的還是在C++中實現。所以如果提問者有志於在這個領域做深入研究,夯實的C++基礎是必不可少的。Introduction to Algorithms,以及 @vczh 推薦的C++ Primer等,都是在實際工作前要自己做好的功課。

=============

其實slam兩個問題一個是optimisation,另外一個應該是correspondence也是feature detection and matching還有close loop,都算在一起吧

===================================================

特別是這個方向會用到哪些數學,控制,機器學習,信號處理等方面的知識?


我們師兄說過,機器人是個坑,和你的問題相映成趣,因為裡面需要的東西太多,你一個機器人傳統的定位繪圖你不能沒有吧,你想和環境interaction,你不能沒有perception吧,都有vision了,你沒有一個machine learning你好意思,interaction過程中你能不了解一些控制規劃。。。。。。

然後我就呵呵了


言歸正傳:

個人覺得我最常用的數學工具:1 概率 2 優化

參考書記: probabilistic robotics,這本書我是相當推崇的 ,convex optimization個人覺得實在太多了,單獨看些gradient based method 就可以了,反正我的研究主要只和梯度優化相關。個人用的一本工具書是numerical recipes http://www.nr.com/ 我比較喜歡的是裡面既有一些數學又有代碼


控制,基本的PID必須知道,別的自己不常用,也不長和別人交流,說不出來了


機器學習:傳統的我建議都掌握一些吧,andrew的課什麼可能都被推薦的太多了,在這裡推薦一個比較簡單又不會太費時間的書http://alex.smola.org/drafts/thebook.pdf alex smola的,個人覺得實在自己的使用過程中差不多初步夠了,再有深入的話就太多了


信號處理不了解,可能更偏硬體了


這裡推薦 RA magazine 首頁的幾篇 tutorial 性質的論文。RAM 是 robotics 領域最頂尖的期刊之一,這幾篇都是著名學者寫給學術新人的入門讀物,希望對題主有所幫助。

  • Visual Servoing: Part 1, Part 2
  • SLAM: Part 1, Part 2
  • 6D Vectors: Part 1, Part 2
  • Planning: Part 1, Part 2
  • Visual Odometry: Part 1, Part 2
  • Point Cloud Library: Tutorial
  • Quadrotors: Tutorial

RAM 首頁:RA Magazine - IEEE Robotics and Automation Society


自己目前也在做vision-based navigation。不過也是剛剛入門。推薦一篇survey paper,昨天剛過讀完。這篇survey里有比較全面的review,可以從這一篇延伸出去,找到你需要的資源。

發表於2013年Springer的Artificial Intelligence Review:Visual simultaneous localization and mapping a survey


希望對你有所幫助!^_^


MultiViewed Geometry.

需要熟練解析幾何,以及熟練用線性代數方法處理統計學問題。

機器學習。


Computer Vision Metrics


這是在CMU讀書的時候,我讀的program的招生標準(嚴格上來說叫做recommended skill-set),當然主要是針對研究生的,後面列舉建議只是從我的program和個人經歷而來,供參考:)

編程方面:導航方向:Python為主,會C++更好。ROS熟悉是很好的。視覺的話,CMU的我們學院Computer Vision課程是以Matlab為主。總的來說最好有一定的編程背景,熟悉基本的演算法和數據結構。

電腦軟體上面:1. Linux系統要會基本的操作(確切來說這不是電腦軟體)。2. PowerPoint!! 以後的日子裡面,你有數不盡的時間需要向你的導師,教授和同學展示你的project,你的progress,一份漂亮、精緻的PPT一定是給你加分的好助手。

數學上面:圖中談到的都有用到過,但是我個人覺得線性代數和統計用到的最多。

物理和控制:如上,經典物理要求並不太高。自由度,PID這些常見的知識點由於很多實際動手的項目用到很多,要求熟練掌握。

以上是基本的一些要求,供你參考,其他的問題歡迎討論:)


multiple view geometry in computer vision
probabilistic robotics
力透紙背的經典
兩本公式都推通你就超過了90%的slam博士們了,包括美帝博士哦

高興了再看看 computer vision theory and application就可以和大家談笑風生啦23333


對題主的方向很感興趣。數學基礎看到好多人推薦李航的《統計學習方法》,自己也在看,但是我基礎不好,有些難度。也學過《機器視覺》和《計算機視覺中的多視圖幾何》(Multiple view geometry in computer vision)。 主要是想留個坑,也看看各位大牛的建議。


我最近正在學習一本 Probalitics Robotic
另外還有清華艾海洲老師翻譯的《》圖像處理,分析與機器視覺》
本科之後可能走這個方向,共勉


同意Lavinia Chen的答案,博士不要找很多本厚厚的書啃,也不要上周期很長的課,找近5年好的綜述吃透了就夠了。


Matlab, R, C++ 這些是必須的呀


推薦閱讀:

可否通過編程為《秘密花園》填充出和諧的顏色?
為什麼香港中文大學研發的人臉識別演算法能夠擊敗人類?

TAG:機器人 | 人工智慧 | 機器學習 | 計算機科學 | 機器視覺 |