Mecanismo de carga de parámetros ROS

Puede usar roslaunch para iniciar el nodo ros para cargar los parámetros del archivo yaml. Solo necesita escribir la información relacionada con los parámetros en el archivo .launch, de la siguiente manera:

<launch>
  <arg name="ns" default="" />
  <node pkg="planning_node" name="planning_node" type="planning_node" output="screen" ns="/$(arg ns)">
    <rosparam command="load" file="$(find planning_node)/param/planning_node.yaml"></rosparam>
  </node>
</launch>

Esto implica la posición de escritura de rosparam. Si está escrito en el medio de <nodo></nodo>, significa cargar el parámetro planificación_node.yaml en el espacio de nombres local, es decir, en /planning_node. También hay un parámetro ns requerido en <nodo> aquí. Tenga en cuenta que este es el prefijo del espacio de nombres local y se puede agregar manualmente durante el lanzamiento de ros. Si se establece ns="foo", los parámetros de planificación_node.yaml se cargarán en /foo/planning_node.

Si rosparam se escribe fuera de <nodo></nodo>, será el siguiente:

<launch>
  <arg name="ns" default="" />
  <rosparam command="load" file="$(find planning_node)/param/planning_node.yaml"></rosparam>
  <node pkg="planning_node" name="planning_node" type="planning_node" output="screen" ns="/$(arg ns)">
  </node>
</launch>

Significa cargar los parámetros de planificación_node.yaml en el espacio de nombres global, es decir, /bajo

En este punto, el proceso de carga de parámetros se completa. Los resultados de la carga de parámetros se pueden rosparam listver a través de comandos. Tenga en cuenta que los parámetros se almacenarán en roscore. Si desea borrar completamente el caché de parámetros, debe reiniciar roscore. Más adelante, deberá leer los parámetros en el programa y deberá usarlo ros::NodeHandleaquí para leer los parámetros.

Básicamente, hay dos formas de inicializar ros::NodeHandle: una es llamar al constructor predeterminado, es decir ros::NodeHandle n1, aquí n1 es el identificador de nodo en el espacio de nombres global. El otro es construir con el parámetro "~", es decir ros::NodeHandle n2("~"), aquí n2 es el identificador de nodo en el espacio de nombres local. Después de crear el identificador de nodo, puede utilizar los métodos del objeto getParampara leer los parámetros.

n1.getParam("bar", temp_str);
n2.getParam("bar", temp_str);

Aquí, get de n1 se utiliza para obtener los parámetros en el espacio de nombres global, es decir, se encuentran los parámetros en "/ bar". El get de n2 obtiene los parámetros en el espacio de nombres local, es decir, busca los parámetros en "/planning_node/bar". Si ns está configurado en "ns=foo", busca "/foo/planning/bar". " parámetros bajo.

Para evitar conflictos en los espacios de nombres de varios nodos, se recomienda que tanto los parámetros de carga como los parámetros de lectura se escriban en espacios de nombres locales.

Supongo que te gusta

Origin blog.csdn.net/zmhzmhzm/article/details/130265424
Recomendado
Clasificación