1. 项目概述
宇树Go2-W是一款基于NVIDIA Orin NX平台的教育机器人,运行Ubuntu 20.04系统。在实际开发中,经常需要通过网线直连电脑进行调试,同时需要让机器人共享电脑的WiFi网络上网。这个需求看似简单,但在实际操作中会遇到不少坑点,特别是网络配置和时间同步问题。
我在最近的项目中就遇到了这个典型场景:电脑通过WiFi连接互联网,同时通过网线直连Go2机器人,需要实现两者之间的网络共享。经过多次实践和排查,总结出一套可靠的配置方法,特别解决了1970年时间导致的SSL证书错误这个棘手问题。
2. 核心需求解析
2.1 网络拓扑设计
我们需要构建的网络拓扑具有以下特点:
- 电脑作为网络共享的中转站
- WiFi接口连接互联网(示例IP:172.16.21.120)
- 有线网卡与机器人直连(固定IP:192.168.123.1)
- 机器人通过有线连接电脑
- 固定IP:192.168.123.18
- 默认网关指向电脑的有线IP
这种设计的关键在于:
- 电脑需要开启IP转发功能,充当路由器
- 需要配置NAT规则,实现网络地址转换
- 机器人需要正确设置网关和DNS
2.2 硬件准备要点
根据实际经验,硬件选择直接影响连接稳定性:
- 网线选择:必须使用Cat5e或Cat6标准的千兆网线
- 百兆网线虽然理论上可用,但在实际测试中容易出现连接不稳定
- 劣质网线会导致速率下降甚至频繁断开
- 连接方式:强烈建议电脑网口与机器人直连
- 避免使用USB网卡或交换机中转
- 实测发现中间设备会增加连接异常概率
3. 详细配置步骤
3.1 电脑端配置(Ubuntu系统)
3.1.1 网卡识别与准备
首先需要确认网卡设备名称:
bash复制ip link
典型输出示例:
code复制1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:e0:4c:68:01:2a brd ff:ff:ff:ff:ff:ff
3: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 74:40:bb:e3:1a:8b brd ff:ff:ff:ff:ff:ff
建议设置环境变量方便后续操作:
bash复制export ETH=enp3s0 # 有线网卡
export WIFI=wlp0s20f3 # 无线网卡
3.1.2 有线网卡IP配置
必须严格按照192.168.123.1/24这个IP设置:
bash复制sudo ip addr flush dev $ETH
sudo ip addr add 192.168.123.1/24 dev $ETH
sudo ip link set $ETH up
注意:如果跳过flush步骤,可能会导致多个IP共存引发路由混乱
3.1.3 启用IP转发
临时生效:
bash复制echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
永久生效(推荐):
bash复制echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
3.1.4 NAT规则配置
关键的三条iptables规则:
bash复制sudo iptables -t nat -A POSTROUTING -o $WIFI -j MASQUERADE
sudo iptables -A FORWARD -i $WIFI -o $ETH -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i $ETH -o $WIFI -j ACCEPT
规则解释:
- MASQUERADE规则:实现源地址转换,让机器人流量看起来来自电脑
- 第一条FORWARD规则:允许已建立的连接返回流量
- 第二条FORWARD规则:允许从机器人发起的出站流量
3.1.5 持久化iptables规则
避免重启后规则丢失:
bash复制sudo apt update
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
3.2 机器人端配置
3.2.1 默认网关设置
将机器人默认网关指向电脑:
bash复制sudo ip route del default || true
sudo ip route add default via 192.168.123.1
3.2.2 DNS配置
使用可靠的公共DNS服务:
bash复制echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf
echo "nameserver 119.29.29.29" | sudo tee -a /etc/resolv.conf
注意:某些校园网或企业网络可能会拦截DNS请求,如果遇到问题可以尝试114.114.114.114
3.2.3 时间同步修复
解决1970年时间问题:
bash复制sudo apt install -y ntpdate
sudo ntpdate ntp.ubuntu.com
如果网络尚未连通,可手动设置近似时间:
bash复制sudo date -s "2026-02-27 23:58:00"
4. 验证与测试
4.1 基础连通性测试
电脑端ping测试:
bash复制ping 192.168.123.18 -c 4
预期结果:
code复制PING 192.168.123.18 (192.168.123.18) 56(84) bytes of data.
64 bytes from 192.168.123.18: icmp_seq=1 ttl=64 time=0.423 ms
64 bytes from 192.168.123.18: icmp_seq=2 ttl=64 time=0.387 ms
64 bytes from 192.168.123.18: icmp_seq=3 ttl=64 time=0.401 ms
64 bytes from 192.168.123.18: icmp_seq=4 ttl=64 time=0.395 ms
4.2 网络功能测试
机器人端执行:
bash复制ping baidu.com -c 4
curl -I https://www.baidu.com
sudo apt update
预期结果:
- ping通baidu.com域名
- curl能获取百度首页HTTP头
- apt能正常更新软件列表
5. 常见问题排查
5.1 网络连接异常排查
如果遇到连接问题,建议按以下步骤排查:
- 检查物理连接状态:
bash复制ip link show $ETH
确认状态为"UP"且没有错误计数
- 检查ARP表:
bash复制arp -an
应能看到对方的MAC地址
- 检查路由表:
bash复制ip route
确认默认路由正确
5.2 时间同步问题深入分析
1970年时间问题会导致SSL证书验证失败,因为证书的有效期检查会失败。除了ntpdate,还可以考虑以下方案:
- 使用chrony作为长期时间同步方案:
bash复制sudo apt install chrony
sudo systemctl enable chrony
- 硬件时钟同步:
bash复制sudo hwclock --systohc
5.3 防火墙干扰处理
如果电脑启用了UFW防火墙,需要放行转发流量:
bash复制sudo ufw allow in on $ETH
sudo ufw allow out on $ETH
6. 优化与自动化
6.1 开机自动配置脚本
为避免每次重启都要重新配置,可以创建systemd服务:
- 创建脚本/etc/network/scripts/go2-network.sh:
bash复制#!/bin/bash
# 设置有线网卡IP
ip addr flush dev $ETH
ip addr add 192.168.123.1/24 dev $ETH
ip link set $ETH up
# 启用IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 配置NAT
iptables -t nat -A POSTROUTING -o $WIFI -j MASQUERADE
iptables -A FORWARD -i $WIFI -o $ETH -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $ETH -o $WIFI -j ACCEPT
- 创建systemd服务单元/etc/systemd/system/go2-network.service:
ini复制[Unit]
Description=Go2 Network Configuration
After=network.target
[Service]
Type=oneshot
ExecStart=/etc/network/scripts/go2-network.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
- 启用服务:
bash复制sudo systemctl enable go2-network
sudo systemctl start go2-network
6.2 网络性能优化
对于需要传输大量数据的场景,可以调整TCP参数:
bash复制# 机器人端执行
echo "net.core.rmem_max=4194304" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_max=4194304" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
7. 高级应用场景
7.1 ROS通信配置
如果需要通过该连接进行ROS通信,还需配置:
- 设置ROS_MASTER_URI(机器人端):
bash复制export ROS_MASTER_URI=http://192.168.123.18:11311
- 设置ROS_IP(两端都需要):
bash复制export ROS_IP=192.168.123.18 # 机器人端
export ROS_IP=192.168.123.1 # 电脑端
7.2 远程桌面连接
配置VNC或XRDP远程桌面:
bash复制# 机器人端安装xrdp
sudo apt install xrdp
sudo systemctl enable xrdp
连接时使用192.168.123.18地址即可
8. 安全注意事项
- SSH安全加固:
bash复制# 机器人端执行
sudo passwd unitree # 修改默认密码
sudo nano /etc/ssh/sshd_config # 禁用密码登录,启用密钥认证
- 防火墙配置:
bash复制sudo apt install ufw
sudo ufw allow from 192.168.123.1 to any port 22
sudo ufw enable
- 定期更新系统:
bash复制sudo apt update
sudo apt upgrade -y