C ++ nodo de inicialización y roscpp apagado

explicación

Introducción roscpp inicialización nodo y apagado

inicialización

Se requieren dos pasos para inicializar el nodo:

nodo de inicialización: la función de llamada ros :: init () para inicializar el nodo, proporcionando argumentos de línea de comandos para el ROS, permitiendo que el nombre de nodo y ofrecen diferentes parámetros opcionales.

Iniciar nodo: ros de llamada :: NodeHandle para permitir que el nodo

inicialización del nodo

Verificar ros :: init () de la API

Roscpp antes de llamar a otras funciones, primero debe llamar ros :: init ().

Dos usos comunes:

ros :: init (argc, argv, “my_node_name”);

o

ros :: init (argc, argv, “my_node_name”, ros :: init_options :: AnonymousName);

En general, en línea con la siguiente forma:

ros vacío :: init (ode_name, std :: string, uint32_t opciones);

Análisis de función:

argc y argv, la lista de argumentos, ROS utiliza estos parámetros para resolver la asignación desde la línea de comandos

nombre_nodo, nombre de nodo, es necesario en el sistema ROS es único. Si hay un nodo del mismo nombre inicie, se apagará automáticamente el frente, si desea iniciar más de un mismo nodo, usando init_options :: parámetros AnonymousName.

opciones, que es un parámetro opcional, puede especificar ciertas opciones, cambiar el comportamiento roscpp. Así múltiples opciones pueden ser especificadas. Las opciones se describen en la sección de opciones de inicialización.

Otras formas de ros :: init (), sin necesidad de usar argc / argv, pero el uso de parámetros de asignación complejas, tales como: std :: mapa <std :: string, std :: string> y std :: vector <std :: par <std :: string, std :: string >>.

nodo de inicialización simplemente leer los argumentos de línea de comandos y el entorno para encontrar un nombre de nodo, espacio de nombres y reasignación.

maestro Inicializar no está conectado al host, que requiere después de la inicialización, ros reutilización :: función maestro :: cheque () para comprobar o cualquier otra condición host.

inicialización opciones

Verificar ros :: init_options API de código

ros :: :: init_options NoSigintHandler

No instale el procesador SIGINT. En este caso, se debe instalar su propio procesador SIGINT, asegurarse de salir nodo correctamente cerrada.

Tenga en cuenta que la acción por defecto es terminar el proceso de SIGINT, así que si quieres ser su propio proceso de SIGTERM, usted tiene que utilizar esta opción.

ros :: :: init_options AnonymousName

Anónimo nombre de nodo. Añadir el número aleatorio al final de los nombres de nodos, por lo que es único.

ros :: :: init_options NoRosout

No difunda salida a rosconsole / rosout tema.

Acceder a los argumentos de línea de comandos

Como se mencionó anteriormente, ros de llamadas :: init (), con los parámetros de línea de comandos argc y argv parámetros para borrar los ROS.

Antes, si es necesario analizar comando ros llamada de línea :: init (), puede llamar al (nuevos ROS 0,10) ros :: removeROSArgs de función ().

nodo de inicio

El nodo de inicio método común más:

ros :: NH NodeHandle;

Cuando los primeros ros :: NodeHandle crean cuando las llamadas ros :: start ()

Los ROS última vez :: NodeHandle destruido, llamarán ros :: shutdown ()

Si desea propio nodo de gestión de ciclo de vida, es necesario llamar ros hora de inicio :: start (), ros llamada antes de cerrar el programa :: shutdown ().

Cerrar nodo

Usted puede llamar en cualquier tiempo ros :: shutdown () es la función de nodo de personas con discapacidad.

Se cerrarán todas las suscripciones, la edición, las llamadas de servicio abiertas y servidor de servicio.

prueba Cerrar

Hay dos formas de comprobar fuera del estado

El método más común es ros :: ok (), tales como:

mientras que (ROS :: ok ()) {...}

Una vez ros :: ok () devuelve false, el nodo ha sido cerrado.

De otra manera: ros :: isShuttingDown (), cuando ros :: shutdown () llamada, se volverán realidad.

En general, no favorecen el uso de, pero en algunos de alto uso o utilidad.

Por ejemplo, en la función de devolución de llamada de la operación continua del nodo de servicio, un nodo cuando la solicitud para cerrar la función de devolución de llamada debe ser cerrado inmediatamente. Esta vez las ros :: isShuttingDown () se utilizarán, y ros :: ok () no funcionará, debido principalmente a la función de devolución de llamada en la operación, el nodo no pueden ser cerrados.

procesador de señal de encargo

Puede instalar una combinación perfecta trofeos procesador de señal personalizada ROS:

Código de ejemplo:

# include <ros / ros.h>
incluir <signal.h>
vacío mySigintHandler (int sig)
{
// Hacer algo de acción personalizado.
// Por ejemplo, publicar un mensaje de detención de algunos otros nodos.
// Todo el manejador por defecto sigint hace es llamada de apagado ()
ros :: shutdown ();
}
Int main (int argc, char ** argv)
{
ros :: init (argc, argv, “my_node_name”, ros :: :: init_options NoSigintHandler);
ros :: NH NodeHandle;
señal (SIGINT, mySigintHandler);
ros :: giro ();
return 0;}

Publicados 261 artículos originales · ganado elogios 4 · Vistas 4265

Supongo que te gusta

Origin blog.csdn.net/it_xiangqiang/article/details/105206171
Recomendado
Clasificación