最后更新: 2025-11-06
当前状态: 🚧 进行中 (Phase 1 已完成)
████████░░░░░░░░░░ 40% 完成 (5/13 任务)
| 阶段 | 任务 | 状态 | 完成时间 |
|---|---|---|---|
| Phase 1 | ✅ 创建主页面组件 | 已完成 | 2025-11-06 |
| Phase 1 | ✅ 创建 Vuex Store 模块 | 已完成 | 2025-11-06 |
| Phase 2 | ⏳ 创建 3D 渲染组件 | 待实施 | - |
| Phase 3 | ⏳ 创建 Web Workers | 待实施 | - |
| Phase 4 | ⏳ 创建工具类 | 待实施 | - |
文件: src/views/map/vslam/index.vue
功能特性:
MQTT 主题订阅:
- /exploration/localization/pose // 机器人位姿
- /visualization/object // 可视化对象
- /exploration/planning/trajectory // 规划轨迹
- /ability/function/action/exec/state // 动作执行状态
关键方法:
handlePoseUpdate() - 处理位姿更新handleVisualizationObject() - 显示检测对象handlePlanningTrajectory() - 显示规划路径handleViewChange() - 切换视角handleBootToggle() - 引导模式开关requestFullscreen() / exitFullscreen() - 全屏控制文件: src/store/modules/vslam.js
状态树结构:
{
mapName: '', // 地图名称
currentView: 5, // 当前视角 (1-5)
bootModeIsCheck: false, // 引导模式
runningState: false, // SLAM 运行状态
robotPosition: {x,y,z}, // 机器人位置
robotVisiable: false, // 机器人可见性
replayState: 0, // 回放状态
fullScreen: {}, // 全屏配置
uiConfig: {}, // UI 配置
// ... 更多状态
}
Mutations (15个):
SET_MAP_NAME - 设置地图名SET_CURRENT_VIEW - 设置视角SET_BOOT_MODE - 设置引导模式SET_RUNNING_STATE - 设置运行状态SET_ROBOT_POSITION - 更新位置Actions (20个):
updateMapName - 更新地图名setCurrentView - 切换视角setBootMode - 切换引导模式vslamClear - 清空所有数据Getters (8个):
mapName - 获取地图名isBootMode - 是否引导模式isRunning - 是否运行中robotPosition - 机器人位置已注册到主 Store:
// src/store/index.js
import vslam from './modules/vslam'
modules: {
// ...
vslam // ✅ 已注册
}
pns-web/
├── src/
│ ├── views/map/vslam/
│ │ ├── index.vue ✅ 主页面组件
│ │ ├── components/ 📁 组件目录已创建
│ │ └── utils/ 📁 工具目录已创建
│ │
│ ├── store/modules/
│ │ └── vslam.js ✅ Vuex Store 模块
│ │
│ └── datastruct/proto/ 📁 Protobuf 目录已创建
│
├── VSLAM_MIGRATION_PLAN.md ✅ 详细移植方案
└── VSLAM_PROGRESS.md ✅ 本进度报告
文件: src/views/map/vslam/components/VSlamView.vue
需要实现的功能:
技术要点:
目标目录: public/workers/
需要创建的文件:
StatisticsWorker.js - 统计信息轮询
/v1/vslam/statistics?map={mapName}KeyframeWorker.js - 点云数据获取
/v1/vslam/keyframe/cloud?map={map}&idx={idx}KeyframeTransWorker.js - 变换矩阵获取
/v1/vslam/keyframe/trans?map={map}&idx={idx}技术要点:
public/ 下,通过绝对路径引用文件: src/views/map/vslam/utils/CreateMesh.js
需要实现的类:
CreateGroundMesh - 地面网格CreateFlowmark - 点击波纹效果CreateObjectBox - 3D 边界框CreateShapMesh - 路径形状CreatePlaybackeMesh - 回放路径可直接复制: ✅ robot_map_editor 的 CreateMesh.js(纯 JS,无框架依赖)
文件: src/views/map/vslam/utils/Utils.js
核心函数:
genParticles() - 生成点云粒子系统
arraysEqual() - 数组比较工具可直接复制: ✅ robot_map_editor 的 Utils.js
步骤:
安装依赖
npm install google-protobuf@3.21.4 --save
复制 proto 文件
# 从 robot_map_editor 复制
robot_map_editor/proto/*.proto → pns-web/proto/
robot_map_editor/src/datastruct/proto/*.js → pns-web/src/datastruct/proto/
创建解析工具
// src/datastruct/proto/parser.js
import kfcloud from './pointcloud_pb'
import kftrans from './transform_pb'
export function parsePointcloud(arrayBuffer) {
return kfcloud.PointcloudType.deserializeBinary(new Uint8Array(arrayBuffer)).toObject()
}
export function parseTransform(arrayBuffer) {
return kftrans.Transform.deserializeBinary(new Uint8Array(arrayBuffer)).toObject()
}
文件: src/api/map/vslam.js
需要实现的接口:
// 统计信息
getVSlamStatistics(mapName)
// 点云数据
getKeyframePointcloud(mapName, idx)
// 变换矩阵
getKeyframeTrans(mapName, idx)
// 闭环详情
getClosureDetails(mapName, idx)
// URL 生成器(供 Workers 使用)
urlVSlamStatistics(mapName)
urlKeyframePointcloud(mapName, idx)
urlKeyframeTrans(mapName, idx)
API 前缀: /pns
文件: src/views/map/vslam/components/VSlamControlPanel.vue
功能模块:
UI 框架: Element UI Drawer + Form + Switch
文件: src/views/map/vslam/components/VSlamToolbar.vue
功能模块:
UI 框架: Element UI Breadcrumb + Button
状态: ✅ 已在主页面中实现基础框架
待完善:
发布主题:
${prefix}/exploration/guidance // 引导点
${prefix}/joy/command // 手动控制
${prefix}/param/setup // 参数配置
文件: src/router/index.js
路由配置:
{
path: '/map/vslam/:mapName',
name: 'VSlamPreview',
component: () => import('@/views/map/vslam/index'),
meta: {
title: 'VSLAM 建图预览',
icon: 'el-icon-view',
noCache: true
}
}
跳转方式:
this.$router.push({
name: 'VSlamPreview',
params: { mapName: 'my_map_001' }
})
测试类型:
1. 功能测试
2. 性能测试
3. 兼容性测试
紧急且重要 ⚡
重要但不紧急 📋
紧急但不重要 ⏰
不紧急不重要 📝
| 任务类型 | 预计工时 | 难度 |
|---|---|---|
| VSlamView 组件 | 2天 | ⭐⭐⭐⭐⭐ |
| Web Workers | 0.5天 | ⭐⭐ |
| 工具类复制 | 0.5天 | ⭐ |
| Protobuf 配置 | 0.5天 | ⭐⭐ |
| API 封装 | 1天 | ⭐⭐⭐ |
| UI 组件 | 1.5天 | ⭐⭐⭐ |
| MQTT 集成 | 0.5天 | ⭐⭐ |
| 路由配置 | 0.1天 | ⭐ |
| 测试调试 | 1天 | ⭐⭐⭐⭐ |
| 总计 | ~8天 | - |
确保后端实现了以下 API:
/v1/vslam/statistics/v1/vslam/keyframe/cloud/v1/vslam/keyframe/trans/v1/vslam/closure/details (可选)确保 MQTT Broker 支持以下主题:
/exploration/localization/pose/visualization/object/exploration/planning/trajectory/exploration/guidance/joy/commandVSLAM_MIGRATION_PLAN.md如有问题或需要技术支持,请联系项目负责人。
生成时间: 2025-11-06
版本: v1.0
状态: 🚧 进行中