Die Verwendung von Ros-Parametern und Domänennamen

Die Verwendung von Ros-Parametern und Domänennamen


Der Domänenname des Parameters wird häufig verwechselt. Jetzt fassen wir die Wissenspunkte zusammen, die sich auf den Domänennamen des Parameters beziehen. Hinweis: Das „/“ am Anfang des Domänennamens wird vollständig durch das NodeHandle-Handle im Code und das XML-Format beim Start gesteuert, und der Name beginnt nicht mit „/“
imu_node

1. Domänennamenraum von NodeHandle

    ros::NodeHandle n;
    ros::NodeHandle nh("~");//相对域名, 相对于在启动起来的节点node域名下

Der Domänenname des Parameters kann nur von NodeHandle gesteuert und verwaltet werden, und die Parameterdefinition im Knotenprogramm wird nur durch den Namen bestimmt. Globales NodeHandle n kann mit oder ohne „/“ gestartet werden; relativ zu NodeHandle nh, nicht mit „/“ beginnen, sonst gibt es Probleme;

    ros::NodeHandle n;
    n.param<std::string>("serial_port_name", serial_port_name_, "/dev/ttyUSB0");
    n.param<std::string>("/imu_topic", imu_topic_, "/imu");
    ros::NodeHandle nh("~");
    nh.param<int>("publish_rate", publish_rate_, 200);
    nh.param<bool>("debug_raw_data", debug_raw_data_, false);

2. Der Name des Node-Knotens

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

Jeder Knoten ist ein Prozess, und während der Initialisierung wird ein Standardknotenname „imu_node“ angegeben

2.1. Wenn Rosrun startet, startet es mit dem Standardnamen: /imu_node

yhzhao@yhzhao:~/ys_design/ysImu_ws$ rosrun  imu_node imu_node

yhzhao@yhzhao:~/ys_design/ysImu_ws$ rosparam list 
/rosdistro
/roslaunch/uris/host_localhost__43741
/rosversion
/run_id

yhzhao@yhzhao:~/ys_design/ysImu_ws$ rosnode list 
/imu_node
/rosout

Der Parameterdienst wurde nicht aufgerufen und der Befehl rosparam list kann die entsprechende Parameterliste nicht sehen. Der Parameter kann erst nach dem Aufruf von rosparam set angezeigt werden. Der Lebenszyklus des Parameters stimmt mit dem Zyklus des Parameterservers überein ist der Zyklus von Roscore;

yhzhao@yhzhao:~/ys_design/ysImu_ws$ rosparam  set  /imu_frame /imu_frame1
yhzhao@yhzhao:~/ys_design/ysImu_ws$ rosparam list 
/imu_frame
/rosdistro
/roslaunch/uris/host_localhost__45945
/rosversion
/run_id

yhzhao@yhzhao:~/ys_design/ysImu_ws$ rosparam  get  /imu_frame
/imu_frame1

2.2. Der von roslaunch gestartete Knoten gibt den Alias ​​imu_node_xx entsprechend dem Namen im Start an

    <node pkg="imu_node" type="imu_node" name="imu_node_xx" output="screen">
        <param name="publish_rate" type="int" value= "200"/>
    </node>
yhzhao@yhzhao:~/ys_design/ysImu_ws$ roslaunch imu_node imu.launch

yhzhao@yhzhao:~/ys_design/ysImu_ws$ rosnode list 
/imu_node_xx
/rosout

3. Die Leistung von param beim Start

Der Name des Parameters in Launch sollte nicht mit „/“ beginnen und die Relativität seines Domänennamens wird vollständig im XML-Format gesteuert; der Parametername = „imu_frame“ von Launch kann mit oder ohne „/“ gestartet werden, also don 'T;

    ros::NodeHandle n;//绝对域名
    ros::NodeHandle nh("~");//相对域名

    n.param<std::string>("serial_port_name", serial_port_name_, "/dev/ttyUSB0");
    n.param<std::string>("imu_topic", imu_topic_, "/imu");
    n.param<std::string>("imu_frame", imu_frame_, "/imu_frame");
    nh.param<int>("publish_rate", publish_rate_, 200);

Die Parameter werden entsprechend dem Namespace des NodeHandle bestimmt; serial_port_name_ imu_topic_ imu_frame_ entspricht dem absoluten Domänennamen; Publish_rate_ bezieht sich auf den relativen Domänennamen; wobei der relative Domänenname „~“ der Domänenname ist, der dem Knoten entspricht, wenn der Knoten Wenn sich der Name ändert, ändert sich auch der Domainname.

Ändern Sie die entsprechenden Knotenparameter gemäß der Startdatei. Platzieren Sie die absoluten Parameter außerhalb und die relativen Parameter innerhalb des Knotenknotens. Sie können auch alle relativen Domänennamenparameter schreiben und außerhalb des Knotens festlegen.

    <param name="imu_frame" type="string" value= "/imu_frame"/>
    <param name="imu_topic" type="string" value= "/imu"/>
    <param name="serial_port_name" type="string" value= "/dev/ttyUSB0"/>

    <node pkg="imu_node" type="imu_node" name="imu_node_xx" output="screen">
        <param name="publish_rate" type="int" value= "200"/><!--参数域名会相对在node域名之下 -->
    </node>
yhzhao@yhzhao:~/ys_design/ysImu_ws$ roslaunch imu_node imu.launch
    
yhzhao@yhzhao:~/ys_design/ysImu_ws$ rosnode list 
/imu_node_xx
/rosout

yhzhao@yhzhao:~/ys_design/ysImu_ws$ rosparam list 
/imu_frame
/imu_node_xx/publish_rate
/imu_topic
/rosdistro
/roslaunch/uris/host_localhost__45587
/rosversion
/run_id
/serial_port_name

4. Rosparam-Ladung

Entsprechende Yaml-Datei: Der erste ist ein Domänenname; : Der letztere spezifische Wert ist der Wert, der dem Parameter entspricht; die Formatausrichtung entspricht dem Bereich des Domänennamens

4.1 Parameterdatei laden

<launch>
    <rosparam command="load" file="$(find odom)/cfg/base.yaml" />
</launch>
imu_port_name: /dev/ttyUSB0
publish_tf: true           
cmd_time_out: 1000    #ms

4.2 Laden Sie die Parameterdatei unter dem Knotendomänennamen

<launch>
  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <rosparam file="$(find  navigation)/param/global_planner_params.yaml" command="load" />
  </node>
</launch>  

global_planner_params.yaml

GlobalPlanner:
  use_dijkstra: false
  use_quadratic: true
  use_grid_path: false
  cost_factor: 5.0

4.3 Laden Sie die Parameterdatei unter dem Knotendomänennamen mit ns

Der Parameter wird mit der global_costmap abgedeckt, die dem Domänennamen ns auf der äußeren Ebene entspricht

<launch>
  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <rosparam file="$(find navigation)/param/global_planner_params.yaml" command="load" ns="global_costmap" />
  </node>
</launch>  

global_planner_params.yaml

use_dijkstra: false
use_quadratic: true
use_grid_path: false
cost_factor: 5.0

おすすめ

転載: blog.csdn.net/zyh821351004/article/details/106768318