-
Notifications
You must be signed in to change notification settings - Fork 61
双网卡主机使用PICO进行数据采集时仿真无反应 #130
Copy link
Copy link
Open
Description
问题描述
在双网卡(有线 + 无线)主机上使用 PICO 手柄通过 AIDEA Vision App 进行遥操作数据采集时,仿真画面完全无反应,机器人不动。PICO App 显示已连接,但仿真端无任何动作输出。
环境信息
- 主机:双网卡(有线网卡 + 无线网卡),分属不同子网
- PICO 通过 Wi-Fi 连接到无线网段
- Docker 容器使用
--network=host模式
根因分析
问题涉及两个层面:
1. teleop.py 中 host_ip 获取逻辑
teleop.py 原代码:
self.host_ip = self.get_local_ip() # hostname -I 返回第一个 IP(有线网卡)
if self.host_ip == None:
self.host_ip = args.host_ipget_local_ip() 调用 hostname -I 获取主机 IP,在双网卡环境下返回的是第一个网卡的 IP(通常是有线网卡),而非 PICO 所在的无线网段 IP。并且命令行参数 --host_ip 只在 get_local_ip() 返回 None 时才生效,导致手动指定 IP 无效。
2. VRServer 绑定特定 IP 无法接收跨网卡数据
vr_server.py 中 sock.bind((host, port)) 绑定了有线网卡 IP,而 PICO 数据从无线网卡进入,绑定有线 IP 的 socket 无法接收到来自无线网卡的 UDP 数据包。
诊断过程
-
宿主机 tcpdump 确认 PICO 数据已到达无线网卡:
sudo tcpdump -i wlo1 udp port 8080 -c 5 # 能抓到来自 PICO 的 UDP 数据 -
容器内绑定有线网卡 IP 无法收到数据:
sock.bind(('<有线网卡IP>', 8080)) # 无法接收无线网卡的数据
-
容器内绑定
0.0.0.0可以收到数据:sock.bind(('0.0.0.0', 8080)) # 可以接收所有网卡的数据
解决方案
修改 1:source/teleop/teleop.py — 优先使用命令行参数
# 修改前
self.host_ip = self.get_local_ip()
if self.host_ip == None:
print("======>Can't get host_ip!!!! Please enter the ip address manually !!!")
self.host_ip = args.host_ip
# 修改后
if args.host_ip:
self.host_ip = args.host_ip
else:
self.host_ip = self.get_local_ip()
if self.host_ip == None:
print("======>Can't get host_ip!!!! Please enter the ip address manually !!!")修改 2:scripts/autoteleop.sh — 传入 0.0.0.0 作为绑定地址
# 修改 teleop.py 的启动命令,添加 --host_ip 0.0.0.0
python3 ./source/teleop/teleop.py --host_ip 0.0.0.0建议
建议将 VRServer 的默认绑定地址改为 0.0.0.0,或在 teleop.py 中将 --host_ip 的默认值改为 0.0.0.0,以兼容多网卡环境。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels