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