entrada ROS (xiii) write servidor e um cliente simples (C ++)

Escrever Serviço Node

Aqui, vamos criar um nó serviço simples ( "add_two_ints_server"), o nó receberá duas figuras de plástico, e retorna a soma deles.

Beginner_tutorials pacote para o diretório que você criou anteriormente no catkin espaço de trabalho tutorial aqui:

cd ~/catkin_ws/src/beginner_tutorials

Certifique-se de criar as etapas do tutorial AddTwoInts.srv srv criou este tutorial necessário (não se esqueça de selecionar o sistema compilador correspondente "catkin" e "rosbuild").

código

Criando src / add_two_ints_server.cpp arquivo de pacote beginner_tutorials, e copie e cole o seguinte código:

 1 #include "ros/ros.h"
   2 #include "beginner_tutorials/AddTwoInts.h"
   3 
   4 bool add(beginner_tutorials::AddTwoInts::Request  &req,
   5          beginner_tutorials::AddTwoInts::Response &res)
   6 {
   7   res.sum = req.a + req.b;
   8   ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
   9   ROS_INFO("sending back response: [%ld]", (long int)res.sum);
  10   return true;
  11 }
  12 
  13 int main(int argc, char **argv)
  14 {
  15   ros::init(argc, argv, "add_two_ints_server");
  16   ros::NodeHandle n;
  17 
  18   ros::ServiceServer service = n.advertiseService("add_two_ints", add);
  19   ROS_INFO("Ready to add two ints.");
  20   ros::spin();
  21 
  22   return 0;
  23 }

explicação código

Agora, vamos análise passo a passo do código.

   1 #include "ros/ros.h"
   2 #include "beginner_tutorials/AddTwoInts.h"
   3 

beginner_tutorials / AddTwoInts.h automaticamente de acordo com o arquivo srv arquivo de cabeçalho que criou anteriormente a ser gerado pelo sistema de arquivos SRV compilador.

   4 bool add(beginner_tutorials::AddTwoInts::Request  &req,
   5          beginner_tutorials::AddTwoInts::Response &res)

Estes valores int função são somadas para fornecer dois serviços, pedido de aquisição de valor int a partir do interior, e retorna os dados carregados no Response, estes tipos de dados são definidos no arquivo srv interior, a função retorna um valor booleano.

   6 {
   7   res.sum = req.a + req.b;
   8   ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
   9   ROS_INFO("sending back response: [%ld]", (long int)res.sum);
  10   return true;
  11 }

Agora, foram adicionados dois valores int e armazenados na resposta. Em seguida, algumas das informações sobre a solicitação ea resposta é gravado. Finalmente, o serviço retorna um valor verdadeiro após a conclusão do cálculo.

  18   ros::ServiceServer service = n.advertiseService("add_two_ints", add);

Aqui, o serviço foi estabelecida, e publicá-lo no ROS.

nó write cliente

código

Criando src / add_two_ints_client.cpp arquivo de pacote beginner_tutorials, e copie e cole o seguinte código:

   1 #include "ros/ros.h"
   2 #include "beginner_tutorials/AddTwoInts.h"
   3 #include <cstdlib>
   4 
   5 int main(int argc, char **argv)
   6 {
   7   ros::init(argc, argv, "add_two_ints_client");
   8   if (argc != 3)
   9   {
  10     ROS_INFO("usage: add_two_ints_client X Y");
  11     return 1;
  12   }
  13 
  14   ros::NodeHandle n;
  15   ros::ServiceClient client = n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");
  16   beginner_tutorials::AddTwoInts srv;
  17   srv.request.a = atoll(argv[1]);
  18   srv.request.b = atoll(argv[2]);
  19   if (client.call(srv))
  20   {
  21     ROS_INFO("Sum: %ld", (long int)srv.response.sum);
  22   }
  23   else
  24   {
  25     ROS_ERROR("Failed to call service add_two_ints");
  26     return 1;
  27   }
  28 
  29   return 0;
  30 }

explicação código

Agora, vamos análise passo a passo do código.

  15   ros::ServiceClient client = n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");

Esse código cria um cliente é o serviço add_two_ints. objetos ros :: ServiceClient pode ser usado para chamar o serviço.

  16   beginner_tutorials::AddTwoInts srv;
  17   srv.request.a = atoll(argv[1]);
  18   srv.request.b = atoll(argv[2]);

Aqui, nós instanciar um compilador gerado automaticamente por classe de serviço do sistema ROS, e seu pedido aos membros da missão. A classe de serviço inclui dois membros do pedido e resposta. Ele também inclui duas definições de classe Request e Response.

19   if (client.call(srv))

Este código está chamando serviço. Desde que a chamada de serviço é o processo modal (um processo chamado quando a ocupação impedir a execução de outro código), assim que a chamada for concluída, os resultados vão retornar a chamada. Se o serviço de chamada for bem sucedida, ligue para () função retorna TRUE, srv.response dentro dos valores são valores legais. Se a chamada falhar, ligue para () devolve falsa, srv.response dentro do valor seria ilegal.

nó de compilação

Editá-lo novamente beginner_tutorials dentro CMakeLists.txt, arquivos localizados em ~ / catkin_ws / src / beginner_tutorials / CMakeLists.txt, e adicione o seguinte código no final do arquivo:

https://raw.github.com/ros/catkin_tutorials/master/create_package_srvclient/catkin_ws/src/beginner_tutorials/CMakeLists.txt

  27 add_executable(add_two_ints_server src/add_two_ints_server.cpp)
  28 target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})
  29 add_dependencies(add_two_ints_server beginner_tutorials_gencpp)
  30 
  31 add_executable(add_two_ints_client src/add_two_ints_client.cpp)
  32 target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})
  33 add_dependencies(add_two_ints_client beginner_tutorials_gencpp)

Este código irá gerar dois "add_two_ints_server" executável e "add_two_ints_client", os dois executáveis ​​são colocados no diretório padrão de seu espaço devel pacote, o padrão é ~ / catkin_ws / devel / lib / share / . Você pode chamar programa diretamente executável ou usar o comando rosrun de chamá-los. Eles não são instalados no diretório / bin, porque quando você instalar este pacote no seu sistema, isso vai contaminar a variável PATH. Se você sempre quis instalar um programa executável na sua variável PATH dentro, você precisa configurar instalar alvo, consulte: catkin / CMakeLists.txt

Sobre o arquivo de CMakeLists.txt uma descrição mais detalhada, por favor consulte: catkin / CMakeLists.txt

Agora execute catkin_make comando:

# In your catkin workspace
cd ~/catkin_ws
catkin_make

Se o seu processo de compilação falhar por algum motivo:

Para garantir que o anterior criando as etapas do tutorial AddTwoInts.srv você cumpridos em conformidade com a operação.

Agora que você aprendeu como escrever um servidor e um cliente simples serviço ao cliente, iniciar um teste simples e serviço ao cliente, certo.

Publicado 34 artigos originais · ganhou elogios 2 · Vistas 2337

Acho que você gosta

Origin blog.csdn.net/weixin_44088559/article/details/104990133
Recomendado
Clasificación