iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 6
1
自我挑戰組

ROS自學筆記系列 第 6

Day 06 - 使用Python撰寫ROS Node

終於要開始寫程式啦! 大家有沒有很興奮呢?

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的話,你會看到下列訊息:
執行python錯誤訊息
為什麼會有這個錯誤訊息呢? 因為node需要一個主人(master)去管理,因此我們需要先開啟master才能成功執行這個node喔!

Master

master就是ROS系統中負責管理Node的一個功能,他負責node與node之間的溝通橋樑,因此在執行node之前一定要先把master開啟,開啟的方法很簡單,其實在一開始測試ROS環境安裝的成不成功的時候我們就已經執行過啦!也就是roscore這個指令,因此需要多開一個視窗執行master喔!

$ roscore

執行好master後,接著回到原本的地方執行python hello.py,就可以成功執行我們的程式囉!大概會長得像這樣:
成功執行python畫面

接著回到我們的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啦!
ROS node 執行畫面

在右下角的rosnode list中,可以看到目前正在運行的就有兩個node,一個是我們的hello_python_node,另一個則是rosout,其中rosout有點像是所謂的log檔,會將錯誤訊息記錄下來,因此他會一直在後台運行,在此我們就先不理他,只要知道有這樣一個node就好囉!

小結

這一篇落落長的介紹了用python寫ROS node,但其實小妹我跟python一點都不熟,只會用一些基本語法,如果有解釋不周到的地方,歡迎下方留言指正~ 也可以參考隔壁棚我學長寫的python教學 XD
下一篇將會使用C++來撰寫node,這個小妹我就比較會啦,請大家拭目以待~~


上一篇
Day 05 - ROS Nodes
下一篇
Day 07 - 使用C++撰寫ROS Node
系列文
ROS自學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言