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写为一致,这样就简单省事多了。但是探索还是要有的,不能被蒙蔽了眼睛

  • 相关阅读:
    第四次实验报告
    第三次实验报告
    第五章 循环结构课后反思
    第二次实验报告
    第一次实验报告
    第一次作业
    第九章实验报告(构造数据类型)
    第八章实验报告(指针实验)
    第七章实验报告(数组实验)
    第六章 函数和宏定义实验(2)
  • 原文地址:https://www.cnblogs.com/lqc-blog/p/14389162.html
Copyright © 2011-2022 走看看