AMRナビゲーション・スポットライト・シリーズの8回目のブログへようこそ!今回はAMRの意思決定と安全性に焦点を当てます。前回のブログは 前回のブログはこちらをクリックしてください。
このスポットライト・シリーズでは、ロボット制御スタックのさまざまな要素について触れてきた。 知覚, ナビゲーションそして 経路計画を挙げることができる。さて、次は間違いなく作戦全体の頭脳となるモジュール、つまり意思決定モジュールを見てみよう。
ロボットの意思決定と安全性とは?
意思決定モジュールには、高度なインテリジェンスとロジックが含まれています。 自律移動ロボットを決定する高レベルの知能とロジックが含まれています。一般的に言えば、このモジュールには特定の条件をチェックする単一のフレームワークが含まれており、それらの条件が存在するかどうかに基づいてロボットにどのように反応するかを指示します。
フレームワークは、単純な経路の追跡、障害物の認識、あるいは花の摘み取りなど、ロボットが行うすべてのことを管理する。他の様々なモジュールによって収集されたデータを利用し、必要なだけシンプルにも複雑にもできる。
OxTS' プロトタイプの制御スタックでは、意思決定フレームワークがコントローラとロボットのアクチュエータの間にある。つまり、コントローラーがロボットを次のウェイポイントに移動させるコマンドを考え、意思決定モジュールが移動しても安全かどうかを判断し、ロボットが移動する。プロセスの異なる要素を順番に並べることは可能だが、私たちは2つの理由からこの方法を選んだ。第一に、すべての意思決定条件が作動前に満たされていることを確認したかったからである。2つ目は、ロボットが意思決定者の結果以外のことをする可能性を避けたかったからだ。
AMR 意思決定と安全性 対 AI
ロボット制御システムにおけるAIとその可能性については、現在多くのことが書かれている。AMRの意思決定とAIを関連付けやすくするために、AIをAMRの完全な制御フレームワークを自動的に作成する方法と考えることができる。とはいえ、AIと称されるものの多くは、実際には非常に複雑なフレームワークであり、それほど高度でないフレームワークよりは知能を模倣するのに適しているが、それでも人間が作成したものであり、自己編集能力はない(あるいは非常に限られている)。
なぜ自律移動ロボットにとって意思決定が重要なのか?
簡単に言えば、意思決定は「AMR」の「A」を意味する。これは、ロボットが人間の入力なしにタスクを実行し、出来事に反応することを可能にするものだ。意思決定モジュールは、ロボットが障害物や進路からの逸脱などのリスクに対応できるように設計された要素がフレームワークに含まれている限り、ロボットをより安全にする。実際、優れた意思決定理論によれば、AMR制御フレームワークは安全性を第一に考慮して設計されるべきである。結局のところ、起こりうる最悪の事態は、AMRが人、他の財産、またはAMR自身に損害を与えることである。
意思決定の難しさは、安全なオペレーションを維持するためであれ、仕事を成し遂げるためであれ、意思決定が必要となるすべての状況を設計者が捉えようとしなければならないことだ。どのようなシナリオにも対応できるロボット制御フレームワークを洗練させるためには、想像力と創造力、そして複数の頭脳が必要です。
意思決定の枠組みの種類
ご想像の通り、AMRの意思決定フレームワークを構築するにはさまざまな方法がある。これから順を追って説明しよう。物理シミュレーションやビデオゲームのプログラミングをしたことがある人なら、これらのシステムに見覚えがあるかもしれない。ロボットが予期せぬ障害物にどのように反応するか、シミュレーションで粒子がどのように反応すべきか、あるいはビデオゲームでNPCがどのように振る舞うべきかを決める手助けをする場合でも、原理は同じです。
私たちは、意思決定ロジックの非常に単純な例を使って、これらすべてのシステムをデモンストレーションします。実際には、あなたのロジックはもっと複雑なものになるでしょう。しかし、教育目的であれば、単純な方がよいのです。
フレームワーク1:有限状態機械
有限状態機械(または単に状態機械)は、円形で表されたいくつかの状態と、状態から状態へ移動するために必要な特定の条件を示す矢印で構成されている。
AMRでは、状態はロボットによる行動であり、条件は通常、他のシステムやユーザーからの入力である。この例を考えてみよう:
ロボットのスタート状態は「起動」である。この状態から次の状態である「経路をたどり続ける」に移るには、ユーザーはロボットに自由に動き始めてよいことを伝えなければならない。その状態から、3つの状態が考えられる:
- 障害物は検出されず、ロボットは経路をたどり続ける。
- 障害物を検知:ロボットが停止。
- ユーザーがロボットに停止を指示すると、ロボットは停止する。
ロボット停止」の状態から、ロボットが再び経路をたどり始める前に、ユーザーはロボットに再び自由に動けることを伝えなければならない。これは単純な例であり、実際には、ロボットがこのように停止したら、「経路の再計算」など、再び経路をたどり始めるための条件を含めることになる。
ステートマシンの構築は比較的簡単だが、さまざまな条件や状態が存在する複雑な状況では、非常に複雑になる可能性がある。
フレームワーク2:決定木
これが最も見慣れたシステムだろう。決定木は、アクションノード(長方形で表される)、決定ノード(円で表される)、ブランチ(矢印で表される)で構成される。前節と同じロジックをデシジョンツリーに変換したものがこちら:
デシジョンツリーの大きな利点のひとつは、ロボットの動作を支配する決定の階層を作成できることです。当然のことながら、私たちはユーザーを最上位に置いている。ユーザーが自由に動き出していいと言うまで、ロボットは何もできない。その後、障害物があるかどうかをチェックし、障害物がない場合にのみ経路をたどり始める。意思決定ツリーは一定の間隔で実行される。例えば、ツリーの下に複数の「障害物検出」意思決定ノードを追加する必要はない。
うまくいけば、決定木がステートマシンと同じロジックを、より単純な方法で示すことに同意してもらえるだろう。つまり、デシジョンツリーを使えば、より複雑なロジックを簡単に作成できるということだ。しかし、もし複雑さが増すようであれば、第3のフレームワークとしてビヘイビアツリーを使うことができます。
フレームワーク3:行動ツリー
ビヘイビアツリーはデシジョンツリーとよく似ていますが、機能はまったく異なります。ロボットの動作を制御するノードの階層があることに変わりはありませんが、ロボットの中で意思決定の流れを制御できるように、異なるタイプのノードが含まれています。行動ツリーでロジックの例を見てみましょう:
ここには3つの異なるコンポーネントがある:
- 一番上の(ø記号の)開始ノードは、単にツリーが始まる場所である。
- フロー制御ノード(複合ノードとも呼ばれる)は、1つ以上の子を持つことができるノードである。シーケンス・ノード(→記号)とセレクタ・ノード(?記号)の2種類がある。
- フロー制御ノードの下にはリーフノードがある。リーフノードは子ノードを持たず、クエリかロボットが実行するアクションである。
3種類のノードはすべて、走行、成功、失敗の3つの状態を持つことができる。そして、決定木と同じように、ロボットは一度ツリーを走ると、決められた間隔でそのプロセスを繰り返す。
シーケンス・ノードとセレクタ・ノード
これらのノードは、どちらもその下の子ノードを左から右に処理するが、それらの子ノードからの結果には異なる方法で反応する。
シーケンスノードは、すべての子ノードが成功結果を返した場合にのみ成功結果を返します。いずれかの子ノードが失敗結果を返した場合、シーケンスノードは子ノードの処理を停止し、失敗結果を返します。
しかし、セレクタ・ノードは、子ノードから最初の成功結果を得ると成功結果を返し、成功結果を得ると残りの子ノードの処理を停止する。
では、行動ツリーを見てみよう:
- まずはスタートノードだ。簡単だ!
- 次にシーケンス・ノードです。これは、その下の子ノードを左から右に実行し、すべての子ノードが正常な結果を返すまで停止しないことを意味する。
- 最初の子ノードは "Continue to follow the path "で、ロボットは出発する。
- ロボットが動き出すと、最初のノードは「成功」という結果を返すので、シーケンス・ノードは2番目の子であるセレクタ・ノードの処理に移る。
- セレクタ・ノードは、左から右へと子ノードを処理し、障害物や停止コマンドを探す。それらのどれかが成功した結果を返せば、セレクタ・ノードも成功する。
- そうなれば、シーケンスノードは3番目の子を処理し、ロボットを停止させる。そうでなければ、ロボットは動き続ける。
つまり、このツリーは、ロボットが命令を受けるまで動けないことを保証し、いったん動き出したら、障害物を検知したり、進路から外れたり、ゴールに到達したりしたら停止することを保証する。すてきでしょう?
このように、それぞれが異なる決定やアクションを司る制御フロー・ノードを組み合わせる(入れ子にする)ことができるため、ビヘイビアツリーは実に複雑なビヘイビアを設計するのに適している。
OxTS プロトタイプの意思決定者
我々のロボットでは、決定木を使うことにした。これは有名なKISSの原則に沿ったもので、「シンプルに、バカバカしく!」という意味だ。私たちは、ロボットが道をたどる前に満たさなければならない一連の条件を階層的に設計したかった。行動ツリーはそのために必要以上に複雑だった。また、有限状態機械は十分に洗練されていなかった。私たちが望むことを実現するには、非常に複雑な機械が必要だっただろう。
これがその栄光のすべてだ:
私たちはまず、ロボットが取り得る3つの行動、「進路をたどる」、「止まる」、「スピードを落とす」から始めた。次に、ロボットがそれぞれのアクションをとるタイミングを指定します。このツリーは、ロボットが安全に移動するために必要なすべての安全チェックを実行します - これが各決定ノードです:
- もちろん、一番上にあるのは、ロボットに動いていいと伝える人間の命令だ。私たちは、ロボットが動いていいと言われないと動き出さないようにしたい。
- そして、監視者(人間であれ、監視システムであれ)がロボットに何か問題があれば検知できるように、システムモニターを稼働させたい。
- 次に、ロボットはまだ正しい経路を進んでいるかどうかをチェックする(公差は、あらかじめ定義された量(アプリケーションによっては数センチ)のずれを許容する)。
- そして、ロボットの近くに障害物があるかどうかをチェックする。障害物があれば停止する。
- ロボットの近くに物体がなければ、水平線上に物体があるかどうかを確認する。もし物体があれば、ロボットは減速し、なければ、その道を進む。
プロトタイプは、すべてのモジュールを並列に実行するように設計しました。つまり、ロボットが進路上にいるかどうか、あるいは障害物が近くにあるかどうかをチェックする必要があるとき、そのためのデータが用意されており、計算中に一時停止する必要がないのだ。
ロジックの構築には多くのテストが必要だった。ロジックをソフトウェア・シミュレーションにかけ、ロボットが遭遇する可能性のあるさまざまな条件下でシステムが正しい出力を出すことを検証しました。ロジックはシンプルなので、ロボットのバーチャル・シミュレーションを行う必要はありませんでした。
これで、意思決定に関するブログは終わりです!あなた自身の決断のロジックを考える上で、お役に立てたなら幸いです。
自律型ロボットナビゲーション ソリューション概要
AMRは、ロボットの位置と向きを記録するだけでなく、屋内でも屋外でも動作するツールである。
このソリューション概要では、自律移動ロボットのローカライゼーションのソースを決定する際に、お客様に検討いただくことをお勧めする点について説明します。
ソリューション概要をお読みください。適切なロボットローカリゼーションソリューションがAMRプロジェクトにどのように役立つのか、プロジェクトに着手する前に自問自答すべき重要な質問を含めてご覧いただけます。
このブログを楽しんでいただき、AMRの旅を始めたばかりの方のお役に立てれば幸いです。
現在、AMRエンジニアのために何ができるのか、さらに詳しくお知りになりたい方は、こちらをご覧ください、 応募ページを見る.
また、具体的なプロジェクトについてご相談がある場合は、以下のフォームからお問い合わせください。私たちは、最新かつ最高のロボット工学プロジェクトについて話し合うことを常に楽しみにしています。
今年掲載したAMRナビゲーションのスポットライトブログをまとめた次回のブログもお楽しみに!