
現(xiàn)在還只是個草稿,后面會陸續(xù)更新改正,保證大家一看就會,絕對不廢
只是幫助大家理解,很多知識點只是類比推理,是有錯誤的,哈哈,勿噴
蠻多人在學(xué)習(xí)ROS的時候,其實還是不太理解什么是ROS,為什么要去ROS,以及怎么樣去學(xué)習(xí)ROS,我大二的時候開始接觸到ROS,也經(jīng)歷過比較痛苦的一段時間,所以希望用這篇文章來幫助大家對ROS有一個較好的理解。
首先我們拋開ROS來說,如果我們要寫一個程序,程序需要完成特定的功能,就拿C語言中的加法函數(shù)來說吧。我們定義了一個加法函數(shù),輸入兩個整數(shù)最后返回兩個整數(shù)的和,然后定義完函數(shù)以后,在main()函數(shù)里調(diào)用這個加法函數(shù),就可以在鍵盤上輸入兩個整數(shù),然后計算兩個整數(shù)的和了。
那么問題來了? ?如果我要在別的程序需要使用加法函數(shù)所返回的值,應(yīng)該怎么做呢?
一種方式? 定義一個全局變量,將加法函數(shù)返回的值賦給這個全局變量,那么在一個工程文件下的程序都可以使用這個全局變量了,這就達到了其他程序使用這個變量的目的了
那么問題又來了,如果不是在同一個工程目錄下的程序,要怎么樣才能使用到這個加法函數(shù)的返回值呢?
一種方式? 將第一個程序的加法返回值寫到一個文檔中,然后其他程序去讀這個文件,這樣也可以達到使用這個數(shù)據(jù)的目的了
上面的例子,想給大家傳遞的知識點就是? 我們在寫程序的時候,大多數(shù)人是只有一個main()函數(shù)的,也就是只有一個可執(zhí)行文件,那么問題就來了,要是不同的main()函數(shù)之間需要相互使用對方的數(shù)據(jù),那應(yīng)該怎么辦呢,這就引申出了程序與程序之間到交流問題,也就是通信問題。這也是ROS里面我個人覺得必須首先要搞清楚的問題。大家先理解到這個地方,然后往下看。
開始進入主題? 到底什么是ROS,ROS就是Robot Operating System 的縮寫,這大家都知道,對吧,翻譯成中文也就是機器人操作系統(tǒng),可是除了這個大家對操作系統(tǒng)是什么大家有了解過么,為什么需要操作系統(tǒng),也就是操作系統(tǒng)能干什么,大家有簡單的了解過么
操作系統(tǒng)(先空白,后面再填坑)
在了解操作系統(tǒng)以后,我們就可以開始分析我們的機器人操作系統(tǒng)了,話不多說,先放狗,不不不,先放圖:

我們知道,操作系統(tǒng)本身也是一個軟件,但是他的特殊之處在于能夠完成對硬件的調(diào)配,而其他的應(yīng)用軟件,比如網(wǎng)易云,他如果想放歌,他需要打開播放器,是得需要操作系統(tǒng)去完成的,它本身沒有這個能力去直接打開播放器,而是對操作系統(tǒng)說,大哥,能不能幫我打開一下播放器,求求你了,哈哈。
我們也知道,在win上安裝了許許多多的軟件,向上面的solidworks(三維制圖軟件),matalab(數(shù)據(jù)計算軟件) QQ(聊天軟件)? ?網(wǎng)易云 (聽歌軟件) 騰訊視頻(播放軟件)......
那么問題又來了? 你能讓你的扣扣去跟網(wǎng)易云說? 我想聽歌,然后網(wǎng)易云就會打開播放么,當(dāng)然你要是杠桿定理學(xué)得好,那我認(rèn)了,哈哈,大多數(shù)人是應(yīng)該是覺得這應(yīng)該不可以,因為扣扣怎么跟網(wǎng)易云通信嘛,對吧。
所以我們安裝在win上的各個軟件只負責(zé)自己的問題,不會跟其他的軟件有過多的交流。
哈哈,所以我有了一個大膽的想法,讓我的電腦同時登錄3個扣扣,那么這三個扣扣總該可以相互發(fā)消息了吧,沒錯,這就是我想要講的東西,我只在我的電腦上安裝三個軟件 也就是3個扣扣軟件,他們肯定是可以相互交流的。因為他們是同一類軟件。
是的,ROS也是這么干的,在ROS上也安裝了向扣扣這樣的可執(zhí)行程序,只不過在ROS中換了個說法,可執(zhí)行程序叫做節(jié)點,這應(yīng)該不拿理解吧。要記住在ROS上安裝了許許多多的軟件哦,也就是許許多多的可執(zhí)行程序,也就是許許多多的節(jié)點,如果你現(xiàn)在理解了節(jié)點是什么了,那么恭喜你,已經(jīng)邁出了一小步了,你說巧不巧,安裝在ROS上的這些程序,它還可以相互通信,也就是相互交流,哈哈。
好了,理解到這一步呢就理解了節(jié)點是個什么東西了。
下面又開始了一個新的例子,我們的手機上有一個扣扣,我們需要和其他人聊天對吧,那么你知道你要和別人聊天需要先做什么么,你肯定說,登錄賬號加好友啊,不對的,首先要做的就是把騰訊的服務(wù)器打開,不然你登錄不上去的,也就是說,騰訊的服務(wù)器不打開,你是登錄不上扣扣的,只不過這一步不是我們操作的,人家的服務(wù)器他已經(jīng)給我門打開了,然后我們再登錄扣扣,想一下,我們在登錄的時候,做了什么,對吧,大家都知道,我們也就是輸入賬號密碼就可以登錄了吧對吧,這個過程呢就是向騰訊的服務(wù)器注冊自己的信息,告訴騰訊服務(wù)器,我上線了,然后騰訊服務(wù)器就把你加入到注冊表中,里面包含了你的一些信息,你想要和別人連天,那么別人是不是也要跟你一樣,也要先登錄,過程和你的一樣,所以這個時候,騰訊服務(wù)器那邊是已經(jīng)有了你和你想要聊天的對象的一些信息的,比如ip地址之類的東西,這樣,你想發(fā)消息給你的朋友(后面再填坑)
類比一下 服務(wù)器 就相當(dāng)于ROS里面的ros master
只不過這個rosmaster需要我們自己開啟而已。
事實上,ros并不是一個操作系統(tǒng),他并不能直接運行在硬件之上,只不過他把硬件做了一個給操作系統(tǒng)的接口? 和網(wǎng)易云一樣? ?網(wǎng)易云大不了就使用一個喇叭唄,只不過ros使用了太多的硬件,比如激光雷達,相機,編碼器,imu等等。
因此ROS本身也就是一個軟件,和qq一樣,運行在操作系統(tǒng)之上,所不同的是,在ROS上又可以安裝許許多多的同類軟件,這些安裝在ROS上的程序(節(jié)點)之間可以按照ROS所規(guī)定的通訊機制進行相互交流通訊。比如激光雷達節(jié)點(程序)通過ROS提供的接口,讓操作系統(tǒng)把激光數(shù)據(jù)傳上來,交給建圖所需要的Gmapping節(jié)點使用,然后Gmaping節(jié)點把所構(gòu)建的地圖給move_base節(jié)點使用,move_base節(jié)點的輸入是一個速度和角度的命令,先由move_base下發(fā)給ros,然后ros下發(fā)給操作系統(tǒng),然后操作系統(tǒng)調(diào)用硬件,在這里是電機,讓電機按照ROS下發(fā)的速度的角速度進行運動.
大家應(yīng)該會有一點點理解了吧
總結(jié)下? 就是ros是一個類似于win上的一個軟件,但是這個軟件上又安裝了很多軟件,在ros上安裝的這些軟件可以相互通信,然后可以借助ROS,去調(diào)用操作系統(tǒng)去調(diào)用硬件。
這就是為什么我們每次想要聊天的時候,需要先打開qq這個軟件,也就是我們想要用ROS的時候,先運行roscore這個命令打開ROS了吧
接下來是?
ros中的通訊方式
ros中的一些工具
ros中的一些已經(jīng)有了的功能包(算法)
慢慢寫,不著急