莫凤:提交变更
Open Environment Resilience Runtime for Humanoid Robots
OpenER-G1 面向开放、动态和非结构化环境中的人形机器人持续可靠运行,集成 CAT-VLA、Click-and-Traverse、NVIDIA GR00T-N1.7、SONIC Whole-Body Control、MuJoCo、DDS 与 ZMQ,构建从环境理解、策略选择、障碍穿越、到达确认、控制权交接到 VLA 技能执行的完整机器人闭环。
项目采用分层设计:复杂空间穿越由专用强化学习策略负责,视觉-语言-动作任务由 GR00T-N1.7 与 SONIC 完成,并通过运行时 Handover 机制协调不同控制器之间的安全切换。
Click-and-Traverse/cat_vla 提供四种环境理解与策略路由方式:
Click-and-Traverse/cat_vla
keyword
llm
vla-lite
scan
当前 CAT 策略覆盖地面障碍、顶部障碍、狭窄通道及组合约束,例如:
hurdle crouch side side_hurdle side_crouch all_easy all_hard
Click-and-Traverse 提供 CAT 强化学习策略的训练、ONNX 转换、MuJoCo 评估与 DDS 部署流程:
PPO / DAgger ↓ Policy Checkpoint ↓ ONNX ↓ MuJoCo Evaluation ↓ DDS Deployment
部署后形成闭环:
rt/lowstate ↓ CAT Policy ↓ rt/lowcmd ↓ G1 Robot
GR00T-N1.7 根据:
Camera + Robot State + Prompt
生成 Action Chunk,并交由 SONIC Whole-Body Control 转换为 G1 全身控制指令。
当前可用于验证:
squat lunge dance macarena walk jump kick
CAT 与 SONIC 都可能向 rt/lowcmd 发布控制命令,因此不能长期同时控制机器人。
rt/lowcmd
项目实现运行时 Handover:
CAT Traversal ↓ Goal Reached ↓ Stable Hold ↓ SONIC Starts ↓ Runtime Monitoring ↓ CAT Releases Control ↓ SONIC Exclusive Control ↓ VLA Skill
CAT 到达目标后继续保持机器人平衡,并监测控制总线活动。当检测到 SONIC 已稳定上线后,CAT 自动退出,完成控制权切换。
Language / Scene │ ▼ CAT-VLA │ Policy Routing │ ▼ Click-and-Traverse │ RL Traversal │ ▼ rt/lowcmd │ ▼ MuJoCo G1 │ Goal Reached │ ▼ Stable Hold │ ▼ Handover Manager │ ▼ Camera + State + Prompt │ ▼ GR00T-N1.7 │ Action Chunk │ ▼ SONIC WBC │ ▼ G1
. ├── Click-and-Traverse/ │ ├── cat_vla/ # 环境理解与策略路由 │ ├── cat_ppo/ # CAT 训练与评估 │ └── deploy/ # DDS 部署与 Handover │ ├── GR00T-WholeBodyControl/ │ ├── gear_sonic/ # MuJoCo、Camera、VLA Client │ └── gear_sonic_deploy/ # SONIC WBC │ ├── Isaac-GR00T/ # GR00T PolicyServer ├── unitree_lerobot/ └── weights/
推荐环境:
进入项目根目录后设置:
export PROJECT_ROOT="$(pwd)" export GPU_ID=0 export DISPLAY_ID=:0 export POLICY_PORT=5550 export CAMERA_PORT=5555 export ACTION_PORT=5556 export STATE_PORT=5557 export CONTROL_PORT=5580 export GROOT_CKPT="$PROJECT_ROOT/weights/GR00T-N1.7-G1-SONIC-BonesSeed-V2" export TENSORRT_ROOT=/path/to/TensorRT
每次系统重启后,建议先确保本机 DDS 回环接口支持 multicast:
sudo ip link set lo multicast on ip link show lo
有界面运行:
export DISPLAY="$DISPLAY_ID" export __GLX_VENDOR_LIBRARY_NAME=nvidia unset PYOPENGL_PLATFORM export MUJOCO_GL=glfw
无界面服务器:
unset DISPLAY export MUJOCO_GL=egl
进入:
cd "$PROJECT_ROOT/Click-and-Traverse"
python cat_vla.py "跨过去" python cat_vla.py "低头蹲下钻过去" python cat_vla.py "侧身通过"
先启动本地 LLM 服务,例如:
ollama serve
执行:
python cat_vla.py \ --mode llm \ "前面有一个较低的障碍,请选择合适的通过方式"
配置兼容 OpenAI API 的本地视觉模型服务:
export OPENAI_BASE_URL=http://127.0.0.1:8080/v1 export OPENAI_API_KEY=not-needed
python cat_vla.py \ --mode vla-lite \ --scene data/assets/TypiObs/side-hurdle-crouch3 \ "帮我安全穿过当前区域"
python cat_vla.py \ --mode scan \ --scene data/assets/TypiObs/side-hurdle-crouch3 \ "分析障碍"
python cat_vla.py --interactive
python cat_vla.py \ --eval \ --episodes 50 \ --mode scan \ --scene data/assets/TypiObs/hurdle0 \ "分析障碍"
如果当前版本入口不是仓库根目录下的 cat_vla.py,请根据 Click-and-Traverse/cat_vla/README.md 中的实际入口运行。
cat_vla.py
Click-and-Traverse/cat_vla/README.md
export CUDA_VISIBLE_DEVICES="$GPU_ID" cd "$PROJECT_ROOT/GR00T-WholeBodyControl" source .venv_inference/bin/activate HF_HUB_OFFLINE=1 \ TRANSFORMERS_OFFLINE=1 \ python "$PROJECT_ROOT/Isaac-GR00T/gr00t/eval/run_gr00t_server.py" \ --model-path "$GROOT_CKPT" \ --embodiment-tag UNITREE_G1_SONIC \ --device cuda:0 \ --port "$POLICY_PORT"
cd "$PROJECT_ROOT/GR00T-WholeBodyControl" source .venv_sim/bin/activate export DISPLAY="$DISPLAY_ID" export __GLX_VENDOR_LIBRARY_NAME=nvidia unset PYOPENGL_PLATFORM export MUJOCO_GL=glfw python gear_sonic/scripts/run_sim_loop.py \ --interface sim \ --enable-onscreen \ --enable-offscreen \ --enable-image-publish \ --camera-port "$CAMERA_PORT"
宿主机:
cd "$PROJECT_ROOT/GR00T-WholeBodyControl/gear_sonic_deploy" export TensorRT_ROOT="$TENSORRT_ROOT" ./docker/run-ros2-dev.sh
容器内:
export CUDA_VISIBLE_DEVICES="$GPU_ID" cd /workspace/g1_deploy source scripts/setup_env.sh bash deploy.sh \ --input-type zmq_manager \ --output-type all \ sim
cd "$PROJECT_ROOT/GR00T-WholeBodyControl" source .venv_sim/bin/activate python - <<'PY' import os import time import zmq port = os.getenv("CONTROL_PORT", "5580") ctx = zmq.Context() pub = ctx.socket(zmq.PUB) pub.bind(f"tcp://127.0.0.1:{port}") time.sleep(0.5) print("k=start/stop") print("i=init pose") print("p=pause/unpause") print("t <prompt>=change prompt") while True: msg = input("> ").strip() if not msg: continue if msg.startswith("t "): pub.send_string("prompt:" + msg[2:].strip()) else: pub.send_string(msg) PY
cd "$PROJECT_ROOT/GR00T-WholeBodyControl" source .venv_inference/bin/activate python gear_sonic/scripts/run_vla_inference.py \ --host 127.0.0.1 \ --port "$POLICY_PORT" \ --camera-host 127.0.0.1 \ --camera-port "$CAMERA_PORT" \ --state-zmq-host 127.0.0.1 \ --state-zmq-port "$STATE_PORT" \ --action-zmq-host 127.0.0.1 \ --action-zmq-port "$ACTION_PORT" \ --prompt "squat" \ --action-horizon 40
正常情况下可以看到:
PolicyServer is reachable. New action chunk ... ZMQ: Sent latent action ...
机器人落地并稳定后,在控制终端依次输入:
k i p
切换技能:
t squat t lunge t dance t macarena t walk t jump t kick
Mode B 下不要启动 SONIC Deploy。CAT 与 SONIC 都会写 rt/lowcmd。
cd "$PROJECT_ROOT/GR00T-WholeBodyControl" source .venv_sim/bin/activate export DISPLAY="$DISPLAY_ID" export __GLX_VENDOR_LIBRARY_NAME=nvidia unset PYOPENGL_PLATFORM export MUJOCO_GL=glfw python gear_sonic/scripts/run_sim_loop.py \ --wbc-version sonic_model12_catbend \ --interface sim \ --enable-onscreen \ --enable-offscreen \ --enable-image-publish \ --camera-port "$CAMERA_PORT"
cd "$PROJECT_ROOT/Click-and-Traverse" PYTHONPATH=deploy \ "$PROJECT_ROOT/GR00T-WholeBodyControl/.venv_sim/bin/python" \ deploy/scripts/deploy_cat_dds.py \ --obs-name bend \ --exp-name G1Cat_bend
推荐流程:
Controller Start ↓ Default Pose ↓ Robot Landing ↓ Stable Balance ↓ Start Navigation ↓ Obstacle Traversal ↓ Goal Reached
Mode C 用于验证:
CAT Traversal ↓ Goal Verification ↓ Stable Hold ↓ Runtime Handover ↓ SONIC Exclusive Control ↓ GR00T VLA Skill
提前启动:
此时暂不启动 SONIC Deploy。
启动 CAT Handover:
cd "$PROJECT_ROOT/Click-and-Traverse" PYTHONPATH=deploy \ "$PROJECT_ROOT/GR00T-WholeBodyControl/.venv_sim/bin/python" \ deploy/scripts/deploy_cat_dds.py \ --obs-name bend \ --exp-name G1Cat_bend \ --handover
机器人落地并稳定后启动导航。
到达目标后,CAT 会继续保持机器人平衡并进入 Handover Ready。
随后启动 SONIC Deploy。等待 SONIC 初始化完成后,在 Runtime Control 中输入:
k
当 CAT 检测到第二控制器持续发布 rt/lowcmd 后,将自动让位退出。
确认 CAT 已退出后,再输入:
i p
切换后续技能:
t squat t dance t macarena
交接阶段不要提前执行高动态动作或手臂初始化。
CAT 仿真与 DDS 部署轨迹位于:
Click-and-Traverse/action_log/
典型日志包括:
sim-G1Cat_*/ dds-G1Cat_*/ obs_act_record.pkl
可用于复现实验轨迹、分析 observation/action 变化以及定位运行问题。
jump
kick
本项目基于或集成:
各第三方组件版权与许可证以其原始仓库中的 LICENSE、CITATION.cff、ATTRIBUTIONS.md 和相关说明为准。
LICENSE
CITATION.cff
ATTRIBUTIONS.md
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
OpenER-G1:面向开放环境的具身机器人韧性运行框架
OpenER-G1 面向开放、动态和非结构化环境中的人形机器人持续可靠运行,集成 CAT-VLA、Click-and-Traverse、NVIDIA GR00T-N1.7、SONIC Whole-Body Control、MuJoCo、DDS 与 ZMQ,构建从环境理解、策略选择、障碍穿越、到达确认、控制权交接到 VLA 技能执行的完整机器人闭环。
项目采用分层设计:复杂空间穿越由专用强化学习策略负责,视觉-语言-动作任务由 GR00T-N1.7 与 SONIC 完成,并通过运行时 Handover 机制协调不同控制器之间的安全切换。
1. 核心功能
1.1 多模态环境理解与策略选择
Click-and-Traverse/cat_vla提供四种环境理解与策略路由方式:keywordllmvla-litescan当前 CAT 策略覆盖地面障碍、顶部障碍、狭窄通道及组合约束,例如:
1.2 CAT 强化学习障碍穿越
Click-and-Traverse 提供 CAT 强化学习策略的训练、ONNX 转换、MuJoCo 评估与 DDS 部署流程:
部署后形成闭环:
1.3 GR00T + SONIC VLA 技能执行
GR00T-N1.7 根据:
生成 Action Chunk,并交由 SONIC Whole-Body Control 转换为 G1 全身控制指令。
当前可用于验证:
1.4 CAT → SONIC 控制权交接
CAT 与 SONIC 都可能向
rt/lowcmd发布控制命令,因此不能长期同时控制机器人。项目实现运行时 Handover:
CAT 到达目标后继续保持机器人平衡,并监测控制总线活动。当检测到 SONIC 已稳定上线后,CAT 自动退出,完成控制权切换。
2. 系统架构
3. 项目结构
4. 环境配置
推荐环境:
进入项目根目录后设置:
每次系统重启后,建议先确保本机 DDS 回环接口支持 multicast:
有界面运行:
无界面服务器:
5. CAT-VLA 运行
进入:
Keyword
LLM
先启动本地 LLM 服务,例如:
执行:
VLA-Lite
配置兼容 OpenAI API 的本地视觉模型服务:
执行:
Scan
交互模式
策略评估
6. Mode A:GR00T + SONIC VLA 闭环
Terminal 1:GR00T PolicyServer
Terminal 2:MuJoCo
Terminal 3:SONIC Deploy
宿主机:
容器内:
Terminal 4:运行时控制
Terminal 5:VLA Client
正常情况下可以看到:
机器人落地并稳定后,在控制终端依次输入:
切换技能:
7. Mode B:CAT 障碍穿越
Terminal 1:CAT 场景
Terminal 2:CAT DDS Controller
推荐流程:
8. Mode C:CAT → SONIC/VLA 完整任务
Mode C 用于验证:
提前启动:
此时暂不启动 SONIC Deploy。
启动 CAT Handover:
机器人落地并稳定后启动导航。
到达目标后,CAT 会继续保持机器人平衡并进入 Handover Ready。
随后启动 SONIC Deploy。等待 SONIC 初始化完成后,在 Runtime Control 中输入:
当 CAT 检测到第二控制器持续发布
rt/lowcmd后,将自动让位退出。确认 CAT 已退出后,再输入:
切换后续技能:
交接阶段不要提前执行高动态动作或手臂初始化。
9. 运行日志
CAT 仿真与 DDS 部署轨迹位于:
典型日志包括:
可用于复现实验轨迹、分析 observation/action 变化以及定位运行问题。
10. 注意事项
rt/lowcmd发送控制命令;jump、kick建议在基础闭环稳定后再测试;11. Acknowledgements
本项目基于或集成:
各第三方组件版权与许可证以其原始仓库中的
LICENSE、CITATION.cff、ATTRIBUTIONS.md和相关说明为准。