ROS Начало работы: Услуги

Реализовать добавление сервера, результаты обратно клиенту

Клиент будет два номера, которые будут рассчитаны и выдается на службу.

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 ;
}

 

рекомендация

отwww.cnblogs.com/penuel/p/11344258.html