# rmf_web **Repository Path**: reinovo/rmf_web ## Basic Information - **Project Name**: rmf_web - **Description**: 用于openrmf显示和编辑任务的web - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-14 - **Last Updated**: 2026-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenRMF 车队调度看板 基于 Vue 3 + TypeScript + Pinia + Vite 的 Open-RMF 车队前端。前端纯展示,**计时与下发全部由后端 `server/index.mjs` 执行**(RMF 代理 + compose 任务链引擎),刷新页面 / 多标签页不再影响任务执行。 ## 功能 - 车队监控:Canvas 2D 路网、机器人位置/朝向/电量/状态/告警 - 任务队列:按类别、状态、机器人过滤,查看详情,取消任务 - 任务下发:巡逻、机械臂动作、多阶段订单(compose) - 多阶段订单:选择主机器人,从其 bridge `/tasks` 读取任务文件列表,按序编排导航/任务步骤 - compose 任务链:支持插入断点,将链拆成多个 compose 依次下发;支持插入延时,在前一段完成后等待指定秒数再下发 - 任务模板:保存、编辑、复制、删除可复用任务,数据持久化到持久数据目录 - REST 轮询:车辆 2s、任务 3s、任务链 3s - 地图 fallback:`/building_map` 不可用时展示内置 `site/L1` 演示路网 ## 架构(后端化) ``` 浏览器(SPA,纯展示) │ 同源 /rmf-api(RMF 读写)、/rmf-admin(车队管理)、/api/compose-chains(任务链) ▼ Node server(server/index.mjs,单一执行者) ├── /rmf-api/* 通用代理 → RMF api-server(上游 RMF_API_SERVER_URL) ├── /rmf-admin/* 通用代理 → 车队适配器 admin(上游 FLEET_ADMIN_URL) ├── /api/compose-chains compose 引擎(等待/延时/下发/崩溃重启恢复) ├── /api/config 接收 token / 上游地址,落盘 server-config.json ├── /api/task-templates 模板 CRUD └── 状态持久化 → 持久数据目录(DATA_DIR) ``` - **compose 链不会重复下发**:执行状态机在服务端单进程,每段变更即落盘;服务重启自动恢复,兜底按 `chain_id`/`chain_seg` 标签查重 - **数据不随 Docker 重构丢失**:模板、任务链、配置都放在宿主机持久目录,由 volume 挂载 ## Docker 启动 ```bash cd /home/ln/data/Code/ros2/rmfdemo_ws/src/rmf_web ./deploy.sh # 一键:建数据目录 + 迁移旧模板 + 写 .env + 构建启动 + 健康检查(幂等可重跑) ``` 脚本做的事等价于手动执行下面步骤(想手动来也行): ```bash mkdir -p /home/reinovo/rmf-web-data cp data/task-templates.json /home/reinovo/rmf-web-data/ 2>/dev/null || true docker compose up -d --build ``` 默认访问:(容器使用 `network_mode: host`,直接绑定主机端口)。 > 完整部署 / 迁移 / 使用 / 运维 / 排查见 [`docs/部署与使用文档.md`](docs/部署与使用文档.md)。 常用覆盖项: ```bash RMF_API_SERVER_URL=http://127.0.0.1:8000 \ RMF_WEB_DATA_DIR=/home/reinovo/rmf-web-data \ RMF_WEB_UID=1000 \ RMF_WEB_GID=1000 \ docker compose up -d --build ``` > 建议在仓库根目录创建 `.env` 写入上述变量(参考 `.env.example`)。`RMF_WEB_DATA_DIR` 默认回退到仓库内 `./data`。 ## 本地开发 后端 API(compose 引擎 / 模板 / 配置)在 Node server 上,需要单独启动: ```bash npm install PORT=3000 node server/index.mjs # 后端 API + 静态服务 npm run dev # Vite 开发服务器(HMR) ``` 访问 。Vite 会把 `/rmf-api` 代理到 `VITE_API_PROXY_TARGET`(默认 `http://localhost:8000`),把 `/api` 代理到 `VITE_NODE_API_PROXY_TARGET`(默认 `http://localhost:3000`)。首次打开页面会自动把浏览器里的 Token / 上游地址推送给后端。 ## 构建检查 ```bash npm run typecheck npm run build ``` ## 目录 ```text src/ ├── api/ # axios 实例 + fleet/task/map/admin/composeChain/config API ├── stores/ # auth / fleet / task / map / taskTemplate / composeChain ├── types/ # RobotState / TaskState / BuildingMap / ComposeChain ├── composables/ # 轮询控制器 ├── views/ # Dashboard / TaskQueue / TaskTemplates / Scenario... ├── components/ # 地图、机器人卡片、任务表格、任务表单 ├── demo/ # 内置演示路网 └── server/ # Node:静态服务 + RMF 代理 + compose 引擎 + 数据持久化 ``` ## 认证 本地默认 api-server 使用固定 secret `rmfisawesome`,仓库内置一个不带 `exp` 的 JWT,因此开发环境无需手动配置 token。生产环境请通过 `VITE_RMF_TOKEN` 构建参数或页面右上角“设置”注入自己的 token;保存设置时 token 会推送到后端,供 `/rmf-api` 代理鉴权与 compose 链下发使用,落盘在持久数据目录的 `server-config.json`。