# edp-simulator **Repository Path**: agents-team/edp-simulator ## Basic Information - **Project Name**: edp-simulator - **Description**: 具身数据模拟采集端:edp-sdk 全链路参考客户端(录制→上传→入库登记→MQTT 遥测) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-12 - **Last Updated**: 2026-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # edp-simulator — 具身数据模拟采集端(edp-sdk 全链路参考客户端) 以软件方式模拟"机器人工位":用 [edp-sdk](../edp-sdk)(驱动 SPI / StreamBus / Recorder / Uploader / Session)把**埋点遥测与遥操数据集**发送到 [edp-platform](../edp-platform), 跑通「模拟本体 → 暂存桶 → ingest 入库 → 元数据库 → Web 看板」的完整数据闭环, 无需任何真实硬件。 ## 它做什么 ``` ┌────────────────────────────────────────────────────────────────────┐ │ edp-simulator(本仓,容器化常驻) │ │ │ │ SimulatedEmbodiment ── SDK SensorDriver/CommandSource │ │ │ 正弦关节轨迹 + 合成图像(确定性,可回归) │ │ ▼ │ │ SDK Session ──── GET /v1/meta(能力协商,per-site token) │ │ │ GET /v1/recipes/current(配方,task_spec 派生) │ │ ▼ │ │ SDK Recorder ─── LeRobotDataset v3 落盘(spool 原子提交) │ │ ▼ │ │ SDK ChecksumUploader ── MinIO edp-staging(sha256 清单,断点续传) │ │ ▼ │ │ POST /v1/ingest/jobs ── 平台 ingest 管线 → episode 表(pending_qc) │ │ ▼ │ │ MQTT edp/site/{site}/heartbeat|telemetry ── site_health_event 落库 │ └────────────────────────────────────────────────────────────────────┘ ``` ## 快速开始(本机开发) 前置:Python 3.12 + [uv](https://docs.astral.sh/uv/);本仓以 path source 引用 `../edp-sdk` 与 `../edp-platform`(发布形态替换为私有 index 语义版本)。 ```bash uv sync # 共享 .venv(edp-sdk/edp-schema/edp-format/edp-store 为本地 path 源) uv run pytest # 单元测试(moto S3 + httpx MockTransport,不触真实服务) uv run ruff check . uv run mypy # 对着本地全栈跑一轮(先按 edp-infra/docs/deploy.md 起 postgres/minio/mosquitto/api) uv run python -m edp_simulator run --episodes 3 uv run python -m edp_simulator serve # 常驻循环(容器内默认模式) ``` 环境变量(前缀 `EDP_`,全部可选,见 `src/edp_simulator/settings.py`): | 变量 | 缺省 | 说明 | | --- | --- | --- | | `EDP_SITE_ID` | `site-sim001` | 模拟工位 ID(须与平台种子站点一致) | | `EDP_SITE_TOKEN` | (空) | per-site token(平台 `EDP_SITE_TOKENS` 中登记,规格 §4.4) | | `EDP_API_BASE_URL` | `http://api:8000` | 平台 API 基地址 | | `EDP_MINIO_ENDPOINT` | `localhost:9000` | 暂存桶对象存储 | | `EDP_MINIO_BUCKET_STAGING` | `edp-staging` | 暂存桶 | | `EDP_SIMULATOR_EPISODES` | `2` | 每轮数据集包含的 episode 数 | | `EDP_SIMULATOR_STEPS` | `60` | 每 episode 遥操指令帧数 | | `EDP_SIMULATOR_INTERVAL_S` | `30` | serve 循环间隔 | | `EDP_MQTT_HOST` / `EDP_MQTT_PORT` | `localhost`/`1883` | 遥测/心跳 broker | ## 部署 镜像随平台全栈部署(见 `../edp-infra/docs/deploy.md`);单独构建(context 是 data-platform 根,镜像内需要相邻的 edp-sdk / edp-platform 源码): ```bash cd docker build -f edp-simulator/Dockerfile -t edp-simulator:dev . ``` ## 设计文档 - [docs/design.md](docs/design.md) — 模块划分、闭环时序、埋点通道契约 - [docs/tasks.md](docs/tasks.md) — 任务拆分(T-921~T-925)与验收标准 ## 身份与安全 - 采集端机器身份:per-site token(`Authorization: Bearer`,规格 §4.4,不走 Logto); 仅用于 `/v1/meta`、`/v1/recipes/current`、`POST /v1/ingest/jobs`。 - 对象存储凭据:环境变量注入,镜像与仓库不落任何密钥(AGENTS.md 规则)。