zoukankan      html  css  js  c++  java
  • 关于ros node 中的namespace

    在ros node中必然用到nodehandle,namespace也肯定会用到,一直都是用的固定模式,没看到这么多,其实是被保护得太好了。

    如无指定namespace,常用~代替当前namespace,但这个“当前”到底是由哪里决定的,下面就实践经验,描述一下:

    1-当用launch文件启动时,node里面的name属性替代了~,也就是说

    1  ros::NodeHandle private_nh("~");
    2  private_nh.param("lidar_frame", mLidarFrame, std::string("scan_head"));

    假设launch文件如下

    1 <launch>
    2   <rosparam file="$(env HOME)/params.yaml" command="load" ns="AAA" />
    3   <node pkg="ros_node" type="ros_node" name="ros_node" output="screen"/>
    4 </launch>

    如果想要通过配置文件加载上述参数,那么代码里读取参数的路径为 ros_node/lidar_frame

    而launch文件中,ns=“AAA”意思是参数要从"AAA/params.yaml"处加载,即参数写入了AAA/lidar_frame中

    由此出现了不一致的情况,导致参数加载失败。

    如果没有launch文件,则以下面代码中初始化中的bbb代替“~”,launch文件里node一栏的name属性优先级要高于代码中init语句中定位的name

    1 ros::init(argc, argv, "bbb");

    比较方便的写法是将三处namespace写为一致,这样就简单省事多了。但是探索还是要有的,不能被蒙蔽了眼睛

  • 相关阅读:
    技术转型之路开启
    kotlin入门 (教程难点)
    linux入门
    Code-Breaking Puzzles做题记录
    bugku-login4-CBC字节翻转攻击
    bugku-就五层你能解开吗WP
    上海市数学教材
    书目推荐
    Zeta(2) 有图版
    UnitTest测试框架全栈详解(十)
  • 原文地址:https://www.cnblogs.com/lqc-blog/p/14389162.html
Copyright © 2011-2022 走看看