重构 Autocal 采集页:单一队列与控制器驱动的主按钮

选点、对准、加载与录像分散在两个面板,状态靠隐藏相位判断。现改由不依赖 Qt 的采集控制器驱动,并加入录像选项、汇总平铺副本、保持到时自动结束、会话结束回到空闲,以及无设备时的模拟采集。已运行 Autocal 非 Qt 测试并通过范围内门禁;界面测试待 Windows 复核,未做实机验收。
This commit is contained in:
ykcheungab
2026-10-18 16:04:32 +08:00
parent 85d0b396e3
commit 06e06126ca
44 changed files with 7769 additions and 2218 deletions
+164 -34
View File
@@ -230,7 +230,7 @@
"workspace": {
"tab_axes": "轴调试",
"tab_sequence": "测试序列",
"tab_finger": "手指调试",
"tab_finger": "几何与安装",
"tab_sensor": "标定采集",
"tab_records": "标定记录",
"not_built": "尚未实现",
@@ -338,7 +338,6 @@
"remove": "删除所选",
"up": "上移",
"down": "下移",
"import_points": "从手指调试导入",
"align": "对齐法向",
"reacquire": "补采所选",
"source": "参考力来源",
@@ -410,7 +409,7 @@
"capture_wait": "录像未就绪,暂时不能确认保持"
},
"finger": {
"title": "手指标定点调试",
"title": "几何与安装",
"bundle_path": "导出包",
"load": "载入导出包…",
"reset_view": "复位视角",
@@ -421,8 +420,7 @@
"flat_title": "展开平面图(点击选点)",
"readout_title": "读数",
"preview_title": "三维预览",
"points_title": "已选标定点",
"select_hint": "在展开图上点击一点以选取标定点。",
"select_hint": "在展开图上点击一点以试算该点的姿态。",
"no_bundle": "尚未载入导出包。",
"no_surface": "像素 ({x}, {y}) 不在传感面上(UV 空隙)。",
"row_sensor_point": "传感器坐标 (mm)",
@@ -453,14 +451,7 @@
"sensor_xy": "传感器 X / Y",
"sensor_zy": "传感器 Z / yaw",
"setup_hint": "传感器在转台零位时相对工作台原点的实际安装位姿:X/Y/Z 平移与绕 Z 的偏摆。Z 为安装板厚度,当前安装台是 8 mm。",
"clear_points": "清空标定点",
"remove_selected": "删除所选",
"move_up": "上移",
"move_down": "下移",
"selected_count": "已选 {count} 点",
"table_hint": "勾选复选框选中该点;双击传感器坐标或法向即可修改。位姿列由这些数值解算得出,会自动更新。",
"edit_not_a_number": "该单元格需要数字,已保留原值。",
"point_count": "共 {count} 点",
"residual_value": "{residual}° — {verdict}",
"reachable": "该点法向可与 Z 轴对齐",
"unreachable": "该点法向无法与 Z 轴对齐(受 yaw 行程限制)",
@@ -482,28 +473,9 @@
"preview_no_gl": "无 OpenGL 上下文:{error}",
"preview_draw_failed": "绘制失败:{error}",
"preview_solve_failed": "求解失败:{error}",
"col_x": "x",
"col_y": "y",
"col_z": "z",
"col_nx": "nx",
"col_ny": "ny",
"col_nz": "nz",
"col_X": "X",
"col_Y": "Y",
"col_Z": "Z",
"col_yaw": "yaw",
"col_pitch": "pitch",
"col_residual": "残差(°)",
"loaded": "已载入导出包:{vertices} 顶点 · {triangles} 三角面 · {extent} mm · 每单位 {scale} mm",
"load_failed": "载入失败: {error}",
"picked": "已选点:残差 {residual}° · yaw {yaw}° · pitch {pitch}°",
"export_sites": "导出测点操作表…",
"export_sites_tip": "按当前列表顺序导出全部测点的 U/V 像素、传感器与平台毫米坐标;与标定页共用 UV 原点。",
"export_no_points": "请先在 UV 图上选择测点",
"export_edited_point": "第 {order} 点的三维位置已改动,与原 UV 像素不一致;请重新在图上选点后导出",
"sites_exported": "已导出测点操作表:{path}",
"col_u_px": "U (px)",
"col_v_px": "V (px)"
"picked": "已选点:残差 {residual}° · yaw {yaw}° · pitch {pitch}°"
},
"sequence": {
"title": "测试序列设计",
@@ -671,7 +643,8 @@
"guide_incomplete": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:查看结束原因及已录曲线,决定补采;未完成试验不参与拟合。",
"guide_check": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:选择单次试验,点击“检查保持段…”;必要时调整时间区间。",
"guide_save": "① 核对身份 → ② 选测点/试验 → ③ 检查稳定段 → ④ 保存\n下一步:继续检查剩余保持段,或保存当前分析结果。",
"video": "查看录像"
"video": "查看录像",
"video_not_recorded": "按设置未录视频"
},
"quality": {
"open": "重复性与验证…",
@@ -780,6 +753,163 @@
"retry": "重新导出汇总",
"done": "汇总已重新发布:{path}",
"reason_hold_not_found": "记录中找不到这个保持尝试",
"reason_hold_not_complete": "这个保持尝试已被重测废弃,没有可复核的画面"
"reason_hold_not_complete": "这个保持尝试已被重测废弃,没有可复核的画面",
"copy_failed": "汇总已发布,但可读副本没有写成:{detail}。指针仍指向已发布的汇总,采集结果未改变。"
},
"cap": {
"check": {
"bundle": "标定包",
"frames": "输入出帧",
"bus": "总线与轴映射",
"output": "输出目录可写",
"sn": "传感器 SN",
"max_force": "最大力"
},
"action": {
"start": "开始采集",
"align": "对准当前点",
"confirm_target": "已到目标力,开始保持",
"confirm_hold": "保持完成,记录本档",
"confirm_liftoff": "确认压头已脱离",
"finish": "结束会话",
"remeasure": "重测本档",
"skip": "跳过本点",
"stop": "停止并保留数据",
"open_session": "打开会话文件夹",
"open_summary": "打开汇总",
"copy_path": "复制路径",
"settings": "更改输入/标定包…"
},
"block": {
"closing": "正在写盘,等待收尾完成",
"align_while_recording": "正在录制,不能移动平台去对准其它点",
"skip_live": "这一档已经开始录制,不能跳过",
"no_directory": "还没有会话目录",
"no_summary": "还没有汇总;结束本场标定后自动发布",
"not_ready": "还有未满足的检查项,见上方 Ready 列表",
"no_sites": "队列里还没有测点",
"no_session": "还没有配置会话参数(输出目录、型号、SN 等)",
"no_solver": "没有接上姿态求解器,不能对准",
"no_pose": "这个点还没有解出可用的姿态",
"hold_running": "保持时间还没到",
"remeasure_unavailable": "当前没有可重测的档位",
"stop_unavailable": "没有进行中的会话可停止",
"finish_unavailable": "会话还没有结束,不能点结束",
"skip_unavailable": "程序没有提供跳过当前点的推进接口,本版不能跳过",
"busy": "当前阶段不能执行这个动作",
"no_bundle": "还没有载入标定包(导出包)",
"no_uv": "先在 UV 图上点选位置",
"no_output": "先选择保存目录",
"no_sn": "先填写传感器 SN",
"no_max_force": "先填写最大力 (N)",
"queue_busy": "会话进行中,不能修改测点队列",
"bundle_busy": "会话进行中,不能更换标定包",
"no_worker": "输入没有运行,无法开始录像",
"bad_levels": "加载档位需要严格递增、每档大于 0 且不超过最大力",
"bad_reference": "人工参考力不是有效数字",
"align_running": "对准移动还在进行,请等它完成",
"pose_unreachable": "当前安装或行程下这个点不可达,已禁止对准"
},
"session": {
"active": "本场标定:{sites} 个测点 · 进度 {done}/{total} 档\n{path}",
"none": "尚未建立本场标定;对准第一点后点「开始采集」创建。",
"settings_hint": "输入源、标定包、会话参数与录像选项都在「更改输入/标定包…」里;开始试验不会切换页面。"
},
"queue": {
"title": "测点队列",
"empty": "队列里还没有测点:在 UV 图上点选位置,填好档位后点「添加当前点」。",
"add": "添加当前点",
"update": "更新选中",
"remove": "删除选中",
"up": "上移",
"down": "下移",
"site_id": "测点编号",
"repeats": "重复次数",
"current_uv": "当前 UV",
"col_id": "测点",
"col_position": "传感器位置 (mm)",
"col_repeats": "重复进度",
"col_reachable": "可达性",
"col_state": "状态",
"reachable": "可达",
"unreachable": "不可达",
"state_pending": "待采",
"state_partial": "进行中",
"state_complete": "已完成",
"state_skipped": "已跳过",
"selected": "当前选中:{site}",
"update_short": "更新",
"remove_short": "删除",
"export": "导出测点操作表…",
"export_tip": "按当前队列顺序导出 U/V、传感器坐标、平台目标与映射身份;坐标与映射不符时拒绝导出。",
"export_saved": "已导出操作表:{path}",
"export_no_points": "队列里还没有测点",
"export_no_map": "还没有载入 UV 映射,无法导出操作表",
"export_missing_uv": "第 {order} 点没有 UV 坐标,无法导出操作表",
"export_no_pose": "第 {order} 点还没有解出姿态,无法导出操作表",
"export_edited_point": "第 {order} 点的传感器坐标与当前 UV 映射不符;请重新取点后再导出。"
},
"card": {
"title": "当前点",
"no_point": "队列是空的:先添加测点。",
"no_progress": "开始后显示进度。",
"next_site": "下一测点:{site}"
},
"step": {
"align_point": "① 对准当前点",
"start_session": "② 开始采集",
"confirm_target": "③ 到达目标力,开始保持",
"confirm_hold": "④ 保持完成,记录本档",
"confirm_liftoff": "⑤ 确认离开,换到下一个点",
"finish_session": "⑥ 结束会话",
"closing": "正在写盘"
},
"hint": {
"align_point": "先对准:点主按钮确认移动计划,平台到位并确认后才会出现「开始采集」。",
"start_session": "本点已对准。点主按钮建立本场标定,并从第一个点开始逐档记录。",
"not_ready": "标记 ✗ 的检查项满足后才能开始;鼠标停在标记上可看原因。",
"confirm_target": "按当前档位加载到目标力,填写人工参考力(或六维力分量)后点主按钮。",
"confirm_hold": "保持中:剩余 {seconds:.1f} s;请勿换档。",
"confirm_liftoff": "这一轮记录完成。抬起接触头、确认压头已脱离传感器,再点主按钮换到下一个点。",
"finish_session": "全部记录已写入。点主按钮结束本场标定并发布汇总。",
"closing": "正在写盘并检查录像;收尾完成前不能继续。"
},
"message": {
"aligning": "已发出对准请求:{site}。移动完成并确认后才会允许开始采集。",
"aligned": "已确认对准:{site}",
"align_failed": "对准未完成:{detail}。平台没有确认到位,请重新对准。",
"started": "已开始本场标定:{path}",
"attach_failed": "无法开始录像:{detail}",
"queue_added": "已添加测点 {site}",
"queue_removed": "已删除测点 {site}",
"skipped": "已跳过测点 {site}",
"stopped": "已停止,已写入的数据保留。",
"done": "本场标定已结束:{path}"
},
"recording": {
"title": "录像",
"video": "录制视频",
"codec": "视频编码",
"lossless": "同时保存无损帧",
"unavailable": "{codec}:本机不可用,已禁用",
"probe_failed": "编码探测没有运行:{detail}",
"off": "按设置不录视频",
"estimate": "预计占用 {size}({seconds});磁盘剩余 {free}",
"disk_short": "磁盘剩余不足估算体积的两倍",
"no_plan": "队列为空,暂时无法估算体积",
"locked": "会话建立后录像选项锁定",
"summary": "录像:{codec}"
},
"settings": {
"title": "采集设置",
"input": "输入源",
"bundle": "标定包(导出包)",
"bundle_none": "未载入",
"bundle_load": "载入导出包…",
"session": "会话参数",
"simulate": "模拟运行(不接相机、不移动平台)",
"close": "关闭",
"max_required": "必须填写,程序不预设"
}
}
}