部署指南 · 命令逐字照录

SONIC 安装与部署:先装 TensorRT,再构建

在 Unitree G1 上部署 SONIC 全身控制器是一次 C++ + TensorRT 构建,只有一条不可妥协的规则:先装精确版本的 TensorRT,再做别的。下面所有内容逐字摘自官方 Installation (Deployment)C++ Deployment Program Flow 文档。

前置要求

  • Ubuntu 20.04/22.04/24.04 或其他基于 Debian 的 Linux 发行版
  • CUDA Toolkit(用于 GPU 加速)
  • TensorRT(用于推理优化)——先装这个!
  • JetPack 6(用于板载部署)
  • Python 3.8+
  • 支持 LFS 的 Git

NVIDIA Developer 下载 TensorRT。这是部署侧的安装;训练有自己的一条路径——见 Training DataTraining 文档中的 Isaac Lab 设置。

TensorRT 版本(逐字)

平台TensorRT 版本
x86_64(桌面)10.13(必需)
Jetson / G1 板载 Orin10.7(必需;需要 JetPack 6——刷机指南
下载 TAR 包(不是 DEB 包),这样可以把 TensorRT 解压到任意位置。压缩包约 10 GB;可以考虑用 pv 监控进度:
sudo apt-get install -y pv
pv TensorRT-*.tar.gz | tar -xz -f -

把解压后的 TensorRT 移到 ~/TensorRT(或类似位置),并加入你的 ~/.bashrc

export TensorRT_ROOT=$HOME/TensorRT

安装前必读

危险:必须使用上面列出的精确 TensorRT 版本。使用不同的版本已知会产生错误的推理结果——规划器会输出错误的动作,可能导致危险的机器人行为。

这条警示照抄自官方文档。错误的 TensorRT 构建不会大声失败——它会静默劣化规划器输出,而在真机上这是安全问题,不是性能问题。

克隆仓库

git clone https://github.com/NVlabs/GR00T-WholeBodyControl.git
cd GR00T-WholeBodyControl
git lfs pull          # make sure all large files are fetched

仓库包含大型二进制资源(网格、ONNX 模型);git lfs pull 拉取真实字节而不是指针文件。完整的 LFS 指南(包括 MotionBricks checkpoint 的注意事项)在安装指南页

Native 开发(推荐)

优点:直接系统安装、构建更快、生产可用。前置要求:基本开发工具(cmake、git 等),以及如果你打算做基于 ROS2 的输入输出,还需要 ROS2(可选)。

G1 板载部署时,板载 Orin 必须升级到 JetPack 6 以支持 TensorRT。升级请按 刷机指南操作。

1 · 安装系统依赖

cd gear_sonic_deploy
chmod +x scripts/install_deps.sh
./scripts/install_deps.sh

2 · 设置环境

source scripts/setup_env.sh

设置脚本会自动配置 TensorRT 环境并设置所有必要路径。为了方便,可以把它加进你的 shell 配置:

echo "source $(pwd)/scripts/setup_env.sh" >> ~/.bashrc

3 · 构建项目

just build

其他 just 命令:just clean(清理构建产物)与 just --list(列出所有可用命令)。

Docker(ROS2 开发环境)

统一 Docker 环境,带 ROS2 Humble,支持 x86_64 与 Jetson 平台。

前置要求:已安装 Docker 且用户已加入 docker 组;宿主机上设置 TensorRT_ROOT 环境变量;Jetson:JetPack 6.1+(CUDA 12.6)。

# 1. Add user to docker group (one-time setup)
sudo usermod -aG docker $USER
newgrp docker

# 2. Set TensorRT path (add to ~/.bashrc for persistence)
export TensorRT_ROOT=/path/to/TensorRT

# 3. Launch container
cd gear_sonic_deploy
./docker/run-ros2-dev.sh

选项:

./docker/run-ros2-dev.sh               # Standard build (fast)
./docker/run-ros2-dev.sh --rebuild     # Force rebuild
./docker/run-ros2-dev.sh --with-opengl # Include OpenGL for visualization (RViz, Gazebo)

架构支持:x86_64 —— CUDA 12.4.1(需要 NVIDIA 驱动 550+);Jetson —— CUDA 12.6 宿主上的 CUDA 12.4.1 容器(向前兼容)。容器内:

source scripts/setup_env.sh # set up dependency
just build                  # Build
just --list                 # Show all commands

排错:如果报 "permission denied",确认你在 docker 组里;TensorRT 必须在启动容器前在宿主机上设置好;Jetson 先在宿主机运行 source scripts/setup_env.sh(设置 jetson_clocks)。

运行部署栈

C++ 部署二进制是 gear_sonic_deploy,通过 deploy.sh 启动。输入接口:keyboard | gamepad | gamepad_manager | zmq | zmq_manager | ros2 | manager;通过 --output-type zmq|ros2|all 发布输出。

cd gear_sonic_deploy
./deploy.sh --input-type zmq_manager real

仿真(MuJoCo)时改用 sim 参数——部署二进制连接仿真循环而不是真实硬件:

./deploy.sh --input-type zmq_manager sim
# Wait until you see "Init done"

默认部署使用默认 SONIC checkpoint。低延迟或 SONIC v1.1 checkpoint 时,把 deploy.sh 指向对应的模型前缀与观测配置(按模型卡对比页):

./deploy.sh \
--cp policy/low_latency/model \
--obs-config policy/low_latency/observation_config.yaml \
--input-type zmq_manager \
real

数据采集与 VLA 执行都构建在这个栈之上——见数据采集VLA 全流程

规划器 ONNX 文件

启用规划器模式时,运动学规划器与策略并行运行。它是一个 ONNX 模型,通过 --planner-file 传入(ROS2、gamepad_managerzmq_manager 规划器模式的必需项)。官方示例路径:

--planner-file planner/target_vel/V2/planner_sonic.onnx

在部署流程中,规划器生成目标动画(启用时),动作读取器为非规划器模式提供参考动作,策略推理在 TensorRT 上执行 encoder → decoder,结果通过 ZMQ 或 ROS2 发布。用 just run freq_test policy/example/model_step_000000.onnx 检查 ONNX 模型的输入输出信息——报告的频率不是 TensorRT 推理速度。VR 遥操作与 ZMQ 管理器模式见遥操作指南

安装与部署常见问题

为什么安装页坚持要精确的 TensorRT 版本?
官方文档带有一条危险警示:必须使用列出的精确 TensorRT 版本(x86_64 用 10.13,Jetson 配 JetPack 6 用 10.7)。使用其他版本会产生错误的推理结果——规划器会输出错误的动作,可能导致危险的机器人行为。
部署前需要把 G1 板载 Orin 刷成 JetPack 6 吗?
G1 板载部署时,官方文档要求先把板载 Orin 升级到 JetPack 6 以支持 TensorRT。刷机指南(docs/source/references/jetpack6.md)覆盖升级过程;Jetson 的 TensorRT 10.7 TAR 包依赖它。
Native 安装还是 Docker——该选哪个?
官方文档推荐 Native 开发:直接系统安装、构建更快、生产可用。Docker 镜像是 ROS2 开发环境(ROS2 Humble,支持 x86_64 与 Jetson)——打算做基于 ROS2 的输入输出时用它。两条路径在容器内/终端里跑相同的命令:source scripts/setup_env.sh,然后 just build。
deploy.sh 在真机上具体跑什么?
从 gear_sonic_deploy/ 运行 ./deploy.sh --input-type zmq_manager real 启动 C++ 部署栈:TensorRT 策略推理(encoder → decoder)加运动学规划器,输入输出走 ZMQ 管理器。仿真时同一个命令用 sim 参数代替 real,并配合 run_sim_loop.py。