ros param与域名的使用

ros param与域名的使用


经常混淆参数域名,现在总结下参数的域名相关知识点。 注意: 域名开头的“/”全部交给代码中的NodeHandle句柄和launch中的xml格式控制,名称不以“/”开头
imu_node

1. NodeHandle的域名空间

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

参数的域名只能由NodeHandle来控制管理, 节点程序中参数定义只由名称决定。全局NodeHandle n下带不带“/”开头都可以;相对NodeHandle nh下不要带“/”开头,带了会有问题;

    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. Node节点的名称

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

每个节点是一个进程, 初始化的时候会指定一个默认的节点名称“imu_node”

2.1. rosrun 启动时就会以默认名称启动: /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

参数服务没被调用,命令 rosparam list 看不到相应的参数列表, 只要调用过 rosparam set 才会可见参数; 并且该参数的生存周期同参数服务器的周期一致,也就是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. roslaunch 启动的node依据launch中的name指定别名 imu_node_xx

    <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. param 在launch中的表现

launch中param的name不要以“/”开头,完全以xml的格式控制其域名的相对性;launch的param name="imu_frame"有没有“/”开头都可以, 那就不要了;

    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);

参数依据NodeHandle的命名空间确定; serial_port_name_ imu_topic_ imu_frame_ 对应绝对域名下; publish_rate_为相对域名下; 其中相对域名“~”为节点对应的域名,如果节点名称发生变化,域名也会变化;

依据launch文件修改对应的节点参数;绝对参数放外面,相对参数放节点node里面; 也可以写全相对域名参数在node外设置;

    <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 load

对应的yaml文件 :前面的为一层域名; : 后面具体值为参数对应的值; 格式对齐对应域名作用域

4.1 加载参数文件

<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 加载node域名下的参数文件

<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 加载node域名下的参数文件, 带ns

参数会在外层套上域名ns对应的global_costmap

<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
今日推荐