Skip to content

feat: 車外サイネージ行先表示と回送中表示 - #211

Merged
yabuta merged 10 commits into
developfrom
feature/external-signage-destination
Jul 30, 2026
Merged

yabuta merged 10 commits into
developfrom
feature/external-signage-destination

Conversation

@yabuta

@yabuta yabuta commented Jul 29, 2026 •

Copy link
Copy Markdown
Contributor

概要

車外サイネージの行先表示機能 と回送中表示を追加します。FMS の active_schedule の目的地 (destination.point_id) に応じて、行先を td5 で車外ディスプレイに表示します。

主な変更

  • 行先表示モード (/signage/destination_mode サービス) を追加。ON 時は FMS の active_schedule に連動して行先td5を描画し、走行中の自動運行表示は行わない。
  • 行先マッピング を外部ファイル /opt/autoware/destination_mapping.yaml から読み込む (リビルド不要で編集反映)。無ければ同梱テンプレートから自動生成。キーは destination.point_id を採用 (stop_point_id は路線間衝突のため不適)。
  • 回送中(kaiso)表示: 有効な行先が取れない状態 (スケジュール無し/未受信/未登録/完了) は回送中td5を表示。
  • 部分表示対応: td5 を持つディスプレイのみ表示し、未用意サイズのディスプレイは空白(null)にフォールバック (旧「1サイズ欠けると全ディスプレイ空白」を解消)。
  • テスト用 td5 (miraikan / shinagawa / teleport + 回送 kaiso) を 128x16 (front/back)・80x24 (side) 両サイズ 配置。仮 point_id (2567/2568/2569) に割当。
  • 動作確認用ヘルパースクリプト (行先表示モード切替・テスト用 active_schedule publish) を追加。

確認状況

  • ベンチ (ディスプレイ接続ECU) で destination_mode ON + テスト用スケジュール publish により miraikan/shinagawa/teleport/kaiso の表示を確認済み (128x16)。
  • 本PRで 80x24 (side) 版td5を追加し、両サイズ揃った。
  • 実FMS(実 active_schedule)連携・全ディスプレイ切替の実機確認は今後 (2026年8月頃見込み)。

備考

  • td5 はテスト用。実運用の td5 とマッピング (/opt/autoware/destination_mapping.yaml は Ansible 配布) は実 prefix に差し替える。

🤖 Generated with Claude Code

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
0.4% Coverage on New Code (required ≥ 80%)
B Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

yabuta and others added 10 commits July 30, 2026 11:30
external_signage に行先表示モードを実装:
- destination_mode(settings.json, 既存表示と排他)を追加し
  /signage/destination_mode(SetBool)で切替・永続化。
- /signage/active_schedule(String JSON)を購読(publisherのRELIABLE+VOLATILEに
  合わせVOLATILEで購読)、doing[0]->todo[0]->なしの優先順で行先を決定。
- destination_mapping.yaml(destination.id->td5 prefix)を起動時ロードし、
  行先td5をfront/back/side 3面へ表示。
- doing/todoなし(スケジュール完了)は回送中(kaiso)td5を表示。
- 未登録id/td5未配置/ロード失敗/空スケジュールは空白(null td5)へフォールバック。
- destination_mode中は既存のtrigger_external/mrm/is_driving_level/change_mode
  による表示を抑止し、OFF復帰時は既存ロジックで再描画。

実td5はベンダーツール製のため命名規約のみ用意(config雛形・destination/・
setup.py配線)。実配置まではnullフォールバックで安全に継続する。

検証: colcon build成功、行先決定ロジックの単体テスト全パス、
実ノード起動でモード切替・active_schedule受信・行先/回送中/null分岐・
td5未配置フォールバックをエンドツーエンドで確認。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
destination.id -> td5 prefix の紐付けを /opt/autoware/destination_mapping.yaml
(signage_settings.json と同じ外部の永続設定置き場) から読み込むようにし、
運用時にリビルド不要で編集できるようにした。外部ファイルが無ければパッケージ同梱
テンプレート(config/destination_mapping.yaml)を起動時に自動コピーして初期化する。
読み込み失敗時は空マッピングで継続(null表示にフォールバック)。

検証: 実ノード起動で外部パス読込・未存在時のseed試行・権限エラー時のgraceful
degrade(空マッピング継続)・active_schedule受信〜行先/回送中/null分岐までを確認。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
_resolve_destination の「スケジュール無し/未受信 (not data)」を null 表示から
回送中 (kaiso) 表示へ変更。有効な行先が取れない状態 (スケジュール無し/未受信/
未登録/doing・todo 全完了) を一貫して回送中とする (SYS-HMI-08)。
未登録 id・td5 未配置/ロード失敗は従来どおり空白 (null)。
行先表示モードでは走行中の自動運行中(auto)表示は行わない方針を明記。

検証: 実ノード起動で 起動直後(未受信)/空スケジュール/全完了 が回送中(kaiso)に、
未登録idが空白(null)になること、行先表示モード中に auto を出さないことを確認。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ベンチ検証用に /signage/destination_mode(SetBool) の on/off/status を
まとめて叩けるヘルパー destination_mode.sh を追加。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
実FMS active_schedule の move タスクは destination.id を持たず destination.point_id(整数)
+ destination.name を持つ。従来 destination.get("id") を参照していたため常に
"no destination id" となり null(空白)にフォールバックしていた。

- _resolve_destination: destination.point_id を参照し、mapping は str(point_id) で引く。
  ログに name も出す(unmapped 時の切り分け用)。
- _load_destination_mapping: YAML キーの int/str 揺れを吸収するためロード時に str へ正規化。
- destination_mapping.yaml テンプレ / td5 README の例を point_id 整数キーへ更新。

status 語彙(doing/todo/done)は signage_utils.py と一致することを確認済み。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
実FMS active_schedule 照合(web.auto agent 経由)で destination に point_id 以外に
stop_point_id(連番) と name があることを確認。stop_point_id は路線間で衝突しうるため
マッピングキーには point_id を使う旨をテンプレコメントに明記。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SYS-HMI-03 ベンチ確認用に active_schedule を各パターンで publish、または
web.auto agent から実スケジュールを取得して publish/表示するスクリプトを追加。

- doing/todo/done/none/unmapped/no-id: 各分岐を1コマンドで検証 (move_schedule 生成)
- real: web.auto agent (localhost:4711 経由) の実スケジュールをそのまま publish
- show: 実スケジュールを整形表示 (publish しない)
- YAML単一引用符スカラー用に JSON 中の ' を '' へエスケープして ros2 topic pub

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
行先td5の準備が間に合わないため、ベンチ確認用の暫定措置として point_id を既存の
automatic/experiment/mrm td5 に紐付ける。
  2567 -> auto (automatic td5), 2568 -> experiment, 2569 -> mrm

prefix には destination/*.td5 名ではなく既存 td5 の内部キー(auto/experiment/mrm)を
指定する。これらは _load_display_data の step1 でロード済みのため、destination/*.td5 の
ロード失敗警告は無害でフォールバックしない。実td5が用意でき次第、正規の prefix へ戻す。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
テスト用td5(miraikan/shinagawa/teleport + 回送kaiso)を128x16のみで用意。
80x24(side)未用意でも front/back に表示できるよう _display_state を
「td5を持つディスプレイだけ表示、無いディスプレイはnull」に改修
(_display_signage_per_display 追加, current_state をディスプレイ毎キーのdictへ)。
mapping は仮 point_id に割当(2567:miraikan/2568:shinagawa/2569:teleport)。
kaisou→kaiso にリネーム、行先td5は destination/ 配下へ移動。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
miraikan/shinagawa/teleport の行先td5と回送(kaiso)td5の 80x24 版を配置し、
side ディスプレイでも行先表示・回送中表示が出るようにする。
これで front/back(128x16) と side(80x24) の両サイズが揃った。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@yabuta
yabuta force-pushed the feature/external-signage-destination branch from 21578da to 7cf9c78 Compare July 30, 2026 02:33
@yabuta yabuta changed the title feat: 車外サイネージ行先表示 (SYS-HMI-03) と回送中表示 feat: 車外サイネージ行先表示と回送中表示 Jul 30, 2026
@yabuta
yabuta merged commit 73ddb8f into develop Jul 30, 2026
1 of 3 checks passed
@operationtoolapp operationtoolapp Bot mentioned this pull request Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant