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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用 Python 爬虫获取唯品会 VIP 商品详情:实战指南

在当今电商竞争激烈的环境中&#xff0c;VIP 商品往往是商家的核心竞争力所在。这些商品不仅代表着品牌的高端形象&#xff0c;更是吸引高价值客户的关键。因此&#xff0c;获取 VIP 商品的详细信息对于市场分析、竞品研究以及优化自身产品策略至关重要。Python 作为一种强大的…

鸿蒙桌面快捷方式开发

桌面快捷方式开发实战 [参考文档] (https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-desktop-shortcuts) 在module.json5配置文件中的abilities标签下的metadata中设置resource属性值为$profile:shortcuts_config&#xff0c;指定应用的快捷方式配置文件&…

3分钟学会跨浏览器富文本编辑器开发:精准光标定位+内容插入(附完整代码)

一、痛点直击&#xff1a;传统编辑器的三大坑 作为前端开发&#xff0c;你是否遇到过以下灵魂拷问&#xff1f; ✅ 为什么Firefox光标能精准定位&#xff0c;IE却永远跳转到开头&#xff1f;✅ 图片上传后如何保证插入位置不偏移&#xff1f;✅ 跨浏览器兼容测试时&#xff0…

RK3562 Linux-5.10 内核HUSB311 Type-C 控制器芯片调试记录

硬件原理&#xff1a; 1. type C 接口&#xff1a; 1.1 HUSB311芯片&#xff0c; CC1和CC2 逻辑接到HUSB311 上面&#xff0c; 接I2C0组和USBCC_INT_L USBCC_INT_L 接到GPIO0_A6 做为CC的逻辑中断 1.2 TYPEC_DP/TYPEC_DM 接到ARM 端的USB3.0 OTG上面 1.2 TYPEC_RX1P/TYPEC…

深入理解Java中的BigDecimal:高精度计算的核心工具

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在Java编程中&#xff0c;处理浮点数运算时可能会遇到精度丢失的问题。例如&#xff1a; System.out.println(0.1 0.2); // 输出&#xff1a;0.30000…

大模型微调(面经总结)

持续更新中 一、LORA篇1、介绍一下Lora的原理2、LoRA 是为了解决什么问题提出的&#xff1f;哪些模型适合用 LoRA 微调&#xff1f;什么是低秩分解&#xff1f;**低秩分解&#xff1a;用小矩阵逼近大矩阵** 3、LoRA初始化4、LoRA初始化秩 r 是怎么选的&#xff1f;为什么不选其…

Camera相机人脸识别系列专题分析之一:人脸识别系列专题SOP及理论知识介绍

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a;内存泄漏和内存占用拆解系列专题 这一篇我们开始讲&#xff1a; Camera相机人脸识别系列专题分析之一&#xff1a;人脸识别系列专题SOP及理论知识…

【Elasticsearch】PUT` 请求覆盖式更新

是的&#xff0c;Elasticsearch 中的 PUT 请求是覆盖式的。当你使用 PUT 请求向索引中写入文档时&#xff0c;如果文档已经存在&#xff0c;Elasticsearch 会完全替换整个文档的内容&#xff0c;而不是进行部分更新。 覆盖式的具体行为 - 文档存在时&#xff1a;PUT 请求会用新…

计算机系统结构-第4章-数据级并行

数据集并行的概念: 并行场景1: 对不同数据执行相同的操作: 串行执行: 可以同时进行: 可以尝试一个多条指令,多核执行 引入: SISD: 单核,单线程,串行执行,这样耗时 MIMD: 多核,多线程,并行执行,一条指令多次重复,变成了MIMID 存在的问题: 在标量CPU流水线中&#xff0…

重新安装解决mac vscode点击不能跳转问题

依次执行以下过程 删除vscode程序 删除vscode的缓存文件夹(xxx表示你的用户名) /Users/xxx/Library/Application Support/Code 重新安装vscode 这时候你会反向可以跳转项目内的import 文件以及自定义函数。但是import安装的包还不能点击跳转 配置python环境 如果你电脑没有安…

题目 3334: 蓝桥杯2025年第十六届省赛真题-园艺

题目 3334: 蓝桥杯2025年第十六届省赛真题-园艺 时间限制: 2s 内存限制: 192MB 提交: 129 解决: 37 题目描述 小蓝从左到右种了 n 棵小树&#xff0c;第 i 棵树的高度为 hi &#xff0c;相邻树的间隔相同。 小蓝想挪走一些树使得剩下的树等间隔分布&#xff0c;且从左到右高度逐…

Chrome 开发中的任务调度与线程模型实战指南

内容 概述 快速入门指南 核心概念线程词典 线程任务优先使用序列而不是物理线程 发布并行任务 直接发布到线程池通过 TaskRunner 发布 发布顺序任务 发布到新序列发布到当前&#xff08;虚拟&#xff09;主题 使用序列代替锁将多个任务发布到同一线程 发布到浏览器进程中的主线…

详解osgb的顶点,纹理,索引,UV读取与存储

virtual void apply(osg::Geode& node) {for (int i 0; i < node.getNumDrawables(); i){osg::Geometry* geometry dynamic_cast<osg::Geometry*>(node.getDrawable(i));if (geometry){//apply(*g);//***********************************************//解析顶点…

CSS闯关指南:从手写地狱到“类”积木之旅|得物技术

一、背景 在Web开发网页设计中&#xff0c;CSS&#xff08;层叠样式表&#xff09;扮演着至关重要的角色&#xff0c;它用于控制网页的布局、外观和视觉效果。CSS不仅可以美化网页的视觉表现&#xff0c;还可以提高网页的可访问性、可维护性和响应式设计。在我们进行网页开发的…

【大模型应用开发】Qwen2.5-VL-3B识别视频

0. 编写代码并尝试运行 克隆以下代码 git clone https://gitee.com/ai-trailblazer/qwen-vl-hello.git 尝试运行qwen-vl-hello.py&#xff0c;报错原因缺少modelscope&#xff1a; 1. 安装qwen-vl-utils工具包 pip install qwen-vl-utils[decord]0.0.8 尝试运行&#xff0c;…

MySQL 窗口函数深度解析:语法、应用场景与性能优化

一、窗口函数核心概念 ​​本质​​&#xff1a;对一组与当前行相关联的行执行计算&#xff0c;​​不改变原表行数​​ ​​与聚合函数的区别​​&#xff1a; SELECT department, AVG(salary) -- 普通聚合&#xff1a;每个部门一行 FROM employees GROUP BY department;SE…

新版Chrome浏览器加载eDrawings 3D Viewer控件网页查看DWG、DXF

eDrawings是一款由达索系统&#xff08;DASSAULT SYSTMES&#xff09;开发的免费跨平台CAD看图工具&#xff0c;专注于3D模型和2D工程图的查看、协作与共享。其核心功能包括多格式支持、动态模型展示、跨平台适配及轻量化操作体验&#xff0c;适用于工程设计、教育培训等领域。…

阿姆斯特朗数

阿姆斯特朗数也就是俗称的水仙花数&#xff0c;是指一个n位数&#xff0c;其各位数字的n次方之和等于该数本身。例如&#xff0c;153是一个水仙花数&#xff0c;因为153&#xff1d;13&#xff0b;53&#xff0b;33。请问100-10000所有水仙花数有哪些。 采用穷举法对范围之间的…

vmvare 虚拟机内存不足

centos 扩展物理卷df -hT / sudo du -hx --max-depth1 / | sort -rh | head -n 20 // 查看前20个的大文件 # 清理旧日志&#xff08;保留最近7天&#xff09; sudo find /var/log -type f -mtime 7 -delete sudo journalctl --vacuum-time7d # 清理yum缓存 sudo yum clean …

C++?继承!!!

一、引言 代码的复用对于代码的质量以及程序员的代码设计上都是非常重要的&#xff0c;C中的许多特性都体现了这一点&#xff0c;从函数复用、模板的引入到今天我们将一起学习的&#xff1a;继承 二、什么是继承&#xff1f; 1、继承的概念 继承(inheritance)机制是面向对象程…