Реализовать добавление сервера, результаты обратно клиенту
Клиент будет два номера, которые будут рассчитаны и выдается на службу.
1. Таможенная служба данных
SRV создать файл: AddTwoInts.srv
Int64 в Int64 б --- Int64 сумма
Выше запрос данных, следующий ответные данные, разделенные ---
Открыть файл package.xml, добавить
<build_depend> message_generation </ build_depend> <build_export_depend> message_generation </ build_export_depend> <exec_depend> message_runtime </ exec_depend>
Откройте файл в CMakeLists.txt
find_package (сережка Необходимые компоненты
message_generation
roscpp
)
add_service_files (файлы
AddTwoInts.srv
)
2. Код сервера
#include " ROS / ros.h " #include " learning_server / AddTwoInts.h " // сервис回调函数输入REQ输出Рез BOOL добавить (learning_server :: AddTwoInts :: Request и REQ, learning_server :: AddTwoInts :: Response и разрешения) { res.sum = req.a + req.b; вернуться верно ; } INT основной ( INT ARGC, символ ** ARGV) { // ROS节点初始化 РОС :: Init (ARGC, ARGV, " add_server " ); //Создание узла ручки ROS :: NodeHandle n-; // создать сервер с именем add_two, зарегистрированную функцию обратного вызова Add () ROS :: ServiceServer Service = n.advertiseService ( " add_two " , надстроек); // ждать функции обратного вызова, аналогично опрос образом РОС :: Spin (); возврат 0 ; }
3. Клиентский код
#include <cstdlib> #include " ROS / ros.h " #include " learning_server / AddTwoInts.h " INT основной ( INT ARGC, символ * ARGV []) { // ROS узел инициализации РОС :: Init (ARGC, ARGV, " add_client " ); IF (ARGC! = 3. ) { возвращение 1. ; } // Создание узла ручки ROS :: н-NodeHandle; // создать клиент, обслуживание запросов ROS :: ServiceClient клиента = n.serviceClient <learning_server :: AddTwoInts > ( "add_two " ); // создать тип службы SRV пользовательских learning_server :: AddTwoInts SRV; srv.request.a = Atoll (ARGV [ 1 ]); srv.request.b = Atoll (ARGV [ 2 ]); // освобождение запросы на обслуживание, блокирование процесса может происходить IF (The Client.call (СРВ)) { ROS_INFO ( " СУММА:% LD " , ( Длинный INT ) srv.response.sum); } еще { ROS_ERROR ( " фэйл " ); возвращение . 1 ; } возвращает 0 ; }