ros_hostname与ros_ip

2023-05-16

在ROS的环境变量中,需要在~/.bashrc中设置的并不多(此处是指在wiki的基本教程中出现的,大牛请无视),大概只有三个:
$ROS_MASTER_URI
$ROS_HOSTNAME
$ROS_IP
这三个是出现频率最高的。
$ROS_MASTER_URI比较好理解,就是整个ROS系统的主机的IP网址。注意是网址:

export ROS_MASTER_URI=http://192.168.8.101:11311

看见没,带http的!

而下面两个$ROS_HOSTNAME$ROS_IP 着实让我绕了好久。因为就是不知道改了哪里,roscore就进不去了。。。
所以下面一点点的实验:
实验为单机运行,也就是运行本机上的ROSCORE,先不涉及分布式配置。
本机的hostname为robin,IP为192.168.0.12

1、/etc/hosts中无添加内容,~/.bashrc中只有ROS_MASTER_URI:
/etc/hosts:


~/.bashrc:

export ROS_MASTER_URI=http://`hostname -I`:11311

OK,source后roscore一下,失败~!
看一下环境变量值:

robin@robin:~$ echo $ROS_MASTER_URI 
http://192.168.0.12 :11311
robin@robin:~$ echo $ROS_HOSTNAME

robin@robin:~$ echo $ROS_IP

hostname和IP都是没有值的。

2、仅在~/.bashrc中添加$ROS_IP,etc/hosts不变:

export ROS_MASTER_URI=http://`hostname -I`:11311
export ROS_IP=`hostname -I`

source后roscore,成功了。

3、仅在~/.bashrc中添加$ROS_HOSTNAME,etc/hosts不变:

export ROS_MASTER_URI=http://`hostname -I`:11311
export ROS_HOSTNAME=`hostname`

source后roscore,失败!

4、将3的HOSTNAME不用robin名称,换成IP值的话呢?

export ROS_MASTER_URI=http://`hostname -I`:11311
export ROS_HOSTNAME=`hostname -I`

成功!

5、还是换成3的情况,然后修改/etc/hosts呢?
bashrc:

export ROS_MASTER_URI=http://`hostname -I`:11311
export ROS_HOSTNAME=`hostname`

hosts:

192.168.0.12    robin

成功!

6、hosts为空,bashrc全都有呢?

export ROS_MASTER_URI=http://`hostname -I`:11311
export ROS_HOSTNAME=`hostname`
export ROS_IP=`hostname -I`

失败!

7、hosts写上,bashrc也写全呢?

hosts:

192.168.0.12    robin

bashrc:

export ROS_MASTER_URI=http://`hostname -I`:11311
export ROS_HOSTNAME=`hostname`
export ROS_IP=`hostname -I`

成功!

饶了好久才发现这个文章:http://www.mamicode.com/info-detail-915039.html
其中最重要的是:

  1. ROS_IP/ROS_HOSTNAME
    ROS_IP和ROS_HOSTNAME是可选的环境变量,用来设置ROS节点或工具的公开网地址。这两个选项是互斥的,如果两者都设置优先使用ROS_HOSTNAME。如果你指定一个IP地址,使用ROS_IP;如果制定一个主机名(a host name),使用ROS_HOSTNAME。当一个ROS成员报告URI给master或者其他成员,这个值就会被用到。这个设置只用在一台计算机有多个地址,需要强制ROS到特定的一个的情况。
    除了’localhost’(本地主机),ROS成员绑定到所有可用的网络接口,他不影响实际绑定地址。如果这个值设定为本地主机,ROS成员只绑定在环回接口。这将会阻止远程成员与本地成员交流。

说的直白一点就是,hostname的优先级要比IP的优先级高,设定了hostname就以hostname为准,不在管后面是否还有IP的设置。实验6失败,实验7成功,实验5成功。
这里的hostname设置又因为etc配置的原因,如果直接写上IP(hostname - I 实验4成功)就用这个IP了,没hosts什么事。但是若用名称的话(hostname 实验3失败,实验5成功),就需要在hosts中设置name的IP,不然会因为找不到名称的IP而启动不成功。
假若没有设置ROS_HOSTNAME的话,才会去寻找$ROS_IP 实验2成功,这个就比较直接了,直接就是IP地址。
如果两个都没有的话,实验1 的结果就是不成功。所以还是需要有一个的。

主从机的分布式配置后面再写,有了上面的思路,应该好写

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

ros_hostname与ros_ip 的相关文章

  • 使用VNC可视化Docker容器

    使用VNC可视化Docker容器 0 前言环境 xff1a 1 容器端配置1 1 启动Docker容器1 2 安装x111 3 安装桌面环境1 4 安装tightvncserver 2 配置VNC Server2 1 首先停止刚刚新建的虚拟

随机推荐

  • STM32 串口ISP下载方式解读

    xfeff xfeff http blog sina com cn s blog b09739ab0102v4rm html Flash Loader Demonstrator 下 载工具的安装 1 xff0e 硬件的连接和设置 串口ISP
  • with异常处理

    class A 39 39 39 此类的对象可以用 xff57 xff49 xff54 xff48 语句进行管理 39 39 39 def enter self print 34 已经进入with语句 34 return self def
  • telegram android 源码分析 (一)自动设置代理

    比如自动设置mtproxy代理 xff0c 冗长的代码我们怎么去找 xff1f 1 xff09 首先我们发现点代理链接能弹对话框 xff0c 们可以在strings xml中搜索得到 xff1a lt string name 61 34 U
  • NS3 的 ipv4-static-routing-test-suite 源码分析

    下面进行源码注释 xff1a End to end tests for Ipv4 static routing include 34 ns3 boolean h 34 include 34 ns3 config h 34 include 3
  • c语言向上取整计算方法

    用整数N 除以 M xff0c 要求向上取整数 1 xff09 int n 61 N 43 M 1 M xff1b 简化后就是 xff1a 2 xff09 int n 61 N 1 M 43 1 xff1b 最笨的办法 3 int n 61
  • 比std::qsort还快的快速排序(1千万整数1.7秒)——(快速排序栈溢出与递归优化)

    前几天发现老外的开源项目中事件队列中用的就是std qsort排序 xff0c 后续插入时候使用了堆方式 快速排序实际应用中是比堆排序要快的 xff0c 这主要是因为硬件层次会对数据执行高速缓存 xff0c 数据使用一二三级高速缓存比访问内
  • C#使用ProtoBuf

    1 Google ProtoBuf 经过测试 xff0c protobuf比json存储效率还是要高 xff0c 即时号称最快的fastjson也没有protobuf快 xff0c 这里为了使用 c 做一个客户端兼容 xff0c 所以也需要
  • 多线程如何实现高性能计数器(无锁)

    多线程协作免不了使用计数器 xff0c 通常的代码 xff0c c 43 43 一般会使用锁 xff0c 或者原子变量操作 xff1a std mutex mutexCounter int count void add std lock g
  • ubuntu18/20 下如何生成core文件

    ubuntu18 20 下如何生成core文件 一 设置 原理 xff1a https blog csdn net Sunnyside article details 118439302 原来在ubuntu14 ubuntu16上只需要一步
  • c++的字节序与符号位的问题

    看这样一道题 xff1a include lt stdio h gt int main void int w h int i 61 0xa1b2c3d4 char p 61 char amp i for int j 61 0 j lt 4
  • docker镜像之带vnc的ubuntu

    docker镜像 之 带vnc图形界面ubuntu 前言 xff1a 为了在图形界面中使用firefox xff0c 需要找一个带rdp或者vnc的ubuntu xff0c 最好是gnome的界面 xff0c 折腾了3天 xff0c 终于找
  • STM32中,关于中断函数调用全局变量的问题

    xfeff xfeff https blog csdn net leo liu006 article details 79334905 首先是问题的描述 xff1a 硬件单片机型号 xff0c STM32F103VET6 xff0c IDE
  • python使用selenium以及selenium-wire做质量与性能检测

    python天生就是适合用来做爬虫 xff0c 结合selenium真是如虎添翼 xff1b 1 安装库 pip install selenium pip install selenium wire 2 xff09 添加驱动 xff0c 比
  • 编写http workshop脚本从网页缓存里解析音乐

    前一篇文章 编写http workshop脚本从网站下载音乐 示范了如何使用HttpClient访问API 以及Json数据的解析 今天我们通过解析一个网页展示如何使用内置的LibXml2的功能解析HTML 提取我们关心的内容 这里随便搜了
  • pytorch环境搭建若干

    备注 xff1a 不要使用python3 11不支持 xff0c pip会说找不到合适的版本 xff1b python官网不提供旧版的下载了 xff0c 说是win7以后无法使用 xff0c 都是扯淡 xff0c 有其他地方可以下载pyth
  • ffmpeg常用方法

    FFmpeg 是一款开源的音视频处理工具 xff0c 可以处理各种格式的音视频文件 xff0c 并且可以进行格式转换 剪切 合并 添加水印等多种操作 下面是 FFmpeg 的一些常用命令及其用法 xff1a 视频转码 将一个视频文件转换为另
  • RFC2152 UTF-7 中文

    RFC2152 UTF 7 中文 翻译 xff1a 李静南 时间 xff1a 2006 03 29 EMAIL xff1a robin fox 64 sohu com 版权 xff1a 可以用于非商业用途自由转载 xff0c 但请保留本文档
  • 第九章0.4的CMakeLists.txt结构

    最开始看这一章的时候 xff0c 将CMakeLists txt部分跳过了 xff0c 没有看 后来看高博RGBD SLAM时候 xff0c 第一讲降到了cmake的用法 xff0c 发现有新的东西 xff0c 又回头看 xff1a 最原始
  • ROS 中setup.bash

    好久没写了 xff0c 最近搞了辆小车 xff0c 瞅了瞅ROS的相关内容 xff0c 没有写ROS的内容 xff0c 刚开始看 xff0c 写的话基本就成了书本粘贴 不过最近由ROS引出来的一些Linux相关的东西 xff0c 然后又回头
  • ros_hostname与ros_ip

    在ROS的环境变量中 xff0c 需要在 bashrc中设置的并不多 xff08 此处是指在wiki的基本教程中出现的 xff0c 大牛请无视 xff09 xff0c 大概只有三个 xff1a ROS MASTER URI ROS HOST