原文:http://www.ros.org/wiki/ROS/Tutorials/UnderstandingNodes
從Node開始, 我們會開始使用到ROS的核心機制, 並具體了解ROS的好用之處
另外,從這一篇開始我們會學習大量ROS指令,建議下載一份ROS cheat sheet來節省時間.
————————————————————————————
1.2 Quick Overview of Graph Concepts
基本上,學過演算法的人應該會有概念,Graph可以幫我們 model很多問題,然後用Graph相關演算法來處理問題
在ROS中,我們的程式被model成一個個的node,便於在process level debug.
我暫且不詳細說明Master, Topic, Message, rosout, roscore這些觀念,因為現在講沒有太大幫助,只要先有一個簡單的概念即可
Master就是ROS的核心,他會有一個list,上面紀錄著有哪些node正在運行,若沒有這個list,node間無法互相溝通,因為你根本不知道有哪些node,就像是我們用FB聊天室,但沒有顯示誰在線上.
Topic是node間溝通的重要機制,概念上像是一個桶子,某個node可以丟資料到某個桶子裡,需要的node就直接去這個筒子拿.好處是,一個topic(一個桶子)可以有多個node來拿資料而不衝突.
Message則是topic不可或缺的”指示”,因為如果只有topic,不會知道topic裡的資料格式如何,所以我們需要Message來表示這個格式.就像是我們去考試,助教把考卷這個資料丟到考場這個topic裡,我們去這個topic拿資料(考卷),我們預期是考卷這種格式, 如果我們拿到的是上課講義, 會覺得很不合理,因為考場這個topic的資料格式應該是考卷.
1.3 Nodes
Node基本上就只是一個執行中的程式,它跟我們一般寫的程式唯一不同之處在於Master”知道”這個程式的存在,而這件事要成立,我們寫的的程式得使用ROS client library.
然後關於topic,我們會說發布資料到topic的node是publisher,它publish資料到topic,而接收topic的node則是subscriber,它subscribe某個topic
1.5 Roscore
roscore是在啟動任何ROS程式前要先啟動的,因為沒有Master,我們一旦啟動node,會找不到管理這些node的人(which is Master).
不過如果用roslaunch啟動程式,就會自動啟動roscore,不過在還沒學習到roslaunch前,都要先在一個終端機輸入roscore啟動Master.
1.6 Using rosnode
rosnode是ROS提供的,幫助我們理解node,debug node的指令.
原文裡的範例很清楚,不贅述
不過我要補充另一個好用的工具, rqt_graph
在另一個終端機輸入rqt,就可以看到目前node的graph分佈,方便我們查看哪些node彼此有關係,基本上可說是process level的debugger.
1.7 Using rosrun
rosrun是一個很好用的指令,可以直接執行package裡面的執行檔,
原文中的指令
rosrun turtlesim turtlesim_node
就是執行turtlesim這個package裡面的turtlesim_node這個執行檔,
驗證方法是用roscd turtlesim切換到turtlesim這個package底下,然後就會看到turtlesim_node這個執行檔了
————————————————————————————
小tips
有時候會有所謂zombie node出現,這種node一旦出現,rxgraph上會顯示紅色的大圈圈,這時可以用一個隱藏的指令砍掉zombie node
rosnode cleanup
不過這個指令似乎有誤砍正常node的風險,所以請小心使用.
Hi MR.POJENLAI,
謝謝您提供的教學,
不過ROS cheat sheet的連結似乎失效了?