捡垃圾(openpi)

本节基于 openpi 框架的 ex001 适配器,演示如何启动捡垃圾模型推理服务,并通过 SDK 客户端驱动机器人完成从地面拾取垃圾并投入垃圾桶的任务。

启动捡垃圾模型服务

安装环境

请先下载并解压适配器压缩包,

openpi-ex001-adapter.zip

随后在解压目录中完成环境安装:

cd openpi-ex001-adapter
pip install -U uv
uv venv --python 3.11
uv sync

若国内网络访问较慢,可在执行 uv sync 前先设置镜像源:

export UV_DEFAULT_INDEX=``https://mirrors.aliyun.com/pypi/simple

安装完成后,通过以下命令验证 JAX 是否正确识别 GPU 设备:

uv run python -c "import jax; print(jax.devices())"

输出结果中应包含 GPU 设备;若仅显示 CPU 设备,请检查显卡驱动及 CUDA 是否正确安装与识别。


下载权重

uv run huggingface-cli download YangPaiMeng/openpi-ex001-selectwaste \
  --local-dir ./checkpoints/ex001-selectwaste

export CKPT=$PWD/checkpoints/ex001-selectwaste

若无法访问 huggingface\.co,可先设置镜像:export HF_ENDPOINT=``https://hf-mirror.com

本仓库锁定 huggingface_hub 0.32.3,对应命令为 huggingface-cli;更高版本已更名为 hf,本仓库不适用。

启动服务

unset JAX_PLATFORMS
export CUDA_VISIBLE_DEVICES=0
export XLA_PYTHON_CLIENT_MEM_FRACTION=0.35

uv run scripts/serve_ex001.py \
  --checkpoint "$CKPT" \
  --tokenizer "$CKPT/paligemma_tokenizer.model" \
  --port 44604

服务启动前需进行约 20 至 40 秒的预热。当终端输出以下日志时,表示服务已就绪,可继续后续操作:

[INFO] serving on 0.0.0.0:44604

启动过程中出现的 checkpoint has 4 params ...Token length (202) exceeds ... 等日志属于正常现象,可忽略。

若机器人硬件配置并非 DVT + G 夹爪,需通过 `--force-prompt` 参数显式指定对应的硬件配置指令。模型仅针对以下三条指令进行训练,分别对应三种硬件配置,而非任务阶段:

Select the waste from the floor and put it into the waste bin by EVT robot.
Select the waste from the floor and put it into the waste bin by DVT robot and H gripper.
Select the waste from the floor and put it into the waste bin by DVT robot and G gripper.

服务默认强制使用第三条指令(其训练数据量最大,推理效果最佳),并忽略客户端下发的指令。更换硬件配置时,请按对应指令原样传入,例如:

--force-prompt "Select the waste from the floor and put it into the waste bin by EVT robot."

自检(不用机器人)

请在另一个终端执行以下命令,对推理服务进行连通性与输出校验:

cd openpi-ex001-adapter
export CKPT=$PWD/checkpoints/ex001-selectwaste

uv run examples/ex001/demo_client.py --port 44604 --norm-stats "$CKPT/norm_stats.json"

若终端输出以下内容,则表示与服务连接成功:

OK: every stream has the expected shape and the chunk starts at the current state.

此外,timing 字段中的 infer_ms 应处于 100ms 量级;若达到秒级,通常表示推理运行在 CPU 上,请检查启动服务步骤中的 unset JAX_PLATFORMS 是否正确执行。

通过 SDK 客户端进行推理

场地准备

  1. 将机器人放置在空旷、地面无杂物的平整场地。

  2. 将垃圾桶和待拾取的垃圾放置在机器人前方。

  3. 确认机器人周围留有足够的移动和机械臂操作空间,并确保急停可随时使用。

网络准备

按照“局域网络配置指导”使用网线连接开发 PC 与机器人,并将开发 PC 的机器人侧有线接口配置为 192.168.10.10/24。本文示例使用机器人 SDK Server 地址 192.168.10.1:50051

开发 PC 同时需要能够访问模型推理服务。如果使用“有线连接机器人 + Wi-Fi/另一网络连接模型服务”的双网卡方式,请确保机器人网段 192.168.10.0/24 仍通过机器人有线接口访问,且模型 WebSocket 地址可达。

软件环境

请参考sdk开发章节里的内容完成 sdk_robot 仓库及对应环境的安装与配置。

运行示例

cd /path/to/sdk_robot

INFERENCE_SERVER_IP='REPLACE_WITH_CONFIRMED_IP_OR_HOST'
INFERENCE_SERVER_PORT='REPLACE_WITH_CONFIRMED_PORT'

bash samples/quanta_x1/scripts/start_sdk_ex001.sh \
  "$INFERENCE_SERVER_IP" \
  "$INFERENCE_SERVER_PORT" \
  "Select the waste from the floor and put it into the waste bin by DVT robot and G gripper." \
  end_pose \
  6 \
  192.168.10.1:50051

若机器人使用其他 IP 地址,请通过第 6 个参数 ROBOT_SDK_URL 显式指定实际的 机器人 IP:50051,无需直接修改 start_sdk_ex001.sh 源文件。

运行说明

  • 脚本将同时连接推理服务 WebSocket 与机器人 SDK Server。

  • 当出现网络断开、推理超时或 SDK 调用失败等情况时,请先确认机器人已安全停止,再排查推理服务、机器人状态及网络连接。

  • 重新运行 start_sdk_ex001.sh 将建立新的客户端会话。当前 Sample 未实现推理流程的持久化与恢复机制,因此不保证可从中断位置继续执行。

示例视频

本页内容