Download as pdf or txt
Download as pdf or txt
You are on page 1of 44

ROS 系統通訊機制的應用

Turtlesim – 經典的教學範例
目 錄

3 ROS 與 Turtlesim
3-1 新增 ROS 專案空間
3-2 操作 Turtlesim

Leading EDGE COMPUTING adlinktech.com


3-0 操作流程標題(p0) - 對應使用手冊的單元(對應的頁碼)
詳細閱讀將有助於接下來課程的吸收 – 提醒重點
3-0-1. 操作流程目的與簡介
指令: $ export ROS_MASTER=hostname.local - 需要輸入的指令,紅字為需要自行修改的地方

3-0-1-1. 詳細的操作步驟,按鍵類型皆會以
【按鍵】表示(實體按鍵或是
圖形化介面按鍵)

3-0-1-2. 請注意此操作步驟,有些步驟需要
根據實際情況做彈性調整

操作範例圖示

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-1. 開啟 Virtualbox 中的 Ubuntu 18.04 LTS 系統
3-1-1-1. 開啟 Virtualbox 應用程式

3-1-1-2. 選擇已安裝 Ubuntu 系統與


ROS 系統的專案

3-1-1-3. 點擊圖示【啟動】

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間(p34)
利用 Terminal 與 Command 快速建立專案空間
3-1-1. 開啟 Virtualbox 中的 Ubuntu 18.04 LTS 系統
3-1-1-4. 啟動後的
Ubuntu 18.04 LTS
系統桌面

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間(p34)
利用 Terminal 與 Command 快速建立專案空間
3-1-2. 開啟 Terminal 視窗
3-1-1-4. 按下鍵盤按鍵
【ctrl】+【alt】+【t】
快速開啟 Terminal 視窗

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-3. 新增 ROS 專案所需使用的資料夾(p35)
指令 : $ mkdir –p ~/project_name/catkin_ws/src

3-1-3-1. 輸入本頁指令,指令中的 「project_name」


為需要自行輸入的專案名稱,在此教學
範例使用 「ros_tutorial」

3-1-3-2. 可點選桌面左方工具列選項中的資料夾,
開啟主目錄資料夾視窗後,找尋剛剛自行
手動建立的資料夾。

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-4. 切換目錄到指定的資料夾路徑(p35)
指令 : $ cd ~/project_name/catkin_ws/src

3-1-4-1. 輸入本頁指令,請檢查專案名稱
是否正確。本教學範例使用
「ros_tutorial」

3-1-4-2. 指令輸入正確後,將會切換目錄

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-5. 建立一個 ROS 專案的 Package(p35)
指令 : $ catkin_create_package package_name dependency1 dependency2 …

3-1-5-1. 輸入本頁指令,其中
「catkin_create_package」: 為 ROS 中協助使用者建立 Package 的必要指令
「package_name」 : 為想要的 package 名稱,本教學範例使用 「practice」
「dependency1 …」 : 為 package 需要使用到的依賴,本教學範例使用
「roscpp、rospy、std_msgs、geometry_msgs」
4個依賴

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-5. 建立一個 ROS 專案的 Package – 補充說明
3-1-5-2. Dependencies, 是定義各
種資料型態或是定義執行方
法的文件檔案。

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-6. 建立 package 的存放文件路徑(p36)
指令 : $ cd practice

3-1-6-1. 請先檢查目前目錄是
否在 ../src 資料夾的目錄底下

3-1-6-2. 輸入本頁指令

3-1-6-3. 若再輸入指令 $ ls , 可以查看


目前資料夾底下的內容

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-6. 建立 package 的存放文件路徑(p36)
指令 : $ mkdir directory1 directory2 …

3-1-6-4. 請先檢查目前目錄是否
在自行設定的 ../package
資料夾的目錄底下,本教
學範例的 package 名稱為
practice

3-1-6-5. 輸入本頁指令,注意資料夾
名稱,後續教學會使用到
python檔案與 launch 文件,
因此本教學範例新增 「script」
與 「launch」資料夾

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間(p37)
指令 : $ cd ~/project_name/catkin_ws

3-1-7-1. 輸入本頁指令切換當
前目錄,本教學範例
的 ROS 專案名稱為
「ros_tutorial 」。

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間(p37)
指令 : $ catkin_make
3-1-7-2. 輸入本頁指令後,即可開始建立
ROS 專案的工作空間。

3-1-7-3. 工作空間建立完成,即可在 ROS


專案的 「catkin_ws」資料夾中,
發現 「build」與 「devel」的資
料夾。

3-1-7-4. 需要注意的是,若節點的設計使
用的是靜態語言(如 C 語言),每
次修改或新建立節點都需要重新
建立 ROS 專案的工作空間

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間
指令 : $ roscd practice

3-1-7-5. 輸入本頁指令後,發現無
法找尋到 package – practice。
在下一步驟 3-1-7-6 中,我們
將解決這個問題。

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間 - 補充資料 Shell

使用者 Shell
1.使用者下達指令 6.Shell 將結果顯示
給使用者 我們必須要『輸入』一個指令之後,
Shell 「硬體」才會透過你下達的指令來工。
作那麼硬體如何知道你下達的指令呢?
2.Shell 將指令 5.Kernel 管理硬體傳 那就是 kernel (核心) 的控制工作了。
傳給Kernel 回後的結果,再傳給
Shell 因此我們必須要透過「 Shell 」將我們
Kernel
輸入的指令與 Kernel 溝通,好讓
3.Kernel 根據指令 4.硬體工作完後,回傳結果 Kernel 可以控制硬體來正確無誤的工作。
控制硬體工作 給 Kernel

硬體

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間 - 補充資料 Shell Script

Shell Script ,便是由使用者輸入一長串與 Shell 相關的程式後,


儲存起來的檔案。
如此一來,便可以讓硬體依據 Shell Script ,自動執行相關的工作,從而節省開發時間。

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間(p38)
指令 : $ sudo gedit ~/.bashrc
3-1-7-6. 輸入本頁指令
若發生錯誤,請先確保
已有安裝 gedit 文字編
輯器套件

3-1-7-7. 輸入作業系統的密碼,
在 ubuntu 系統中,密
碼不會產生字樣

3-1-7-8. Terminal 的環境設定


檔編輯視窗開啟

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間(p38)
指令 :
current_ip=$(hostname -I | awk '{print $1}')
echo "Your current IP is: "${current_ip}
source ~/project_name/catkin_ws/devel/setup.bash
export ROS_MASTER_URI=http://${current_ip}:11311
export ROS_HOSTNAME=${current_ip}

3-1-7-9. 將上述指令,輸入到 Terminal 的


環境設定檔最下方。

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間(p38)
3-1-7-10. 確認相關指令已輸入到 Terminal
的環境設定檔最下方

3-1-7-11. 使用滑鼠左鍵,點擊右上方的按鍵
【Save】

3-1-7-12. 使用滑鼠左鍵,點擊按右上方的
圖示【關閉】

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間(p38)
指令 : $ source ~/.bashrc

3-1-7-13. 輸入本頁指令,或者
直接重新開啟一個新
的 Terminal 視窗

3-1-7-14. 顯示現在的作業系統
所取得的 IP 位址

Leading EDGE COMPUTING adlinktech.com


3-1 新增 ROS 專案空間
利用 Terminal 與 Command 快速建立專案空間
3-1-7. 配置 ROS 專案的工作空間(p38)
指令 : $ roscd practice

3-1-7-15. 輸入本頁指令

3-1-7-16. 成功切換當前路徑,
表示 Terminal 已可
正常使用
package - practice

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-1. 開啟 ROS 1 系統的主節點(p39)
指令 : $ roscore

3-2-1-1. 按下鍵盤的快捷鍵
【ctrl】+【alt】+【t】,
開啟新的Terminal 視窗

3-2-1-2. 輸入本頁指令

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-2. 使用快捷鍵 【ctrl】+【shift】+【t】,開啟 Terminal 分頁型視窗(p39)

3-2-2-1. 確認是否在當前
的Terminal 視窗

3-2-2-2. 按下快捷鍵後,即可
在當前的 Terminal
視窗,開啟一個新的
分頁型 Terminal 視窗

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-3. 開啟節點 Turtlesim(p39)
指令 : $ rosrun turtlesim turtlesim_node
3-2-3-1. 輸入本頁指令

3-2-3-2. ROS 系統中,執行單一節點


的指令為 :
「rosrun package node」
以本頁指令為例子,
turtlesim_node 是我們想要
執行的程式碼檔案名稱,而
turtlesim 則是
turtlesim_node 存在的
package 名稱

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-3. 開啟節點 Turtlesim(p40)
指令 : $ rosrun turtlesim turtlesim_node

3-2-3-3. 開啟的 Turtlesim 視窗,其中 Turtlesim


的樣式會是隨機產生

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-4. 開啟節點 turtle_teleop_key(p40)
指令 : $ rosrun turtlesim turtle_teleop_key

3-2-4-1. 確認在當前的
Terminal 視窗中後,
按下 【ctrl】+
【shift】+【t】,開
啟新的Terminal 分頁
型視窗

3-2-4-2. 輸入本頁指令

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-4. 開啟節點 Turtlesim(p40)
指令 : $ rosrun turtlesim turtle_teleop_key

3-2-4-3. 開始按下鍵盤上的方向鍵後,遙控
Turtlesim 。請注意,一定要在
Terminal 視窗中按下方向鍵,才可以
遙控 Turtlesim。

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-5.列出存在於本次 ROS 系統中使用的 Node 名稱(p41) 3-2-5-1. 確認在當前的 Terminal 視窗中
後,按下 【ctrl】+【shift】+
指令 : $ rosnode list 【T】,開啟新的 Terminal 分
頁型視窗

3-2-5-2. 輸入本頁指令

3-2-5-3. Terminal 視窗顯示當前


ROS 系統中執行的所有
node 資訊

3-2-5-4. 若想知道 rosnode 指令其他


功能,可新開一個 Terminal
視窗輸入 「rosnode --h」
來查看

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-6. 查看特定節點詳細資訊(p41)
指令 : $ rosnode info /node_name

3-2-6-1. 在 步驟 3-2-5 的 Terminal 視窗


直接輸入本頁指令 ,其中的
node_name 可以參考在
步驟 3-2-5 中所列出的 node 。
本範例教學使用節點
「/turtlesim」。

3-2-6-2. 節點 /turtlesim 詳細資訊

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-7. 列出存在於本次 ROS 系統中使用的 Topic 名稱(p42)
指令 : $ rostopic list
3-2-7-1. 在閒置的 Terminal 視窗中]輸
入本頁指令

3-2-7-2. Terminal 視窗顯示當前


ROS 系統中所執行的所有
topic 資訊

3-2-7-3. 若想知道 rostopic 指令其他


功能,可新開一個 Terminal
視窗輸入 「rostopic --h」
來查看

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-8. 監控特定 Topic 正在傳輸的資料(p42)
指令 : rostopic echo /topic 3-2-8-1. 按下 【ctrl】+【alt】+
【T】,開啟新的 Terminal分頁型視窗

3-2-8-2. 輸入本頁指令

3-2-8-3. 移動至遙控 turtlesim 的


Terminal 視窗,開始遙控Turtlesim

3-2-8-4. 遙控 Turtlesim 的同時,監控視窗便會出現


topic 正在傳送的 Message 資訊

3-2-8-5. 若要停止監控,在監控視窗按下
按鍵【ctrl】+【c】即可

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-8. 監控特定 Topic 正在傳輸的資料 – 補充說明
Turtlesim 是官方的教學
範例,因此可以在相對
應的路徑中,找到 msg
的原始文件檔案

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-8. 監控特定 Topic 正在傳輸的資料 – 補充說明
Turtlesim 是官方的教學範例,
因此可以在相對應的路徑中,
找到 msg的原始文件檔案

ROS 系統中,是以 X軸為前進


方向的座標軸,更加詳細的介
紹將於第4大章節說明

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-9. 資料視覺化 – 使用 rqt 查看目前 ROS 系統中運行的 Node 與 Topic(p44)
指令 : $ rqt 3-2-9-1. 確認可正常執行步驟 3-2-4
所有動作(可以遙控 Turtlesim)

3-2-9-2. 切換 Terminal 的分頁視窗,


選擇一個閒置中的
Terminal 視窗

3-2-9-3. 輸入本頁指令

3-2-9-4. rqt 視窗開啟

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-9. 資料視覺化 – 使用 rqt 查看目前 ROS 系統中運行的 Node 與 Topic(p44)

3-2-9-5. 在 rqt 上方的功能選項


列表中,點選
「Plugins」->
「Introspection」 ->
「Node Graph」

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-9. 資料視覺化 – 使用 rqt 查看目前 ROS 系統中運行的 Node 與 Topic(p44)

3-2-9-6. 將滑鼠移至箭頭上方的文字,
即會顯現出不同顏色之文字
藍色 : Publisher Node
紅色 : Topic
綠色 : Subscriber

3-2-9-7. rqt 內部的工具視窗可使用內


部右上角的關閉圖示,關閉此
項工具

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-10.列出存在於本次 ROS 系統中使用的 Service 名稱(p46)
指令 : $ rosservice list

3-2-10-1. 找到閒置的 Terminal 視窗

3-2-10-2. 輸入本頁指令

3-2-10-3. Terminal 視窗回應目前 ROS 系統中


可以執行的 Service ,本教學範例
將使Service「/spawn」

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-11. 查詢特定的 service 所使用的 srv 文件(p46)
指令 : rosservice type /service

3-2-11-1. 輸入本頁指令,本教學範例使用
service 「/spawn」

3-2-11-2. Terminal 視窗回應 「/spawn」使


用到的srv 文件

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-11. 查詢特定的 service 所使用的 srv 文件 - 補充說明
Turtlesim 是官方的教學
範例,因此可以在相對
應的路徑中,找到 srv
的原始文件檔案

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-12. 查詢特定 srv 文件中的資料型態(p47)
指令 : rossrv type /srv

3-2-12-1. 輸入本頁指令,本教學範例
使用 srv 「turtlesim/Spawn」

3-2-12-2. Terminal 視窗回應


turtlesim/Spawn 」需要的
資料型態

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-13. 呼叫 service 要求進行特定動作(p47) 3-2-12-3. 輸入本頁指令,本教學範例
指令 : rosservice call /service -- value 使用 Service 「/spawn」,
需要的資料數據為
「x, y, theta, "name"」

3-2-12-4. Terminal 視窗回應呼叫


Service 後的回傳資料

3-2-12-5. Turtlesim 視窗中,會複製


出一支新的烏龜,在指定的
座標軸上與指定角度

Leading EDGE COMPUTING adlinktech.com


3-2 操作 Turtlesim
使用 Turtlesim 學習 ROS 系統的操作方法
3-2-14. 關閉所有執行中的程式
3-2-14-1. 別忘了養成好習慣,使用鍵
盤的【ctrl】+【c】
取消所有執行中的程式

Leading EDGE COMPUTING adlinktech.com


Thank you for your attention.

Leading EDGE COMPUTING adlinktech.com

You might also like