こんにちは!この記事では、 株式会社Octa Roboticsが開発・提供している ロボット・設備間連携に特化したマルチベンダー型のインターフェースサービス「LCI」 について、ロボットからの利用方法を連載形式で紹介していきます。
前回の記事では、アカウント発行時に貰ったサンプルコードを利用してMQTTブローカーに接続を行いました。
今回は、「LCI」を利用して仮想のエレベータと連携する全体シーケンス について紹介していきます。
はじめに
アカウント発行時に貰ったサンプルコードは、そのままではシミュレータ上のエレベーターと正しく連携することができません。
(あくまでエレベーター連携のベースとして提供しているため)
そのため、サンプルコードをエレベーター連携ができるように変更していく必要性があります。
今回は、サンプルコードを改良する前に「LCI」を使用したエレベータ連携について先に確認していきます!
エレベーター連携の全体シーケンス
はじめに連携過程の全体像を把握していきましょう。
ロボットアカウント発行時に貰った「LCIプロトコル仕様書」を確認していきます。
「LCIプロトコル仕様書」に記載されているエレベータ連携のシーケンスは、ロボットが出発階からエレベーターに乗り込んで、行き先階で降りる動作を想定しています。
具体的なロボット連携モードにおける全体シーケンスは以下になるようです。
ロボット連携モードは、ロボットがエレベーターを利用する際に一般利用者との同乗をしないというエレベーターの機能を指します。
ロボット | LCI & エレベーター | |
---|---|---|
1 | エレベーター前に移動 | |
2 | 利用登録(Registration) | |
3 | 利用登録の受理 | |
4 | (ロボット連携モードがある場合) すべての利用者の降車を確認し、ロボット連携モードを開始 | |
5 | 出発階への呼び出し(CallElevator) | |
6 | エレベータの状態取得を開始(RequestElevatorStatus) | |
7 | 出発階にカゴを移動 | |
8 | 出発階でドアを開ける | |
9 | 出発階への到着を検知 | |
10 | 乗り込み(RobotStatus, state:5) | |
11 | 乗り込み完了(RobotStatus, state:1) | |
12 | 行き先階の登録(CallElevator) | |
13 | ドアを閉め、行き先階にカゴを移動 | |
14 | 行き先階でドアを開ける | |
15 | 行き先階への到着を検知 | |
16 | 降車(RobotStatus, state:5) | |
17 | エレベーターへの状態取得を停止 | |
18 | 降車完了(RobotStatus, state:2) | |
19 | 利用解除(Release) | |
20 | 利用解除し、ドアを閉める | |
21 | (ロボット連携モードがある場合) ロボット連携モードを終了し、通常運転モードに戻る |
各通信プロトコルについて
先ほどのエレベーター連携の全体シーケンスの中で、「LCI」を介して行う通信プロトコルに焦点を当て説明していきます。
今回は、エラー処理などについては簡易的な説明 に留めていますのでご注意ください。
より詳しいエラー処理については LCIプロトコル仕様書をご参照ください。
また、次回以降の記事では各通信プロトコルについて実装やエラー処理も踏まえて紹介して行く予定ですので、そちらも合わせてご確認ください。
①利用登録
ロボットからエレベーターに対して、利用登録(Registration)を行います。
- ロボットからエレベーターに Registration(利用登録) を送る
- LCI Boxからロボットに RegistrationResult(利用登録結果)を受け取る
-
result:1
の場合、利用登録成功 -
result:2、3、99
の場合、利用登録失敗
-
- 利用登録成功の場合は、エレベーターが出発階への呼び出し待ちになる
result (結果コード)は、それぞれ以下の意味合いを指しています。
値 | 意味 |
---|---|
1 | 承認(成功) |
2 | 拒否(失敗) |
3 | その他エラー |
99 | 管制運転中/災害時 |
RegistrationResultが返るまでの応答時間は、デフォルトで最大180秒です。
ただし、エレベーターごとに異なる可能性があるため、LCIの設定ファイル(server_config.yaml等)の、 lci_timeout_sec に基づいて設定してください
②出発階への呼び出し
ロボットがいる出発階にエレベーターを呼び出します。
- ロボットからエレベーターにCallElevator(エレベーター呼び出し)を送る
- 出発階と行き先階の情報(origination,origination_door,destination,destination_door)をこの時に送る
- エレベーターからロボットにCallElevatorResult(エレベーター呼び出し結果)を送る
- エレベーター呼び出し成功の場合は、
result:1
が送られてくる - エレベーター呼び出し失敗の場合は、
result:2、3、99
が送られてくる
- エレベーター呼び出し成功の場合は、
- 呼び出し成功の場合は、エレベーターがロボットの呼び出した階に移動する
③エレベーターの状態取得
エレベーターがどのような状態にあるか(ドアの開閉状態、出発階および目的階への到達・未到達)を取得します。
- ロボットからエレベータにRequestElevatorStatus(エレベーター状態の要求)を送る
- エレベーターからロボットにElevatorStatus(エレベーター状態)を送る
- エレベーターの状態を取得できた場合には、
result:1
が送られてくる - 通信でのエラーが生じた場合やエレベーター側のエラーの場合には、
result:2、3、99
等が送られてくる
- エレベーターの状態を取得できた場合には、
- 降車完了まで2秒間隔でループする
エレベーターの状態取得は、ロボットの降車完了(エレベーター連携終了)まで2秒間隔で実行し続けます。
④乗り込み
ロボットがエレベーターに乗り込みます。
この時、ロボットの乗車が終了するまでドアを開け続けるように要求します。
- ロボットがエレベータに乗り込みを開始する
- ロボットからエレベーターにRobotStatus(ロボット状態)を送る
- state:5(ドア開継続要求)を送る
- エレベーターからロボットにRobotStatusResult(ロボット状態結果)を送る
-
result:1
の場合、エレベータが扉を開き、連携ができている状態 -
result:2, 3, 99
の場合、エラーが生じ、連携ができていない状態
-
- ロボットの乗り込みが完了するまで、5秒間隔でループする
⑤乗り込み完了
乗り込みが終了したら、エレベーターに乗り込みが完了したことを伝えます。
- ロボットがエレベータに乗り込む
- ロボットからエレベータにRobotStatus(ロボットの状態)を送る
-
state:1
(乗り込み完了)を送る
-
- エレベーターからロボットにRobotStatusResult(ロボット状態結果)を送る
-
result:1
の場合、エレベーターがロボットの乗り込み完了を把握し、連携できている状態 -
result:2,3,99
の場合、エラーが生じ、連携ができていない状態
-
- エレベーターが行き先階の登録待ちになり、次のステップに進む
⑥行き先階の登録
エレベーターに行き先階を伝え、エレベーターが移動を開始します。
- ロボットからエレベーターにCallElevator(エレベーター要請)を送る
- 行き先階の情報等をこの時伝える
- エレベーターからロボットにCallElevatorResult(エレベーター要請結果)を送る
- 行き先階登録成功の場合は、
result:1
が送られてくる - 行き先階登録失敗の場合は、
result:2、3、99
が送られてくる
- 行き先階登録成功の場合は、
- 行き先階登録成功の場合は、エレベーターのドアが閉まり、行き先階に移動
- 行き先階に到着後、エレベーターのドアが開いた状態で待機
⑦降車
エレベーターが行き先階に到達したら、降車を開始します。
降車が完了するまで、エレベーターのドアを開き続けるように要求します。
- 「エレベーターの状態取得」と同様の処理を実行
-
result:1
の場合は、ロボットの降車を開始する - ロボットからエレベーターにRobotStatus(ロボット状態)を送る
- エレベーターからロボットにRobotStatusResult(ロボット状態結果)を送る
-
result:1
の場合、エレベータが扉を開き、連携ができている状態 -
result:2, 3, 99
の場合、エラーが生じ、連携ができていない状態
-
- ロボットの降車が完了するまで、5秒間隔でループする
- 降車完了後、エレベーターの状態取得を終了する
⑧降車完了
降車が完了したら、降車したことをエレベーターに伝えます。
- ロボットの降車完了後、ロボットからエレベーターにRobotStatus(ロボット状態)を送る
- エレベーターからロボットにRobotStatusResult(ロボット状態結果)を送る
-
result:1
の場合、エレベーターがロボットの状態を把握し、連携できている状態 -
result:2,3,99
の場合、エラーが生じ、連携ができない状態
-
-
result:1
の場合、次のステップに進む
⑨利用解除
エレベーターの利用を解除します。
利用解除後、エレベーターのドアが閉まります。
- ロボットからエレベーターにRelease(利用解除)を送る
-
result:1
の場合、正常に利用を解除できた状態 -
result:2,3,99
の場合、エラーが生じ、連携解除が正常にできていない状態
-
-
result:1
の場合、エレベーターの利用が解除され、エレベーターのドアが閉じる
連載記事リスト
他の記事もチェックしてみてください!
次回の記事では、通信プロトコルの「利用登録」についてサンプルコードを改良しながら詳しく解説する予定です!
ご興味があれば「いいね」やフォローをいただけると励みになります!