簡體   English   中英

在 WSL2 上通過局域網 (LAN) 與 ROS 進行通信時出現問題

[英]Problem communicating over a local area network (LAN) with ROS on WSL2

我是 ROS 項目的開發人員。 最近我嘗試在 WSL2(Linux 的 Windows 子系統)上使用 ROS(旋律),一切都很好。 但是當我想使用同一局域網(LAN)中的另一台PC進行通信時,我遇到了一些麻煩。 在設置諸如“ROS_MASTER_URI, ROS_IP”之類的環境變量之前,我知道由於 WSL 2 在 Hyper-V 上工作,所以 WSL2 上顯示的 IP 不是真實局域網中的那個。 我必須執行如下命令,以使 LAN 中的每個人都與 WSL2 上的特定主機:PORT 進行通信。

netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr

但這里又出現了一個新問題:

每次我啟動文件時,使用 TCPROS 相互通信的節點都有一個隨機端口。

我該如何處理這種問題? 或者網上有什么資料可以看一下嗎?

謝謝你。

WSL 問題 #4150中描述了根本問題。 引用該線程,

WSL 2 似乎對它的虛擬網絡進行 NAT,而不是使其橋接到主機 NIC。

選項 1 - 登錄時的端口轉發腳本

該問題中描述了許多解決方法,您已經了解了第一部分(端口轉發)。 主要技術似乎是創建一個 PowerShell 腳本來檢測 IP 地址並創建在 Windows 登錄時運行的端口轉發規則。 帖子頂部附近的這條特殊評論似乎是規范的首選答案,盡管許多人已經在整個很長的帖子中發布了他們的調整或替代方案。

一個缺點 - 我相信那里提到的腳本需要在登錄時運行,因為 WSL 子系統似乎只想在用戶登錄時運行。我發現嘗試通過 Windows OpenSSH 運行 WSL 服務或實例導致該實例/服務在 SSH session 關閉后不久關閉,除非用戶已經登錄到 Windows 並打開了 WSL 實例。

選項 2 - WSL1

我還建議,假設它適合您的工作流程並且如果 ROS 可以在其上運行(考慮到您需要的設備訪問權限,但不確定),您可以簡單地使用 WSL1 而不是 WSL2 來避免這種情況。 您可以通過以下方式嘗試:

  1. 備份現有發行版(來自 PowerShell 或 cmd,使用wsl --export <DistroName> <FileName>
  2. 使用wsl --import <NewDistroName> <InstallLocation> <FileNameOfBackup> --version 1將備份導入新的 WSL1 實例

可以簡單地更改版本,但我傾向於在這樣做之前進行備份,並且只要您在備份,您最好將原始版本保留在原位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM