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

news2024/11/16 10:39:20

问题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.coloradmin.cn/o/1906242.html

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

相关文章

计算机网络-组播分发树与组播协议

一、组播分发树 前面我们大致了解了下组播的转发原理,通过RPF反向路径检查可以形成无环的组播转发路径,今天继续学习下组播分发树和组播协议。 组播数据转发需要保证转发路径无环,无次优路径且无重复包。通过RPF机制与组播路由协议&#xff0…

【撤稿资讯】国家杰青被撤稿23篇文章,主要原因图片重复使用等

本周投稿推荐 SCI • 能源科学类,1.5-2.0(来稿即录25天) • 计算机类,2.0-3.0(纯正刊29天录用) EI • 各领域沾边均可(2天录用) 知网 • 7天录用-检索(急录友好&a…

论文图片模糊怎么办?科研绘图小track解决你的困扰

论文图片模糊怎么办?科研绘图小track解决你的困扰 一、 使用draw.io 绘图二、使用在线压缩工具,尽可能的无损压缩(推荐迅捷图片转换器)三、当然你也可以用svg 一、 使用draw.io 绘图 网址:https://draw.io/ 解决方法: 加大图片的分…

延时双删两种实现对比分析

前言 延时双删(Delayed Double Deletion)是一种在分布式系统或缓存一致性处理中使用的技术,目的是确保缓存与数据库之间的数据一致性。它主要用于处理在高并发情况下,缓存和数据库可能出现的数据不一致问题。 常见更新策略的问题…

5分钟微课视频制作方法 微课录制后期制作方法

微课视频是一种短小精悍的在线教育视频形式,通常时长在5到10分钟左右,观众可以在短暂的时间内获取到有用的信息。微课视频的目的是通过简洁明了的内容,向观众传递特定的知识点或技能,它的特点在于紧凑、便于消化和分享&#xff0c…

ESP32CAM物联网教学10

ESP32CAM物联网教学10 MicroPython 应用体验 小智偶然地发现,有一种新兴的编程模式MicroPython,也能编写ESP32Cam的应用程序了,于是欣然地体验了一把。 编程环境搭建 小智偶然地从下面这家店铺买了一块ESP32Cam,并从客服那里得到…

【人工智能】-- 智能家居

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉基于深度卷积神经网络的表情识别 🍈流程图 🍈模型设计 🍍网络架…

安全防御(防火墙)

第二天: 1.恶意程序---一般会具有一下多个或则全部特点 1.非法性:你未经授权它自动运行或者自动下载的,这都属于非法的。那恶意程序一般它会具有这种特点, 2.隐蔽性:一般隐藏的会比较深,目的就是为了防止…

UML建模工具Draw.io简介

新书速览|《UML 2.5基础、建模与设计实践 Draw.io是一个非常出色的免费、开源、简洁、方便的绘图软件,利用这款软件可以绘制出生动有趣的图形,包括流程图、地图、网络架构图、UML用例图、流程图等。它支持各种快捷键,免费提供了1000多张画图…

80+ ChatGPT 文献综述指令

进行文献综述通常似乎是一项艰巨的任务。它是学术和研究工作的重要组成部分,涉及对先前发表的与特定主题相关的研究进行全面和批判性分析。目标是深入了解该主题的知识状况,找出差距,并为进一步研究奠定基础。 传统上,文献综述是…

GuLi商城-商品服务-API-品牌管理-OSS整合测试(续)

Spring Alibaba简介 Spring官网:https://spring.io/projects/spring-cloud-alibaba GitHub:https://github.com/alibaba/spring-cloud-alibaba GitHub中文文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md…

气膜建筑如何在文化旅游行业中应用—轻空间

一、气膜建筑简介 气膜建筑是一种新型建筑形式,其主要结构由高强度膜材、空气支撑系统和固定系统组成。通过不断向膜体内部充气,使其形成稳定的内部压力来支撑整个建筑结构。气膜建筑因其建设速度快、成本相对较低、环保节能等优点,近年来在各…

怎么给电子文档批量盖骑缝章或公章?

怎么给电子文档批量盖骑缝章或公章?假如你有100个PDF电子文档要同时盖缝章,如果不借助专业的盖电子骑缝章软件,还真不好干。下面讲述如何利用e-章宝批量盖电子骑缝章。 1.在软件中导入待批量盖章的PDF文件 如下图,在“待盖章PDF文件”区域…

MySQL之表的约束(上)

目录 空属性(NULL) 实例建表 插入操作 默认值(default) 建表 插入操作 NULL与default的结合 列描述 建表 zerofill 建表 插入操作 主键 建表 插入 主键的增加与去掉 去掉 增加 复合主键 插入的影响 真正约束字段的是数据类型,但是数据类型约束很单一&a…

阶段三:项目开发---搭建项目前后端系统基础架构:任务13:实现基本的登录功能

任务描述 任务名称: 实现基本的登录功能 知识点: 了解前端Vue项目的基本执行过程 重 点: 构建项目的基本登陆功能 内 容: 通过实现项目的基本登录功能,来了解前端Vue项目的基本执行过程,并完成基…

【机器学习】属性降维:揭示数据的简化之美

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 属性降维:揭示数据的简化之美引言什么是属性降维?为何降…

(二)前端javascript中的数据结构之栈

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的 同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。 栈是限定仅在表的一端进行插入和删除操作…

SpringBoot源码阅读(3)——监听器

ApplicationListener类初始化位置 在类SpringApplication的构造方法,第267行 在META-INFO/spring.factories中配置的实现类 spring-boot # Application Listeners org.springframework.context.ApplicationListener\ org.springframework.boot.ClearCachesApplic…

一分钟教会你,iPhone和安卓手机虚拟摄像头如何连接电脑?手机连接电脑虚拟摄像头!

在当今的远程工作和在线学习时代,摄像头的需求日益增长。然而,有时我们可能会遇到电脑摄像头画质不佳或无法使用的情况。此时,利用手机的高清摄像头作为电脑的虚拟摄像头,便成了一个理想的选择。本文将为您介绍如何将iPhone和安卓…

SpringMVC系列十三: SpringMVC执行流程 - 源码分析

源码分析 执行流程图实验设计前端控制器分发请求处理器映射器处理器适配器调用目标方法调用视图解析器渲染视图作业布置 执行流程图 实验设计 1.新建com.zzw.web.debug.HelloHandler Controller public class HelloHandler {//编写方法, 响应请求, 返回ModelAndViewRequestMa…