ROS學習筆記(八)

2021-07-29 15:03:54 字數 2846 閱讀 9495

這部分我們來寫乙個服務端節點和客戶端節點,同樣的是用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...