-
This commit is contained in:
+1
-5
@@ -769,11 +769,7 @@ def api_mission_config_set():
|
|||||||
gs.mission_config["cols"] = cols
|
gs.mission_config["cols"] = cols
|
||||||
gs.mission_config["grid"] = grid
|
gs.mission_config["grid"] = grid
|
||||||
gs.mission_config["arm_initial_pose"] = arm_initial_pose
|
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)
|
save_json("mission_config.json", gs.mission_config)
|
||||||
return jsonify({"ok": True, "config": gs.mission_config})
|
return jsonify({"ok": True, "config": gs.mission_config})
|
||||||
|
|
||||||
|
|||||||
@@ -1057,10 +1057,10 @@ a:hover { text-decoration: underline; }
|
|||||||
@keyframes navPulse { 0%,100% { border-color: #4caf50; } 50% { border-color: #1b5e20; } }
|
@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-label { font-size: 12px; font-weight: 600; color: #ccc; }
|
||||||
.machine-steps-mini { display: flex; gap: 8px; font-size: 13px; }
|
.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; }
|
.empty-cell { color: #445566; font-size: 12px; }
|
||||||
|
|
||||||
/* 步骤圆点 */
|
/* 步骤圆点 */
|
||||||
|
|||||||
@@ -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,'front')" title="正面照">📸正</span>
|
||||||
<span class="step-dot" :class="'dot-'+getMachineField(ri-1,c-1,'back')" title="背面照">📸背</span>
|
<span class="step-dot" :class="'dot-'+getMachineField(ri-1,c-1,'back')" title="背面照">📸背</span>
|
||||||
</div>
|
</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>
|
</template>
|
||||||
<div v-else class="empty-cell">空</div>
|
<div v-else class="empty-cell">空</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -806,6 +806,13 @@ class MissionExecutorV3:
|
|||||||
self._log(f" ⚠️ 机型无{side_label}姿态配置")
|
self._log(f" ⚠️ 机型无{side_label}姿态配置")
|
||||||
return
|
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)} 个姿态)")
|
self._log(f" 📷 {side_label}拍照 ({len(poses)} 个姿态)")
|
||||||
for pi, pose in enumerate(poses):
|
for pi, pose in enumerate(poses):
|
||||||
if self._stop.is_set():
|
if self._stop.is_set():
|
||||||
@@ -829,8 +836,9 @@ class MissionExecutorV3:
|
|||||||
self.arm_client.set_angles(angles, speed=self.arm_speed)
|
self.arm_client.set_angles(angles, speed=self.arm_speed)
|
||||||
self._wait_arm_ready(angles)
|
self._wait_arm_ready(angles)
|
||||||
|
|
||||||
# 拍照(每台机器独立从0开始编号)
|
# 拍照:正面从1开始,背面接着正面数量继续编号
|
||||||
path = self._capture_arm_photo(row, col, side, pi + 1, qr_value, upload_index=pi + 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:
|
if path:
|
||||||
self._log(f" 💾 {os.path.basename(path)}")
|
self._log(f" 💾 {os.path.basename(path)}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user