当前位置: 首页 > news >正文

【ROS】ROS局域网下多机通讯方法

最近工作中需要用到多机通讯,这里稍微总结一下使用方法。

目录

一、网络配置

二、修改两个设备的hosts文件

三、修改两个ros设备的.bashrc

四、launch文件中给节点设定运行的设备


一、网络配置

首先确保两个ros设备连接到同一局域网下,然后查询两个设备的在这个局域网内的IP地址,运行:

ifconfig

这里举个例子,主机的IP地址为192.168.1.127,从机的IP地址为192.168.1.126;之后可测试一下能否互相ping通,成功后进行下一步。

二、修改两个设备的hosts文件

这里需要在主机和从机的hosts文件中分别添加对方的IP和用户名。

  • 主机端
192.168.1.126 ros_cv
  • 从机端
192.168.1.127 camar

三、修改两个ros设备的.bashrc

在ros的使用中.bashrc是一个比较常见的配置文件,主要是修改终端的配置。这里我们需要对两设备的.bashrc进行修改。

  • 主机端
export ROS_MASTER_URI=http://192.168.1.127:11311
export ROS_HOSTNAME="192.168.1.127"
  • 从机端
export ROS_MASTER_URI=http://192.168.1.127:11311
export ROS_HOSTNAME="192.168.1.126"

 这个设置使得两个设备的 ROS_MASTER_URI统一为主机上的地址,从而让从机可以和主机的roscore通讯。

但是需要注意这样从机的roscore就不能运行了,如需运行,把这两行注释掉即可。

完成上述设置后,双端的topic和节点就可以互相交流了,可以用小海龟简单试一下。

一遍成功的ROS主从机详细配置_一遍成功ros-CSDN博客

四、launch文件启动两个设备上的节点

首先需要配置ssh密钥使主机能够用ssh远程访问从机,因为ros是通过ssh访问其他设备启动节点的。这个方法可以参考以下链接

如何在 Ubuntu 20.04 上设置 SSH 密钥_ubuntu ssh key-CSDN博客

过去几天了我记不清了,应该是只要在主机上运行

ssh-keygen

生成密钥,然后同样在主机上运行

ssh-copy-id username@remote_host

username@remote_host是从机的用户名和ip地址,这样似乎就完成了(似乎)。

然后即可用launch一次启动包含在两个设备上的节点,可以参考以下launch语法。

<!-- 远程ros_cv机器上的 node -->
<machine name="cv_server" address="192.168.1.126" user="ros_cv" env-loader="/home/ros_cv/ros_remote_env.sh" />
<!-- rgb-yolo节点 -->
<node machine="cv_server" pkg="visual_tools" type="drone_check_yolo_d435i.py" name="drone_check_yolo" output="screen" required="true" />

如上所示,首先在launch中添加一个词条<machine>,address设定为从机的IP地址,user设定为从机的用户名,也有一些大佬通过添加password词条使得ssh不需要进行密钥的配置但是我没测试成功)。

在roslaunch中启动远程节点的方法_ros脚本启动远程节点-CSDN博客

对于env-loader这个词条,则需要在从机上添加一个.sh文件:

#!/bin/bash
export ROSLAUNCH_SSH_UNKNOWN=1
export ROS_MASTER_URI=http://192.268.1.127:11311
source /opt/ros/noetic/setup.bash
source ~/catkin_ws/devel/setup.bash
export ROS_HOSTNAME=192.168.1.126
exec "$@"

其中ROS_MASTER_URI和ROS_HOSTNAME分别包括主机和从机的IP地址,和第三部分一致。

然后再node的词条中添加一个machine=“machine name”的词条就大功告成了。

http://www.lryc.cn/news/464112.html

相关文章:

  • linux 系统怎么使用
  • Java线程池知识点梳理
  • SFT、RLHF、DPO、IFT —— LLM 微调的进化之路_如何搭建自己的dpo
  • CSS 选择器简单回顾
  • uniapp配置微信小程序分包(分包优化)
  • MySQL-10.DML-添加数据insert
  • ARM/Linux嵌入式面经(四八):tp-link联洲国际
  • 代码实践篇四 形状检测与规则重建
  • JVM(HotSpot):GC之垃圾回收阶段
  • Go 项目如何集成类似mybatisPlus插件呢?GORM走起!!
  • 《深度学习》Dlib库 CNN卷积神经网络 人脸识别
  • 滚雪球学Redis[7.1讲]:Redis实战案例
  • WordPress外部图片本地化插件
  • Linux基础-shell的简单实现
  • Tomcat日志文件详解及catalina.out日志清理方法
  • react 中的hooks中的useState
  • STM32学习笔记---DMA
  • Cesium 实战 - 自定义纹理材质 - 立体墙(旋转材质)
  • 进程间关系与守护进程
  • 金山翻译接口逆向
  • unified-runtime编译与验证
  • 【Python】最详细--基础语法
  • 二叉树基础:什么样的二叉树适合用数组来存储?
  • iTOP-RK3568开发板独立NPU通过算法加特应用到以下的场景
  • Java基于SpringBoot微信小程序的跳蚤市场系统设计与实现(lw+数据库+讲解等)
  • 【分布式微服务云原生】《Redis 的高效之道:线程模型、IO 模型与 Reactor 模型全解析》
  • 科研类型PPT的制作技巧
  • rom定制系列------小米6x_MIUI14_安卓13刷机包修改写入以及功能定制 界面预览
  • 线性代数基础02
  • 「4.4」祖孙询问