雷鋒網新智造按:本文來源於知乎,作者卓求,雷鋒網新智造已獲得授權,也歡迎大家關注作者的知乎帳號,將不定期更新ROS, Robotics,Python, Matlab相關內容總結。
第一次接觸ROS是在瀋陽自動化所做項目的時候,那時候我才知道自己非常感興趣的機器人領域有一個叫做ROS(Robot Operating System)的平臺。仔細了解之後才知道ROS被機器人界看作是一套準標準平臺,很多人將其比作是手機界的安卓,電腦界的微軟。在我看來ROS最大的優點在於靈活、低耦合、分布式、開源以及功能強大而豐富的第三方功能包(類似於程式語言中的庫)。於是我乘著畢設的機會申請了做ROS相關的項目--自主導航小車PlantBot。
ROS雖然叫作業系統,但是真正底層的任務調度、編譯、尋址等任務還是由Linux作業系統完成,也就是ROS充其量是一個運行在Linux上的次級作業系統。關於ROS的介紹有一篇大牛寫的很不錯的文章:。機器人作業系統ROS | 簡介篇
第一步,安裝Linux和ROS
學習ROS首先要安裝Linux,為了不拋棄原Windows作業系統,有兩個選擇:一個是在VMvare等虛擬機上運行,另一個是安裝Windows和Linux的雙系統。我的建議是電腦有足夠的空間的話,最好安裝雙系統,這樣在Linux上使用ROS時運行速度更快。虛擬機跑ROS我沒嘗試過,但是網上也看到有人用虛擬機學習ROS,如果電腦不好裝雙系統或者內存不夠的話可以嘗試使用虛擬機。
Linux 有不同的發行版本,目前對ROS支持最好的版本是Ubuntu 14.04 LTS (Long Term Support),對應的ROS的版本推薦為indigo,官網安裝主頁已更新為最新版本的Ubuntu。可以到 下載對應的14.04版本。Linux安裝教程可以參照: 。Old Ubuntu ReleasesWin7上安裝Ubuntu14.04雙系統
需要說明的是,隨著電腦的配置和作業系統的不同,安裝過程大同小異,但是 有的電腦就是裝不上,谷歌之後仍然無法解決問題,這時候可以嘗試換臺電腦或者裝虛擬機,我之前用聯想ideapad,折騰了一周,試了各種方法就是不成功,最後換了臺華碩一下就好了。
裝好Linux後可以根據這篇官方指導安裝ROS: 。如果沒有任何Linux命令行基礎,那麼可以先學習Linux命令行,然後再裝ROS。Ubuntu install of ROS Indigo
第二步,學習Linux命令行
對於熟悉Windows而沒有接觸過Linux系統的人來說,上一步安裝的Ubuntu是一個很好的Linux過渡版本。在Linux中,一切任務都可以在終端(Terminal)通過命令行完成。因此非常有必要學習Linux命令行。學習Linux推薦在線編程學習環境實驗樓的兩門課程:和 ,兩門課程可以結合互補學習,也可以參見我的學習筆記: 有一個小建議是實驗樓的在線編程環境就是Linux,因此沒有必要在它們的網絡環境學習,而是直接用自己的終端。Linux 基礎入門(新版)Linux命令實例練習Linux命令行
同時Ubuntu 作為非商業作業系統,裡面或多或少有dug,遇到問題多搜索,對於常見的問題,網上都有解決辦法。我在安裝完Ubuntu後就遇到一個很窘的問題:網絡連接不上,但是神奇的是蓋上蓋子再打開後就好了,之後碰到的帶耳機的時候沒聲音也是這樣,一種解釋如下:。對於同樣的遇到網絡無法連接的同學可以在終端輸入:ubuntu14.04下外放有聲音,耳機沒聲音
echo "options asus_nb_wmi wapf=4"| sudo tee /etc/modprobe.d/asus_nb_wmi.conf
重啟即可。
第三步, 學習ROS基礎
對於ROS的學習,最好的辦法還是直接學習官方的Tutorial: 。英語不太好的話可以看中文版的 也可以參見我的學習筆記 ,前期只學初級20講即可。學習完基礎20講後可以根據興趣或用途來學習其他教程,如上圖就是實時觀測工具Rviz顯示機器人的URDF(Unified Robot Description Format)模型,裡面還涉及坐標變換的TF相關知識,都需要學習對應的Tutorial來入門。當然,無從著手的話,這時候選擇一本參考書也是很不錯的,如, 。ROS Tutorials核心 ROS 教程ROS基礎筆記ros by exampleLearning Robotics Using Python , Learning ROS for Robotics Programming
此外,ROS的程式語言主要是C++ 和 Python。C++是國內大多數高校的教學語言,更加深入的學習可以閱讀C++ Prime 。但是我同時推薦的是學習Python,Python語言作為一種解釋性語言/腳本語言,更加靈活、編程效率更高,同時有強大的庫支持,因此也是現在人工智慧的第一語言。如果有C/C++基礎也可以很快入門,推薦廖雪峰的微博教程 ,以及實驗樓快速入門課程:Python快速教程 ,書的話我用的是《Python核心編程》(Core Python Programming)。Python 2.7教程
第四步,做項目
只有不斷的學習和實踐才能學好一門知識,學習ROS最好是一開始就挑戰一個項目。在完成前三步的基礎上,這時候就要根據嘗試寫第一個功能包(package)、第一個節點(node)了。碰到問題可以谷歌,官方問答平臺也很有用。同時要在實踐中不斷學習,因為基礎20講還遠遠不夠,用到相關知識可以繼續參見相關Tutorial。ROS Q&A
總之,ROS的學習曲線在開始階段很陡,需要很多預備知識,比如程式語言、Linux基礎、熟練的英文閱讀功底,甚至在理解ros::spin(),ros::spinOnce() (C++),rospy.spin() (Python)的時候只有理解線程才能搞清楚這三者之間的區別。總之,有志於學習ROS的同學要有不斷學習的心理準備,但是同時,ROS的熟練使用絕對是以後找工作或實現項目的一塊很有力的敲門磚。
附原文地址:https://zhuanlan.zhihu.com/p/26007106?winzoom=1