1. 宇树G1机器人联网调试的整体思路
宇树G1作为一台四足人形平台,出厂时内部跑着一套基于Linux的实时控制栈,开发者想改参数、跑自定义策略、抓传感器数据,绕不开的第一道坎就是把它接入自己的开发网络。很多人拿到机器后第一反应是插网线、开浏览器,结果发现根本没有图形界面可点,这时候SSH就成了唯一靠谱的入口。我前后在几台G1上做过网络配置和远程调试,踩过的坑主要集中在三块:网段对不上导致根本ping不通、SSH密钥权限被系统拒绝、以及MobaXterm会话配置里几个默认选项和机器人端不兼容。这篇就把这套流程从头到尾捋一遍,包括MobaXterm的安装汉化、会话建立、密钥配置、网络抓包调试,以及那些文档里不会写的细节。
先说清楚这套方案适合谁。如果你手上有一台G1,想用笔记本远程登录进去看日志、传文件、跑脚本,或者你正在做多机协同、需要批量管理几台机器人,那这篇的内容基本可以直接抄。就算你之前只用过PuTTY或者系统自带的终端,跟着走一遍也能把MobaXterm这套工具链用起来。核心关键词就几个:宇树G1、SSH连接、MobaXterm配置、网络调试,下面所有内容都围绕它们展开。
在动手之前,有几个基础概念得先对齐,不然后面容易懵。SSH本质上是加密的远程登录通道,机器人端跑一个sshd服务在监听22端口,你的电脑作为客户端去连它。MobaXterm则是一个Windows下的终端工具箱,把SSH、SFTP、X11转发、串口、网络工具全塞进一个界面,对机器人调试这种需要同时开好几个会话的场景特别友好。网络调试这块,G1内部各模块之间走的是UDP通信,想看清数据流就得在机器人端或者中间节点上抓包,这也是后面会重点讲的部分。
提示:G1的固件版本不同,默认网络配置和开放端口可能有差异。动手前先用网线直连或者串口登录确认一下当前IP,别上来就改配置,改错了可能连串口都进不去。
2. MobaXterm安装与中文环境配置
2.1 下载渠道与版本选择
MobaXterm分两个版本:Home Edition免费,Professional收费。个人调试用Home版完全够,功能上唯一明显的限制是会话数量,但对单台或几台G1来说根本用不到上限。下载直接去官网,认准mobaxterm.mobatek.net这个域名,别从乱七八糟的下载站拿,那些站经常捆绑一堆东西。下载下来是一个zip包,解压后直接运行exe就能用,属于绿色软件,不用装。
版本号方面,建议用20以上的版本,老版本对新的加密算法支持不好,连某些Linux发行版会报算法不匹配。我目前用的是23.x,稳定。如果你在win7上跑,得注意新版可能不支持,win7最高用到20.x左右,再高会提示系统版本不够。这个在热词里也有人问过win7装ssh的问题,其实win7自带的ssh客户端版本太老,直接用MobaXterm内置的就行,不用折腾系统组件。
2.2 汉化设置与界面调整
MobaXterm原生是英文界面,但内置了多语言支持,不用去下什么汉化包。操作路径是:打开软件后点Settings菜单,找到Configuration,在General标签页里有个Language下拉框,选Chinese Simplified,重启软件就是中文了。热词里搜“mobaxterm如何设置中文”“mobaxterm怎么改中文”的人特别多,其实就这一步,不用装额外的东西。
界面调整还有几个实用项。字体建议改成等宽字体比如Consolas或者JetBrains Mono,字号14左右,长时间看日志不累。终端配色可以在Settings里的Terminal标签页调,我习惯用深色背景配浅色文字,对比度高。另外把“Copy on select”打开,选中即复制,省得每次右键。这些设置改完会保存在MobaXterm.ini里,换电脑直接把ini拷过去就行。
2.3 会话保存与日志记录
MobaXterm的会话管理是它的强项。新建一个SSH会话后,在Session settings里可以给它起名字、设图标、分组。我一般按机器人编号分组,比如G1-01、G1-02,每台下面再分“控制终端”“文件传输”“抓包”几个会话。这样多台机器切换的时候不会乱。
日志记录这个功能一定要开。在会话设置里找到Terminal settings,勾选“Log terminal output to file”,指定一个目录。G1调试过程中经常需要回溯之前的输出,比如某个报错是什么时候出现的、参数改之前是什么值,有日志就能直接翻。日志文件默认按会话名加时间戳命名,也可以自己定格式。热词里“mobaxterm保存日志”问的就是这个,建议每个会话都单独开日志,别嫌占空间,关键时刻能救命。
注意:日志目录别设在中文路径下,某些版本会写不进去。用纯英文路径,比如D:\G1_Logs\。
3. G1网络接入与SSH服务确认
3.1 网段规划与物理连接
G1出厂默认的网口IP通常是192.168.123.xxx这个段,具体地址看固件版本。你的电脑要跟它在同一网段才能通。操作上,把电脑有线网卡设成静态IP,比如192.168.123.100,子网掩码255.255.255.0,网关可以不填。然后用网线直连G1的网口,或者通过交换机接。
这里有个常见坑:很多人电脑上还开着WiFi,连上机器人后系统路由表里默认路由还是走WiFi,导致ping不通。解决办法是把WiFi先禁用,或者手动加一条路由。Windows下可以用route add命令,Linux下用ip route add。实测下来,直接禁WiFi最省事。
物理连接确认后,先ping一下机器人地址。通的话再往下走,不通就检查网线、网口指示灯、IP配置。G1的网口指示灯正常应该是绿灯常亮、黄灯闪烁。如果灯都不亮,可能是网线问题或者网口没启用,换根线试试。
3.2 SSH服务状态检查与端口确认
G1内部跑的是Linux,sshd一般是开机自启的。但有些定制固件可能没开,或者改了端口。确认方法有两种:一是直接尝试连接,看报什么错;二是通过串口登录进去用命令查。串口登录需要USB转TTL模块,接G1的调试串口,波特率通常是115200。进去后执行:
systemctl status sshd如果显示active (running)就说明服务在跑。再看监听端口:
ss -tlnp | grep ssh正常应该看到0.0.0.0:22或者:::22。如果端口不是22,记下来,MobaXterm里要改。如果服务没跑,用systemctl start sshd启动,再enable一下开机自启。
还有一种情况是防火墙拦了。G1上可能跑着ufw或者iptables,检查一下:
sudo ufw status如果是active,把22端口放行:
sudo ufw allow 22/tcpiptables的话用iptables -L -n看规则,有DROP就加一条ACCEPT。这些操作做完再试连接。
3.3 首次连接与主机密钥确认
第一次用MobaXterm连G1,会弹出一个主机密钥确认框,问你是否信任这个主机。这是SSH的正常机制,防止中间人攻击。点Accept就行,密钥会存到本地known_hosts文件里。如果之后机器人重装了系统或者换了密钥,会报“Host key verification failed”,这时候要去known_hosts里把对应条目删掉,或者用ssh-keygen -R命令清除。
连接时用的默认用户名,宇树G1一般是unitree,密码可能是出厂默认的,具体看随机器附带的文档。首次登录后第一件事就是改密码,用passwd命令。别用太简单的,机器人虽然在内网,但万一接入了办公网就有风险。
4. MobaXterm会话配置与密钥登录实战
4.1 新建SSH会话的详细参数
打开MobaXterm,点Session,选SSH。在Remote host里填G1的IP,比如192.168.123.161。Specify username勾上,填unitree。Port默认22,如果之前查到改了端口就填对应的。这些填完先别急着点OK,点下面的Advanced SSH settings标签页,有几个关键项要调。
第一个是“Use private key”,如果你已经配了密钥登录就勾上并选密钥文件,没有就先不勾,用密码登录。第二个是“SSH engine”,默认用MobaXterm自带的就行,除非有特殊需求。第三个是“Execute command”,可以填一个登录后自动执行的命令,比如cd到工作目录,这个看个人习惯。
还有个容易被忽略的:Terminal settings里的“Backspace sends ^H”选项。有些Linux发行版默认把Backspace识别成^H,导致按退格键出现乱码。如果连上后发现退格不好使,回来把这个勾上或者取消,试一下哪个对。
4.2 SSH密钥生成与部署
密码登录每次都要输,麻烦而且不安全。配密钥登录是标准做法。生成密钥对用ssh-keygen,Windows下MobaXterm自带了这个工具,在Tools菜单里能找到,或者直接在本地终端跑:
ssh-keygen -t ed25519 -C "g1_debug"-t指定算法,ed25519比rsa更短更安全,现在推荐用这个。一路回车,默认存在C:\Users\你的用户名.ssh\目录下,生成id_ed25519和id_ed25519.pub两个文件。带.pub的是公钥,要传到机器人上。
传公钥有两种方式。一是用MobaXterm的SFTP功能,连上后把pub文件拖到/home/unitree/.ssh/目录,然后登录终端执行:
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh二是用ssh-copy-id命令,MobaXterm的本地终端里跑:
ssh-copy-id -i ~/.ssh/id_ed25519.pub unitree@192.168.123.161输入一次密码就自动部署好了。第二种更省事,推荐。
4.3 权限报错与bad owner问题处理
热词里有个“bad owner or permissions on c:\users\thinkpad/.ssh/config”,这个报错在Windows下特别常见。原因是.ssh目录或者里面的文件权限太开放,SSH客户端出于安全考虑拒绝使用。Windows下权限管理跟Linux不一样,得用icacls命令改。
先看当前权限:
icacls C:\Users\你的用户名\.ssh\config如果显示有Everyone或者Users组的写权限,就得去掉。执行:
icacls C:\Users\你的用户名\.ssh\config /inheritance:r icacls C:\Users\你的用户名\.ssh\config /grant:r "%USERNAME%:F"这两条命令先断开继承,再只给当前用户完全控制。对.ssh目录本身和里面的id_ed25519私钥文件也要做同样处理。私钥文件权限尤其重要,如果别的用户能读,SSH会直接拒绝加载。
改完权限再连,应该就不报bad owner了。如果还报,检查一下文件是不是在OneDrive同步目录下,同步软件有时候会改权限,把.ssh挪到本地非同步目录最稳。
提示:MobaXterm里如果配了密钥还提示输密码,先确认私钥路径对不对,再看机器人端authorized_keys权限是不是600,.ssh目录是不是700。这两个权限不对,密钥登录会静默失败回退到密码。
5. 网络调试与UDP数据抓取实操
5.1 机器人内部通信架构速览
G1内部各模块之间通信主要走UDP,比如关节控制器、IMU、视觉模块之间的数据交换。想调试这些数据流,得先搞清楚谁发给谁、端口是多少。常见做法是登录G1后看进程和端口占用:
sudo netstat -unlp-u只看UDP,-n显示数字端口,-l监听状态,-p显示进程。这样能看到哪些程序在监听哪些UDP端口。再结合ps aux看进程命令行,基本能推断出通信关系。
如果文档里没写端口分配,可以用tcpdump抓一段时间包,看流量特征。比如:
sudo tcpdump -i eth0 -nn udp -w g1_traffic.pcap抓个几十秒,然后用Wireshark打开分析。看源IP、目的IP、端口、包大小、发送频率,就能反推出通信矩阵。
5.2 网络调试助手的使用要点
热词里提到的“网络调试助手v5.0.3”是Windows下常用的UDP/TCP调试工具。在G1调试场景里,它的典型用法是模拟某个模块发数据,或者接收机器人发出的数据看内容。比如你想测试G1的某个UDP接口,可以在调试助手里建一个UDP服务端,监听指定端口,然后让G1往这个端口发数据,看能不能收到、内容对不对。
配置时注意几点:一是绑定IP选本机在机器人同网段的那个地址,别选0.0.0.0除非你知道自己在干嘛;二是端口别跟系统其他服务冲突;三是编码格式,G1发的数据可能是二进制,调试助手要切到HEX模式看,别用ASCII,不然全是乱码。
发送测试数据时,先发简单的,比如几个字节的固定值,确认链路通了再发复杂结构。接收方向如果一直没数据,先确认G1那边确实在发,用tcpdump在机器人上抓一下,排除是网络问题还是应用没发。
5.3 在MobaXterm里做端口转发与抓包
MobaXterm支持SSH隧道,可以把机器人上的端口转发到本地。比如G1上跑了一个Web服务在8080端口,你想在本地浏览器看,就建一个本地端口转发:在会话的Tunneling设置里,选Local port forwarding,本地端口填8080,远程主机填localhost,远程端口填8080。连上后本地访问localhost:8080就是机器人上的服务。
抓包方面,如果不想在机器人上装Wireshark,可以用SSH把tcpdump的流量导到本地。命令是:
ssh unitree@192.168.123.161 "sudo tcpdump -i eth0 -nn udp -w -" > local_capture.pcap这样抓到的包直接存到本地文件,用Wireshark打开分析。注意sudo可能需要密码,可以配NOPASSWD或者用ssh -t分配终端。
MobaXterm自带的网络工具里也有ping、traceroute、端口扫描这些,调试网络连通性够用了。端口扫描可以快速确认G1上哪些端口开着,比一个个试快。
6. 常见问题排查与避坑经验
6.1 连接失败类问题速查
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| ping不通 | 网段不对/网线问题/WiFi干扰 | 检查IP配置,禁用WiFi,换网线 |
| Connection refused | sshd没跑/端口不对/防火墙拦 | 串口登录查服务状态和端口 |
| Permission denied | 用户名密码错/密钥权限不对 | 确认用户名,检查authorized_keys权限 |
| Host key verification failed | 机器人密钥变了 | 删除known_hosts对应条目 |
| 连上就断 | 网络不稳定/MTU问题 | 检查网线,调MTU |
这个表基本覆盖了九成以上的连接问题。遇到报错先对号入座,按排查方法走一遍,大部分都能解决。
6.2 密钥与权限类坑点
Windows下.ssh目录权限问题是重灾区。除了前面说的icacls方法,还有个简单粗暴的:把.ssh目录从C:\Users\xxx\下挪到别的地方,比如D:\ssh\,然后在MobaXterm里指定这个路径。这样绕开了用户目录的继承权限,省得跟icacls较劲。
另一个坑是密钥格式。MobaXterm早期版本只认PPK格式(PuTTY的密钥格式),不认OpenSSH格式。如果你用ssh-keygen生成的密钥,可能需要在MobaXterm里转换一下,或者用Tools里的MobaKeyGen导入再导出成PPK。新版已经支持OpenSSH格式了,但如果你用的是老版本,注意这个。
还有authorized_keys文件如果是从Windows传过去的,可能带了CRLF换行符,导致SSH解析失败。用dos2unix转一下,或者传的时候用二进制模式。
6.3 网络调试中的典型故障
UDP抓包抓不到数据,最常见的原因是抓错了网卡。G1可能有多个网口,eth0、eth1,数据走的是哪个得确认。用ip addr看网口列表和IP,选对的那个抓。另外如果开了硬件加速或者offload,tcpdump可能抓不全,加--no-promiscuous-mode或者调整缓冲区试试。
网络调试助手收不到数据,先确认防火墙。Windows防火墙默认可能拦UDP入站,在防火墙设置里给调试助手放行。再确认绑定IP,如果绑了127.0.0.1,外部数据进不来,得绑实际网卡IP。
MobaXterm会话里跑长时间抓包,可能因为缓冲区满丢包。可以在tcpdump命令里加-w file -C 100这样按大小切文件,或者用-W限制文件数循环覆盖。别让一个文件无限大,不然磁盘满了机器人可能出问题。
6.4 多机批量管理技巧
如果你手上有好几台G1,一台台配太慢。MobaXterm支持多执行模式:在会话列表里选中多个会话,右键选“MultiExec”,就能同时往多个终端发命令。批量改配置、批量重启服务特别方便。
还可以用MobaXterm的宏功能,把常用操作录成宏,一键执行。比如登录后自动cd到工作目录、source环境变量、启动某个脚本,录一次以后点一下就行。
SSH批量登录也可以用脚本,在本地终端写个for循环:
for ip in 192.168.123.161 192.168.123.162 192.168.123.163; do ssh unitree@$ip "hostname && uptime" done配合密钥登录,不用输密码,几台机器状态一秒看完。
7. 远程开发与文件传输的进阶用法
7.1 SFTP面板的高效使用
MobaXterm连上SSH后,左侧会自动出现SFTP面板,显示机器人上的文件系统。这个面板支持拖拽上传下载、右键改权限、重命名、删除。传文件比scp命令直观多了。我一般把常用的脚本、配置文件放在本地一个目录,改完直接拖过去,省得来回敲命令。
面板里可以开多个标签页,同时浏览不同目录。比如一个标签看/home/unitree/,一个看/etc/,对比配置方便。上传大文件时注意机器人磁盘空间,G1的存储一般不大,别塞满了。
7.2 VS Code远程连接G1
热词里“vscode连接ssh远程服务器”也是高频需求。VS Code装Remote-SSH插件后,可以直接连G1,在本地编辑代码,保存即同步到机器人,还能用终端、调试器。配置方法:装插件后按F1,选“Remote-SSH: Add New SSH Host”,填unitree@192.168.123.161,然后选SSH配置文件。连上后打开机器人上的目录,就能像本地一样开发。
这个方式比在MobaXterm里用vim改代码舒服多了,特别是写Python脚本的时候,有补全、有语法检查。调试也可以用VS Code的调试器attach到机器人上的进程,比print大法高效。
7.3 图形化程序的X11转发
G1上如果跑了带图形界面的程序,比如rviz、rqt这些ROS工具,可以通过X11转发显示到本地。MobaXterm默认开启X11转发,连上后机器人上的图形程序会自动弹到Windows桌面。前提是本地装了X Server,MobaXterm自带一个,不用额外装。
跑之前确认机器人上DISPLAY变量设置对了,一般是export DISPLAY=:0或者让SSH自动设置。如果弹不出来,检查MobaXterm的X11转发选项有没有开,以及本地防火墙有没有拦X11端口。
这个功能在调试视觉算法、看点云的时候特别有用,不用挤在机器人小屏幕上,直接在大显示器上看。
8. 我个人在实际调试中的几点体会
G1的网络调试说到底就是三件事:通、稳、看得见。通是基础,网段、服务、权限三样对齐了就能连上;稳是长期,密钥登录、日志记录、会话管理做好了,日常调试才不烦;看得见是进阶,抓包、转发、远程开发这些手段用起来,才能深入到底层数据流。
我踩过最深的坑是权限问题。Windows下.ssh目录的继承权限折腾了我一个下午,最后发现把目录挪出用户文件夹最省事。还有就是别小看网线,有次调了半天以为是配置问题,换根线就好了,劣质网线在机器人这种电磁环境复杂的地方特别容易出问题。
另外建议养成随手记的习惯。每台G1的IP、端口、密码、特殊配置都记在一个文档里,换人接手或者自己过段时间再调的时候,不用重新摸一遍。MobaXterm的会话导出功能可以把所有配置导成文件,备份一份,换电脑直接导入。
最后分享一个小技巧:MobaXterm的“Follow terminal folder”功能,勾上后SFTP面板会自动跟着终端cd的目录走,省得手动导航。这个在机器人上到处翻文件的时候特别好用,很多人不知道。