2026.05.13征图日记13(添加标定法测量)
上来就研究LiDAR对于微小表面的测量精度问题。发现激光雷达其实并不适合工业检测,但是作为展示还是够用。
关于mentor昨天提的一次标定+LiDAR测量方法,我持有怀疑态度,今天我搜了一下,发现市面上基本没有人这么做,要么是多此一举,要么就是精确度太拉垮
总之我是不太赞成这个方法的,如果硬要做,那就做呗。反正我只负责执行,他们也都不会听我的建议,我也只是个实习生公司又不是我家,学到东西就走。
- 微小表面测量的影响因素对于“微小表面”,LiDAR 的测量能力有明显限制:
最佳工作距离:0.5 - 5m
分辨率限制: LiDAR 属于中低分辨率传感器。对于特别小的物体(如毫米级零部件、精细纹理),LiDAR 很难获取足够的点云数据来重现表面细节。
表面材质: 光滑、透明或高反光(如镜子、玻璃、高亮金属)表面会严重影响激光反射,导致扫描结果空缺或产生误差。
设备稳定性: 抖动是提升测量精度的最大敌人。手持扫描时,手部轻微抖动会显著影响微小表面的测量结果。
- 应用定位
适用于: 室内快速建模、物体表面轮廓扫描、增强现实(AR)物体放置、家具尺寸测量等。
不适用于: 工业级高精度零件测量、微米级裂纹检测等需要微米级或亚微米级精度的工业计量任务。
总结: 苹果的 LiDAR 擅长记录大尺寸的微小形变或宏观结构,对于米级物体的表面起伏表现良好,但对于毫米级的微观纹理则处于其能力边界之外。
下午主要就是把之前写好但是没用的标定法代码的入口加上,做了一下两种方法测量结果的数据隔离问题,还有检测结果、标定界面的操作逻辑的优化
今天摸鱼摸爽了~
AI的知识深度肯定比你深,那么知识的深度不像之前那么重要了,因为 AI 比人了解的更深,但是知识的广度很重要,这个可以在使用 AI 出现问题后,人来及时纠正。那么如何提升知识广度呢?你需要自己去学,怎么学?问 AI 啊~那么其实这里面最重要的就是你需要自己去学,就是主观能动性,也就是自驱力。
不管是上班刷L站也好还是下班刷dy,都有很多关于AI,就业,裁员的信息,总是在担心自己的未来,但是朋友我们不应该活在当下吗?好好感受一下下班出公司大楼的时候迎面而来的微风,感受下班的夕阳,想想今天又要薅公司的晚饭还是零食饮料,感受健身房的杠铃今天有没有变重,想想今天晚上练完吃什么,周末要去哪玩。这些才是我们应该更多考虑的
要把自己从这个虚拟世界里面割离出来,接触真实的人,感受真实的世界
最后,一边看力扣的第31题:下一个排列的题解,一边坐等下班!~
写完了,还有半小时下班,再摸会鱼~
今日工作内容:
1、研究LiDAR对于微小表面的测量精度问题
2、研究一次标定+LiDAR测量方法
3、app添加标定测量方法
4、简化检测结果界面
下阶段计划
1、标定界面交互优化
2、持久化标定数据
3、历史记录测量方法隔离
会话总结:测量方法切换功能实现
日期:2026-05-13
任务:measurement-method-switch
状态:代码已完成,待提交
一、需求概述
在设置页添加测量方法切换(LiDAR 法 / 标定法),优化标定流程的交互体验,修复数据持久化和历史记录的测量方法隔离问题。
二、实现内容
1. 设置页测量方法切换
文件:mobile/src/screens/SettingsScreen.tsx
- 添加 SegmentedControl 切换 LiDAR / 标定法
- LiDAR 模式:显示默认距离、fx/fy 参数
- 标定法模式:仅显示默认参照物长度(mm),移除了手动 fx/fy 输入
- 切换时自动保存到
settingsStore
2. 标定流程修复
文件:mobile/src/screens/ResultScreen.tsx
问题:标定法下点击「测定缺陷面积」直接输出数据,没有进入标定流程。
修复:
- 新增
calibrating、draftLine、draftRefLength状态 - 点击按钮 → 弹出全屏标定 Modal → 用户绘制标定线 → 确认 → 计算面积
handleCalibrationDone()校验参照物长度 > 0 后保存标定数据到 store- 新增「再次标定」按钮(标定法下,测量完成后显示)
标定流程:
1 | 点击「测定缺陷面积」 |
3. 检测结果界面优化
DetectionCanvas(mobile/src/components/result/DetectionCanvas.tsx):
- 移除图片上的文字标签、置信度、面积信息
- 仅保留检测框轮廓(SVG Rect)
DetectionList(mobile/src/components/result/DetectionList.tsx):
- 默认视图:缺陷类型 + 面积(如有)
- 点击展开:置信度进度条 + 百分比 + bbox 坐标 + 面积详情
- 使用
borderLeft替代独立的colorBar元素,解决布局问题
4. 标定交互优化
文件:mobile/src/components/result/CalibrationOverlay.tsx
替换把手样式:圆圈点 → 十字箭头(22×22,由两条 2px 线段组成)
解决手指遮挡问题:
- 新增
AnimatedCrosshair组件 - 每个端点有十字准星线:水平线贯穿容器宽度,垂直线贯穿容器高度
- 准星线本身可拖拽(40px 触摸区域,
minDistance(0)) - 使用 Reanimated
useAnimatedStyle实时跟随拖拽 - 水平线定位:
top: fitDy + normY * fitDh - 20 - 垂直线定位:
left: fitDx + normX * fitDw - 20 - SVG 标定线层:
pointerEvents="none"确保触摸穿透
5. 数据持久化修复
文件:mobile/src/store/inferenceStore.ts
问题:应用退到后台再回来,标定数据丢失。
修复:在 partialize 中新增持久化字段:
1 | partialize: state => ({ |
6. 历史记录测量方法隔离
文件:mobile/src/hooks/useInference.ts
问题:设置改为标定法后,从历史进入 LiDAR 时期的记录,会用标定法重新计算面积。
修复:
- 推理时将当前测量方法写入
HistoryRecord.measurementMethod measurementSession按方法分别存储所需数据:- 标定法:
calibrationLine+referenceLengthMm - 距离法:
cameraDistanceMm+fx+fy - LiDAR:
depthSnapshot+fx+fy
- 标定法:
文件:mobile/src/types/models.ts
HistoryRecord新增measurementMethod?: MeasurementMethod字段
文件:mobile/src/screens/ResultScreen.tsx
- 新增
effectiveMethod = data?.savedMethod ?? measurementMethod - 所有内部计算使用
effectiveMethod,历史记录优先使用保存的方法
7. 运行时错误修复
DetectionCanvas:import i18n from '@/i18n' 改为 useTranslation() hook,解决模块加载顺序导致的 Property 'i18n' doesn't exist 错误。
三、涉及文件清单
| 文件 | 变更类型 |
|---|---|
mobile/src/screens/SettingsScreen.tsx |
新增测量方法切换 UI |
mobile/src/screens/ResultScreen.tsx |
标定流程 + 方法隔离 + 再次标定 |
mobile/src/components/result/CalibrationOverlay.tsx |
十字准星 + 箭头把手 |
mobile/src/components/result/DetectionCanvas.tsx |
移除文字标签 |
mobile/src/components/result/DetectionList.tsx |
默认折叠 + 展开详情 |
mobile/src/store/inferenceStore.ts |
持久化标定数据 |
mobile/src/hooks/useInference.ts |
按方法分别存储测量会话 |
mobile/src/types/models.ts |
新增 measurementMethod 字段 |
四、已知问题与后续
- 代码已全部完成,尚未提交 git commit
- 任务
measurement-method-switch状态仍为planning,需执行task.py start后才能正常 finish-work