ROS服務程式設計::2,建立server
阿新 • • 發佈:2018-12-18
#include"ros/ros.h" #include"my_package/AddTwoInts.h" bool add(my_package::AddTwoInts::Request &req, my_package::AddTwoInts::Response &res) { res.sum = req.a + req.b; ROS_INFO("request:x=%ld,y=%ld",(long int)req.a,(long int)req.b); ROS_INFO("sending back response:[%ld]",(long int)res.sum); return true; } int main(int argc,char **argv) { ros::init(argc, argv, "add_two_ints_server"); ros::NodeHandle n; ros::ServiceServer service = n.advertiseService("add_two_ints",add); ROS_INFO("Ready to add two ints."); ros::spin(); return 0; }
程式碼解析:
1,標頭檔案
#include"ros/ros.h"
#include"my_package/AddTwoInts.h"
使用ros中的服務必須包含的標頭檔案,其中“my_package/AddTwoInts.h"由之前建立的服務檔案AddTwoInts.srv自動生成。
2,主函式
ros::init(argc, argv, "add_two_ints_server");
ros節點初始化,add_two_ints_server是節點名稱,在ros的執行中必須獨一無二,
ros::ServiceServer service = n.advertiseService("add_two_ints",add);
建立一個服務的Sever,指定服務的名稱add_two_ints,以及收到資料的回撥函式 add.然後迴圈等待服務請求,一旦有服務請求,Sever就跳入回撥函式進行處理。
3,回撥函式部分
bool add(my_package::AddTwoInts::Request &req,
my_package::AddTwoInts::Response &res)
回撥函式是實現服務功能的部分,add()完成兩個函式相加的功能,其傳入引數便是我們在服務資料型別描述檔案(srv)宣告的資料結構。
res.sum = req.a + req.b; ROS_INFO("request:x=%ld,y=%ld",(long int)req.a,(long int)req.b); ROS_INFO("sending back response:[%ld]",(long int)res.sum); return true;
完成加法運算後,求和結果會放入到應答資料中,反饋到Client,回撥函式返回true。
服務中的Server類似於話題中的Subscriber,流程如下:
1,初始化ros節點
2,建立Server例項
3,迴圈等待服務請求,進入回撥函式
4,在回撥函式中完成服務功能的處理並反饋應答資料。