openpi π₀ 项目部署运行逻辑(四)——机器人主控程序 main.py — aloha_real_π机器人源码
π₀ 机器人主控脚本都在 examples 中:
可以看到包含了多种类机器人适配
此笔记首先记录了 aloha_real 部分
aloha_real 中,main.py 是 openpi ALOHA 平台上“主控执行入口”,负责:
目录
1 库引用
2 参数定义
3 主流程 main
4 流程逻辑
5 使用方法总结
1 库引用
import dataclasses # 用于创建结构化参数对象import logging # 用于日志输出,便于调试和运行记录# 导入 openpi_client 相关模块,用于动作下发与策略服务器通信from openpi_client import action_chunk_brokerfrom openpi_client import websocket_client_policy as _websocket_client_policyfrom openpi_client.runtime import runtime as _runtimefrom openpi_client.runtime.agents import policy_agent as _policy_agentimport tyro # 更现代的命令行参数解析库# 导入当前目录下的 env.py,包含真实机器人环境封装from examples.aloha_real import env as _env
2 参数定义
# 命令行参数结构体定义@dataclasses.dataclassclass Args: host: str = \"0.0.0.0\" # 策略服务端的IP地址或主机名,默认监听所有地址(本地) port: int = 8000 # 策略服务端口号,默认8000 action_horizon: int = 25 # 每次下发给机器人的连续动作片段长度 num_episodes: int = 1 # 总共要运行多少个完整任务回合(episode) max_episode_steps: int = 1000 # 每个任务允许的最大动作步数(防止卡死)
- host, port:推理服务器(策略服务端)的地址端口
- action_horizon:每次规划/推理的连续动作片段长度
- num_episodes:循环任务的数量(实验集大小,通常=1)
- max_episode_steps:每个任务最大步骤数(超限自动终止)
3 主流程 main
def main(args: Args) -> None: # 实例化WebSocket策略客户端,与策略服务器建立通信 ws_client_policy = _websocket_client_policy.WebsocketClientPolicy( host=args.host, port=args.port, ) # 打印推理服务器返回的模型元信息,帮助调试 logging.info(f\"Server metadata: {ws_client_policy.get_server_metadata()}\") metadata = ws_client_policy.get_server_metadata() # 构建机器人运行时回路对象,包括环境、Agent等 runtime = _runtime.Runtime( environment=_env.AlohaRealEnvironment( reset_position=metadata.get(\"reset_pose\") # 从服务器元数据获取初始重置位姿 ), agent=_policy_agent.PolicyAgent( # 使用ActionChunkBroker,支持批量连续动作推理,减少通讯延迟 policy=action_chunk_broker.ActionChunkBroker( policy=ws_client_policy, action_horizon=args.action_horizon, ) ), subscribers=[], # 可扩展的观测/日志/可视化订阅者,目前为空 max_hz=50, # 主循环最大频率(Hz),实际受通信/硬件影响 num_episodes=args.num_episodes, # 任务回合数 max_episode_steps=args.max_episode_steps, # 单回合最大动作步数 ) runtime.run() # 启动机器人任务主循环if __name__ == \"__main__\": logging.basicConfig(level=logging.INFO, force=True) # 全局设置日志级别 tyro.cli(main) # 使用tyro自动从命令行解析参数并运行main()
具体流程如下:
1. 建立一个 WebSocket 客户端,连接远端策略推理服务
2. 获取服务器的模型元数据(包括是否需要语言提示、动作空间信息等)
3. 构建机器人回路的“运行时对象” Runtime,内含多个关键组件:
- environment:物理环境交互接口,这里是实际的 ALOHA 机器人(重置姿态等参数从 server metadata 获取)
- agent:决策主体,这里是通过 PolicyAgent 封装、带有“连续 chunk 动作预测能力”的 policy
- subscribers:订阅者/观察器(可扩展,用于实时数据流转或远程监控)
- max_hz:主循环最大频率
- num_episodes、max_episode_steps:回合数与最大步长
ActionChunkBroker 实现了高效的“分块推理”,一次请求多个动作 chunk,减少通信和延迟
4. 开始回路,实际控制机器人感知、推理、动作执行和反馈的全流程
4 流程逻辑
+-------------------+ WebSocket +---------------------+| main.py | | serve_policy.py || (机器人主控) | | (策略推理服务) |+-------------------+ +---------------------+ | v 控制机器人硬件
5 使用方法总结
目前给的几个机器人样例还是很详细的,对于 aloha_real 来说,记一下详细的流程笔记:
基本流程思路如下:
- 创建一个隔离的 Python 3.10 虚拟环境
- 安装项目所需的依赖(包括第三方库和本地开发的包)
- 运行机器人程序的主模块(examples.aloha_real.main)
1. 创建虚拟环境
# Create virtual environmentuv venv --python 3.11 examples/aloha_real/.venv
使用 uv 在指定路径下创建一个隔离的 Python 环境,避免与系统或其他项目的依赖冲突
PS:此处建议为了依赖问题安装 Python 版本 ≥3.11
2. 激活虚拟环境
source examples/aloha_real/.venv/bin/activate
3. 同步依赖
uv pip sync examples/aloha_real/requirements.txt
使用 uv pip 安装 requirements.txt 中列出的所有依赖包
4. 以可编辑模式安装本地包
uv pip install -e packages/openpi-client
- -e:可编辑模式,允许直接修改包代码而无需重新安装
- packages/openpi-client:本地包的路径
5. 运行机器人程序
# Run the robotpython -m examples.aloha_real.main
- -m:以模块形式运行
修改主机 ip:
host: str = \"192.168.1.20\"
最后,运行连接
python -m examples.aloha_real.main