ROS2 分布式 及 ssh远程控制 和 上传下载文件或文件夹

问题1.

多台计算机连接同一wifi后 ,运行ROS2的小乌龟案例,自己的计算机,无法控制其他电脑的小乌龟

按照正常的情况来说,ROS2是DDS的自发现通信机制,只要处在同一wifi网络中,

A计算机执行启动小乌龟的命令

ros2 run turtlesim turtlesim_node

B计算机执行键盘控制节点

ros2 run turtlesim turtle_teleop_key

 无需任何配置和修改,B计算机上的按键,就可以控制A计算机上的小乌龟 

但我的计算机始终无法再ROS2的多机环境中,去控制其他几台计算机上的小乌龟,其他几台计算机也无法控制我的计算机上的小乌龟,但其他几台计算机运行的都很正常,都可以彼此控制,然后本人研究了一晚上发现是自己计算机ubuntu22.04实体机的防火墙没关,导致无法此计算机与其他多台计算机无法通信。

运行以下命令关闭防火墙:

sudo ufw disable

瞬间解决问题!!!

在ROS2中,多个计算机通过同一个WiFi网络连接并协作时,可能会遇到一些网络配置的问题,导致无法控制其他计算机上的节点。以下是一些常见的故障排除步骤和配置建议,帮助你解决无法控制其他计算机上的小乌龟的问题。
步骤1:检查网络连接
确保所有计算机都连接到同一个WiFi网络,并且可以相互ping通。
ping   其他电脑IP

步骤2:配置ROSDOMAINID
为了确保ROS2在多台计算机上可以相互发现节点和主题,需要设置相同的ROS_DOMAIN_ID。这个ID可以是一个0到232之间的整数。你可以在每台计算机的终端中设置这个环境变量:
export ROS_DOMAIN_ID=1

为了使这个设置永久生效,可以将其添加到每个用户的~/.bashrc文件中:
echo "export ROS_DOMAIN_ID=1" >> ~/.bashrc
source ~/.bashrc

步骤3:设置环境变量
为了确保ROS2节点能够正确解析和访问网络中的其他节点,需要设置一些环境变量。
在每台计算机上,编辑~/.bashrc文件并添加以下内容:
export ROS_LOCALHOST_ONLY=0
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp

步骤4:检查防火墙设置
确保所有计算机的防火墙允许ROS2所需的通信端口。如果使用的是Ubuntu,可以暂时关闭防火墙以测试问题是否出在防火墙设置上:
sudo ufw disable

步骤5:启动小乌龟仿真和控制节点
假设你已经安装了turtlesim包,可以在一台计算机上启动小乌龟仿真,在另一台计算机上控制小乌龟。
在计算机A上启动turtlesim_node:
ros2 run turtlesim turtlesim_node

在计算机B上启动控制节点:
ros2 run turtlesim turtle_teleop_key

步骤6:检查节点和主题
在两台计算机上分别运行以下命令,确保它们能够看到彼此的节点和主题:
ros2 node list
ros2 topic list

示例
假设有两台计算机,计算机A的IP地址为192.168.1.2,计算机B的IP地址为192.168.1.3。
在计算机A上:

1.启动turtlesim_node:
export ROS_DOMAIN_ID=1
export ROS_LOCALHOST_ONLY=0
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
ros2 run turtlesim turtlesim_node


在计算机B上:

2.启动turtle_teleop_key:
export ROS_DOMAIN_ID=1
export ROS_LOCALHOST_ONLY=0
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
ros2 run turtlesim turtle_teleop_key

3.检查节点和主题:
bash
ros2 node list
ros2 topic list


如果上述步骤都已正确配置并且网络连接正常,你应该可以在计算机B上成功控制计算机A上的小乌龟。如果仍然无法控制,请检查网络配置,确保没有任何阻碍ROS2通信的因素。

问题2.

ROS2多机环境下,如何实现只可以本地通信?

答:

ROS_LOCALHOST_ONLY是ROS2中的一个环境变量,用于控制节点通信的范围。它的值可以设置为01,每个值有不同的作用:

export ROS_LOCALHOST_ONLY=1

设置ROS_LOCALHOST_ONLY1时,ROS2节点仅在本地主机(localhost)上进行通信。这意味着节点之间的通信将被限制在同一台计算机上,任何来自其他网络设备的通信请求都将被忽略。这在某些情况下很有用,例如调试或开发时需要确保所有通信都在单个机器上进行,避免外部网络干扰或安全问题。

使用场景

  1. 开发和测试: 在开发和测试阶段,可能希望隔离节点通信以简化调试过程,不受网络其他设备的干扰。

  2. 安全需求: 限制通信范围以确保数据不会被外部设备访问,从而提高系统的安全性。

export ROS_LOCALHOST_ONLY=0

如果设置为0,则允许ROS2节点通过网络进行通信,这样不同计算机上的节点可以互相发现并进行通信。这是分布式系统中多台计算机协同工作时的常见设置。

总结

ROS_LOCALHOST_ONLY设置为1时,通信被限制在本地机器上,适用于需要隔离的开发、测试或特定的安全需求场景。而设置为0时,允许网络范围内的节点通信,适用于需要多台计算机协作的分布式应用场景。

在你的情况下,为了让多台计算机上的小乌龟仿真能够互相通信,你需要确保ROS_LOCALHOST_ONLY设置为0。这样,你才能在不同计算机之间控制小乌龟。

问题3.

ROS2多机环境下,如何实现分组通信?

 答:在新终端中执行如下命令,设置 域ID 

echo "export ROS_DOMAIN_ID=6" >> ~/.bashrc

ROS_DOMAIN_ID是一个环境变量,用于设置ROS2网络中的域ID。域ID用于区分不同的ROS2网络,使得多个独立的ROS2网络可以在同一个物理网络上运行而不会互相干扰。每个ROS2网络都有一个唯一的域ID,只有在相同域ID内的节点才能彼此发现并进行通信。
export ROS_DOMAIN_ID=6
设置ROS_DOMAIN_ID=6表示将当前环境的ROS2网络的域ID设置为6。这样,所有在这个环境中启动的ROS2节点将会属于域ID为6的网络。
使用场景

1.分离网络:
如果你在同一个物理网络上运行多个独立的ROS2应用程序,可以通过设置不同的域ID来分离这些网络,使它们互不干扰。例如,在一台共享的计算机集群上运行多个独立的ROS2项目时,每个项目可以设置不同的域ID。
2.避免冲突:
在开发和测试环境中,不同团队可能会使用相同的物理网络进行测试。通过使用不同的域ID,可以确保各自的测试环境不会相互干扰。
3.管理复杂网络:
在一个复杂的ROS2网络中,可能会有多个子网络,每个子网络执行特定的任务。使用不同的域ID可以帮助组织和管理这些子网络。

如何设置
在终端中执行以下命令来设置域ID:
export ROS_DOMAIN_ID=6

这条命令会将环境变量ROS_DOMAIN_ID设置为6,之后启动的所有ROS2节点将属于域ID为6的网络。
示例
假设你有两台计算机,分别运行不同的ROS2应用程序。你希望它们之间的通信不受干扰,可以为每台计算机设置不同的域ID:

4.计算机A:.bashrc文件中写入

  export ROS_DOMAIN_ID=6


5.计算机B:.bashrc文件中写入

  export ROS_DOMAIN_ID=7

这样,计算机A上的节点只能与域ID为6的其他节点通信,计算机B上的节点只能与域ID为7的其他节点通信,从而实现网络隔离。
总结
通过设置ROS_DOMAIN_ID,可以有效地将多个ROS2网络隔离开来,避免在同一个物理网络上运行多个ROS2应用程序时发生通信冲突。这对于管理复杂的开发环境和测试环境非常有用。

注意:设置完.bashrc文件后,source一下,然后重启终端,否则设置的 域ID 无法生效!!!

问题4:

        如何通过ssh 远程连接机器人,并把自己本地电脑中的文件夹,通过ssh 远程上传到机器人中

1.  ssh   wqh@192.168.76.120      然后输入密码即可,ssh远程连接和域ID无关

1)注意:是本地计算机的终端下执行 

 远程连接成功后,创建文件夹

 注意:是远程连接后机器人的终端下(仍然在本地计算机)

 2)上传文件

 执行如上命令即可,等待上传结束!

注意:是本地计算机的终端下执行   ~/src  为本地计算机要传的文件     IP:~/lsg_ws/  为机器人的文件夹路径 

 scp -r ~/src ros2@192.168.28.130:~/lsg_ws/

 

3)下载文件

scp -r ros2ur@192.168.33.189:/home/ros2ur/ros2_ws/map/nav.pgm ./map

 从机器人ros2ur上的/home/ros2ur/ros2_ws/map目录下,下载地图nav.pgm到  本地的./map目录下(本地)

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

下载安装JavaFX及解决报错:缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序|Eclipse

目录 1.下载并解压 2.Eclipse配置 3.报错问题 解决方法1:将javaSE更改到9以下 解决方法2: 使用module-info.java配置解决 1.下载并解压 JavaFX下载地址:JavaFX - Gluon 选择合适自己电脑配置的sdk版本下载 打不开网页的参考这个博客&…

系统架构设计师——计算机体系结构

分值占比3-4分 计算机硬件组成 计算机硬件组成主要包括主机、存储器和输入/输出设备。 主机:主机是计算机的核心部分,包括运算器、控制器、主存等组件。运算器负责执行算术和逻辑运算;控制器负责协调和控制计算机的各个部件;主存…

从零开始的python学习生活1

python函数的对返回值 本来多个return是不行的 这种语法就能接受多个返回值 def hanshu():return 1,"hello",True x,y,z hanshu() print(x) print(y) print(z)函数的多种传参方式 提前说明白了顺序就无所谓了 关键字传递一个传递参数,一个传递键值…

maven编码报错

maven 编译的时候编码报错: classworlds For input string: "ㄻ孛孛"报错原因: maven 编码使用的是UTF-16 ,系统中使用UFT-8 解决办法: 如下设置为UTF-8

Science Advances|用于肌电检测的柔性微针电极阵列(健康监测/柔性传感/柔性电子)

2024年5月1日,美国南加州大学Hangbo Zhao课题组在《Science Advances》上发布了一篇题为“Highly stretchable and customizable microneedle electrode arrays for intramuscular electromyography”的论文。论文内容如下: 一、 摘要 可伸缩的三维穿透式微电极阵列在多个领…

YOLOv5、v7、v8如何修改检测框文字颜色和大小

YOLOv5和YOLOv8默认的标签文字颜色为白色,但是在亮度较大的图片中文字不明显,就需要对标签文字的颜色进行修改 一、YOLOv5 打开X:\Anaconda\envs\your-env\Lib\site-packages\ultralytics\utils\plotting.py X代表你的anaconda安装的盘,yo…

【Linux】记录一起网站劫持事件

故事很短,处理也简单。权当记录一下,各位安全大大们手下留情。 最近一位客户遇到官网被劫持的情况,想我们帮忙解决一下(本来不关我们的事,毕竟情面在这…还是无偿地协助一下),经过三四轮“谦让…

innovus:设置instance padding

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 相关文章链接: innovus:inst pad 、cell pad 、module pad 、clock cell spacing设置方法 前面文章讲到如何设置各种padding的方法,有星球小伙伴问道&…

七、Docker常规软件安装

目录 一、总体步骤 二、安装tomcat 1、docker hub上查找tomcat镜像 三、安装MySQL 1、查看MySQL镜像 2、拉取MySQL镜像到本地,本次拉取MySQL5.7 3、使用MySQL镜像创建容器 4、使用Windows数据库工具,连接MySQL实例 5、常见问题 6、创建MySQL容器实例 7、新…

lspci

【原】Linux之PCIE三种空间解析 PCIe学习笔记——2.PCIe配置空间 PCIE学习(2)PCIE配置空间详解 开发者分享 | 使用 lspci 和 setpci 调试 PCIe 问题 b : 字节 w:word L: 4byte

OpenCV 笔记(35):频域低通滤波——高斯低通滤波器、巴特沃斯低通滤波器

1. 高斯低通滤波器 高斯低通滤波器(GLPF)是一种具有平滑频域特性、较慢衰减速度和良好截止频率附近衰减效果的滤波器。在图像处理中有着广泛的应用。 高斯低通滤波器的传播函数有如下的形式: 其中,D(u,v) 表示中心点到频域中心的…

如何监控 PostgreSQL 中表空间的使用情况并进行合理的管理?

文章目录 如何监控 PostgreSQL 中表空间的使用情况并进行合理的管理 一、引言 在 PostgreSQL 数据库中,表空间(Tablespace)是用于管理数据库对象存储位置的逻辑存储区域。有效地监控和管理表空间的使用情况对于确保数据库的性能、优化存储资…

(一)、python程序--模拟电脑鼠走迷宫

一、绪论 1、简介 电脑鼠走迷宫是一种比赛,制作实物电脑鼠小车在迷宫找目标点,用时最短者获胜。考验参赛选手软硬件结合的能力。 2、走迷宫模拟软件中已实现功能 1、点击迷宫墙壁可编辑迷宫,并且可保存和加载迷宫形状文件; 2、…

聚观早报 | 蚁天鉴2.0发布;理想汽车推送无图NOA

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 7月8日消息 蚁天鉴2.0发布 理想汽车推送无图NOA 特斯拉推送FSD v12.4.3 iQOO Neo9s Pro配色公布 百川智能AI健康…

#数据结构 链表

单向链表 1. 概念 单向链表 单向循环链表 双向链表 双向循环链表 解决:长度固定的问题,插入和删除麻烦的问题 1、逻辑结构: 线性结构 2、存储结构: 链式存储 链表就是将 结点 用链串起来的线性表,链就是 结点 中的…

Banana Pi BPI-M5 Pro 低调 SBC 采用 Rockchip RK3576 八核 Cortex-A72/A53 AIoT SoC

Banana Pi BPI-M5 Pro,也称为 Armsom Sige5,是一款面向 AIoT 市场的低调单板计算机 (SBC),由 Rockchip RK3576 八核 Cortex-A72/A53 SoC 驱动,提供Rockchip RK3588和RK3399 SoC 之间的中档产品。 该主板默认配备 16GB LPDDR4X 和…

力扣-双指针1

何为双指针 双指针指向同一数组,然后配合着进行搜索等活动。 滑动窗口的时候很好使用。 167.两数之和Ⅱ-输入有序数组 167. 两数之和 II - 输入有序数组 题目 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从…

【力扣: 15题: 三数之和】

15题: 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意: 答案中不可以包含重复的三元组。 …

AI集成工具平台一站式体验,零门槛使用国内外主流大模型

目录 0 写在前面1 AI艺术大师1.1 绘画制图1.2 智能作曲 2 AI科研助理2.1 学术搜索2.2 自动代码 3 AI智能对话3.1 聊天机器人3.2 模型竞技场 4 特别福利 0 写在前面 人工智能大模型浪潮滚滚,正推动着千行百业的数智化进程。随着技术演进,2024年被视为是大…

C++11中新特性介绍-之(二)

11.自动类型推导 (1) auto类型自动推导 auto自动推导变量的类型 auto并不代表某个实际的类型,只是一个类型声明的占位符 auto并不是万能的在任意场景下都能推导,使用auto声明的变量必须进行初始化,以让编译器推导出它的实际类型,…