保姆级教程|如何配置ROS1主从机

在机器人开发经常遇到使用两个板子通信问题,比如一个板子跑底层的运动控制,一个板子跑定位导航。为了确保两个板子之间的ROS通信流畅,我们需要在两个板子的.bashrc文件中添加必要的环境变量配置。首先,确保你的 /etc/hosts 文件中包含对方板子的IP和主机名解析。接下来,我们详细说明如何修改两个板子的.bashrc文件。

(可选) 修改第一个板子 (ubuntu-22) 的 /etc/hosts 文件

/etc/hosts 文件中添加第二个板子的IP和主机名解析:

 

sudo nano /etc/hosts

添加以下内容:

 

192.168.31.126 nvidia-desktop

(可选)修改第二个板子 (nvidia-desktop) 的 /etc/hosts 文件

/etc/hosts 文件中添加第一个板子的IP和主机名解析:

 

sudo nano /etc/hosts

添加以下内容:

 

192.168.31.125 ubuntu-22

修改第一个板子 (ubuntu-22) 的 .bashrc 文件

  1. 打开 .bashrc 文件进行编辑:

     

    nano ~/.bashrc

  1. 在文件末尾添加以下内容:

     

    # 设置ROS Master URI export ROS_MASTER_URI=http://192.168.31.125:11311 # 设置本地ROS主机名 export ROS_HOSTNAME=192.168.31.125

  1. 保存并关闭文件,然后使修改生效:

     

    source ~/.bashrc

修改第二个板子 (nvidia-desktop) 的 .bashrc 文件

  1. 打开 .bashrc 文件进行编辑:

     

    nano ~/.bashrc

  1. 在文件末尾添加以下内容:

     

    # 设置ROS Master URI export ROS_MASTER_URI=http://192.168.31.125:11311 # 设置本地ROS主机名 export ROS_HOSTNAME=192.168.31.126

  1. 保存并关闭文件,然后使修改生效:

     

    source ~/.bashrc

这样配置完成后,两个板子应该可以通过ROS进行低延迟通信。确保在每次修改后使用 source ~/.bashrc 命令使配置生效。

附录1:设置ROS Master URI 为什么设为11311,设为别的可以吗?

设置 ROS_MASTER_URI 中的端口号 11311 是因为这是ROS默认使用的端口号,但你可以将其设置为其他未被占用的端口号,只要确保双方都使用相同的端口即可。

以下是详细说明:

使用默认端口 11311

  • 原因11311 是ROS默认的主节点(Master)端口号。这样设置可以避免修改默认设置,减少配置错误的可能性。

  • 好处:大多数ROS文档和示例都使用 11311,遵循默认值可以简化配置和调试。

使用自定义端口

你可以将端口号设置为其他值,只要确保双方一致并且端口未被其他服务占用。

修改端口号步骤

  1. 选择一个未被占用的端口号:例如 11411

  1. 配置ROS Master

    1. 在运行ROS Master的板子上(假设为 ubuntu-22),设置 .bashrc 文件:

       

      export ROS_MASTER_URI=http://192.168.31.125:11411 export ROS_HOSTNAME=192.168.31.125

  1. 连接到ROS Master

    1. 在另一块板子(假设为 nvidia-desktop)上,设置 .bashrc 文件:

       

      export ROS_MASTER_URI=http://192.168.31.125:11411 export ROS_HOSTNAME=192.168.31.126

  1. 使更改生效

     

    source ~/.bashrc

验证自定义端口配置

  1. 启动ROS Master

     

    roscore -p 11411

      或者

     

    roscore --port 11411

  1. 网络连接测试:在每个板子上运行 ping 命令测试到对方板子的连接:

     

    ping 192.168.31.126 # 在 ubuntu-22 上 ping 192.168.31.125 # 在 nvidia-desktop 上

  1. ROS通信测试:使用 rostopicrosnode 命令测试ROS话题和节点通信。例如:

     

    rostopic pub /test_topic std_msgs/String "data: 'Hello from board1'" # 在 ubuntu-22 上 rostopic echo /test_topic # 在 nvidia-desktop 上

总结

  • 默认端口 11311 是最常用和推荐的设置,因为它是ROS的默认值,简化了配置过程。

  • 自定义端口 可以使用,但需要确保双方配置一致,并且选定的端口未被其他服务占用。

这样无论你选择使用默认端口还是自定义端口,都可以实现两个板子之间的低延迟ROS通信。

附录2:取消主从机配置

如果不再想使用ROS的主从机配置,可以通过重置相关的环境变量来恢复默认配置。以下是具体步骤:

1. 清除ROS_HOSTNAMEROS_MASTER_URI环境变量

在当前终端会话中运行以下命令:

 

unset ROS_HOSTNAME unset ROS_MASTER_URI

2. 从.bashrc文件中移除相关设置

编辑您的~/.bashrc文件,移除之前添加的关于ROS_HOSTNAMEROS_MASTER_URI的行:

 

nano ~/.bashrc

找到并删除以下行:

 

export ROS_HOSTNAME=192.168.41.3 export ROS_MASTER_URI=http://192.168.41.3:11311

保存并退出编辑器,然后重新加载.bashrc文件:

 

source ~/.bashrc

3. 验证恢复默认设置

在终端中运行以下命令,确保相关环境变量已被清除:

 

echo $ROS_HOSTNAME echo $ROS_MASTER_URI

这两个命令应该不输出任何内容,表示环境变量已经被清除。

4. 运行roscore

现在可以尝试再次运行roscore,验证是否已经恢复默认配置:

 

roscore

通过以上步骤,您应该能够将ROS恢复到默认的配置,不再使用主从机设置。如果仍然遇到问题,请提供具体的错误信息以便进一步诊断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/769105.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32F1+HAL库+FreeTOTS学习4——任务挂起与恢复

STM32F1HAL库FreeTOTS学习4——任务挂起与恢复 任务挂起和恢复的API介绍代码实现 上一期我们学习了FreeRTOS中任务创建的两种方法,这一期我们学习任务的挂起和恢复。 任务挂起和恢复的API介绍 在 :STM32F1HAL库FreeTOTS学习1——FreeRTOS入门 的学习中&…

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活

在如今多元的数字时代,我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说,有时候需要在自己的电脑上安装 Windows 操作系统,以体验更多软件及功能,而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…

Python28-5 k-means算法

k-means 算法介绍 k-means 算法是一种经典的聚类算法,其目的是将数据集分成 ( k ) 个不同的簇,每个簇内的数据点尽可能接近。算法的基本思想是通过反复迭代优化簇中心的位置,使得每个簇内的点与簇中心的距离之和最小。k-means 算法的具体步骤…

【FFmpeg】avformat_find_stream_info函数

【FFmpeg】avformat_find_stream_info 1.avformat_find_stream_info1.1 初始化解析器(av_parser_init)1.2 查找探测解码器(find_probe_decoder)1.3 尝试打开解码器(avcodec_open2)1.4 读取帧(re…

嵌入式Linux之Uboot简介和移植

uboot简介 uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件,uboot是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说,可以在没有系统的情况…

创建kobject

1、kobject介绍 kobject的全称是kernel object,即内核对象。每一个kobject都会对应系统/sys/下的一个目录。 2、相关结构体和api介绍 2.1 struct kobject // include/linux/kobject.h 2.2 kobject_create_and_add kobject_create_and_addkobject_createkobj…

开源自动化热键映射工具autohotkey十大用法及精选脚本

AutoHotkey(AHK)是一款功能强大的热键脚本语言工具,它允许用户通过编写脚本来自动化键盘、鼠标等设备的操作,从而极大地提高工作效率。以下是AutoHotkey的十大经典用法,这些用法不仅解放了用户的双手,还展示…

字节码编程ASM之插桩方法调用记录

写在前面 源码 。 正式开始之前,先分享一个让人”悲伤“的真实的故事。 那是一个风和日丽的周六的下午,俺正在开开心心的打着羽毛球,突然接到了来自于最不想联系的那个人(没错,这个人就是我的领导!&#x…

QT Creator生成uml类图

先说方法,使用Doxygen工具,笔者用的虚拟机linux系统下的qt5.7,没找到自带的uml生成类的工具。 1、Doxygen 安装 在 Ubuntu 系统中,执行下面命令安装 doxygen 和 graphviz 软件包。 sudo apt install graphviz # 用于生成代码…

等保2.0 实施方案之信息软件验证要求

一、等保2.0背景及意义 随着信息技术的快速发展和网络安全威胁的不断演变,网络安全已成为国家安全、社会稳定和经济发展的重要保障。等保2.0(即《信息安全技术 网络安全等级保护基本要求》2.0版本)作为网络安全等级保护制度的最新标准&#x…

Gradle学习-5 发布二进制插件

注:以下示例基于Gradle8.0 1、发布插件 复制一分 buildSrc,执行命令行,生成一个新目录 leon-gradle-plugin cp -rf buildSrc leon-gradle-plugin在 leon-gradle-plugin 目录下的 build.gradle 中引入maven plugins{// 引用 Groovy 插件&…

【热部署】✈️Springboot 项目的热部署实现方式

目录 🍸前言 🍻一、热部署和手动重启 🍺二、热部署的实现 2.1 手动启动热部署 2.2 自动检测热部署 2.3 关闭热部署 💞️三、章末 🍸前言 小伙伴们大家好,书接上文,通过Springboot 中的 actu…

解析Kotlin中扩展函数与扩展属性【笔记摘要】

1.扩展函数 1.1 作用域:扩展函数写的位置不同,作用域就也不同 扩展函数可以写成顶层函数(Top-level Function),此时它只属于它所在的 package。这样你就能在任何类里使用它: package com.rengwuxianfun …

zabbix“专家坐诊”第244期问答

问题一 Q:请教一下,我的zabbix6.0配置的基于snmptrap上报的日志提取关键字推送告警,正则表达式能否帮忙看看怎么弄?我这配置的提示一直不正确? A:具体看一下这里的信息。 Q:这个我是直接复制的…

如何计算弧线弹道的落地位置

1)如何计算弧线弹道的落地位置 2)Unity 2021 IL2CPP下使用Protobuf-net序列化报异常 3)编译问题,用Mono可以,但用IL2CPP就报错 4)Wwise的Bank在安卓上LoadBank之后,播放没有声音 这是第393篇UWA…

ssm旅游信息分享网站-计算机毕业设计源码92194

目录 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 旅游信息分享网站分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4 系统流程分析 2.5本章小结 3 旅游信息分享网站总体设计 3.1 系统功能模块设计 3.2 数据库设计 3.4本章小结 4 旅游信…

从全连接到卷积

一、全连接到卷积 1、卷积具有两个原则: 平移不变性:无论作用在哪个部分,它都要有相同的作用,而不会随着位置的改变而改变 局部性:卷积核作用处,作用域应该是核作用点的周围一小部分而不作用于更大的部分 …

一篇文章搞懂弹性云服务器和轻量云服务器的区别

前言 在众多的云服务器类型中,弹性云服务器和轻量云服务器因其各自的特点和优势,受到了广大用户的青睐。那么,这两者之间到底有哪些区别呢?本文将为您详细解析。 弹性云服务器:灵活多变的计算资源池 弹性云服务器&…

【计算机体系结构】缓存的false sharing

在介绍缓存的false sharing之前,本文先介绍一下多核系统中缓存一致性是如何维护的。 目前主流的多核系统中的缓存一致性协议是MESI协议及其衍生协议。 MESI协议 MESI协议的4种状态 MESI协议有4种状态。MESI是4种状态的首字母缩写,缓存行的4种状态分别…

CoAtNet(NeurIPS 2023, Google)论文解读

paper:CoAtNet: Marrying Convolution and Attention for All Data Sizes third-party implementation:https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/maxxvit.py 背景 自AlexNet以来,ConvNets一直是计算机…