1. 环境配置:从拆箱到联网
第一次拿到Unitree Go1的时候,我盯着这个四足机器人看了半天——它比我想象中要小巧精致,但主控Nano的接口布局确实让人有点懵。作为过来人,建议你先准备好这三样东西:一个支持5GHz的USB无线网卡(我用的是某品牌双频款)、一根HDMI线、还有台日常用的笔记本电脑。别小看这些配件,它们能帮你少走80%的弯路。
连接显示器的过程有个坑要注意:Nano的HDMI接口是mini HDMI规格,普通显示器线根本插不进去。我第一次调试时就卡在这,后来花了20块钱买了转接头才解决。接上显示器后,你会看到Ubuntu 18.04的桌面,默认用户名是unitree,密码也是unitree——这个信息在官方文档里藏得挺深,新手很容易在这里卡壳。
联网环节最让人头疼。我试过三种方案:直接插网线、USB无线网卡、还有手机热点。实测下来,双频无线网卡最稳定,2.4GHz频段虽然穿墙好但延迟高,5GHz频段更适合实时控制。用iwconfig命令查看无线网卡状态时,如果看不到wlan0接口,八成是驱动没装好。这时候别慌,先lsusb确认系统识别到了设备,再到GitHub找对应芯片的驱动。
2. 主控Nano环境调优
2.1 换源与系统更新
原装系统用的国外源速度慢得像蜗牛,我实测换清华源后apt-get update从15分钟降到20秒。不过要注意两点:第一,bionic是Ubuntu 18.04的代号,别傻乎乎复制20.04的源;第二,arm64架构的包和其他平台不一样,必须用ubuntu-ports仓库。有次我手快复制了x86的源地址,结果报了一堆404错误。
网关配置这个步骤特别容易遗漏。因为Go1的Nano默认路由表不完整,即使连上WiFi也上不了网。执行route add default gw 192.168.1.1后,记得用ping baidu.com测试。这里有个隐藏坑:关机后网关配置会丢失,我后来写了自动配置脚本扔在/etc/rc.local里才解决。
2.2 开发工具全家桶
安装jtop的过程堪称血泪史。最开始直接pip install jetson-stats报错,查文档才发现要用python3 -m pip指定解释器。这个工具能实时显示CPU/GPU负载,有次我调试时发现GPU温度飙到85度,就是靠它发现的散热问题。
VNC配置更是个技术活。官方教程说要改dconf配置,但没提要在图形界面下操作。我卡在这半天,后来发现必须先用export DISPLAY=:0指定显示设备。还有个玄学问题:有时候vino-server会莫名崩溃,我的解决方案是写了个监控脚本:
while true; do if ! pgrep vino-server > /dev/null; then /usr/lib/vino/vino-server & fi sleep 10 done3. 深度学习环境部署
3.1 PaddlePaddle的坑位指南
在Jetson平台上装PaddlePaddle绝对是个挑战。官方提供的2.1.1版本预编译包经常出现ABI不兼容,我试过三种方案:
- 直接用
pip install paddlepaddle-gpu——失败 - 从源码编译——花了6小时最后报错
- 使用NVIDIA论坛里大佬修改的版本——成功
最后选择的方案是下载社区修改的whl文件,用python3 -m pip install paddlepaddle_gpu-2.1.1.post101-cp36-cp36m-linux_aarch64.whl安装。这里有个细节:必须装配套的cudnn和tensorrt,版本差一点都不行。
3.2 相机SDK的隐藏功能
UnitreeCameraSdk的文档写得实在太简略,我通过反编译才发现几个实用功能:
setResolution()可以动态调整分辨率,1080p下延迟约80ms,720p能降到50mssetFPS()最高支持60帧,但实际超过30帧就会丢包- 相机固件可以升级,在sdk/tools里有flash工具
传输图像数据时,我建议用共享内存而不是socket。实测下来,共享内存方式传输1080p图像只需5ms,而TCP方式要30ms以上。示例代码里没提这个,是我看内核日志发现的优化点。
4. 实战中的调试技巧
4.1 网络诊断三板斧
当机器人突然失控时,我总结的排查顺序:
jtop看系统负载——排除算力瓶颈ping 192.168.1.1——检查基础网络rostopic hz /camera/image_raw——确认ROS通信质量
有次遇到图像卡顿,最后发现是WiFi信道干扰。用iw dev wlan0 scan看到周围有十几个AP,换到149信道后延迟立刻降了60%。
4.2 性能优化实招
禁用桌面环境能省下300MB内存:
sudo systemctl set-default multi-user.target但要注意这会导致VNC不能用,需要权衡。
还有个神操作:把swap分区移到U盘上。Nano的eMMC读写速度慢,换成USB3.0的U盘后,编译速度提升3倍。具体步骤:
sudo dd if=/dev/zero of=/media/unitree/swapfile bs=1M count=2048sudo mkswap /media/unitree/swapfile- 在/etc/fstab里添加挂载项
5. 进阶开发环境搭建
5.1 交叉编译环境配置
在x86电脑上搭建交叉编译工具链能极大提升效率。我用的配置:
FROM arm64v8/ubuntu:18.04 RUN apt-get update && apt-get install -y gcc-aarch64-linux-gnu COPY ./toolchain /opt/toolchain ENV PATH="/opt/toolchain/bin:${PATH}"编译时记得加-march=armv8-a参数,不然生成的代码效率低。
5.2 容器化部署方案
用Docker封装算法环境可以避免污染系统。但直接docker run会报错,需要额外参数:
docker run --runtime nvidia --privileged -v /dev:/dev特别注意摄像头设备要映射/dev/video0,否则SDK会报错。我打包好的镜像包含了PaddlePaddle 2.1.1和OpenCV 4.2,大小控制在1.2GB以内。
6. 避坑指南
- 千万别直接apt upgrade:有次升级内核后WiFi驱动挂了,最后重刷系统才解决
- 备份镜像很重要:用dd命令把整个系统备份到U盘,出问题10分钟恢复
- 慎用第三方驱动:装过某个显卡驱动导致开机黑屏,后来发现官方论坛早有警告
有个特别隐蔽的坑:Nano的USB3.0接口和WiFi共用总线,同时接摄像头和无线网卡会导致吞吐量暴跌。我的解决方案是把网卡插在USB2.0口,虽然理论速度慢,但实际更稳定。