ROS內的rospy
模組有提供了許多簡易實用的API可以使用,ROS也有提供該模組的教學、常用API介紹及文件可以參考,因此我們就來快速的寫一個自己的node
吧!
首先,到我們的~/catkin_ws/src/beginner_tutorials/src
目錄底下開啟一個.py
檔,就可以開始撰寫囉!
$ cd ~/catkin_ws/src/beginner_tutorials/src
$ vim hello.py
ps: 如果大家用不習慣vim
的話,可以用自己習慣的IDE例如VS Code
等等呦!
接著在檔案中要引用rospy
這個模組,就可以使用他底下的API啦!
import rospy
接著初始化一個新的node
,
rospy.init_node('hello_python_node')
新增完node了以後,使用loginfo
印出資訊:
rospy.loginfo('Hello World')
完整寫完以後的程式碼會長這樣:
import rospy # import rospy 模組
rospy.init_node('hello_python_node') # 初始化 hello_python_node
rospy.loginfo('Hello World') # 印出 Hello World
就這樣寫完一個python檔啦!有沒有很簡單呢? 接下來就是要讓他可以成功被執行囉!
但是回到命令列,輸入python hello.py
的話,你會看到下列訊息:
為什麼會有這個錯誤訊息呢? 因為node
需要一個主人(master
)去管理,因此我們需要先開啟master
才能成功執行這個node
喔!
master
就是ROS系統中負責管理Node的一個功能,他負責node與node之間的溝通橋樑,因此在執行node之前一定要先把master
開啟,開啟的方法很簡單,其實在一開始測試ROS環境安裝的成不成功的時候我們就已經執行過啦!也就是roscore
這個指令,因此需要多開一個視窗執行master
喔!
$ roscore
執行好master後,接著回到原本的地方執行python hello.py
,就可以成功執行我們的程式囉!大概會長得像這樣:
接著回到我們的python檔,在裡面新增一個迴圈,讓他在程式執行期間每秒印出一個hello world出來,程式碼如下:
import rospy # import rospy 模組
rospy.init_node('hello_python_node') # 初始化 hello_python_node
while not rospy.is_shutdown(): # 在 rospy 還沒結束前,執行下列指令:
rospy.loginfo('Hello World') # 印出 Hello World
rospy.sleep(1) # 間隔 1 秒
所以在我們執行這個程式的期間,他就會一直一直印Hello World出來,至於為什麼要這樣做呢? 其實我只是想顯示在node
執行的期間,master
可以透過rosnode
的相關指令,將運行中的node
找出來~ 例如rosnode list
這個指令,就可以秀出現在正在執行中的node
啦!
在右下角的rosnode list
中,可以看到目前正在運行的就有兩個node
,一個是我們的hello_python_node
,另一個則是rosout
,其中rosout
有點像是所謂的log檔,會將錯誤訊息記錄下來,因此他會一直在後台運行,在此我們就先不理他,只要知道有這樣一個node
就好囉!
這一篇落落長的介紹了用python寫ROS node,但其實小妹我跟python一點都不熟,只會用一些基本語法,如果有解釋不周到的地方,歡迎下方留言指正~ 也可以參考隔壁棚我學長寫的python教學 XD
下一篇將會使用C++來撰寫node,這個小妹我就比較會啦,請大家拭目以待~~