首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于WSL2的局域网与ROS的通信问题

基于WSL2的局域网与ROS的通信问题
EN

Stack Overflow用户
提问于 2020-12-13 12:43:38
回答 1查看 3.3K关注 0票数 5

我是ROS项目的开发人员。最近,我尝试在WSL2()上使用ROS(旋律),一切都很好。但是当我想使用另一台也在同一个局域网(LAN)上的PC进行通信时,我遇到了一些麻烦。在设置诸如"ROS_MASTER_URI,ROS_IP“这样的环境变量之前,我知道由于WSL 2在Hyper-V上工作,所以WSL2上的IP显示并不是真正的局域网中的。为了让局域网中的每个人都能与特定的主机进行通信,我必须执行如下命令: WSL2上的端口。

代码语言:javascript
运行
复制
netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr

但这里有一个新问题:

每次启动文件时,使用TCPROS相互通信的节点都有一个随机端口。

我该如何处理这种问题呢?或者互联网上有什么我可以看的信息?

谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2020-12-13 15:55:37

根源问题在WSL第4150期中描述。引用那条线索,

WSL 2似乎是NAT --它是虚拟网络,而不是连接到主机NIC。

选项1-登录时端口转发脚本

注意:从@kraego的评论(以及我根据评论看到的编辑的问题)来看,这对ROS来说可能不是一个好的选择,因为端口号是随机分配的。这使得端口转发必须动态地完成。

在这个问题中描述了一些解决方法,您已经知道了第一部分(端口转发)。主要技术似乎是创建一个PowerShell脚本来检测IP地址,并创建运行在Windows登录上的端口转发规则。在线程顶部附近的这个特别的评论似乎是典型的go-to答案,尽管许多人已经在整个很长的线程中发布了他们的调整或替代方案。

缺点之一--我认为这里提到的脚本需要在登录时运行,因为WSL子系统似乎只想在用户登录时运行。我已经发现,试图通过OpenSSH运行WSL服务或实例会导致该实例/服务在SSH会话关闭后不久关闭,除非用户已经使用打开的WSL实例登录到Windows。

备选方案2- WSL1

我还建议,假设它适合您的工作流,并且如果ROS在它上工作(考虑到您需要的设备访问权限,它可能不适用,但不确定),您可以简单地使用WSL1而不是WSL2来避免这种情况。你可以通过以下方法来尝试:

  1. 备份现有发行版(从PowerShell或cmd,使用wsl --export <DistroName> <FileName> )
  2. 使用WSL1将备份导入新的wsl --import <NewDistroName> <InstallLocation> <FileNameOfBackup> --version 1实例

简单地更改版本是可能的,但是我倾向于在做备份之前有一个备份,而且只要您正在备份,您就可以保留原来的版本。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65275743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档