午前2時、アトランタ郊外の飲料配送センターで、私は中2階から2台のAMRが「にらみ合い」をしているのを眺めていた。ブランドAのロボットは交差点で停止し、自分に優先権があると確信していた。ブランドBのロボットは18インチ後退し、「path blocked」を宣言して点滅したまま動かなかった。両者のディスパッチシステムは、相手が動くのを待っていた。20分後、夜間スーパーバイザーはゾーン全体の自動化を停止し、3人をパレットジャッキで送り出し、60ケースの滞貨を人力で片付けさせた。ハードウェアが壊れていたわけではない。ロボットたちは単に「どちらが先に行くか」で合意できなかったのだ。誰も同じ言語を話させていなかったからだ。

この夜は、倉庫マネージャーが「もう1つのブランドも買えますか? そっちの方が安いんです」と聞いてくるたびに思い出す夜だ。短い答えはイエス。長い答えは、混在フリートで難しいのは車両ではない、ということだ。難しいのは「誰が命令を出すか」を決めることだ。

VDA 5050 がカバーする範囲と、意図的に除外したもの

VDA 5050は、ドイツのVDA(自動車工業会)とVDMA(機械工業会)が共同で発行したオープンな通信規格である。モバイルロボットと中央フリートコントロール(マスターコントロールとも呼ばれる)間のインターフェースを定義する。現行バージョンは3.0.0で、2025年3月に発行された。

設計は意図的に狭い。命令は一方向に流れ、状態は逆方向に流れる。メッセージはMQTT上のJSONだ。日常トラフィックはQoS 0、接続監視はQoS 1。仕様は少数のメッセージ種別を定義する:order、instantActions(pause、resume)、state(position、battery、errors)、visualization、connection heartbeat、factsheet(ロボットの物理特性)、zoneSet。ベンダーが正しく実装すれば、準拠したマスターコントロールはどのブランドの車両でもディスパッチできる。

規格が「しない」ことも同じくらい重要だ:安全機能も交通ロジックも定義しない。ルーティング、優先権、混雑処理、デッドロック回復――仕様はすべてマスターコントロールとベンダーに明示的に委ねている。VDA 5050はロボットに命令を理解させる。道路を共有する方法は教えない。

私はこれを高くつく形で学んだ。あるベンダーのパンフレットに「VDA 5050互換」のチェックが入っていた案件だ。統合の過程で判明したのは、彼らがstateチャネルは実装していた――ロボットは自分の位置を報告できた――が、orderチャネルをまったく作っていなかったことだった。マスターコントロールはタスクを1つも送れなかった。ロボットはよくしゃべるだけで役に立たなかった。パンフレットを信じるな。受入れでは、ブローカーのトラフィックを自分の目で見ながら、すべてのメッセージチャネルを1つずつデモさせること。

マスターコントロールの問い:3つの構成に、タダ飯はない

混在フリートに頭脳は1つしかいられない。倉庫がこれを解決する方法を3つ見てきた。

選択肢1:中立なサードパーティのフリートマネージャー。VDA 5050を話し、すべてのブランドを平等に扱う専用ソフトウェア。メリットは自由だ――後から制御層を剥がさずにベンダーを入れ替えられる。デメリットは別途のソフトウェアライセンスと、ベンダー固有のアクション(例えばブランドBの独自リフトシーケンス)が標準では表現できないという現実だ。カスタムアダプターを覚悟しよう。

選択肢2:ロボットベンダーがマスターコントロールも兼ねる。最もよくある売り文句だ。「私たちのフリートマネージャーは自社のロボットも他社のロボットも動かします」。機能はする。ただし落とし穴がある。スケジューラは必然的に自ブランド向けにチューニングされている――タスク割当、充電優先、エラー回復のすべてが、微妙に自軍を優遇する。そして本当に痛いのは商用条件だ:保守契約は通常2~3年縛り、3つ目のブランドを足そうとすると「互換性テスト」が都合のいい拒否権になる。

選択肢3:建物を分ける。ブランドAが東ゾーン、ブランドBが西ゾーン、間に仮想フェンス。これが最も楽な道であり、率直に言って敗北宣言だ。ゾーンをまたぐタスクは人が手で運ぶ。つまり自動化しようとしていた人手そのままだ。

私の判断:フリートが10台を超え、今後もブランドを増やす計画があるなら、中立なサードパーティ制御を選べ。ライセンス費用は2回目の調達で元が取れる。5台未満のパイロットなら、ベンダー提供の制御も許容範囲だ――ただし契約にこれを入れること:サードパーティのブランドが追加されたら、既存ベンダーは60日以内にVDA 5050統合を完了し、超過日数1日ごとに保守料から日割りペナルティを差し引く。この条項がなければ、「後で対応します」は3年論争になる。

通路の交差点で並走する異ブランドの2台のAMR

見積書に載らないマップの問題

VDA 5050の有名な隙間がここにある:マップについては何も言っていない。各ベンダーは独自の座標系で独自のマップを作る。ブランドAの原点は受入ドックにあり、ブランドBの原点は充電ステーションにある。マスターコントロールが「(12, 30)に行け」と言っても、各ロボットは異なる場所に聞こえる。

実務では、立上げエンジニアが手作業でマップを整合させる:建物内の既知の4点を選び、2つの座標系を固定して次へ進む。動く――動かなくなるまでは。整合はスナップショットだ。ラックを動かしたり一時的なステージングレーンを置いたりした日、マップは静かにズレ始め、ロボットが自分のマップにない場所に走り込むまで誰も気づかない。冷凍倉庫の現場でこれを見た。ラックが再配置され、誰もマップを再登録せず、ロボットは閉鎖された行き止まり通路に入り込み、LiDARが悲鳴を上げて、フリート全体が止まった。

だからマップ整合は「一度きりの作業」ではなく運用手順として扱おう。ラック移動や通路変更のたびに再登録をトリガーし、SOPに責任者名入りで書くことだ。施設のレイアウトが季節で変わるなら、バッテリー交換を予算化するようにエンジニアリング工数も予算化しよう。

サインする前に:受入れチェックリスト

これは混在フリートの案件が失敗するのを見て作ったチェックリストだ。最終サインオフの前に回すこと。

  • ベンダーにVDA 5050の各メッセージチャネルを個別にデモさせよう――stateだけでなく、特にorderとinstantActionsを。
  • 両ブランド(または全部)を少なくとも4時間連続で一緒に動かす。相互待ちと人の介入を数えよう。
  • 通路で正面衝突を仕掛ける。マスターコントロールは30秒以内に解決すべきだ――手袋をはめた人ではない。
  • 任務の最中にWi-Fiローミングを10秒殺す。ロボットはその場で安全に停止すべきで、最後の命令を引きずってふらついてはいけない。
  • 片方のブランドの充電器を抜き、低バッテリー時のタスク再割当ロジックがそのブランドだけでなくフリート全体をカバーするか見よう。
  • ラックを1つ動かし、マップ再登録を実行して計時する。プロセスは2時間以内に完了すべきだ。
  • factsheetを要求し、寸法・ペイロード・旋回半径を契約と照合しよう。

そして明日からできることは1つ:相互運用性は会議室で決めるな。候補ブランドごとに2台ずつを空いたステージングエリアに――自分の建物の遊んだ一角でもいい――入れて、半日分の混在ミッションを回す:ディスパッチ、充電、障害、ネットワーク断、全部だ。そのスモークテストを避ける言い訳ばかりするベンダーとは、取引から離れよう。節約するお金は本質ではない。本質は、もう二度と起きない午前2時のにらみ合いだ。

英語版からの翻訳。内容に相違がある場合は英語版を優先します。