彻底搞懂ros多机通信机制

2024-05-25 23:58

本文主要是介绍彻底搞懂ros多机通信机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ros可以在两台机器上共享运行,我们该如何配置呢?
以我的电脑PC和嵌入式板卡RV1126进行操作:
1.首先,两台机器肯定要相互通信(有线,无线都可以),我的是无线。运行ifconfig,搞清楚两台机器的ip。
PC
在这里插入图片描述
RV1126
在这里插入图片描述
注意我的是通过usb实现的无线通信,所以rv1126的ip在usb0那里。
通过上面两张图,你已经知道
我的pc机 :
hostname = aipan-Z370-HD3
ip = 172.168.5.1
RV1126:
hostname = RV1126_RV1109
ip = 172.169.5.125
为了防止通信问题,最好各自ping一下,在pc端ping 172.168.5.125,在rv1126端ping 172.168.5.1
知道这两个信息,就可以愉快的配置了。
2. 我们要选择一台机器作为主机,也就是在哪台机器运行roscore啦。我选择RV1126作为主机,那PC就是从机。所以我们需要在两台机器上面都设置:

export ROS_MASTER_URI=http://172.168.5.125:11311

ROS_MASTER_URI就是告诉大家,master的ip地址是多少,大家才知道去哪里连接ros嘛。如果你只需要从机订阅主机消息,即单向通信,到这里就可以愉快的工作了。
3. 如果你想主机也可以订阅到从机的消息。以上设置就不够啦,在主机上面订阅从机发布的话题,话题内容会为空。那是因为我们没有设置从机的ROS_HOSTNAME,很好理解,你都不知道从机的地址,怎么能订阅到数据呢?一般我们会设置好两台机器各自的ROS_HOSTNAME(主机不设置也行,最好都设置)
PC端的配置:

export ROS_HOSTNAME=172.168.5.1
export ROS_MASTER_URI=http://172.168.5.125:11311

rv1126端的配置:

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

这样就可以相互通信了,就这么简单!!!

  1. 如果你觉得这样写ip太麻烦了,想直接用机器的hostname代替,那么你可以在/etc/hosts 里面写入配置
    在这里插入图片描述
    这个配置纯粹是让机器知道名字对应的ip, 比如RV1126_RV1109对应的ip是172.168.5.125
    那么你在ros的配置就可写成:
    PC端的配置:
export ROS_HOSTNAME=aipan-Z370-HD3
export ROS_MASTER_URI=http://RV1126_RV1109:11311

rv1126端的配置:

export ROS_HOSTNAME=RV1126_RV1109
export ROS_MASTER_URI=http://RV1126_RV1109:11311
  1. 如果哪天你不想多机交互了,想单机运行了,切记把配置改回来呀,不然roscore就会报错。
    在这里插入图片描述
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311

这样你就又可以愉快的单机运行了。

设置写在哪个文件里?pc上面一般是在home目录下面的.bashrc里面,嵌入式的可能因人而异。这就是环境变量的配置,写在可以配置环境变量的文件里都可以。

这篇关于彻底搞懂ros多机通信机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002982

相关文章

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

一篇文章让你彻底搞懂Java中VO、DTO、BO、DO、PO

《一篇文章让你彻底搞懂Java中VO、DTO、BO、DO、PO》在java编程中我们常常需要做数据交换,那么在数据交换过程中就需要使用到实体对象,这就不可避免的使用到vo、dto、po等实体对象,这篇... 目录深入浅出讲解各层对象区别+实战应用+代码对比,告别概念混淆,设计出更优雅的系统架构!一、 为什么

Java中自旋锁与CAS机制的深层关系与区别

《Java中自旋锁与CAS机制的深层关系与区别》CAS算法即比较并替换,是一种实现并发编程时常用到的算法,Java并发包中的很多类都使用了CAS算法,:本文主要介绍Java中自旋锁与CAS机制深层... 目录1. 引言2. 比较并交换 (Compare-and-Swap, CAS) 核心原理2.1 CAS

Spring Boot 集成 mybatis核心机制

《SpringBoot集成mybatis核心机制》这篇文章给大家介绍SpringBoot集成mybatis核心机制,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值... 目录Spring Boot浅析1.依赖管理(Starter POMs)2.自动配置(AutoConfigu

Java通过ServerSocket与Socket实现通信过程

《Java通过ServerSocket与Socket实现通信过程》本文介绍了Java中的ServerSocket和Socket类,详细讲解了它们的构造方法和使用场景,并通过一个简单的通信示例展示了如何... 目录1 ServerSocket2 Socket3 服务器端4 客户端5 运行结果6 设置超时总结1

MySQL 5.7彻底卸载与重新安装保姆级教程(附常见问题解决)

《MySQL5.7彻底卸载与重新安装保姆级教程(附常见问题解决)》:本文主要介绍MySQL5.7彻底卸载与重新安装保姆级教程的相关资料,步骤包括停止服务、卸载程序、删除文件和注册表项、清理环境... 目录一、彻底卸载旧版本mysql(核心步骤)二、MySQL 5.7重新安装与配置三、常见问题解决总结废话不多

Redis的安全机制详细介绍及配置方法

《Redis的安全机制详细介绍及配置方法》本文介绍Redis安全机制的配置方法,包括绑定IP地址、设置密码、保护模式、禁用危险命令、防火墙限制、TLS加密、客户端连接限制、最大内存使用和日志审计等,通... 目录1. 绑定 IP 地址2. 设置密码3. 保护模式4. 禁用危险命令5. 通过防火墙限制访问6.

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

macOS彻底卸载Python的超完整指南(推荐!)

《macOS彻底卸载Python的超完整指南(推荐!)》随着python解释器的不断更新升级和项目开发需要,有时候会需要升级或者降级系统中的python的版本,系统中留存的Pytho版本如果没有卸载干... 目录MACOS 彻底卸载 python 的完整指南重要警告卸载前检查卸载方法(按安装方式)1. 卸载