2018年9月6日 星期四

ROS學習紀錄-4:node&topic

看完了上一篇關於package的學習紀錄後,是不是還是對ROS的作用霧煞煞啊?別擔心,接觸更多的ROS,對它就會越理解(廢話),這次要介紹的是ROS中node&topic的概念,我認為這和package一樣重要,而且之後會常常用到topic與和它息息相關的publisher & subscriber,現在就一起來看吧。

4.node&topic

node中文譯為節點,ROS的運作是圍繞著node來進行的,而node與node間的聯繫是由topic來處理的,publisher & subscriber傳遞msg的過程,之中還牽扯到了資料型態的不同,可以先行參考ROS的wiki教程[1]中對於node與topic的介紹。
注意!除了publisher & subscriber外,還有包含了不同的傳輸方式介紹,像service & client,有興趣的可以去玩玩看,不過我是到現在都還沒用過就是了。

4-1.node和topic是啥?

用例子來說明,假設有兩個node,node A和node B,他們分別是兩個不同的網路影音使用者,topic則相當於影音網站裡的其中一個主題,我們就先假設topic是「流行音樂」好了,msg是音樂,今天node A是一位音樂的發佈者(publisher),他透過影音社團,以mp3的格式發佈了他的音樂到「流行音樂」主題裡,而node B非常喜歡「流行音樂」,但是他的電腦只能播放mp3,他訂閱了「流行音樂」,所以只要有人發佈音樂到「流行音樂」,他就會收到那段新發佈的音樂,但是只有mp3的音樂檔他才能正常的聽到音樂,不過node B不僅僅只是一個訂閱者,他也同時是個以txt形式來上傳網路的歌詞(msg)發佈者,他發佈到「重金屬歌詞」主題裡,而也會有其他人(node)來訂閱「重金屬歌詞」的主題。
也就是說每個node不一定只能當publisher 或 subscriber,也可以兩者都是,甚至不只發佈/訂閱一個topic,而發佈到網路上的資料型態也很重要,型態錯誤可能導致出現bug喔~

4-2.查看node&topic與認識其他傳輸方式

首先,請先在終端機裡輸入這行指令來取得我們需要的package(ros-tutorials)。
$ sudo apt-get install ros-kinetic-ros-tutorials
#其中,kinetic請改成你安裝的ROS版本
$ roscore
#開一個新的終端機並輸入這行讓roscore跑起來,每次要跑ROS前都要記得用喔~
rosnode,rostopic,rosmsg,rqt這幾個ROS很常用的指令就請參考ROS的wiki教程[1]中1.1Beginner Level裡5~10的部份。

4-3.烏龜好好玩!接下來要玩啥?

如果你還不知道我說的烏龜是啥,那你一定是還沒去參考1.1Beginner Level裡5~10的部份,快去!
接下來,就請大家參考11.Writing a Simple Publisher and Subscriber (C++)[1]或12.Writing a Simple Publisher and Subscriber (Python)[2]來做一個小小小的練習,在看程式碼後,用13.Examining the Simple Publisher and Subscriber[3]整合並執行,將之前所學的東西統合來寫一個關於publisher & subscriber的簡單小程式喔~其中,C++和python的寫法稍有不同,但結構上是相同的,可依個人喜好選擇,除了程式碼外,整體ROS的路徑,包括像package等,若有不明白可以回去參考上ㄧ篇:ROS的package架構,上述的如果都做完並且成功了的話,那就代表你已經會ROS的基礎了,下次我們會介紹一樣新東西:Gazebo,未來有很長一段時間會和它作伴喔~

如有問題可以留言大家一起討論,留言請勿出現不雅言語與無端謾罵喔~
If u have any question,just leave comments to me.I will answer u as soon as possible,but don't be mean to me.Thanks!

沒有留言:

張貼留言