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

瞬间解决问题!!!

也曾询问ChatGPT4o,对方给出的答案如下:

在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. 如果自己电脑设置了域ID,则机器人也要设置对应的域ID(否则无法通过ssh远程连接),然后source 一下,reboot重启机器人,然后:

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

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

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

 2)

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

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

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

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

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

相关文章

Android项目框架

Android项目基于Android Studio开发,Android Studio使用Gradle作为项目构建工具。新建工程后可以看到如图所示目录结构,将Android切成Project可以看到完整的Android工程目录结构,如图所示。 图1-2 Android项目目录结构 app目录是一个典型的…

Jmeter 入门指南:从零开始学习

JMeter 是一个非常流行的开源工具,用于进行负载测试。它支持多种网络协议,包括 HTTP、FTP、SMTP、JMS、SOAP、JDBC 等,使其成为在多种应用环境中检测性能瓶颈的理想选择。本文将详细介绍如何利用 JMeter 进行高效的接口自动化测试。 创建和执…

01 Docker 概述

目录 1.Docker简介 2.传统虚拟机 vs 容器 3.Docker运行速度快的原因 4.Docker基本组成三要素 5.Docker 平台架构 入门版 架构版 1.Docker简介 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是:Build, Ship and Run Any App, Anywhere&#xff0c…

python3中的pdb使用

目录 1 介绍 1 介绍 有脚本文件main.py,其内容如下, import os import sys if __name__ "__main__":n 10for i in range(n):j i 10j j * j if j % 2 0:print("j is even!")else:print("j is odd.")n 20s 0 fo…

和鲸“101”计划领航!和鲸科技携手北中医,共话医学+AI 实验室建设及创新人才培养

为进一步加强医学院校大数据管理与应用、信息管理与信息系统,医学信息工程等专业建设,交流实验室建设、专业发展与人才培养经验,6 月 22 日,由北京中医药大学(简称“北中医”)主办,上海和今信息…

windows远程连接无法复制文件

windows远程桌面无法复制文件 解决方案 打开任务管理器管理器,在详细信息界面,找到rdpclip.exe进程,选中并点击结束任务,杀死该进程。 快捷键 win r 打开运行界面,输入 rdpclip.exe ,点击确定运行。即可解决无法复制文件问题。…

QStringListModel 绑定到QListView

1.QStringListModel 绑定到listView,从而实现MV模型视图 2.通过QStringListModel的新增、删除、插入、上下移动,listView来展示出来 3.下移动一行,传入curRow2 的个人理解 布局 .h声明 private:QStringList m_strList;QStringListModel *m_m…

单向链表结构

链表结构简介 链表结构是一种用比较特殊的数据结构类型,它也是线性数据结构中的一种,但是与栈结构等线性数据结构不同,它的内部结构并不是一个简单的存储空间,而是一个带有指向性质的单元。要理解链表结构要弄清楚两个问题&#x…

仰邦BX.K协议对接

背景 使用BX 6K控制卡控制诱导屏显示剩余车位数,由于控制卡和服务端不在一个局域网内,所以不能使用官网提供的案例,官网提供的案例为控制卡为TCP Server,服务端为TCP Client,因此需要开发此程序,服务端左右…

Python爬虫实战案例——王者荣耀皮肤抓取

大家好,我是你们的老朋友——南枫,今天我们一起来学习一下该如何抓取大家经常玩的游戏——王者荣耀里面的所有英雄的皮肤。 老规矩,直接上代码: 导入我们需要使用到的,也是唯一用到的库: 我们要抓取皮肤其…

【Linux】TCP协议【下二】{流量控制/滑动窗口/延迟应答/捎带应答/拥塞控制}

文章目录 1.流量控制--利用“窗口大小”字段协商数据量大小1. 1第一次的时候,怎么保证发送数据量是合理的1.2第三次握手ack的时候,可以携带数据!1.3流量控制,属于可靠性还是属于效率? 2.滑动窗口--利用滑动窗口解决批量…

UE5 动画蓝图

文章目录 一、State Machines二、Blend Spaces三、Aim Offset四、Montage 初步介绍 Unreal Engine 5 Tutorial - Animation Blueprint Part 1: State Machines (youtube.com) Unreal Engine 5 Tutorial - Animation Blueprint Part 2: Blend Spaces (youtube.com) Unreal Engi…

读人工智能全传01图灵的电子大脑

1. 人工智能 1.1. 人类对人工智能的梦想,可以追溯到很久很久以前 1.1.1. 从古希腊开始,铁匠之神赫菲斯托斯(Hephaestus)拥有赋予金属物品生命的能力 1.1.2. 从16世纪的布拉格开始,传说中伟大的拉比在那里用黏土制作了一个傀儡魔像&#xf…

使用patch-package自动修改node_modules中的内容/打补丁

背景 在使用VuePress搭建个人博客的过程中,我需要使用到一个用来复制代码块的插件uepress-plugin-nuggets-style-copy。 问题:插件可以正常安装,但是启动会报错。通过查看错误信息,定位是插件中的copy.vue文件出现错误&#xff0c…

【实战场景】记一次UAT jvm故障排查经历

【实战场景】记一次UAT jvm故障排查经历 开篇词:干货篇:1.查看系统资源使用情况2.将十进制进程号转成十六进制3.使用jstack工具监视进程的垃圾回收情况4.输出指定线程的堆内存信息5.观察日志6.本地环境复现 总结篇:我是杰叔叔,一名…

仿论坛项目--初识Spring Boot

1. 技术准备 技术架构 • Spring Boot • Spring、Spring MVC、MyBatis • Redis、Kafka、Elasticsearch • Spring Security、Spring Actuator 开发环境 • 构建工具:Apache Maven • 集成开发工具:IntelliJ IDEA • 数据库:MySQL、Redi…

Docker拉取失败,利用 Git将 Docker镜像重新打 Tag 推送到阿里云等其他公有云镜像仓库里

目录 一、开通阿里云容器镜像服务 二、Git配置 三、去DockerHub找镜像 四、编写images.txt文件 ​五、演示 六、其他注意事项 最近一段时间 Docker 镜像一直是 Pull 不下来的状态,想直连 DockerHub 是几乎不可能的。更糟糕的是,很多原本可靠的国内…

Vue+ElementUi实现录音播放上传及处理getUserMedia报错问题

1.Vue安装插件 npm install --registryhttps://registry.npmmirror.com 2.Vue页面使用 <template><div class"app-container"><!-- header --><el-header class"procedureHeader" style"height: 20px;"><el-divid…

密码学及其应用 —— 密码学的经典问题

1. 古典密码学问题 1.1 问题1&#xff1a;破解凯撒密码 1.1.1 问题 凯撒密码是最简单的单字母替换加密方案。这是一种通过将字母表中的字母固定向右移动几位来实现的加密方法。解密下面的文本&#xff0c;该文本通过对一个去除了空格的法语文本应用凯撒密码获得&#xff1a; …

layui-按钮

1.用法 使用 用button标签 type"button" class"layui-button" 效果&#xff1a; 2.主题设置 前面都要加上layui-bin 3.尺寸设置 可以叠加使用&#xff01; 4.圆角设置 加一个layui-bin-radius 5.按钮图标设置 里面加一个i标签 加class"layui-…