ROS aprender a escribir dos registros 4-- nodos de comunicación basadas en tema

Prólogo cero

Entre los nodos son de comunicarse entre sí a través de un tema ROS. Una de las claves cuestiones nodo de entrada un mensaje en el tema, y ​​el nodo B tema está suscrito para recibir el mensaje.

De acuerdo con la descripción en la Wiki ROS, podemos saber fácilmente la relación entre el mensaje y el tema, el tema de los mecanismos de comunicación, y el mensaje es sólo un tema de estructura de datos.
ROS puede ver comando tema en la línea de comandos y el uso de noticias y encontrar visual qué herramientas, de uso detalladas se pueden ver en los ROS wiki comprensión tema ROS
sobre la base de nuestra creación de un mensaje, usted encontrará que es más como la estructura del lenguaje C.

A. Crear un mensaje

Creamos un nuevo paquete de características:

catkin_create_pkg top roscpp std_msgs message_generation message_runtime

Mira las palabras originales de los ROS Wiki:

A continuación, hay un paso crucial: Queremos para asegurarse de que los archivos msg se convierten en código fuente de C ++, Python y otros lenguajes:
Ver package.xml, asegúrese de que contiene aproximadamente dos declaraciones:
<build_depend> message_generation </ build_depend>
<exec_depend > message_runtime </ exec_depend>
Si no es así, añadido a la misma. Tenga en cuenta que cuando se construyó, sólo tenemos que "message_generation". Sin embargo, en tiempo de ejecución, sólo tenemos que "message_runtime".

Aquí Insertar imagen DescripciónOh, mi Dios, al crear el paquete, el cual ha sido creado para nosotros.
Entonces es crear nuestro mensaje:
Aquí Insertar imagen Descripción
A continuación, modificamos CMakeList.txtpara asegurar que estamos modificando el siguiente comando: la

find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)

Descomentar y modificar:

add_message_files(
  FILES
  Name.msg
)
generate_messages(
  DEPENDENCIES
  std_msgs
)

Garantizar find_package, solamente message_generation, sin message_runtime, de lo contrario será error.
Después de compilar nos fijamos en el éxito:
Aquí Insertar imagen Descripción

II. Preparación de un conjunto de transmisión y recepción de nodo

¿Qué código media específica no hablar, voy a explicar más tarde con

1. El nodo de envío

la parte superior de escritura de escritura / src en el interior puber.cpp:

#include "ros/ros.h"
#include "top/Name.h"
#include "sstream"
int main(int argc, char **argv)
{
  std::stringstream ss;
  top::Name msg;
  ros::init(argc, argv, "publisher");
  ros::NodeHandle h;
  ros::Publisher puber = h.advertise<top::Name>("Name_Info", 10);
  ros::Rate loop_rate(1);
  ss << "A B";
  while (ros::ok())
  {
    
    ss >> msg.first_name;
    ss >> msg.last_name;
    ROS_INFO("I Send [%s %s]", msg.first_name.c_str(), msg.last_name.c_str());
    puber.publish(msg);
  }
  return 0;
}

2. El nodo que recibe

Comentariosuber.cpp

#include "ros/ros.h"
#include "top/Name.h"

void infoCallback(const top::Name::ConstPtr& msg)
{
  ROS_INFO("Name Changed [%s %s]", msg->last_name.c_str(), msg->first_name.c_str());
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "suber");
  ros::NodeHandle n;
  ros::Subscriber sub = n.subscribe("Name_Info", 1000, infoCallback);
  ros::spin();
  return 0;
}


3. Modificar CMakeList.txt

Además, al crear un mensaje, modificamos la CMakeList configurado en el tópico de los mensajes utilizados, ahora es de la configuración nodal, añadiendo:

add_executable(puber src/puber.cpp)
target_link_libraries(puber ${catkin_LIBRARIES})
add_executable(suber src/suber.cpp)
target_link_libraries(suber ${catkin_LIBRARIES})

4. compilar y ejecutar

roscore
rosrun top puber
rosrun top suber
rqt_graph

Aquí Insertar imagen Descripción
Agradable! Obtener!

Publicado 63 artículos originales · ganado elogios 38 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/u011017694/article/details/105134499
Recomendado
Clasificación