安全を設計に組み込んだ倉庫ロボットの制御基盤を、5日で 。
フォークリフト、
主な数字
-
5 日
最初の
指示から 全体の 稼働まで -
1,700 件
自動テスト
-
25 種類
故障パターンを、
すべて テスト -
0.1 秒
全台を
止めるまで
3つの層を、1つの契約で
L1 パート1
ダッシュボードとクラウド
オペレーターが
NATSと
L2 パート2
エッジサーバー
現場の
VDA 5050 · MQTT · OPC UA · RTSP · 登録済み証明書に
L3 パート3
機器と、その世界
各機械の
オペレーターが全台を止めるとき
-
停止を
押す 本人として
送信 -
クラウドが
記録 誰が・何を・いつ
-
エッジが
すぐ 中継 保存を
待たない -
許可を
取り消す 0.5秒ごとの
許可 -
全機が
停止 実測0.1秒・上限1秒
動いているシステムの画面
- 発生中の
故障:セル内の 人、 非常停止 - arm-01
(赤):保護停止 - agf-03
(赤):非常停止 - 棚の
陰の 電波不感帯 (ピンク)
わざと
- arm-01の
セルに 人が 入った - アームと
一緒に ステーションも 停止 - 機器は
復帰。 警報は 人の 確認待ち
約1分後の
許可がなければ、何も動かない
ロボットは、
-
信頼済みの
機器だけ 証明書と
相互TLSで、 登録済みの 機器だけが 接続。 -
署名付きの
更新 設定は
すべて 署名付き。 不調なら 自動で 元に 戻す。 -
再開は
二人で 再開には
再ログイン、 全台の 再開には もう 一人の 承認。 -
すべてを
記録 どの
指示も、 誰が・何を・いつ。 -
指揮は
常に 一つ 止まって
復帰した 古い サーバーは、 ロボットを 動かせない。 -
安全記録は
失わない 確定の
前に 保存。 停電でも 消えない。
25の故障を、わざと起こしてテスト
人と動き
- F01 非常停止
- F02 進路に
人 - F03 自己位置の
喪失 - F15 センサーの
固着 - F24 セル内に
人
機械
- F06 吸着の
喪失 - F07 二重ピック
- F08 コンベア詰まり
- F13 モーター過熱
- F14 バッテリー劣化
パレットとカメラ
- F09 カメラの
遮蔽 - F10 低い
確信度 - F11 パレットの
傾き - F12 差し込み口の
塞がり
通信・電源・ソフトウェア
- F04 ローミングの
切れ目 - F05 電波の
死角 - F16 重複
- F17 不正な
形式 - F18 時計の
ずれ - F19 再起動
- F20 ログの
洪水 - F21 古いファームウェア
- F22 証明書の
期限切れ間近 - F23 ブローカーの
切替 - F25 瞬停
公開された標準と、実績あるライブラリ
- VDA 5050
- フォークリフトへの
指示と 状態。 他社製の 車両も。 - OPC UA
- コンベアの
PLCを、 本物の OPC UAで。 - ISA-18.2
- 警報の
流れ:発生、 人に よる 確認、 解除。 - EST・mTLS
- 機器の
登録、 証明書の 更新と 失効。 - OIDC
- オペレーターの
ログイン。 役割は 10分ごとに 再確認。 - cosign・ECDSA P-256
- すべての
設定バンドルに 署名。 - Protobuf・NATS
- エッジと
クラウドの 契約。 通信断にも 強い。 - MQTT・RTSP
- 機器との
契約と、 カメラの 生映像。 - WebRTC
(WHEP) - カメラ映像を
ブラウザーで。 - MCAP・glTF・URDF
- 走行記録、
現場モデル、 ロボットの 定義。 - LIF
- フォークリフトの
通路レイアウトを、 そのまま 読み込み。 - Foxglove
- 床の
様子を 10Hzで 3D表示。
ライブラリとツール
- 言語と
画面 -
- Go 1.26
- SvelteKit
- Svelte 5
- TypeScript
- Vite
- メッセージング
-
- NATS JetStream
- Protocol Buffers
- gRPC
- Eclipse Paho
- Mochi MQTT
- 機械と
映像 -
- gopcua
- gortsplib
- Pion
- MediaMTX
- データ
-
- PostgreSQL
- TimescaleDB
- ClickHouse
- Valkey
- SeaweedFS
- bbolt
- ログイン
-
- Dex
- go-oidc
- go-jose
- シミュレーションと
3D -
- MuJoCo
- Unity 6
- glTFast
- Foxglove MCAP
- テスト
-
- Playwright
- Vitest
- Storybook
- axe-core
- rapid
- Go race detector
事前に決めた上限で、すべて計測
最も遅かった計測値と、その上限
短い
-
全台の
停止 上限1秒 100ミリ秒 上限の
10% -
1,000台への
指示 上限300ミリ秒 30ミリ秒 上限の
10% -
1,000台の
状態を クラウドへ 上限500ミリ秒 81ミリ秒 上限の
16.2% -
500画面への
表示 上限500ミリ秒 153ミリ秒 上限の
30.6% -
120台の
一斉再 起動から 復帰 上限30秒 3秒 上限の
10%
最悪値 上限までの
-
0 件
6,826回の
走行で、 フォークリフトの 衝突 -
72 時間
通信が
切れても、 記録を 一度ずつ順番どおりに 復元 -
29 秒
1,000台の
一斉電源断から 全台復帰。 安全記録の 欠落なし -
約5 秒
サーバーを
落と しても 別の サーバーが 引き継ぐ。 指揮が 二重に なる ことは ない
いまの状況
実機はまだです
数字は
数字の測り方
- 時間
- AIの
作業ログの 最初の 記録 (10月13日 18:47)から、 ここに 載せた ビルドの 最後の コミット (10月18日 12:50)まで。 約114時間、 コミット67件。 - テスト
- 10月18日に
ソースで 数えた テスト関数。 Go 1,472、 画面の 単体124、 ブラウザー43、 コンポーネント29、 Unity 32。 - 速さ
- 各テストで
最も 遅かった 値を、 テストの 前に 決めた 上限と 比べた もの。 リポジトリに 記録された、 開発マシンでの 計測です。