ROS

ROS tutorials 系列(11) – Writing a Simple Service and Client

原文: (因為C++版本跟Python版本的內容差不多,還有Examine那篇也只有幾個指令,所以乾脆一併寫,不過我主要只會就C++那篇的內容來說明,因為其他東西大同小異)

http://wiki.ros.org/ROS/Tutorials/WritingServiceClient%28c%2B%2B%29

http://wiki.ros.org/ROS/Tutorials/WritingServiceClient%28python%29

http://wiki.ros.org/ROS/Tutorials/ExaminingServiceClient

延續上一篇的教學,這一篇也cover到程式撰寫的部分,不過這次是使用ROS Service相關的API,
————————————————————————————

1.1 Writing a Service Node

這邊要撰寫的service滿簡單的,他負責作的事情就是,當收到client傳來的兩個數字時,計算這兩個數字相加後的結果,再回傳給client。所以這邊要實現的功能就是讓Service Node可以接收到client傳來的訊息,呼叫一個callback function,在這個callback function裡面把兩個數字相加,然後再回傳給client。

接下來我們就看看怎麼用程式實作這件事情。

首先init跟NodeHandle的部分都跟上一篇的初始化過程相同,比較不同的地方在於,這邊利用NodeHandle產生了一個ServiceServer的物件,這個物件負責的就是提供一個叫做”add_two_ints”的service,並且指定callback function是add(…),這邊要注意的是,在add(…)裡面我們並沒有看到明顯地傳回response(就是res變數)的程式碼,這是因為ROS API實作上幫忙處理掉這件事情,所以我們要做的就只是指定res應該是什麼,不需要多寫一行把res傳出去。

1.2 Writing a Client Node

上一節已經講完Service Node要做的事情,那Client Node要做的事情應該就滿清楚的了。

這邊比較不容易了解的地方大概就是”beginner_tutorials::AddTwoInts srv;”,大家可以把這個物件想成兩個node在實際進行service傳輸時的訊息物件,所以也才會有下面兩行assign req的內容的程式碼,因為指定好request是client的責任。

最後實際執行的部分就由client.call(srv)來做,這邊鼓勵大家去改一下Server的部分,試著亂填res,看看client會發出什麼訊息,有這種自己動手玩的體驗比較容易弄懂整個系統的運作原理。

1.3 Building your nodes

這一小節的編譯大家應該都滿熟悉了,就不額外說明啦。

Again,第三篇(Examine那篇)的原文有cover到怎麼執行剛剛編譯完成的執行檔,大家執行起來應該沒什麼問題。相信在看完這兩篇並動手操作過後,大家都怎麼使用ROS的API有初步的概念了,其實大多數ROS package中使用ROS的部分都不難,難的還是在於裡面的演算法,等你有機會去摸到一些程式碼,你就會了解我的意思了。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s