多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

宇树G1人形机器人SSH远程调试与MobaXterm配置实战指南

宇树G1人形机器人SSH远程调试与MobaXterm配置实战指南 1. 拿到G1之后为什么第一件事是搞定SSH而不是急着跑Demo宇树G1这台人形机器人到手之后很多人第一反应是赶紧上电、让它站起来走两步。我当初也是这个心态结果折腾了半天发现真正高效的开发方式根本不是抱着遥控器一遍遍试而是先把SSH通道打通把G1当成一台跑在局域网里的Linux主机来用。这个思路转变很关键——G1本质上是一台带关节的计算机它的运动控制、传感器数据、日志系统全都跑在内部的Linux环境里你只有拿到shell才能真正看到它在想什么、在报什么错。SSHSecure Shell在这里扮演的角色就是你和G1之间那条加密的命令行通道。有了它你可以在自己的Windows笔记本上敲命令直接操作G1内部的文件系统、查看进程状态、修改配置文件、拉取日志甚至做端口转发把G1的图形界面映射到本地。没有SSH你只能靠官方App或者遥控器做有限的操作调试效率差了一个数量级。这篇内容面向的是刚拿到G1、准备做二次开发或者网络调试的工程师。不管你之前有没有用过MobaXterm只要你会基本的Linux命令跟着走一遍就能把连接跑通。我会把MobaXterm的配置细节、网络排查的完整链路、以及几个我实际踩过的坑都摊开讲重点放在为什么这么配而不是照着填就行。需要提前说明的是G1不同批次的固件和网络配置可能有差异下面提到的IP段、默认用户名、端口号都是基于我手头这台设备的实际情况你拿到自己的机器后需要先确认一遍。这个确认过程本身也是网络调试的一部分我会在第二节详细展开。2. 连不上之前先把G1的网络底细摸清楚2.1 G1出厂网络配置的常见形态宇树G1的网络接入方式通常有两种一种是通过机身上的以太网口直接连路由器或者电脑另一种是G1自己开一个WiFi热点让你连上去。两种方式各有适用场景但调试阶段我更推荐有线直连或者走同一台路由器的有线网络原因是WiFi的延迟抖动会让你在排查问题时多一层干扰变量。如果你走有线G1的网口默认大概率是DHCP模式也就是说它会从路由器拿一个动态IP。这时候你需要登录路由器管理后台在DHCP客户端列表里找到宇树相关的设备名记下它拿到的IP。如果路由器后台看不到可以用arp -a在Windows命令行里扫一遍局域网找那个MAC地址前缀是宇树OUI的设备。如果G1是AP模式自己发热点你的电脑连上它的WiFi之后G1的网关地址通常就是它的SSH目标地址。这个地址在官方文档里一般会写常见的是192.168.123.1或者192.168.1.100这类私有地址。我建议你第一次连接时先用ping确认可达性再上SSH客户端这样能把网络不通和SSH服务没起来这两个问题分开。2.2 用ping和arp做第一轮连通性验证在打开MobaXterm之前先开一个Windows自带的cmd或者PowerShell做两件事ping 192.168.123.1 -t这个-t是持续ping方便你观察丢包情况。如果一直超时说明链路层就没通问题出在网线、网口协商或者IP段不匹配上。如果ping通了但有大量丢包那可能是网线质量或者网口双工模式的问题这种链路即使SSH连上了也会频繁断线。ping通之后再确认一下SSH端口是否开放。G1的SSH默认端口是22但有些固件版本会改成其他端口。用Windows的Test-NetConnection可以快速探测Test-NetConnection 192.168.123.1 -Port 22如果TcpTestSucceeded显示True说明SSH服务在监听可以进入MobaXterm配置环节。如果显示False但ping是通的那就要考虑SSH服务是否被禁用、端口是否被改、或者防火墙是否拦了。2.3 确认登录凭据和权限模型G1的SSH登录凭据在不同固件版本里不太一样。我见过的情况是默认用户名类似unitree或者ubuntu密码可能是设备序列号后几位或者一个固定初始密码。这个信息一定要以你设备附带的文档或者官方发布说明为准不要盲目试网上的通用密码多次失败可能触发登录锁定。登录进去之后先执行whoami和id确认当前用户身份。G1上很多操作需要root权限但默认登录用户往往不是root。这时候你需要确认sudo是否可用sudo -l如果这个用户有sudo权限后面改网络配置、重启服务就方便很多。如果没有你可能需要通过串口或者其他方式获取root权限这个在量产机型上通常有官方途径。提示第一次登录成功后建议立刻用passwd改掉默认密码并且配置SSH密钥登录避免每次输密码也降低密码被暴力破解的风险。3. MobaXterm的配置细节从新建会话到密钥登录3.1 为什么选MobaXterm而不是PuTTY或者终端自带SSHWindows上做SSH连接的工具有很多PuTTY够轻量Windows Terminal加OpenSSH也够用但我长期用MobaXterm的原因是它把几件事整合到了一起SSH会话管理、SFTP文件浏览、X11转发、串口连接、本地终端多标签。对于G1这种需要频繁传文件、看日志、偶尔还要跑图形化工具的场景MobaXterm一个软件就覆盖了不用在多个工具之间切来切去。另一个实际原因是MobaXterm的会话保存和日志记录做得比较顺手。你可以给每台G1建一个独立会话保存IP、用户名、密钥路径下次双击就连上。它还能自动把终端输出保存成日志文件这对排查偶发问题特别有用——机器人跑着跑着报了个错你当时没注意回头翻日志还能找到。3.2 新建SSH会话的完整参数填写打开MobaXterm点左上角Session选择SSH。弹出的配置窗口里几个关键字段这样填Remote host填G1的IP地址比如192.168.123.1Specify username勾上填你的登录用户名Port默认22如果改过就填实际端口Advanced SSH settings标签页里勾选Use private key指向你生成的私钥文件这里有个细节很多人忽略MobaXterm的Bookmark settings里可以给会话起名字建议用G1-机身编号-用途这种格式比如G1-001-调试后面设备多了不会乱。填完之后先别急着保存点OK它会直接尝试连接。第一次连接会弹出主机密钥确认选Accept并保存这样后续不会再问。3.3 配置SSH密钥登录告别每次输密码密码登录在调试阶段够用但只要你开始频繁连接就会觉得烦。更重要的是很多自动化脚本和批量操作依赖密钥登录。生成密钥对在Windows上可以用MobaXterm自带的MobaKeyGen也可以用OpenSSH的ssh-keygen。我习惯用OpenSSH因为生成的密钥格式通用性更好ssh-keygen -t ed25519 -C g1-debug-keyed25519比RSA更短更安全G1上的OpenSSH版本只要不是太老都支持。生成过程中会让你选保存路径和passphrasepassphrase可以留空方便自动化但如果你在意安全就设一个配合ssh-agent使用。生成之后把公钥传到G1上ssh-copy-id -i ~/.ssh/id_ed25519.pub unitree192.168.123.1如果Windows上没有ssh-copy-id可以手动把公钥内容追加到G1的~/.ssh/authorized_keys文件里。注意权限.ssh目录要是700authorized_keys要是600权限不对SSH会拒绝使用密钥。注意如果你在Windows上遇到bad owner or permissions on C:\Users\xxx/.ssh/config这个报错说明config文件或者.ssh目录的权限太开放。Windows下需要用icacls命令收紧权限只保留当前用户的所有权。这是Windows OpenSSH的一个老问题MobaXterm用自己的密钥管理时一般不会遇到但如果你同时用系统自带的ssh命令就会撞上。3.4 会话保存、日志记录和中文显示MobaXterm保存会话很简单配置完点OK之后左侧会话列表里就会出现。右键可以编辑、复制、删除。建议把常用的几个G1设备都建好按项目分组。日志记录在Settings-Configuration-Terminal里勾选Log terminal output to指定一个目录。这样每个会话的终端输出都会自动存成文件文件名带时间戳。排查问题时直接翻这些日志比凭记忆靠谱。中文显示方面MobaXterm默认字体对中文支持还行但如果遇到乱码去Settings-Configuration-Terminal-Font settings把字体改成Consolas或者Sarasa Mono SC这类等宽字体字符集选UTF-8。G1上的locale如果没配好也可能导致中文输出乱码登录后执行locale看一下必要时在~/.bashrc里加export LANGen_US.UTF-8或者zh_CN.UTF-8。4. 网络调试的完整排查链路从ping不通到稳定连接4.1 分层排查物理层、网络层、传输层、应用层网络问题最忌讳东一榔头西一棒子。我习惯按OSI模型从下往上查每一层确认没问题再往上走。这个顺序能保证你不会在应用层折腾半天结果发现是网线没插好。物理层网口指示灯亮不亮网线是不是好的换一根线试试。G1的网口如果有多个确认你插的是配置为管理口的那一个。网络层ping通不通arp -a能不能看到G1的MAC地址IP段是否在同一子网。如果G1是192.168.123.x你的电脑也得是192.168.123.x不能是192.168.1.x。传输层Test-NetConnection测22端口或者用telnet 192.168.123.1 22看能不能建立TCP连接。这一步通了说明SSH服务在跑。应用层SSH登录报什么错是认证失败还是协议协商失败。认证失败查用户名密码密钥协议协商失败查SSH版本兼容性。4.2 常见故障场景与对应处理我把实际遇到过的几个典型问题整理成表方便对照排查现象可能原因处理方式ping不通网口灯不亮网线故障或网口未启用换网线检查G1网口配置ping通但SSH连接超时SSH服务未启动或端口被改通过串口登录确认服务状态SSH提示Connection refused防火墙拦截或服务未监听检查iptables规则和sshd配置登录后频繁断线网络抖动或MTU不匹配调整MTU改用有线连接密钥登录失败权限问题或密钥格式不对检查.ssh目录权限和密钥类型中文乱码locale或终端字符集不匹配统一设置为UTF-8这个表不是穷举但覆盖了八成以上的常见情况。遇到表里没有的回到分层排查的思路一层层确认。4.3 用UDP网络调试助手辅助排查有些问题不在SSH本身而在G1上的某个服务通过UDP在通信比如传感器数据流、遥控指令通道。这时候光靠SSH看日志不够你需要一个UDP调试工具来抓包或者模拟发送。网络调试助手这类工具比如常见的v5.0.3版本可以监听指定UDP端口把收到的数据以十六进制或者文本形式显示出来。用法是在G1上确认某个服务往哪个端口发数据然后在你的电脑上用调试助手监听那个端口看数据有没有正常到达、格式对不对。这个手段在排查G1说发了但上位机没收到这类问题时特别有效。它能帮你区分是G1没发、网络丢了、还是上位机没正确解析。4.4 连接稳定后的验证清单SSH连上并且稳定之后别急着关掉。花两分钟做几个验证确认这条通道真的可靠连续执行uptime和free -h看响应是否稳定用scp传一个几十MB的文件测传输速率和是否中断开一个top或者htop观察一段时间看会不会断在MobaXterm里开第二个标签同时连同一个G1确认多会话没问题这几步做完你才算真正拥有了一条可用的调试通道。5. 打通SSH之后G1开发效率能提升在哪5.1 文件传输SFTP面板直接拖拽MobaXterm连上SSH之后左侧会自动出现一个SFTP面板显示G1上的文件系统。你可以直接拖拽文件上传下载不用记scp命令。传配置文件、拉日志、更新脚本都是拖一下就完事。这个面板的路径跟随终端当前目录你在终端里cd到某个目录SFTP面板也会同步过去。这个联动设计很省事不用两边分别导航。5.2 远程执行与批量操作有了SSH你可以写脚本批量在G1上执行命令。比如同时给多台G1更新配置for ip in 192.168.123.101 192.168.123.102 192.168.123.103; do ssh unitree$ip sudo systemctl restart g1-control doneMobaXterm本身也支持发送命令到所有会话在多个标签页打开的情况下可以一次输入命令广播到所有连接的G1。这个功能在批量调试时非常高效但用之前一定要确认命令是幂等的、安全的别一个误操作把所有机器人搞挂。5.3 端口转发与图形化工具G1上如果跑了Web界面或者需要图形化的调试工具可以通过SSH端口转发映射到本地。MobaXterm的隧道功能在Tools-MobaSSHTunnel里配置把G1的某个端口转发到本地的某个端口然后本地浏览器访问localhost:端口就能看到G1上的界面。X11转发也是MobaXterm的强项。如果G1上装了带图形界面的工具SSH会话里直接运行窗口会显示在你的Windows桌面上。这个在跑一些可视化调试工具时很方便不用额外配VNC。5.4 日志集中管理与问题回溯前面提到MobaXterm可以自动保存终端日志。结合G1上的系统日志journalctl、/var/log/下的文件你可以建立一个本地的日志归档习惯。每次调试会话的终端输出、关键的系统日志、当时的网络状态都存到一个按日期命名的文件夹里。这个习惯在排查偶发问题时价值巨大。人形机器人的问题往往不是每次都复现等你回头想查的时候现场已经没了。有日志在手至少能还原当时的状态。6. 几个我实际踩过的坑和对应的处理经验6.1 IP冲突导致的间歇性断连有一次G1连上路由器后SSH时通时断ping也丢包。查了半天以为是网线问题换了两根线还是一样。最后在路由器后台发现G1拿到的IP和另一台设备冲突了——DHCP分配出了岔子。解决办法是给G1在路由器上绑定静态IP或者在G1上配静态IP避开DHCP池。这个坑的教训是调试阶段尽量用静态IP减少变量。动态IP适合最终部署不适合调试。6.2 SSH密钥权限在Windows上的坑前面提到的bad owner or permissions报错我遇到过一次。原因是Windows上.ssh目录的继承权限没关掉导致其他用户组也有读权限。用icacls修复的命令是icacls C:\Users\你的用户名\.ssh /inheritance:r icacls C:\Users\你的用户名\.ssh /grant:r 你的用户名:F对config文件和私钥文件也要做同样处理。这个操作在Linux上就是chmod 600但Windows的权限模型不一样得用icacls。6.3 MobaXterm会话在换网络后失效MobaXterm保存的会话绑定了IP。当你把G1从一个网络搬到另一个网络IP变了会话就连不上。这时候要么改会话里的IP要么用主机名。如果G1的hostname能通过mDNS或者本地DNS解析用hostname建会话会更灵活。我现在的做法是给每台G1在路由器上配静态IP加本地DNS记录会话里用hostname这样换网络只要DNS跟着变就行。6.4 长时间会话被服务端断开SSH服务端通常有ClientAliveInterval和ClientAliveCountMax配置空闲太久会被断开。G1上如果sshd配置比较激进你可能挂机一会儿回来发现会话没了。解决办法是在MobaXterm的会话设置里勾选SSH keepalive或者在G1的/etc/ssh/sshd_config里调大保持连接的参数。MobaXterm的keepalive设置在会话配置的SSH标签页 -Advanced SSH settings-SSH keepalive勾上之后它会定期发心跳包防止被断开。6.5 多台G1同时调试时的会话管理当你手头有三五台G1要同时调试MobaXterm的会话列表会变得很长。我的做法是按项目或者按批次建文件夹分组会话名带编号。另外MobaXterm支持多窗口模式可以把不同G1的会话拖到不同窗口配合Windows的分屏一台屏幕看多台设备的状态。如果设备数量再多就要考虑用tmux或者screen在G1上跑持久会话SSH断了也不影响里面跑的任务。这个在跑长时间测试时特别有用。7. 把SSH通道变成G1开发的常规基础设施SSH连上G1只是起点真正有价值的是把这条通道变成你日常开发流程的一部分。我现在的工作习惯是每天早上到工位先MobaXterm连上所有在用的G1开好日志记录然后才开始当天的调试或者开发。所有操作都在SSH会话里做所有输出都有日志留档。这个习惯带来的好处是任何问题都有迹可循。G1什么时候报的错、当时在跑什么、网络状态如何翻日志就能还原。人形机器人的调试本来就复杂能减少一个变量就减少一个。另外SSH密钥和会话配置建议做一次备份。换电脑或者重装系统时把这些配置恢复回去能省不少重新配置的时间。MobaXterm的配置可以导出密钥文件单独存一份加密备份。最后分享一个小技巧MobaXterm的Macro功能可以录制一串命令绑定到快捷键。比如你每次连上G1都要执行的那几条检查命令录成一个宏一键跑完。这个在重复性操作多的场景下能省不少事。
返回列表