Web 可视化控制台
FastSim 提供一套基于浏览器的 Web 可视化控制台,涵盖仿真全生命周期的三大核心功能:配置编辑、实时监控和录制分析。Web 控制台作为独立进程运行,与仿真进程完全解耦——你可以在没有运行仿真时使用配置编辑器和录制查看器,也可以在仿真运行中实时监控状态。
启动
# 启动 Web 控制台(推荐方式)
joysim_web
# 指定端口
FASTSIM_WEB_PORT=3000 joysim_web
| 配置项 | 默认值 | 说明 |
|---|---|---|
FASTSIM_WEB_PORT | 8080 | Web 控制台监听端口(环境变量) |
| 绑定地址 | 0.0.0.0 | 允许外部访问 |
启动后在浏览器中访问:
http://localhost:8080
架构概览
- Web 控制台是独立的 Flask + Socket.IO 服务,通过子进程管理仿真
- 实时状态通过 WebSocket 推送(仿真进程在 stdout 中输出
__JOYSIM_STATE__:前缀的 JSON 行) - 相机画面通过 POSIX 共享内存实现零拷贝传输,延迟极低(~0.1ms 写入侧)
- 仿真进程内置的 REST API(端口 5000)可通过 Web 控制台的代理接口
/api/sim-proxy/*调用
功能模块
Web 控制台包含四个主要页面,通过顶部导航栏切换:
Config — 配置向导
可视化的配置文件编辑器,以分步引导的方式创建或编辑仿真配置。
点击放大 五步配置流程
配置向导将完整配置拆分为 5 个步骤,逐步引导填写:
| 步骤 | 内容 | 说明 |
|---|---|---|
| Step 1 | General | 项目扫描、资产路径映射、日志配置 |
| Step 2 | Simulation | 仿真后端选择、物理参数、渲染参数 |
| Step 3 | Scene | 机器人、物体、传感器、光源的声明与参数编辑 |
| Step 4 | Task | 动作序列编排、目标条件定义 |
| Step 5 | Extension | 扩展功能配置(录制、遥操作、任务执行器等) |
主要特性
- 加载已有配置:顶部输入配置文件路径,支持 YAML / JSON /
.sim格式 - 动态表单生成:根据 stereotype 自动渲染对应的参数表单(字段类型、默认值、约束条件均从源码自动提取)
- 实时校验:填写过程中自动校验字段合法性
- 多格式导出:完成编辑后可导出为 YAML、JSON 或
.sim三种格式
点击放大 任务步骤中可以可视化编辑每个 action 的完整参数,包括目标物体配置(MoveTargetConfig)、位姿配置(MovePoseConfig)、规划器附着配置(PlannerAttachConfig)等嵌套子配置。
点击放大 扩展步骤中展示所有已注册的扩展类型,支持启用/禁用切换,以及每个扩展的详细参数编辑(如 observer 列表、录制参数等)。
Monitor — 实时监控
仿真运行时的实时状态监控面板。左侧边栏提供四个子面板:Overview、Detail、Charts 和 API。
启动仿真
在监控页面中直接启动仿真:
- 在顶部地址栏输入配置文件路径
- 点击右上角 Launch 按钮
- 仿真以子进程启动,状态通过 WebSocket 实时推送到页面
也可以先在 Config 页面编辑好配置,保存后切换到 Monitor 页面启动。
Overview — 概览面板
点击放大 概览面板提供仿真运行的全局视图,分为四个区域:
| 区域 | 内容 |
|---|---|
| SIMULATION | 仿真步数(step)、FPS、时间步长(dt)、已用时间(elapsed)、配置文件路径 |
| TASK | 任务名称与描述、动作列表及执行状态(等待/执行中/完成),以时间线形式展示进度 |
| SCENE | 场景实体摘要 — 机器人(位置/旋转)、物体列表、传感器列表,实时更新 |
| CONSOLE | 实时日志输出流,按级别着色(DEBUG/INFO/WARNING/ERROR),显示每条日志的时间戳和来源模块 |
页面右上角提供 Launch(启动仿真)和 Stop(终止仿真)按钮。
Detail — 详情面板
点击放大 详情面板提供仿真中每个实体的深度状态展示:
- 机器人状态:列出每个关节的实时位置值(带进度条可视化)、末端执行器位姿(位置 xyz + 四元数 wxyz),支持多臂机器人分臂显示
- 物体状态:每个物体的位置、旋转、stereotype 标签、物理属性(mass / density / kinematic 等)
- 相机画面:实时渲染的相机图像,按相机名称分组,显示图像分辨率和数据类型(rgb / depth / normals),点击可放大查看
Charts — 图表面板
点击放大 实时数据图表面板,以可视化曲线展示仿真过程中的动态数据:
- 关节位置/速度曲线:选择目标机器人和关节,实时绘制关节轨迹(Position 和 Velocity 双图对照)
- 末端执行器位置:EE 的 xyz 位置随时间变化的轨迹
- 物体追踪:场景中物体位置的实时变化曲线
顶部可选择关注的机器人和关节,图表自动更新。
API — 接口调试面板
点击放大 内置的仿真 REST API 浏览器,可直接在浏览器中调用仿真进程通过 @apiclass 注册的所有控制器方法:
- 左侧树形目录:按控制器分组列出所有可用 API 端点(spawnable / robot / motion_plan / visualize / simulator / action 等)
- 右侧调用面板:选中某个端点后显示其参数表单,填写参数后点击 Send Request 即可发送请求
- 参数类型自动推断,包括字符串、数字、布尔、枚举选项等
- 响应结果以 JSON 格式展示
此面板等价于在终端中使用 curl 调用仿真的内置 REST API(端口 5000),但提供了图形化的参数填写和响应查看体验。
Recording — 录制查看器
仿真结束后的录制数据分析工具,支持任务回顾、视频回放、HDF5 数据浏览和轨迹曲线分析。
加载录制
在顶部输入录制输出目录路径,点击 Load 加载。系统会自动检索目录中的 task_summary.json、HDF5 文件和视频文件。
任务总结与录制视频
点击放大 页面上方为任务总结区域:
- ACTIONS:列出任务执行的所有 action,每个 action 显示 stereotype 标签(如 release / pick / place)、描述文本、目标物体、以及 goal 评估结果
- GOALS:显示最终目标条件的评估结果(成功/失败),包括具体的判定参数(如位置偏差、物体匹配关系等)
页面下方为视频区域:
- 自动检索录制目录中的所有
.mp4视频文件,以缩略图网格展示 - 支持多相机(Hand_Camera / Left_Camera / Right_Camera 等)× 多数据类型(rgb / depth / normals)的组合视频
- 点击缩略图即可播放
HDF5 数据浏览
点击放大 以表格形式展示 HDF5 录制文件中的所有数据集,显示录制元信息(创建时间、总帧数、导出版本、schema 版本、文件大小)。每个数据集显示:
- Path:数据集路径(如
robot_observer/Franka/joint_positions) - Shape:数据维度(如
[258, 7]表示 258 帧、7 个关节) - Dtype:数据类型(float64 / float32 / object / bool 等)
- Compressed:是否使用 gzip 压缩
点击任意数据集行可展开查看其详细内容(数组预览、统计信息等)。
轨迹曲线分析
点击放大 交互式的轨迹可视化,用于分析录制数据中的运动轨迹。顶部提供预置模式标签,点击切换:
| 预置 | 含义 |
|---|---|
joint_pos | 关节位置 |
joint_vel | 关节速度 |
ee_pos | 末端执行器位置 |
ee_quat | 末端执行器四元数 |
obj_pos | 物体位置 |
gripper | 夹爪状态 |
图表下方的 RAW FRAMES 区域按 observer 分组显示原始帧数量(如 robot_observer / sensor_observer / object_observer / task_observer),可用于快速确认数据完整性。
Home — 首页
Web 控制台的首页 / Dashboard,提供快速导航入口。
与仿真内置 REST API 的关系
FastSim 有两套 HTTP 服务:
| 服务 | 端口 | 启动方式 | 用途 |
|---|---|---|---|
| Web 控制台 | 8080 | joysim_web | 浏览器 UI(配置/监控/录制) |
| 仿真内置 REST API | 5000 | 配置中启用 server 扩展 | 程序化调用(curl / Python 脚本) |
Web 控制台通过内置代理 /api/sim-proxy/* 转发请求到仿真的 5000 端口,因此在 Monitor 页面的 API 面板中可以直接调用仿真的所有 REST API。
如果只需要程序化 REST API 而不需要浏览器界面,在配置中启用 server 扩展即可:
extension:
extension_cfg_dict:
my_server:
stereotype: server
enable: true
port: 5000
详见扩展功能配置 - server和 Server REST API 参考。
Web 控制台 API 参考
Web 控制台自身也提供一组 REST API,可用于自动化集成:
仿真管理
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/simulation/start | 启动仿真(参数:{config_path} ) |
| POST | /api/simulation/stop | 终止仿真 |
| GET | /api/simulation/status | 获取仿真状态(running / step / dt / fps / elapsed) |
| GET | /api/simulation/state | 获取所有状态命名空间的快照 |
| GET | /api/simulation/logs?limit=200 | 获取最近 N 条日志 |
配置管理
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/config/load | 加载配置文件(参数:{path} ) |
| POST | /api/config/validate | 校验配置(参数:config dict) |
| POST | /api/config/save | 保存配置(参数:{data, path, format} ) |
| POST | /api/config/export | 导出为三种格式 |
| GET | /api/config/stereotypes | 获取所有 stereotype 的字段 schema |
监控与相机
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/monitor/state | 获取全部状态快照 |
| GET | /api/monitor/state/<ns> | 获取指定命名空间的状态 |
| GET | /api/camera/frames | 获取所有相机的当前帧(base64 JPEG) |
录制分析
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/recording/inspect | 检查录制目录/HDF5(参数:{path} ) |
| GET | /api/recording/video?path=... | 获取视频文件流 |
| POST | /api/recording/trajectory | 提取轨迹数据(参数:{h5_path, preset} ) |
| POST | /api/recording/dataset | 读取 HDF5 数据集(参数:{h5_path, dataset_path} ) |
仿真 API 代理
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/sim-proxy/<endpoint> | 转发到仿真内置 REST API(端口 5000) |