ROS话题订阅与namespace使用出现的问题汇总

2023-05-16

1    什么情况下会用到namespace(以下简称ns)

当我们需要运行同一个pkg的同一个node,虽然可以在launch文件中给他们命名成不同的name但是,我们希望使用<group ns=""></group>来更加清晰的区分他们之间的不同。但是加上ns后,常常会出现以下问题,需要我们解决。比如,原先不添加ns的时候一切运行正常,但是当我们添加ns后,无法运行等一类问题。

2    理解什么是namespace

ns就是把你原先运行的pkg---node放到一个命名空间中去,这个命名空间就是ns,例如:

<launch>
    <group ns="name1">
        <node pkg="your_pkg" type="your_node_name" name="whatever" />
    </group>
    <group ns="name2">
        <node pkg="your_pkg" type="your_node_name" name="whatever" />
    </group>
</launch>

我们运行的pkg---node---name都可以一样,但是必须在不同的ns中,这样ROS才可以区分他们,否则会认为重复,第二个node会覆盖掉第一个node,这样始终只有一个node在运行。

在rosnode list 你可以看到:

/name1/whatever
/name2/whatever

而在rostopic list中,所有话题也会被追加上name1和name2

3    添加namespace后提示tf,no laser scan data等问题

这就是由于第二2节中的ns改变了原来会话题的名字。例如,在添加ns之前,该node需要订阅  /scan的雷达数据,但是添加ns后,雷达的数据发布的话题追加了ns的命名空间,变成了/name1/scan ,这时候你再订阅/scan,肯定是没有数据的,因为不存在/scan这个话题了,雷达发布的数据话题从/scan变成了/name1/scan。解决办法是使用<remap from="/name1/scan" to="/scan" />,这样的重映射才会使得数据订阅发布之间重新构建正确的关系。

同样,你可以通过查看rqt_graph来确认你的node是否都正确的订阅了你的话题,哪些需要remap的,可以很清晰的查阅到。

4    发现你的话题无论怎么remap,rqt_graph都不发生改变,还是原来的话题

这看起来显示remap失效了,然而运行launch时没有报错,又表明你的话题参数都是存在切正确的。

没错,这个也困扰了我很久。

4.1    在使用remap时。要注意remap的作用范围,remap只能在<node />,<group /><launch />

如果你放在<include />里面不会报错也没有警告,但是命令行会显示说,“无效的remap”仔细看可以看到。

注意这里说的在<node />,<group /><launch />下可以有效的使用remap,是在直接tag标签下,间接地也是不行的。例如:

<launch>
    .......
    <remap from="xx" to="xx" />
</launch>

这个叫做在<launch>标签下直接使用,是合法有效的。

但是下面这种就是在<launch>标签下间接使用,在<include>下直接使用,这样是无效的。但是运行不会提示error和warnning。这一点要十分注意。

<launch>
    .......
    <include file="$(find pkg)/.....">
        <remap from="xx" to="xx" />
    </include>
</launch>

4.2    在解决4.1的正确使用remap后,如果问题仍然没有解决,那么就是你的remap没有正确的寻找到你的话题

这是由于你的话题,你没有使用绝对路径导致的。例如:

<launch>
    <node pkg="your_pkg" type="your_node_name" name="whatever">
        <remap from="name1/scan" to="scan" />
    </node>
</launch>

这样remap后,如果你的话题没有成功的建立订阅关系,即让rqt_graph的图中name1/scan话题还存在,你的订阅没有连接到/scan话题上,那么就是话题的绝对路径导致的ROS系统未能找到指定的话题,这个在运行launch时也不会有error和warnning提示。解决办法就是在话题前加上“/”即可。例如:

<launch>
    <node pkg="your_pkg" type="your_node_name" name="whatever">
        <remap from="/name1/scan" to="/scan" />
    </node>
</launch>

这样添加上“/”,话题的路径就变成绝对路径了。问题就解决了。

5    从yaml文件像launch文件传递参数

5.1    什么是yaml文件

这个概念自行查找。总结来说就是,yaml文件存放的是一个字典(可以粗糙的这样理解,不完全合理!),它有键值对成对出现,同样也可以是嵌套的字典。例如

1.yaml

var1: 12
var2: name
var3: base_link

2.yaml

var1: 2323
var2: {
scan_frame: robot0_laser0
topic: robot0/laser_0
}
var3: robot0

1.yaml是比较典型的没有嵌套,2.yaml中的var2是嵌套,他的值又是由一个字典组成。

5.2    yaml文件中的所有的键都可以理解成变量,值就是这些变量的初始值,是可以通过rosparam set改变的。当我们在launch文件中load这个yaml文件时就是,将这些变量添加到ROS的参数服务器,并且按照yaml文件中的值,给这些变量赋予初始值。

这就不难理解了,yaml文件中的建就是ROS参数服务器中的参数。因此在launch文件中,load一个yaml文件后,可以直接通过<param name=" " value=" " />来修改yaml文件中的值,

<launch>
    <rosparam file="$(find your_pkg)/1.yaml"  command="load" />
    <param name="var1"   value="1222222" />
</launch>

这样就实现了yaml文件像launch文件传递参数的功能:

当然你也可以这样:

<launch>
<arg name="var1_value" default="33333" />
    <rosparam file="$(find your_pkg)/1.yaml"  command="load" />
    <param name="var1"   value="$(arg var1_value)" />
</launch>

在ROS的官网,官方也给出了一种方法,我测试过和上面的效果一样。

如下所示:

rosparam 有一个属性叫做subst_value,如果设置成true就可以直接修改yaml文件中的参数默认值。

例子如下:

<launch>
    <arg name="whitelist" default="[3, 2]"/>
    <rosparam commond="load" file="$(find your_pkg)/...">
    <rosparam param="whitelist" subst_value="True">$(arg whitelist)</rosparam>
</launch>

这也是完全正确的。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS话题订阅与namespace使用出现的问题汇总 的相关文章

  • KY-RTI分布仿真技术:附录3 国产化(操作系统+CPUs)

    以操作系统和CPU为代表的国产化是当前仿真系统实现的必然趋势 本章以聊天程序为例 xff0c 展示了KY RTI在多种国产操作系统和国产CPU上的运行结果 聊天程序是一个入门程序 xff0c 本身比较简单 xff0c 不追求界面的美观 相信

随机推荐

  • KY-RTI分布仿真技术:前言

    前 言 自从美国国防部建模与仿真办公室 xff08 DMSO xff09 首次提出高层体系结构 xff08 High Level Architecture xff0c HLA xff09 概念以来 xff0c HLA仿真技术得到了迅猛发展
  • KY-RTI分布仿真技术:第一章 简介

    第一章 简介 高层体系结构 xff08 High Level Architecture xff0c HLA xff09 是美国国防部为了解决美军在各个领域开发出来的多种模型和各类仿真系统的互联和互操作问题而提出的一种分布式仿真标准 xff0
  • KY-RTI分布仿真技术:第二章 系统安装

    第二章 系统安装 本章介绍KY RTI在Linux和Windows操作系统下的安装方法 2 1 Linux安装 安装程序 xff1a RTI 1 3NGv6 tar gz 假设当前的Linux用户名为lbq xff0c HOME目录为 ho
  • KY-RTI分布仿真技术:第三章 KY-OMT对象模型模板工具

    第三章 KY OMT对象模型模板工具 本章介绍了对象模型模板的相关知识 xff0c 以及如何使用KY OMT对象模型模板工具创建对象模型文件 3 1 对象模型模板 HLA1 3包含3个标准 xff0c 第一个是描述整个联邦和联邦成员必须遵循
  • 基于SSM的后台管理系统总结

    文章目录 SSM环境搭建环境准备1 1 数据库与表结构1 2 maven工程搭建 pom 1 3编写实体类编写接口 SSM整合 web 与产品查询Spring环境搭建web xml 配置Spring MVC 环境搭建测试运行 资源地址 首先
  • KY-RTI分布仿真技术:第四章 C++程序设计

    第四章 C 43 43 程序设计 本章讲述如何在Linux操作系统上设计GNU C 43 43 程序 演示了2个程序 xff1a 聊天程序chat和时间管理程序time chat使用HLA的交互类进行通信 xff0c 没有采用tick服务
  • KY-RTI分布仿真技术:第五章 Qt程序设计

    第五章 Qt程序设计 本章讲述了如何基于Qt Creator设计控制台程序和图形界面程序 控制台程序相当于4 3节的聊天程序 xff1b 图形界面程序相当于4 4节的时间管理程序 图形界面程序近似于真实仿真项目 xff0c 讲述了如何设计仿
  • KY-RTI分布仿真技术:第六章 Java程序设计

    第六章 Java程序设计 本章讲述了如何基于Java设计聊天程序和时间管理程序 xff0c 两个程序都是控制台程序 聊天程序相当于4 3节的GNU C 43 43 聊天程序 xff1b 时间管理程序相当于4 4节的GNU C 43 43 程
  • KY-RTI分布仿真技术:第七章 Visual C++程序设计

    第七章 Visual C 43 43 程序设计 本章讲述如何基于Visual C 43 43 设计仿真程序 演示了2个程序 xff1a ping程序和pong程序进行相互之间的通信 程序使用HLA的交互类进行通信 xff0c Visual
  • KY-RTI分布仿真技术:第八章 Visual C#程序设计

    第八章 Visual C 程序设计 本章讲述如何基于Visual C 设计ping pong程序 本质上是对上一章Visual C 43 43 程序的一次成功移植 对于不同的程序设计语言而言 xff0c 基于HLA RTI设计仿真应用的方法
  • KY-RTI分布仿真技术:第九章 综合演示

    第九章 综合演示 KY RTI支持基于不同CPU 不同操作系统 不同程序设计语言 不同HLA服务调用方式开发的仿真成员之间的互操作 xff0c 本章综合前面章节的内容给出了几个联合测试案例 本章以银河麒麟操作系统和飞腾CPU为主进行测试 x
  • KY-RTI分布仿真技术:附录1 分组聊天(HLA数据分发管理的应用)

    本章从RTI开发者的角度简单地介绍HLA1 3标准中的数据分发管理 xff08 DDM xff0c Data Distributed Management xff09 并给出了一个具体的示例 前面介绍了基于各种程序设计语言开发的聊天程序示例
  • KY-RTI分布仿真技术:附录2 大联邦(构建1000个成员的HLA/RTI仿真系统)

    基于当前的RTI构建1000个以上成员的仿真系统在一些人看来似乎是极具挑战性的一个问题 如果你对当前的计算机技术 网络技术 仿真技术真正了解的话 xff0c 其实构建这样的一个大规模仿真系统是完全可行的 本章以聊天程序为例 xff0c 介绍
  • 2011-2012中国嵌入式开发从业人员调查报告

    调查背景 在今天所处的大时代背景下 xff0c 嵌入式 3G移动互联网 物联网 云计算俨然已成为信息产业的主旋律 xff0c 不管从政府大力扶持角度来看 xff0c 还是从产业变革的主流方向来说 xff0c 这股潮流早已势不可挡 而嵌入式系
  • 9月10日美团网2014校招研发笔试哈尔滨站

    1 链表翻转 给出一个链表和一个数k xff0c 比如链表1 2 3 4 5 6 xff0c k 61 2 xff0c 则翻转后2 1 4 3 6 5 xff0c 若k 61 3 翻转后3 2 1 6 5 4 xff0c 若k 61 4 x
  • 推荐几个好用的网盘搜索引擎

    下面介绍几个比较好用的网盘搜索引擎 xff0c 排名不分先后 60个百度网盘搜索引擎 盘多多 站点地址 http www panduoduo net 胖次 站点地址 http www panc cc http www panduoduo n
  • python和C++

    参考 xff1a Python编程 xff1a 从入门到实践 C 43 43 Primer 第五版 文章目录 class一 创建类Pythonself的解释注意 Cpp 二 创建实例PythonCpp 运算符三目运算符PythonC 43
  • 作为一名普通的程序员,聊聊这四年的工作感悟

    之前有些小伙伴一直想听我分享更多有关我的工作内容的事情 xff0c 今天就来和大家分享一下 我是一名普通的程序员 xff0c 这四年来我的工作内容发生了哪些变化 xff0c 以及我有哪些感悟 我是16届的毕业生 xff0c 我的第一份工作是
  • 2014校园招聘京东软件开发类笔试(完整版)

    时间 xff1a 2013 9 10 2013 10 8 地点 xff1a 四川大学 天津大学 职位 xff1a 软件开发工程师岗 语言 xff1a java 1 A 2 C 3 D 4 B 5 A 二 1 B 三1 D 2 B 3 C 4
  • ROS话题订阅与namespace使用出现的问题汇总

    1 什么情况下会用到namespace xff08 以下简称ns xff09 当我们需要运行同一个pkg的同一个node xff0c 虽然可以在launch文件中给他们命名成不同的name但是 xff0c 我们希望使用 lt group n