当前位置: 首页 > news >正文

openpi π₀ 项目部署运行逻辑(四)——机器人主控程序 main.py — aloha_real

π₀ 机器人主控脚本都在 examples 中:

可以看到包含了多种类机器人适配

此笔记首先记录了 aloha_real 部分

aloha_real 中,main.py 是 openpi ALOHA 平台上“主控执行入口”,负责:

  • 建立与推理服务器(serve_policy.py,WebSocket服务)的通信
  • 启动实际的机器人环境交互回路(包括视觉、动作、状态反馈)
  • 循环执行策略推理与动作下发,控制机器人完成任务

目录

1 库引用

2 参数定义

3 主流程 main

4 流程逻辑

5 使用方法总结


1 库引用

import dataclasses    # 用于创建结构化参数对象
import logging        # 用于日志输出,便于调试和运行记录# 导入 openpi_client 相关模块,用于动作下发与策略服务器通信
from openpi_client import action_chunk_broker
from openpi_client import websocket_client_policy as _websocket_client_policy
from openpi_client.runtime import runtime as _runtime
from openpi_client.runtime.agents import policy_agent as _policy_agent
import tyro           # 更现代的命令行参数解析库# 导入当前目录下的 env.py,包含真实机器人环境封装
from examples.aloha_real import env as _env

2 参数定义

# 命令行参数结构体定义
@dataclasses.dataclass
class Args:host: str = "0.0.0.0"                  # 策略服务端的IP地址或主机名,默认监听所有地址(本地)port: int = 8000                       # 策略服务端口号,默认8000action_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 来说,记一下详细的流程笔记:

基本流程思路如下:

  1. 创建一个隔离的 Python 3.10 虚拟环境
  2. 安装项目所需的依赖(包括第三方库和本地开发的包)
  3. 运行机器人程序的主模块(examples.aloha_real.main)

1. 创建虚拟环境

# Create virtual environment
uv 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 robot
python -m examples.aloha_real.main
  • -m:以模块形式运行

修改主机 ip:

    host: str = "192.168.1.20"

最后,运行连接

python -m examples.aloha_real.main

相关文章:

  • 使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第三部分)
  • MySQL问题:主要索引类型(聚簇、辅助、覆盖、前缀)
  • Debian 11 之使用hostapd与dnsmasq进行AP设置
  • C++ STL 容器:List 深度解析与实践指南
  • 手机收不到WiFi,手动输入WiFi名称进行连接不不行,可能是WiFi频道设置不对
  • 仿真环境中机器人抓取与操作上手指南
  • 从零实现本地语音识别(FunASR)
  • Vue3 封装el-table组件
  • 13. CSS定位与伪类/伪元素
  • 从 PyTorch 到 TensorFlow Lite:模型训练与推理
  • 从Node.js到Go:如何从NestJS丝滑切换并爱上Sponge框架
  • jenkins-jenkins简介
  • 微信小程序一次性订阅封装
  • Linux 环境下C、C++、Go语言编译环境搭建秘籍
  • React 第四十七节 Router 中useLinkClickHandler使用详解及开发注意事项案例
  • 【Redis】过期键删除策略,LRU和LFU在redis中的实现,缓存与数据库双写一致性问题,go案例
  • Web安全测试-文件上传绕过-DVWA
  • 人该怎样活着呢?54
  • 【2025最新】Cline自定义API配置完全指南:接入Claude 3.7/GPT-4o
  • Python打卡第38天
  • 宁波靠谱的网站推广定制/怎么在百度上发布个人文章
  • wordpress云盘视频播放/整站seo优化公司
  • 在网站上保存网址怎么做/桂林seo顾问
  • seo优化心得/网站怎么seo关键词排名优化推广
  • 做网站一般用什么框架/英语培训机构
  • it外包公司什么意思/济南seo官网优化