This commit is contained in:
ywb
2026-06-09 13:53:37 +08:00
parent a4f4be4c8e
commit 48121b2a05
4 changed files with 14 additions and 10 deletions
+1 -5
View File
@@ -769,11 +769,7 @@ def api_mission_config_set():
gs.mission_config["cols"] = cols
gs.mission_config["grid"] = grid
gs.mission_config["arm_initial_pose"] = arm_initial_pose
# 清除超出网格边界的 positions(只保留 front/back 且 row<=rows, col<cols
gs.mission_config["positions"] = [
p for p in gs.mission_config.get("positions", [])
if p.get("row", 0) <= rows and p.get("col", 0) < cols and p.get("side") in ("front", "back")
]
# 点位数据始终保留,不随网格变更删除
save_json("mission_config.json", gs.mission_config)
return jsonify({"ok": True, "config": gs.mission_config})
+2 -2
View File
@@ -1057,10 +1057,10 @@ a:hover { text-decoration: underline; }
@keyframes navPulse { 0%,100% { border-color: #4caf50; } 50% { border-color: #1b5e20; } }
/* 机器单元格状态 */
.machine-cell { min-height: 62px; padding: 6px 8px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; }
.machine-cell { min-height: 62px; padding: 6px 8px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; overflow: hidden; }
.machine-label { font-size: 12px; font-weight: 600; color: #ccc; }
.machine-steps-mini { display: flex; gap: 8px; font-size: 13px; }
.machine-qr-mini { font-size: 10px; color: #4fc3f7; max-width: 80px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.machine-qr-mini { font-size: 10px; color: #4fc3f7; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.empty-cell { color: #445566; font-size: 12px; }
/* 步骤圆点 */
+1 -1
View File
@@ -140,7 +140,7 @@
<span class="step-dot" :class="'dot-'+getMachineField(ri-1,c-1,'front')" title="正面照">📸正</span>
<span class="step-dot" :class="'dot-'+getMachineField(ri-1,c-1,'back')" title="背面照">📸背</span>
</div>
<div v-if="getMachineField(ri-1,c-1,'qr_val')" class="machine-qr-mini">🏷 {% raw %}{{ getMachineField(ri-1,c-1,'qr_val').substring(0,6) }}{% endraw %}</div>
<div v-if="getMachineField(ri-1,c-1,'qr_val')" class="machine-qr-mini">🏷 {% raw %}{{ getMachineField(ri-1,c-1,'qr_val') }}{% endraw %}</div>
</template>
<div v-else class="empty-cell"></div>
</div>
+10 -2
View File
@@ -806,6 +806,13 @@ class MissionExecutorV3:
self._log(f" ⚠️ 机型无{side_label}姿态配置")
return
# 计算起始 upload_index:背面时接在正面照片之后
if side == "back":
front_poses = [p for p in all_poses if p.get("photo_type") == "front"]
base_index = len(front_poses)
else:
base_index = 0
self._log(f" 📷 {side_label}拍照 ({len(poses)} 个姿态)")
for pi, pose in enumerate(poses):
if self._stop.is_set():
@@ -829,8 +836,9 @@ class MissionExecutorV3:
self.arm_client.set_angles(angles, speed=self.arm_speed)
self._wait_arm_ready(angles)
# 拍照(每台机器独立从0开始编号
path = self._capture_arm_photo(row, col, side, pi + 1, qr_value, upload_index=pi + 1)
# 拍照:正面从1开始,背面接着正面数量继续编号
upload_index = base_index + pi + 1
path = self._capture_arm_photo(row, col, side, pi + 1, qr_value, upload_index=upload_index)
if path:
self._log(f" 💾 {os.path.basename(path)}")