diff --git a/src/common/config.py b/src/common/config.py index e092161..b3b68eb 100644 --- a/src/common/config.py +++ b/src/common/config.py @@ -22,7 +22,7 @@ # テレメトリメッセージのプロトコルバージョン # Pi/PC 間でこの値が一致しないと正しくパースできない -TELEMETRY_VERSION: int = 1 +TELEMETRY_VERSION: int = 2 # ── ネットワーク設定(.env から読み込み) ────────────────────── diff --git a/src/pc/gui/main_window.py b/src/pc/gui/main_window.py index 6bd526e..69f69d5 100644 --- a/src/pc/gui/main_window.py +++ b/src/pc/gui/main_window.py @@ -442,6 +442,14 @@ else: self._intersection_panel.clear_result() + # 十字路有効時は分類器準備完了まで自動操縦を無効化 + if not self._is_auto: + can_auto = ( + not self._intersection_panel.enabled + or state.intersection_available + ) + self._auto_btn.setEnabled(can_auto) + # ── 手動操作 ────────────────────────────────────────── def keyPressEvent(self, event: QKeyEvent) -> None: diff --git a/src/pc/gui/panels/image_param_panel.py b/src/pc/gui/panels/image_param_panel.py index 877a6ad..17f2e19 100644 --- a/src/pc/gui/panels/image_param_panel.py +++ b/src/pc/gui/panels/image_param_panel.py @@ -376,6 +376,10 @@ # 初期表示 self._on_method_changed() + def _on_expanded(self) -> None: + """展開後にパラメータの表示/非表示を再適用する""" + self._on_method_changed() + def _add_row( self, label: str, diff --git a/src/pc/gui/telemetry_display.py b/src/pc/gui/telemetry_display.py index e3a138b..bc1c343 100644 --- a/src/pc/gui/telemetry_display.py +++ b/src/pc/gui/telemetry_display.py @@ -30,6 +30,7 @@ heading: float = 0.0 is_intersection: bool = False is_recovering: bool = False + intersection_available: bool = False fps: float = 0.0 throttle: float = 0.0 steer: float = 0.0 @@ -96,6 +97,9 @@ self.state.is_recovering = telemetry.get( "is_recovering", False, ) + self.state.intersection_available = telemetry.get( + "intersection_available", False, + ) self.state.fps = telemetry.get("fps", 0.0) self.state.throttle = telemetry.get( "throttle", 0.0, diff --git a/src/pi/comm/zmq_client.py b/src/pi/comm/zmq_client.py index 34c46d5..8a150b2 100644 --- a/src/pi/comm/zmq_client.py +++ b/src/pi/comm/zmq_client.py @@ -61,6 +61,7 @@ heading: float, is_intersection: bool, is_recovering: bool, + intersection_available: bool, fps: float, binary_image: np.ndarray | None = None, ) -> None: @@ -81,6 +82,7 @@ heading: 線の傾き is_intersection: 十字路と判定されたか is_recovering: 復帰動作中か + intersection_available: 十字路分類器が利用可能か fps: Pi 側の処理 FPS binary_image: 二値画像(None で省略) """ @@ -97,6 +99,9 @@ "heading": heading, "is_intersection": is_intersection, "is_recovering": is_recovering, + "intersection_available": ( + intersection_available + ), "fps": fps, } diff --git a/src/pi/main.py b/src/pi/main.py index 75e82a4..266ab94 100644 --- a/src/pi/main.py +++ b/src/pi/main.py @@ -212,6 +212,9 @@ heading=heading, is_intersection=is_intersection, is_recovering=is_recovering, + intersection_available=( + intersection_clf.available + ), fps=current_fps, binary_image=binary_image, )