Red de conocimiento informático - Material del sitio web - Cómo suscribirse a los datos una vez en ro y luego suscribirse a los datos nuevamente dos segundos después

Cómo suscribirse a los datos una vez en ro y luego suscribirse a los datos nuevamente dos segundos después

Algunos tipos de mensajes tienen estructuras de datos de encabezado como se muestra a continuación. El mensaje va acompañado de datos de parada horaria mediante los cuales se puede lograr la sincronización horaria.

std_msgs/Header header

uint32 seq

Marca de tiempo

string frame_id

Copiar después de iniciar sesión

p>

La siguiente es una forma de sincronizar: Time Synchronizer

El filtro TimeSynchronizer sincroniza los canales entrantes según la marca de tiempo contenida en el encabezado y los genera como uno único.

#include lt;message_filters/subscriber.hgt;

#include lt;message_filters/time_synchronizer.hgt;

#include lt;sensor_msgs/Image.hgt ;

#include lt;sensor_msgs/Image.include lt;sensor_msgs/CameraInfo.hgt;

usando el espacio de nombres sensor_msgs;

usando el espacio de nombres message_filters;

void callback( const ImageConstPtramp; image, const CameraInfoConstPtramp; cam_info)

{

// Resuelve todos los problemas de percepción aquí...

}

int main(int argc, char** argv)

{

ros::init(argc, argv, "vision_node");

{

p>

ros::NodeHandle nh;

message_filters::Subscriberlt;Imagegt; image_sub(nh, "imagen", 1);

message_filters::Subscriberlt;CameraInfogt; info_sub(nh, "camera_info", 1);

TimeSynchronizerlt; p> sync.registerCallback(boost:. bind(amp ;callback, _1, _2));

ros::spin()

return

}

otro El primer tipo de sincronización es la sincronización basada en políticas, que también se sincroniza mediante la interrupción temporal de los datos en el encabezado del mensaje.

Sincronizador basado en políticas [ROS 1.1]:

El filtro Sincronizador sincroniza los canales entrantes en función de la marca de tiempo contenida en el encabezado del mensaje y lo genera como una única devolución de llamada que ocupa el mismo. número de canales. La implementación de C puede sincronizar hasta 9 canales. /p>

Los filtros del sincronizador están basados ​​en políticas que determinan cómo sincronizar los canales.

Actualmente existen dos estrategias:

Cuando los datos del encabezado de todos los mensajes que deben sincronizarse tienen intervalos de tiempo: ExactTime

message_filters::sync_policies::ExactTime La estrategia requiere que los mensajes tener exactamente las mismas marcas de tiempo deben coincidir. Su devolución de llamada solo se realizará si se recibió un mensaje con exactamente la misma marca de tiempo en todos los canales especificados. Su devolución de llamada solo se realizará si se recibió información con exactamente la misma marca de tiempo en todos los canales especificados. La marca de tiempo se lee en el campo del encabezado de todos los mensajes (obligatorio para esta política).

#include lt;message_filters/subscriber.hgt;

#include lt;message_filters/synchronizer.hgt;

#include lt;message_filters/synchronizer.hgt ;

#include lt;message _filters/sync_policies/exact_time.hgt;

#include lt;sensor_msgs/Image.hgt;

#include lt;sensor_msgs /CameraInfo.hgt;

usando el espacio de nombres sensor_msgs;

usando los filtros de mensajes del espacio de nombres;

devolución de llamada nula (const ImageConstPtramp; imagen, const CameraInfoConstPtramp; cam_info)

{

// Resuelve todos los problemas de percepción aquí...

}

int main(int argc, char** argv)

p>

{

ros::init(argc, argv, "vision_node");

ros::NodeHandle nh;

message_filters: : Suscriptorlt; Imagegt; image_sub(nh, "imagen", 1);

message_filters: :Subscriberlt; CameraInfogt(nh, "camera_info", 1); : ExactTimelt; Image, CameraInfogt;

// ExactTime toma el tamaño de la cola como parámetro constructor, por lo que MySyncPolicy(10)

Synchronizerlt; , image_sub, info_sub);

sync.registerCallback(boost::bind(amp;callback, _1, _2));

ros::spin();

devuelve 0;

}

Replicar después de iniciar sesión

Dado que esta política de sincronización se activa cuando la latencia de todos los temas que se sincronizarán es estrictamente igual, devolución de llamada función.

Esto conducirá a los siguientes problemas:

La frecuencia de activación de la función de devolución de llamada debe ser menor o igual a la frecuencia mínima de publicación de estos temas;

La activación de la función de devolución de llamada No es muy estable y, a veces, incluso puede llevar mucho tiempo. No se activará ninguno. Como se muestra en la figura siguiente, el intervalo de activación de una determinada función de devolución de llamada es incluso de unos 10 segundos.

ROS proporciona otra forma de sincronizar datos: a diferencia de ExactTime, que requiere los mismos intervalos de tiempo, permite una cierta desviación en los intervalos de tiempo entre temas.

La política message_filters::sync_policies::AproximateTime utiliza un algoritmo adaptativo para hacer coincidir mensajes en función de marcas de tiempo. #include lt; message_filters/subscriber.hgt;

#include lt;message_filters/synchronizer.hgt;

#include lt;message_filters/sync_policies.filters/sync_policies/approximate_time.hgt;

#include lt; sensor_msgs/Image.hgt;

usando el espacio de nombres sensor_msgs

usando los filtros de mensaje del espacio

void callback(const; ImageConstPtramp; image1, const ImageConstPtramp; image2)

{

// Resuelve todos los problemas de percepción aquí...

}

int main(int argc, char** argv)

{

ros::init(argc, argv, "vision_node");

ros:: NodeHandle nh;

message_filters:

message_filters: Suscriptorlt; image1_sub(nh, "image1", 1); nh, "image2", 1);

typedef sync_policies: :AproximateTimelt; Image, Imagegt; MySyncPolicy; // ApproximateTime toma el tamaño de la cola como parámetro de constructor, por lo que MySyncPolicy( 10)

Synchronizerlt;MySyncPolicygt; sync(MySyncPolicy(10), image1_sub, image2_sub);

sync.registerCallback(boost::bind(amp;callback, _1, _2)) ;

ros::spin();

devuelve 0;

}

Copiar después de iniciar sesión

De la siguiente figura Como se muestra en la figura siguiente, aunque este método permite desviaciones en el tiempo, las desviaciones en realidad no son grandes.

Y la función de devolución de llamada de este método se activa mucho más rápido que el método anterior.

Todavía no entiendo nada sobre ApproximateTime, así que aquí hay una aclaración:

Si no todos los mensajes tienen campos de encabezado que pueden determinar la marca de tiempo, consulte la solución alternativa a continuación.

AproximateTimeSynchronizer se negará de forma predeterminada a agregar ciertos mensajes si su tipo no contiene campos de encabezado. No sé si esto es un problema con mi comprensión. Desde la perspectiva de la sincronización de tiempo, el contenido de la información del sujeto debe contener información de interrupción de tiempo para poder sincronizarse, pero la primera oración dice que se puede permitir que cierta información no lleve información de interrupción de tiempo.

[Agregado el 2021.2.11: utilicé ApproximateTime para sincronizar un tipo de mensaje personalizado hoy y ocurrió el error que se muestra en la imagen a continuación. Después de buscar la información relevante, me di cuenta de que esto se debía a que faltaba un encabezado, lo que significa que sin una parada de tiempo, el programa no podría sincronizarse según el tiempo. En otras palabras, el método también debe requerir tiempo para interrumpirse. Después de agregar el encabezado, el error ya no existe].

xml

find_package(componentes requeridos catkin

lt;build_dependgt;message_filterslt;/build_dependgt;

lt;build_export_dependgt;message_filterslt;/build_export_dependgt;

lt;exec_dependgt;message_filterslt;/exec_dependgt;

)

Inicia sesión y copia

c

Los ciudadanos de Hengyang reciben subsidios Be ¡cuidadoso!

Publicidad Interactiva Jiumu

ROS (fusión multisensor) que se suscribe a múltiples temas y los sincroniza

2.0W lecturas-11 comentarios-22 me gusta

26 de julio de 2019

Estudio de revisión de ROS (5): suscríbete a múltiples temas y sincroniza

1963 lecturas - 0 comentarios - 0 me gusta

4 de febrero de 2020

ros_Devolución de llamada de sincronización de mensajes múltiples (sincronizador)

5149 lecturas - 2 comentarios - 10 me gusta

17 de octubre de 2019

rosmessage_ filter sincroniza la nube de puntos y los datos de la imagen

1442 vistas - 9 comentarios - 6 me gusta

21 de abril de 2020

ROS MessageFilter se suscribe a múltiples LiDAR temas para sincronización

2690 lecturas - 1 comentario - 7 me gusta

1 19 de julio de 2021 25 de julio de 2020

Acerca de la sincronización horaria de diferentes sensores-- --ROS proporciona una función de sincronización horaria message_filtersROS bajo el código fuente de Linux,

1174 lecturas - 2 comentarios - 4 me gusta

25 de julio de 2020

Sincronización horaria recibido por múltiples temas en ROS

1052 lecturas - 1 Comentarios - 2 Me gusta

20 de septiembre de 2020

Sincronización de marcas de tiempo de nubes de puntos e imágenes con diferentes marcas de tiempo ; segmentar imágenes y nubes de puntos en paquetes en marcos; convertir pcd a formato bin.

1491 vistas - 9 comentarios - 5 me gusta

19 de abril de 2021

Solución de sincronización de marcas de tiempo de datos multisensor ROS - message_filters:: TimeSynchronizer

Leído 1539 veces - 0 comentarios - 1 me gusta

6 de julio de 2022

Tutorial oficial de ROS [Traducción] - Uso de Message_filter

2,4 W de lecturas - 3 comentarios - 23 Me gusta

22 de agosto de 2017

Registro de aprendizaje de ROS (2): suscripción a la sincronización de tiempo de múltiples nodos

518 lecturas - 0 comentarios - 3 me gusta

18 de septiembre de 2020

Ejercicio de autoestudio de ROS (10): los nodos ROS se suscriben a varios nodos al mismo tiempo Temas y sincronización de tiempo de mensajes

8118 vistas - 19 comentarios - 10 me gusta

23 de mayo de 2020

ros-multisubscribe

Leído 551 veces - 0 comentarios - 0 me gusta

12 de mayo de 2022

Puntos de conocimiento de ROS: genere nubes de puntos, publique y suscríbase a temas de nubes de puntos de ROS

1795 vistas - 0 comentarios - 2 me gusta

9 de agosto de 2022

Uso del patrón de diseño de publicación/suscripción para lograr la sincronización de datos entre objetos

1257 vistas-0 comentarios-1 me gusta

Abril 18, 2004

Notas de estudio del filtro de mensajes

805 lecturas - 0 comentarios - 0 me gusta

13 de agosto de 2021

ROS entiende el mecanismo de devolución de llamada multitema y cola de mensajes