這部分我們來寫乙個服務端節點和客戶端節點,同樣的是用cpp。我們先來建立乙個新的服務端節點add_two_ints_server,想要讓他接收兩個整數返回他們的和。
$ cd catkin_ws/src/beginner_tutorials
$ gedit add_two_ints_server.cpp
貼上下面的內容:
#include "ros/ros.h"
#include "beginner_tutorials/addtwoints.h"
bool add(beginner_tutorials::addtwoints::request &req,
beginner_tutorials::addtwoints::response &res)
int main(int argc, char **argv)
#include
"beginner_tutorials/addtwoints.h"
beginner_tutorials/addtwoints.h是已經由我們原來建立的addtwoints.srv檔案編譯生成的標頭檔案。
bool add(beginner_tutorials::addtwoints::request &req,
beginner_tutorials::addtwoints::response &res)
該函式就是提供兩個整數相加的功能,收到的整數存放在&req,最後的結果存放在&res。我們之前建立的addtwoints.srv已經規定了請求和應答的型別都是int64。最後返回真,說明函式相加成功。
ros::serviceserver service = n.advertiseservice("add_two_ints", add);
這裡服務已經建立並在ros上廣播了。
$ cd beginner_tutorials/src
$ gedit add_two_ints_client.cpp
貼上以下內容:
#include "ros/ros.h"
#include "beginner_tutorials/addtwoints.h"
#include
int main(int argc, char **argv)
ros:
:nodehandle n;
ros:
:serviceclient client = n.serviceclient:addtwoints>("add_two_ints");
beginner_tutorials:
:addtwoints srv;
srv.request.a = atoll(argv[1]);
srv.request.b = atoll(argv[2]);
if (client.call(srv))
else
return
0;}
ros:
:serviceclient client = n.serviceclient:addtwoints>("add_two_ints");
建立了乙個add_two_ints服務的客戶端,ros::serviceclient物件之後會呼叫add_two_ints服務。
beginner_tutorials::addtwoints srv;
srv.request
.a = atoll(argv[1]);
srv.request
.b = atoll(argv[2]);
這裡我們例項化乙個自動生成的service類,並給request成員分配值。乙個service類包含request和response兩個成員,當然也包含request和response的類定義。
if (client.call(srv))
這裡實際是在呼叫service,如果呼叫成功,將返回true和srv中的有效值。如果呼叫失敗,將返回false並且srv為無效值。
修改~/catkin_ws/src/beginner_tutorials/cmakelists.txt
add_executable(add_two_ints_server src/add_two_ints_server.cpp)
target_link_libraries(add_two_ints_server $)
add_dependencies(add_two_ints_server beginner_tutorials_gencpp)
add_executable(add_two_ints_client src/add_two_ints_client.cpp)
target_link_libraries(add_two_ints_client $)
add_dependencies(add_two_ints_client beginner_tutorials_gencpp)
cd ~/catkin_ws
catkin_make
$ rosrun beginner_tutorials add_two_ints_server
返回如下:
ready to
addtwo ints.
$ rosrun beginner_tutorials add_two_ints_client 1 3
返回如下:
requesting 1+3
1 + 3 =4
ROS學習筆記
catkin make首先輸出它所使用到的每個空間所在的路徑。更多關於空間的資訊,請參考rep128和catkin workspaces。需要注意的是由於這些空間存在預設配置的原因,有幾個資料夾已經在catkin工作空間自動生成了,使用ls檢視 build devel src build 目錄是bu...
ros學習筆記 ros的服務
服務 services 是節點之間通訊的另一種方式。服務允許節點傳送請求 request 並獲得乙個響應 response rosservice 可以很輕鬆的使用 ros 客戶端 伺服器框架提供的服務。rosservice 提供了很多可以在 topic 上使用的命令,如下所示 使用方法 rosser...
ROS學習筆記 零 ROS安裝
詳細步驟 官方安裝ros說明 安裝流程 1.配置ubuntu倉庫,確保 restricted,universe,and multiverse.勾選 2.安裝源 sudo sh c etc lsb release echo deb lsb release cs main etc apt sources...