change dir
This commit is contained in:
@@ -13,10 +13,28 @@
|
|||||||
| IsaacLab 源码 | `/opt/IsaacLab` | `v2.3.2` |
|
| IsaacLab 源码 | `/opt/IsaacLab` | `v2.3.2` |
|
||||||
| IsaacLab 训练与自带 MuJoCo 部署 | `/opt/go2_rl_robotlab` 的 `go1` 分支 | `f40874bc90c72264dbf46989d90e15a9715c1393` |
|
| IsaacLab 训练与自带 MuJoCo 部署 | `/opt/go2_rl_robotlab` 的 `go1` 分支 | `f40874bc90c72264dbf46989d90e15a9715c1393` |
|
||||||
| 自动化 sim2sim 评估 | `/opt/RoboGauge` 的 `go1` 分支 | `66d0eb9010dabc501c52a8b9e5ffb2149dbcb82b` |
|
| 自动化 sim2sim 评估 | `/opt/RoboGauge` 的 `go1` 分支 | `66d0eb9010dabc501c52a8b9e5ffb2149dbcb82b` |
|
||||||
| 独立 MuJoCo、ONNX、X5/S100 BPU 部署 | `/opt/go1_pro_deploy/deploy_45dim_rl_gym` | `22a13d6659c59e2793b08c767ab69d8fcc0a406b` |
|
| 独立 MuJoCo、ONNX、X5/S100 BPU 部署 | `/opt/go1_deploy/deploy_rl_lab` | `22a13d6659c59e2793b08c767ab69d8fcc0a406b` |
|
||||||
| 官方公开 SDK | [unitree_legged_sdk](https://github.com/unitreerobotics/unitree_legged_sdk) |
|
| 官方公开 SDK | [unitree_legged_sdk](https://github.com/unitreerobotics/unitree_legged_sdk) |
|
||||||
| 私有 Go1 PRO SDK | 仅在内部部署机使用,本文不公开协议、密钥和专有接口 |
|
| 私有 Go1 PRO SDK | 仅在内部部署机使用,本文不公开协议、密钥和专有接口 |
|
||||||
|
|
||||||
|
当前交付镜像只保留 RobotLab 版本,部署目录结构固定为:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/opt/go1_deploy/
|
||||||
|
deploy_rl_lab/
|
||||||
|
policy_robotlab_26000.onnx
|
||||||
|
deploy_go1_onnx_mujoco_lab.py
|
||||||
|
deploy_go1_rlgym_pro_sdk_lab.py
|
||||||
|
deploy_go1_rlgym_pro_sdk_lab_fastcpp.py
|
||||||
|
bpu_quantization/
|
||||||
|
bpu_deploy_x5/
|
||||||
|
bpu_deploy_s100/
|
||||||
|
terrains/
|
||||||
|
logs/
|
||||||
|
```
|
||||||
|
|
||||||
|
已删除的 `deploy_45dim/`、`deploy_wtw/`、`sim2sim_mujoco_example/` 和旧 Gym/旧轮次 ONNX 不属于交付结构,本文不再引用。量化机、训练镜像和板端分别使用 `/opt/go1_deploy` 与 `/root/go1_deploy` 作为仓库根目录,子目录均为 `deploy_rl_lab`。
|
||||||
|
|
||||||
本文有两条使用路径:
|
本文有两条使用路径:
|
||||||
|
|
||||||
- **路径 A,直接使用交付镜像**:不要重新 clone 或重新安装,使用 `/opt` 下的固定目录和解释器。
|
- **路径 A,直接使用交付镜像**:不要重新 clone 或重新安装,使用 `/opt` 下的固定目录和解释器。
|
||||||
@@ -34,7 +52,7 @@ X5 模型: policy_robotlab_26000_int16_gemm.bin
|
|||||||
S100 模型: policy_robotlab_26000_s100_int16_gemm.hbm
|
S100 模型: policy_robotlab_26000_s100_int16_gemm.hbm
|
||||||
```
|
```
|
||||||
|
|
||||||
训练目录中的导出文件会保留课程阶段。量化脚本使用 `--name policy_robotlab_26000` 时会生成上面的 X5/S100 短名称;TorchScript/ONNX 是否另存为不带课程后缀的别名必须在发布记录中明确。26000 只是当前均衡基线,不表示轮数越大一定越好。若任务以上楼梯为主,应同时保留 15000 和 26000;若以平地高速或下楼梯为主,可继续比较 33500。最终模型仍应根据多 seed RoboGauge、MuJoCo 回放和真机日志共同选择。
|
训练目录仍可保留不同课程阶段的 checkpoint 用于比较,但交付目录只保留最终选定的 26000 版本。量化脚本使用 `--name policy_robotlab_26000` 时会生成上面的 X5/S100 名称。26000 只是当前均衡基线,不表示轮数越大一定越好;更换发布 checkpoint 时,应重新导出 ONNX 并完整执行 RoboGauge、MuJoCo 和量化验收,而不是把多个旧 ONNX 一并放入交付目录。
|
||||||
|
|
||||||
### 1.2 全流程
|
### 1.2 全流程
|
||||||
|
|
||||||
@@ -141,7 +159,7 @@ sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker image inspect registr
|
|||||||
/opt/IsaacLab
|
/opt/IsaacLab
|
||||||
/opt/go2_rl_robotlab
|
/opt/go2_rl_robotlab
|
||||||
/opt/RoboGauge
|
/opt/RoboGauge
|
||||||
/opt/go1_pro_deploy
|
/opt/go1_deploy
|
||||||
/opt/envs/go2_rl_robotlab
|
/opt/envs/go2_rl_robotlab
|
||||||
/opt/envs/robogauge
|
/opt/envs/robogauge
|
||||||
```
|
```
|
||||||
@@ -155,7 +173,9 @@ export MPLCONFIGDIR=/tmp/robogauge-matplotlib
|
|||||||
test -d /opt/IsaacLab
|
test -d /opt/IsaacLab
|
||||||
test -d /opt/go2_rl_robotlab
|
test -d /opt/go2_rl_robotlab
|
||||||
test -d /opt/RoboGauge
|
test -d /opt/RoboGauge
|
||||||
test -d /opt/go1_pro_deploy
|
test -d /opt/go1_deploy
|
||||||
|
test -d /opt/go1_deploy/deploy_rl_lab
|
||||||
|
test -f /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx
|
||||||
test -x /opt/envs/go2_rl_robotlab/bin/python
|
test -x /opt/envs/go2_rl_robotlab/bin/python
|
||||||
test -x /opt/envs/robogauge/bin/python
|
test -x /opt/envs/robogauge/bin/python
|
||||||
nvidia-smi
|
nvidia-smi
|
||||||
@@ -179,7 +199,7 @@ export OMNI_KIT_ACCEPT_EULA=YES
|
|||||||
/opt/go2_rl_robotlab/outputs
|
/opt/go2_rl_robotlab/outputs
|
||||||
/opt/RoboGauge/logs
|
/opt/RoboGauge/logs
|
||||||
/opt/RoboGauge/outputs
|
/opt/RoboGauge/outputs
|
||||||
/opt/go1_pro_deploy/logs
|
/opt/go1_deploy/logs
|
||||||
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache
|
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache
|
||||||
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data
|
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data
|
||||||
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs
|
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs
|
||||||
@@ -191,13 +211,13 @@ Dockerfile 中应使用交付镜像的实际运行 UID/GID(下面的 `APP_UID/
|
|||||||
```dockerfile
|
```dockerfile
|
||||||
RUN install -d -m 0775 /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs \
|
RUN install -d -m 0775 /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs \
|
||||||
/opt/RoboGauge/logs /opt/RoboGauge/outputs \
|
/opt/RoboGauge/logs /opt/RoboGauge/outputs \
|
||||||
/opt/go1_pro_deploy/logs \
|
/opt/go1_deploy/logs \
|
||||||
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache \
|
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache \
|
||||||
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data \
|
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data \
|
||||||
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs \
|
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs \
|
||||||
&& chown -R ${APP_UID}:${APP_GID} /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs \
|
&& chown -R ${APP_UID}:${APP_GID} /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs \
|
||||||
/opt/RoboGauge/logs /opt/RoboGauge/outputs \
|
/opt/RoboGauge/logs /opt/RoboGauge/outputs \
|
||||||
/opt/go1_pro_deploy/logs \
|
/opt/go1_deploy/logs \
|
||||||
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache \
|
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache \
|
||||||
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data \
|
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data \
|
||||||
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs
|
/opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs
|
||||||
@@ -210,7 +230,7 @@ test -w /opt/go2_rl_robotlab/logs
|
|||||||
test -w /opt/go2_rl_robotlab/outputs
|
test -w /opt/go2_rl_robotlab/outputs
|
||||||
test -w /opt/RoboGauge/logs
|
test -w /opt/RoboGauge/logs
|
||||||
test -w /opt/RoboGauge/outputs
|
test -w /opt/RoboGauge/outputs
|
||||||
test -w /opt/go1_pro_deploy/logs
|
test -w /opt/go1_deploy/logs
|
||||||
test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache
|
test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/cache
|
||||||
test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data
|
test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/data
|
||||||
test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs
|
test -w /opt/envs/go2_rl_robotlab/lib/python3.11/site-packages/isaacsim/kit/logs
|
||||||
@@ -252,7 +272,7 @@ find /opt/go2_rl_robotlab/logs/rsl_rl/go1_moe_cts -path '*image_direct_1iter*' -
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo install -d -o "$USER" -g "$(id -gn)" /opt/envs /opt/IsaacLab
|
sudo install -d -o "$USER" -g "$(id -gn)" /opt/envs /opt/IsaacLab
|
||||||
sudo install -d -o "$USER" -g "$(id -gn)" /opt/go2_rl_robotlab /opt/RoboGauge /opt/go1_pro_deploy
|
sudo install -d -o "$USER" -g "$(id -gn)" /opt/go2_rl_robotlab /opt/RoboGauge /opt/go1_deploy
|
||||||
|
|
||||||
conda create --prefix /opt/envs/go2_rl_robotlab python=3.11 -y
|
conda create --prefix /opt/envs/go2_rl_robotlab python=3.11 -y
|
||||||
conda activate /opt/envs/go2_rl_robotlab
|
conda activate /opt/envs/go2_rl_robotlab
|
||||||
@@ -268,7 +288,7 @@ python -m pip install torch==2.7.0 torchvision==0.22.0 --index-url https://downl
|
|||||||
git clone --branch v2.3.2 --depth 1 https://github.com/isaac-sim/IsaacLab.git /opt/IsaacLab
|
git clone --branch v2.3.2 --depth 1 https://github.com/isaac-sim/IsaacLab.git /opt/IsaacLab
|
||||||
git clone --branch go1 --single-branch https://gitea.qingruxu.xyz/cyy/go2_rl_robotlab.git /opt/go2_rl_robotlab
|
git clone --branch go1 --single-branch https://gitea.qingruxu.xyz/cyy/go2_rl_robotlab.git /opt/go2_rl_robotlab
|
||||||
git clone --branch go1 --single-branch https://gitea.qingruxu.xyz/cyy/RoboGauge.git /opt/RoboGauge
|
git clone --branch go1 --single-branch https://gitea.qingruxu.xyz/cyy/RoboGauge.git /opt/RoboGauge
|
||||||
git clone --branch main --single-branch https://gitea.qingruxu.xyz/cyy/go1_pro_deploy.git /opt/go1_pro_deploy
|
git clone --branch main --single-branch https://gitea.qingruxu.xyz/cyy/go1_pro_deploy.git /opt/go1_deploy
|
||||||
|
|
||||||
cd /opt/go2_rl_robotlab
|
cd /opt/go2_rl_robotlab
|
||||||
|
|
||||||
@@ -292,7 +312,7 @@ python -m pip install -e /opt/RoboGauge
|
|||||||
```bash
|
```bash
|
||||||
sudo install -d -o "$USER" -g "$(id -gn)" /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs
|
sudo install -d -o "$USER" -g "$(id -gn)" /opt/go2_rl_robotlab/logs /opt/go2_rl_robotlab/outputs
|
||||||
sudo install -d -o "$USER" -g "$(id -gn)" /opt/RoboGauge/logs /opt/RoboGauge/outputs
|
sudo install -d -o "$USER" -g "$(id -gn)" /opt/RoboGauge/logs /opt/RoboGauge/outputs
|
||||||
sudo install -d -o "$USER" -g "$(id -gn)" /opt/go1_pro_deploy/logs
|
sudo install -d -o "$USER" -g "$(id -gn)" /opt/go1_deploy/logs
|
||||||
```
|
```
|
||||||
|
|
||||||
记录环境,便于在部署前复现:
|
记录环境,便于在部署前复现:
|
||||||
@@ -573,7 +593,7 @@ OMNI_KIT_ACCEPT_EULA=YES /opt/envs/go2_rl_robotlab/bin/python scripts/rsl_rl/pla
|
|||||||
同一 run 下再次导出会覆盖这两个通用文件名。必须在切换到下一个 checkpoint 前复制并带上轮次、课程阶段;导出文件完整写入后才能终止 play:
|
同一 run 下再次导出会覆盖这两个通用文件名。必须在切换到下一个 checkpoint 前复制并带上轮次、课程阶段;导出文件完整写入后才能终止 play:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp <RUN_DIR>/exported/policy.onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx
|
cp <RUN_DIR>/exported/policy.onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx
|
||||||
cp <RUN_DIR>/exported/policy.onnx /opt/RoboGauge/resources/models/go1/policy_robotlab_26000_post_command_curriculum.onnx
|
cp <RUN_DIR>/exported/policy.onnx /opt/RoboGauge/resources/models/go1/policy_robotlab_26000_post_command_curriculum.onnx
|
||||||
cp <RUN_DIR>/exported/policy.pt /opt/RoboGauge/resources/models/go1/policy_robotlab_26000_post_command_curriculum.pt
|
cp <RUN_DIR>/exported/policy.pt /opt/RoboGauge/resources/models/go1/policy_robotlab_26000_post_command_curriculum.pt
|
||||||
```
|
```
|
||||||
@@ -603,10 +623,10 @@ OMNI_KIT_ACCEPT_EULA=YES CUDA_VISIBLE_DEVICES=1 /opt/envs/go2_rl_robotlab/bin/py
|
|||||||
### 8.3 检查 ONNX 接口
|
### 8.3 检查 ONNX 接口
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
/opt/envs/go2_rl_robotlab/bin/python -c "import onnx, onnxruntime as ort; p='/opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx'; onnx.checker.check_model(onnx.load(p)); s=ort.InferenceSession(p, providers=['CPUExecutionProvider']); print([(x.name,x.shape,x.type) for x in s.get_inputs()]); print([(x.name,x.shape,x.type) for x in s.get_outputs()])"
|
/opt/envs/go2_rl_robotlab/bin/python -c "import onnx, onnxruntime as ort; p='/opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx'; onnx.checker.check_model(onnx.load(p)); s=ort.InferenceSession(p, providers=['CPUExecutionProvider']); print([(x.name,x.shape,x.type) for x in s.get_inputs()]); print([(x.name,x.shape,x.type) for x in s.get_outputs()])"
|
||||||
```
|
```
|
||||||
|
|
||||||
预期 ONNX 输入为 `obs: [1, 450] float32`,输出为 `actions: [1, 12] float32`。本次导出的 19500、26000 和 33500 ONNX 均已通过 `onnx.checker.check_model()`。输入输出不匹配时不要继续 sim2sim 或量化。
|
预期 ONNX 输入为 `obs: [1, 450] float32`,输出为 `actions: [1, 12] float32`。当前交付的 26000 ONNX 已通过 `onnx.checker.check_model()`。输入输出不匹配时不要继续 sim2sim 或量化。
|
||||||
|
|
||||||
### 8.4 独立 MuJoCo 快速检查
|
### 8.4 独立 MuJoCo 快速检查
|
||||||
|
|
||||||
@@ -615,12 +635,12 @@ OMNI_KIT_ACCEPT_EULA=YES CUDA_VISIBLE_DEVICES=1 /opt/envs/go2_rl_robotlab/bin/py
|
|||||||
Linux 不需要 `mjpython`;它主要用于 macOS 的 MuJoCo 图形启动。镜像中用绝对 ONNX 路径执行非交互采样。该脚本会在加载模型前切换工作目录,相对 ONNX 路径可能因此失效:
|
Linux 不需要 `mjpython`;它主要用于 macOS 的 MuJoCo 图形启动。镜像中用绝对 ONNX 路径执行非交互采样。该脚本会在加载模型前切换工作目录,相对 ONNX 路径可能因此失效:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/go1_pro_deploy/deploy_45dim_rl_gym
|
cd /opt/go1_deploy/deploy_rl_lab
|
||||||
env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
||||||
--onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx \
|
--onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx \
|
||||||
--sample \
|
--sample \
|
||||||
--sample-seconds 1 \
|
--sample-seconds 1 \
|
||||||
--sample-log-dir /opt/go1_pro_deploy/logs
|
--sample-log-dir /opt/go1_deploy/logs
|
||||||
```
|
```
|
||||||
|
|
||||||
采样目录名固定以 `mujoco_stairs_sample_` 开头,用于保存独立 MuJoCo ONNX 推理检查日志;PTQ 使用第 11 节的正式 64 样本校验集。
|
采样目录名固定以 `mujoco_stairs_sample_` 开头,用于保存独立 MuJoCo ONNX 推理检查日志;PTQ 使用第 11 节的正式 64 样本校验集。
|
||||||
@@ -629,10 +649,10 @@ env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
env -u MUJOCO_GL /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
||||||
--onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx \
|
--onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx \
|
||||||
--sample-stairs-level 3 \
|
--sample-stairs-level 3 \
|
||||||
--sample-seconds 20 \
|
--sample-seconds 20 \
|
||||||
--sample-log-dir /opt/go1_pro_deploy/logs \
|
--sample-log-dir /opt/go1_deploy/logs \
|
||||||
--spawn-x -0.6 \
|
--spawn-x -0.6 \
|
||||||
--spawn-z 0.34
|
--spawn-z 0.34
|
||||||
```
|
```
|
||||||
@@ -799,13 +819,13 @@ task_name="go1_lab.flat"
|
|||||||
|
|
||||||
## 10. 独立 MuJoCo sim2sim
|
## 10. 独立 MuJoCo sim2sim
|
||||||
|
|
||||||
这里推荐使用 `go1_pro_deploy/deploy_45dim_rl_gym/deploy_go1_onnx_mujoco_lab.py`,因为它与 RobotLab 的 10 帧/450 维 ONNX 接口一致。
|
这里推荐使用 `/opt/go1_deploy/deploy_rl_lab/deploy_go1_onnx_mujoco_lab.py`,因为它与 Lab 的 10 帧/450 维 ONNX 接口一致。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/go1_pro_deploy/deploy_45dim_rl_gym
|
cd /opt/go1_deploy/deploy_rl_lab
|
||||||
|
|
||||||
MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
||||||
--onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx
|
--onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx
|
||||||
```
|
```
|
||||||
|
|
||||||
这是带窗口和键盘的交互命令,需要可用的 X11/桌面。Linux 使用普通 `python`;只有 macOS 才通常需要 `mjpython`。脚本内部会 `chdir` 到自身目录,因此 `--onnx` 使用绝对路径。无图形环境应使用 8.4 节的 `--sample` 命令。
|
这是带窗口和键盘的交互命令,需要可用的 X11/桌面。Linux 使用普通 `python`;只有 macOS 才通常需要 `mjpython`。脚本内部会 `chdir` 到自身目录,因此 `--onnx` 使用绝对路径。无图形环境应使用 8.4 节的 `--sample` 命令。
|
||||||
@@ -814,8 +834,8 @@ MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
MUJOCO_GL=glfw /opt/envs/robogauge/bin/python deploy_go1_onnx_mujoco_lab.py \
|
||||||
--onnx /opt/go1_pro_deploy/deploy_45dim_rl_gym/policy_robotlab_26000.onnx \
|
--onnx /opt/go1_deploy/deploy_rl_lab/policy_robotlab_26000.onnx \
|
||||||
--terrain /opt/go1_pro_deploy/deploy_45dim_rl_gym/terrains/stairs/stairs_3.xml \
|
--terrain /opt/go1_deploy/deploy_rl_lab/terrains/stairs/stairs_3.xml \
|
||||||
--spawn-x -0.6 \
|
--spawn-x -0.6 \
|
||||||
--spawn-z 0.34
|
--spawn-z 0.34
|
||||||
```
|
```
|
||||||
@@ -854,13 +874,15 @@ BPU 量化不是把 ONNX 改一个后缀。至少需要:
|
|||||||
当前 26000 模型使用 `calibration_data_26000_robotlab_fast64/` 中的 64 个 PTQ 校验样本。这批数据来自 ONNX 推理流程,不是 X5 量化产生的模型 `.bin`。需要重新生成时,先检查供 `make_calibration_data.py` 使用的 ONNX 推理日志:
|
当前 26000 模型使用 `calibration_data_26000_robotlab_fast64/` 中的 64 个 PTQ 校验样本。这批数据来自 ONNX 推理流程,不是 X5 量化产生的模型 `.bin`。需要重新生成时,先检查供 `make_calibration_data.py` 使用的 ONNX 推理日志:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
find /opt/go1_pro_deploy/logs \
|
find /opt/go1_deploy/logs \
|
||||||
-path '*/robotlab_go1_deploy_*/steps.jsonl' \
|
-path '*/robotlab_go1_deploy_*/steps.jsonl' \
|
||||||
-type f -print
|
-type f -print
|
||||||
```
|
```
|
||||||
|
|
||||||
`make_calibration_data.py` 读取日志中的 `mode: RL` 和 45 维 `obs_single`,按部署顺序重建 10 帧/450 维历史,并写出工具链所需的 raw float32 校准输入 `.bin`。这里的 `.bin` 是 PTQ 输入文件;X5 编译完成后生成的模型也使用 `.bin` 后缀,但两者用途完全不同。脚本找不到匹配日志或有效样本不足时会中止,不会绕过数据准备继续编译。
|
`make_calibration_data.py` 读取日志中的 `mode: RL` 和 45 维 `obs_single`,按部署顺序重建 10 帧/450 维历史,并写出工具链所需的 raw float32 校准输入 `.bin`。这里的 `.bin` 是 PTQ 输入文件;X5 编译完成后生成的模型也使用 `.bin` 后缀,但两者用途完全不同。脚本找不到匹配日志或有效样本不足时会中止,不会绕过数据准备继续编译。
|
||||||
|
|
||||||
|
路径 A 已随镜像提供 `calibration_data_26000_robotlab_fast64/`。量化脚本检测到目录中恰好有 64 个 `.bin` 时直接复用;路径 B 或样本数量不匹配时,才从上述 ONNX 推理日志重新生成。
|
||||||
|
|
||||||
当前量化脚本会保留 actions 输出、降级 opset、包装为 BPU 需要的 4D 输入,并把 MoE grouped Conv 等价替换为 Gemm,以减少 CPU fallback。中间 norm 节点位于 actor 之前,不能随意删除或移到后处理。
|
当前量化脚本会保留 actions 输出、降级 opset、包装为 BPU 需要的 4D 输入,并把 MoE grouped Conv 等价替换为 Gemm,以减少 CPU fallback。中间 norm 节点位于 actor 之前,不能随意删除或移到后处理。
|
||||||
|
|
||||||
量化脚本内部流程如下:
|
量化脚本内部流程如下:
|
||||||
@@ -881,19 +903,19 @@ ONNX 推理流程日志 steps.jsonl
|
|||||||
| 参数 | 含义 | 常用设置 |
|
| 参数 | 含义 | 常用设置 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `--policy` | 原始 ONNX 路径,必须在部署仓库内 | `../policy_robotlab_26000.onnx` |
|
| `--policy` | 原始 ONNX 路径,必须在部署仓库内 | `../policy_robotlab_26000.onnx` |
|
||||||
| `--round` | 输出目录和校准目录里的轮次标签,不参与计算 | `26000`、`35k` |
|
| `--round` | 输出目录和校准目录里的轮次标签,不参与计算 | `26000` |
|
||||||
| `--name` | 输出模型 basename;不填时取 ONNX 文件名 | `policy_robotlab_26000` |
|
| `--name` | 输出模型 basename;不填时取 ONNX 文件名 | `policy_robotlab_26000` |
|
||||||
| `--history-len` | 历史帧数,用于重建输入维度 | RobotLab 为 `10`,Gym 为 `5` |
|
| `--history-len` | 历史帧数,用于重建输入维度 | Lab 固定为 `10` |
|
||||||
| `--flat-dim` | 平铺输入维度;不填时为 `45 * history-len` | RobotLab 为 `450`,Gym 为 `225` |
|
| `--flat-dim` | 平铺输入维度;不填时为 `45 * history-len` | Lab 固定为 `450` |
|
||||||
| `--samples` | 校准样本数量,越大越慢但覆盖更稳 | 默认 `64`,必要时 `128` |
|
| `--samples` | 校准样本数量,越大越慢但覆盖更稳 | 默认 `64`,必要时 `128` |
|
||||||
| `--min-samples` | 最少有效样本数,不足则中止 | 默认 `32` |
|
| `--min-samples` | 最少有效样本数,不足则中止 | 默认 `32` |
|
||||||
| `--log-prefix` | 从 `logs/` 下筛选 ONNX 推理日志的目录前缀 | `robotlab_go1_deploy` |
|
| `--log-prefix` | 从 `logs/` 下筛选 ONNX 推理日志的目录前缀 | `robotlab_go1_deploy` |
|
||||||
| `--cal-tag` | 校准目录标签,区分 RobotLab/Gym | `robotlab`、`gym` |
|
| `--cal-tag` | 校准目录标签 | `robotlab` |
|
||||||
| `--compare-limit` | 浮点 ONNX 等价对比样本数 | 默认 `64` |
|
| `--compare-limit` | 浮点 ONNX 等价对比样本数 | 默认 `64` |
|
||||||
| `--quant` | 量化策略 | 默认 `int16`,`int8` 仅作对照 |
|
| `--quant` | 量化策略 | 默认 `int16`,`int8` 仅作对照 |
|
||||||
| `--docker-image` | D-Robotics CPU 工具链镜像 | X5/S100 各自不同 |
|
| `--docker-image` | D-Robotics CPU 工具链镜像 | X5/S100 各自不同 |
|
||||||
|
|
||||||
量化建议在 Mac 或训练机的 Docker 中完成,不在 X5/S100 板端跑 Docker。本文训练/量化主机的仓库固定为 `/opt/go1_pro_deploy`;板端只负责加载产物做离线测速、数值对齐和实机部署。
|
量化建议在 Mac 或训练机的 Docker 中完成,不在 X5/S100 板端跑 Docker。本文训练/量化主机的仓库固定为 `/opt/go1_deploy`;板端只负责加载产物做离线测速、数值对齐和实机部署。
|
||||||
|
|
||||||
量化脚本内部直接调用 `docker`。运行 X5/S100 脚本前先验收 daemon:
|
量化脚本内部直接调用 `docker`。运行 X5/S100 脚本前先验收 daemon:
|
||||||
|
|
||||||
@@ -912,13 +934,13 @@ sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker load \
|
|||||||
# sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker pull openexplorer/ai_toolchain_ubuntu_20_x5_cpu:v1.2.8
|
# sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker pull openexplorer/ai_toolchain_ubuntu_20_x5_cpu:v1.2.8
|
||||||
```
|
```
|
||||||
|
|
||||||
脚本默认会用 `docker run --rm --platform linux/amd64` 启动这个镜像,并把当前仓库挂载到 `/workspace/deploy_go1_pro`。量化机执行:
|
脚本默认会用 `docker run --rm --platform linux/amd64` 启动这个镜像,并把当前仓库挂载到容器内 `/workspace/go1_deploy`。量化机执行:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/go1_pro_deploy
|
cd /opt/go1_deploy
|
||||||
|
|
||||||
sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \
|
sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \
|
||||||
bash deploy_45dim_rl_gym/bpu_quantization/quantize_policy_x5.sh \
|
bash deploy_rl_lab/bpu_quantization/quantize_policy_x5.sh \
|
||||||
--policy ../policy_robotlab_26000.onnx \
|
--policy ../policy_robotlab_26000.onnx \
|
||||||
--round 26000 \
|
--round 26000 \
|
||||||
--name policy_robotlab_26000 \
|
--name policy_robotlab_26000 \
|
||||||
@@ -939,29 +961,16 @@ X5 关键配置:
|
|||||||
- int16 时脚本在 YAML 中写入 `optimization: "set_all_nodes_int16"`。
|
- int16 时脚本在 YAML 中写入 `optimization: "set_all_nodes_int16"`。
|
||||||
- `hb_mapper checker` 默认会先运行;明确知道模型已检查过时才使用 `--skip-checker`。
|
- `hb_mapper checker` 默认会先运行;明确知道模型已检查过时才使用 `--skip-checker`。
|
||||||
|
|
||||||
如果要量化旧 Gym 5 帧模型,必须同步修改历史长度、日志前缀和标签:
|
以下是 **RDK X5 目标板** 命令。板端软件按交付约定安装在 `/root/go1_deploy`;这是硬件系统路径,不是训练/量化镜像路径,也不应复制回 `/opt` 镜像执行:
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \
|
|
||||||
bash deploy_45dim_rl_gym/bpu_quantization/quantize_policy_x5.sh \
|
|
||||||
--policy ../policy_35k.onnx \
|
|
||||||
--round 35k \
|
|
||||||
--history-len 5 \
|
|
||||||
--log-prefix rlgym_go1_deploy \
|
|
||||||
--cal-tag gym \
|
|
||||||
--quant int16
|
|
||||||
```
|
|
||||||
|
|
||||||
以下是 **RDK X5 目标板** 命令。板端软件按交付约定安装在 `/root/go1_pro_deploy`;这是硬件系统路径,不是训练/量化镜像路径,也不应复制回 `/opt` 镜像执行:
|
|
||||||
|
|
||||||
板端先做完全离线自检,不连接电机控制:
|
板端先做完全离线自检,不连接电机控制:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /root/go1_pro_deploy
|
cd /root/go1_deploy
|
||||||
PYTHONPATH=/root/go1_pro_deploy \
|
PYTHONPATH=/root/go1_deploy \
|
||||||
python3 deploy_45dim_rl_gym/bpu_deploy_x5/test_bpu_policy.py \
|
python3 deploy_rl_lab/bpu_deploy_x5/test_bpu_policy.py \
|
||||||
--bpu-model deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_gemm/policy_robotlab_26000_int16_gemm.bin \
|
--bpu-model deploy_rl_lab/bpu_quantization/mapper_output_26000_gemm/policy_robotlab_26000_int16_gemm.bin \
|
||||||
--input-bin deploy_45dim_rl_gym/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \
|
--input-bin deploy_rl_lab/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \
|
||||||
--repeat 1000
|
--repeat 1000
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -981,10 +990,10 @@ sudo /opt/envs/go2_rl_robotlab/docker-toolchain/bin/docker load \
|
|||||||
脚本同样在量化机 Docker 中运行,不在 S100 板端运行 Docker:
|
脚本同样在量化机 Docker 中运行,不在 S100 板端运行 Docker:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /opt/go1_pro_deploy
|
cd /opt/go1_deploy
|
||||||
|
|
||||||
sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \
|
sudo env PATH=/opt/envs/go2_rl_robotlab/docker-toolchain/bin:${PATH} \
|
||||||
bash deploy_45dim_rl_gym/bpu_quantization/quantize_policy_s100.sh \
|
bash deploy_rl_lab/bpu_quantization/quantize_policy_s100.sh \
|
||||||
--policy ../policy_robotlab_26000.onnx \
|
--policy ../policy_robotlab_26000.onnx \
|
||||||
--round 26000 \
|
--round 26000 \
|
||||||
--name policy_robotlab_26000 \
|
--name policy_robotlab_26000 \
|
||||||
@@ -1010,16 +1019,16 @@ S100 关键配置:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
/usr/hobot/bin/hrt_model_exec model_info \
|
/usr/hobot/bin/hrt_model_exec model_info \
|
||||||
--model_file deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm
|
--model_file deploy_rl_lab/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm
|
||||||
```
|
```
|
||||||
|
|
||||||
板端测速:
|
板端测速:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
/usr/hobot/bin/hrt_model_exec perf \
|
/usr/hobot/bin/hrt_model_exec perf \
|
||||||
--model_file deploy_45dim_rl_gym/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm \
|
--model_file deploy_rl_lab/bpu_quantization/mapper_output_26000_s100_gemm/policy_robotlab_26000_s100_int16_gemm.hbm \
|
||||||
--model_name policy_robotlab_26000_s100_int16_gemm \
|
--model_name policy_robotlab_26000_s100_int16_gemm \
|
||||||
--input_file deploy_45dim_rl_gym/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \
|
--input_file deploy_rl_lab/bpu_quantization/calibration_data_26000_robotlab_fast64/00000.bin \
|
||||||
--frame_count 1000 \
|
--frame_count 1000 \
|
||||||
--thread_num 1
|
--thread_num 1
|
||||||
```
|
```
|
||||||
@@ -1169,9 +1178,9 @@ pgrep -fl 'keep_sport_alive|Legged_sport|appTransit'
|
|||||||
X5 示例:
|
X5 示例:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /root/go1_pro_deploy
|
cd /root/go1_deploy
|
||||||
PYTHONPATH=/root/go1_pro_sdk:/root/go1_pro_deploy \
|
PYTHONPATH=/root/go1_pro_sdk:/root/go1_deploy \
|
||||||
python3 deploy_45dim_rl_gym/bpu_deploy_x5/deploy_go1_robotlab_bpu_x5_fastcpp.py \
|
python3 deploy_rl_lab/bpu_deploy_x5/deploy_go1_robotlab_bpu_x5_fastcpp.py \
|
||||||
--infer-check \
|
--infer-check \
|
||||||
--log-dir logs \
|
--log-dir logs \
|
||||||
--print-every 50 \
|
--print-every 50 \
|
||||||
@@ -1182,9 +1191,9 @@ python3 deploy_45dim_rl_gym/bpu_deploy_x5/deploy_go1_robotlab_bpu_x5_fastcpp.py
|
|||||||
S100 示例:
|
S100 示例:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /root/go1_pro_deploy
|
cd /root/go1_deploy
|
||||||
PYTHONPATH=/root/go1_pro_sdk:/root/go1_pro_deploy \
|
PYTHONPATH=/root/go1_pro_sdk:/root/go1_deploy \
|
||||||
python3 deploy_45dim_rl_gym/bpu_deploy_s100/deploy_go1_robotlab_bpu_s100_fastcpp.py \
|
python3 deploy_rl_lab/bpu_deploy_s100/deploy_go1_robotlab_bpu_s100_fastcpp.py \
|
||||||
--infer-check \
|
--infer-check \
|
||||||
--log-dir logs \
|
--log-dir logs \
|
||||||
--print-every 50 \
|
--print-every 50 \
|
||||||
@@ -1349,7 +1358,3 @@ loop_dt_ms / recv_ms / policy_ms / work_ms / state_fresh / state_age_ms
|
|||||||
- [Unitree unitree_legged_sdk](https://github.com/unitreerobotics/unitree_legged_sdk)
|
- [Unitree unitree_legged_sdk](https://github.com/unitreerobotics/unitree_legged_sdk)
|
||||||
- 本地 `go2_rl_robotlab/docs/go1.md`
|
- 本地 `go2_rl_robotlab/docs/go1.md`
|
||||||
- 本地 `RoboGauge/assets/docs/go1_policy_io_zh.md`
|
- 本地 `RoboGauge/assets/docs/go1_policy_io_zh.md`
|
||||||
- 本地 `go1_pro_deploy/deploy_45dim_rl_gym/README.md`
|
|
||||||
- 本地 `go1_pro_deploy/deploy_45dim_rl_gym/bpu_quantization/README.md`
|
|
||||||
- 本地 `go1_pro_deploy/deploy_45dim_rl_gym/bpu_deploy_x5/README.md`
|
|
||||||
- 本地 `go1_pro_deploy/deploy_45dim_rl_gym/bpu_deploy_s100/README.md`
|
|
||||||
|
|||||||
Reference in New Issue
Block a user