1.ROS工作空间覆盖

隐患

存在安全隐患,比如当前工作空间B优先级更高,意味着当程序调用 turtlesim 时,不会调用工作空间A也不会调用系统内置的 turtlesim,如果工作空间A在实现时有其他功能包依赖于自身的 turtlesim,而按照ROS工作空间覆盖的涉及原则,那么实际执行时将会调用工作空间B的turtlesim,从而导致执行异常,出现安全隐患。

BUG 说明:

当在 .bashrc 文件中 source 多个工作空间后,可能出现的情况,在 ROS PACKAGE PATH 中只包含两个工作空间,可以删除自定义工作空间的 build 与 devel 目录,重新 catkin_make,然后重新载入 .bashrc 文件,问题解决。

2. 节点名称重名

rosrun设置命名空间
运行2次:
rosrun turtlesim turtlesim_node
第一次运行的会被强制关闭,留第二次启动的窗口

2.1 解决1-修改为:

rosrun turtlesim turtlesim_node __ns:=/xxx  //注:__ns 是2个下划线
rosrun turtlesim turtlesim_node __ns:=/yyy

会成功启动2个窗口

解决2-修改为:

rosrun turtlesim turtlesim_node __name:=/xxx  //注:__name 是2个下划线
rosrun turtlesim turtlesim_node __name:=/yyy

会成功启动2个窗口

解决3-前两个叠加修改为:

rosrun turtlesim turtlesim_node __ns:=/xxx __name:=tn

2.2 launch文件设置命名空间与重映射

<!-- 需要启动多个乌龟GUI节点 -->
<launch><node pkg = "turtlesim" type = "turtlesim_node" name = "turtlesime" /><!-- 名称重映射 -->><node pkg = "turtlesim" type = "turtlesim_node" name = "t1" /><!-- 命名空间 -->><node pkg = "turtlesim" type = "turtlesim_node" name = "turtlesime" ns = "ergouzi"/><!-- 命名空间+名称重映射 --><node pkg = "turtlesim" type = "turtlesim_node" name = "t2" ns = "maolvzi" /></launch>

3. 话题名称重名

3.1 实现 teleop_twist_keyboard 与乌龟显示节点通信

直接调用–>异常

3.1.1 将 teleop_twist_keyboard 节点的话题设置为/turtle1/cmd_vel -->正常通信

rostopic list 下,/cmd_vel 没有了

3.1.2 将乌龟显示节点的话题设置为 /cmd_vel -->正常通信

rostopic list 下,/turtle1/cmd_vel 没有了

3.2 launch文件方式

3.2.1 launch文件设置话题重映射

<!-- 键盘控制乌龟运动 -->
<launch><!--将乌龟的话题设置为与键盘控制一致--><node pkg = "turtlesim" type = "turtlesim_node" name = "t1" ><remap from = "/turtle1/cmd_vel" to = "/cmd_vel" /></node><node pkg = "teleop_twist_keyboard" type = "teleop_twist_keyboard.py" name = "key" /></launch>

运行后,查看 list

3.3.1编码方式:

#include "ros/ros.h"
#include "std_msgs/String.h"
/*需求:演示不同类型的话题名称设置设置话题名称与命名空间
*/
int main(int argc, char *argv[])
{ros::init(argc,argv,"hello");ros::NodeHandle nh;//核心:设置不同类型的话题 //1.全局 ---话题名称需以 / 开头(也可以设置自己的命名空间),这种情况下和节点(命名空间及名称)没有关系ros::Publisher pub = nh.advertise<std_msgs::String>("/chatter",1000);ros::Publisher pub = nh.advertise<std_msgs::String>("yyy/chatter",1000);//2.相对 ---非 / 开头 (将内容后缀到命名空间下面)// ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",1000);//3.私有 ---需要创建特定 NodeHandle("~") ,后缀在命名空间/节点下ros::NodeHandle nh("~");  //前面那个NodeHandle需要被注释掉ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",1000);//注意:如果私有的NodeHandle创建的话题以 / 开头(全局话题),生成的话题是全局的非私有//即全局话题优先级更高一些while (ros::ok()){}return 0;
}

①. 全局:

ros::Publisher pub = nh.advertise<std_msgs::String>("/chatter",1000);
// ros::Publisher pub = nh.advertise<std_msgs::String>("yyy/chatter",1000);

输出:

②. 相对:

ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",1000);

输出:
chatter 与 节点名称同级

③. 私有:

    ros::NodeHandle nh("~");  //前面那个NodeHandle需要被注释掉ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",1000);

3.4 Python-话题重命名

#! /usr/bin/env pythonimport rospy
from std_msgs.msg import Stringif __name__ == "__main__":rospy.init_node("hello")"""需求:实现不同类型的话题设置"""# 1.全局pub = rospy.Publisher("/chatter",String,queue_size=10)pub = rospy.Publisher("/yy/chatter",String,queue_size=10)# 2.相对pub = rospy.Publisher("chatter",String,queue_size=10)# 3.私有pub = rospy.Publisher("~chatter",String,queue_size=10)while not rospy.is_shutdown():pass

1.全局:

pub = rospy.Publisher("/chatter",String,queue_size=10)

2.相对:

pub = rospy.Publisher("chatter",String,queue_size=10)

3.私有

pub = rospy.Publisher("~chatter",String,queue_size=10)

4. 参数名称

4.1.rosrun方式:

rosrun 包名 节点名称 _参数名:=参数值

4.2 launch文件方式

<!--设置参数-->
<launch><!--格式1:全局--><param name = "radius" value = "0.2" /><node pkg = "turtlesim" type = "turtlesim_node" name = "t1" ns ="xxx"><!--格式2:私有--><param name = "radius" value = "0.08" /></node>
</launch>

4.3 编码设置

4.3.1 C++

#include "ros/ros.h"int main(int argc, char *argv[])
{ros::init(argc,argv,"hello");ros::NodeHandle nh;/*使用 ros::param 来设置参数*///1.全局ros::param::set("/radiusA",100);//2.相对 ros::param::set("radiusB",100);//3.私有 ros::param::set("~radiusC",100);/*使用 NodeHandle 来设置参数*///1.全局nh.setParam("/radius_nh_A",1000);//2.相对 nh.setParam("radius_nh_B",1000);//3.私有 ros::NodeHandle nh_private("~");nh_private.setParam("radius_nh_C",1000);return 0;
}

①使用 ros::param 来设置参数

    //使用 ros::param 来设置参数*///1.全局ros::param::set("/radiusA",100);//2.相对 ros::param::set("radiusB",100);//3.私有 ros::param::set("~radiusC",100);

输出:
②使用 NodeHandle 来设置参数

 /*使用 NodeHandle 来设置参数*///1.全局nh.setParam("/radius_nh_A",1000);//2.相对 nh.setParam("radius_nh_B",1000);//3.私有 ros::NodeHandle nh_private("~");nh_private.setParam("radius_nh_C",1000);

输出:

4.3.2 Python

#! /usr/bin/env pythonimport rospyif __name__ == "__main__":rospy.init_node("hello")"""设置不同类型的参数"""#全局rospy.set_param("/radiusA",100)#相对rospy.set_param("radiusB",100)#私有rospy.set_param("~radiusC",100)

输出:

ROS 重名问题解决相关推荐

  1. “网络上有重名”问题解决方法

    最近电脑开机就显示"网络上有重名",修改计算机名称,无法修改,提示网络上有重名,连接错误等等.实际可以上网,连接没有问题. 网上搜的改名字,改IP都没用. 后来找到如下方法: 控制 ...

  2. ROS 学习笔记 重名

    工作空间覆盖 工作空间覆盖,是指不同工作空间中,存在重名的功能包的情形.(应该尽量避免) 功能包重名时,会按照 ROS_PACKAGE_PATH 查找,配置在前的会优先执行. 隐患: 存在安全隐患,比 ...

  3. android id 重名_android - 解决“应用自定义权限重名”

    背景 现场的开发今天跟我说,测试包装不上!报错"应用自定义权限重名"!!! 网上百度下关键字,发现魅族手机有这个毛病,顺藤摸瓜:"http://bbs.flyme.cn/ ...

  4. 域中添加电脑提示重名

    今天给公司一台电脑 重新弄了下系统 添加到域的时候提示重名?  看来是域目录数据库还没来的急更新 于是用终端服务 连接域控制器 将此计算机删除,重新添加 ,问题解决. 转载于:https://blog ...

  5. 不同模块下包重名怎么解决_模块

    模块 1. 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能. 2. 当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导 ...

  6. android id 重名_Android App 自定义权限重名不能安装解决办法

    场景1. A 应用 有两个版本 第一个 正式版 第二个测试版    测试版的包名 = 正式版+test ,在Android studio 中 也就是 applicationId  . 两个版本都可以成 ...

  7. Ajax实现简单用户名重名查询

    很早就想发布这篇POST了,Ajax实现简单用户名重名查询,引用了xmlhttprequest object pool,如下: XMLHttpRequest Object Pool /**  * XM ...

  8. java实现动态上传多个文件并解决文件重名问题

    java实现动态上传多个文件并解决文件重名问题 参考文章: (1)java实现动态上传多个文件并解决文件重名问题 (2)https://www.cnblogs.com/skycodefamily/p/ ...

  9. 【更新】北京、广东、吉林重名数量查询工具,给孩子起名重名查询

    最近很多朋友需要重名查询的功能,我今天测试了一下,北京和广东的查询工具好像都有点问题(不知道是不是和最近的那啥有关).那两个链接都是政府的网站(域名有gov),大家也能看出来,不知道因为什么原因不能使 ...

最新文章

  1. bootstrap-table对前台页面表格的支持
  2. 基于SSM实现在线聊天系统
  3. Mysql视图权限设置的踩坑经历
  4. 云宏与Rancher达成合作伙伴关系,结合金融领域客户特点联合打造WinGarden 2.0容器云平台...
  5. LINUX 如何实现多线程进行cp复制
  6. 如何查询oracle最近报警信息,教你怎样用Oracle方便地查看报警日志错误
  7. 关于redis的db的使用几号db的问题
  8. 盗版Windows系统IE 7.0的安装
  9. [C++] - dynamic_cast介绍及工作原理、typeid、type_info
  10. 机器学习实战 梯度上升 数学推导_机器学习全路线经典书籍
  11. u盘插入后计算机内没有选项,U盘插到电脑,无法读取,属性里面空间全是0是怎么回事?...
  12. C#中使用GUID的笔记
  13. js 实现php md5加密,js实现md5加密插件代码分享
  14. layui + jfinal 实现上传下载
  15. Uni-G/ The University of Glasgow (Uni-G) ECG Analysis Program
  16. 2021-09-23图嵌入方法
  17. MSF(Metaspolit)复现MS12-020蓝屏漏洞
  18. 黑苹果系统--Parallels Desktop虚拟机使用
  19. shared_preferences本地存储操作
  20. ANDROID webview解决视频无法播放问题

热门文章

  1. c语言 cdma编码正交的8位码片,CDMA编码
  2. orgchart组织机构图
  3. 基于易灵思开发板RiscV的调试流程
  4. 基于Python的人脸人眼图像识别处理系统
  5. AFNetworking2.4.1解析
  6. 【java】判断一个数是奇数还是偶数
  7. jmeter接口测试之登录测试
  8. 设计一个图书类Book..........此暂时使用数组实现的 ...................后面会用集合来改进 ...........
  9. 理想汽车事故,智能短板暴露-1
  10. pychram 配置清华镜像源_教你如何给树莓派更换软件源