(57)【要約】  本発明は、ロボットを制御する方法に関し、方法は、ロボットにより行われるタスクのための行動ツリーアーキテクチャの利用を含む。本発明はまた、方法を実行するように適応されるデータ処理手段を備えるシステムに関し、システムは好ましくは、ロボットを備える。本発明はまた、プログラミング、監視、内観及び／又はデバッギングのための行動ツリーアーキテクチャの使用に関する。
2019512402.tif 000002
【特許請求の範囲】
【請求項１】
ロボットを制御するための方法であって、前記方法は、前記ロボットにより行われるタスクのための行動ツリーアーキテクチャの利用を含み、
前記行動ツリーアーキテクチャは、ルートノード、少なくとも１つの制御フローノード及び少なくとも１つの実行ノードと、有向エッジとを含むノードを備え、
前記ノードは、前記有向エッジに接続され、
前記ルートノードは、１つの発信エッジを有し、受信エッジを有さず、各制御フローノードは、１つの受信エッジ及び少なくとも１つの発信エッジを有し、各実行ノードは、１つの受信エッジを有し、発信エッジを有さず、発信エッジを有するノードは、このエッジに接続した別のノードとの関連で親ノードと定義され、受信エッジを有するノードは、このエッジに接続した別のノードとの関連で子ノードと定義され、前記制御フローノード及び前記実行ノードは、それらの親ノードに異なる状態を返すように適応され、前記状態は、成功、実行中及び失敗を含み、前記方法は、
前記ルートノードが制御フローノードを呼び出す段階と、
前記制御フローノードが１番目のノードを呼び出す段階と、
前記１番目のノードが前記制御フローノードに第１状態を返す段階と、
前記制御フローノードが、前記ルートノードに第２状態を返す段階と
を備える方法。
【請求項２】
前記行動ツリーアーキテクチャは、サブツリーを備え、各サブツリーは、少なくとも１つの制御フローノードと、少なくとも１つの実行ノードとを備え、前記方法はさらに、サブツリーのためのローカルサブツリー変数を定義する段階を備える、
請求項１に記載の方法。
【請求項３】
前記ローカルサブツリー変数は、あるサブツリーから別のサブツリーに渡される、
請求項２に記載の方法。
【請求項４】
前記状態はさらに、初期化後、一時停止、無効、中止後、及び先取後のうち少なくとも１つを含み、
初期化後の前記状態は、ノードが初期化され、実行の用意ができたことを示し、
一時停止の前記状態は、ノードが中断されたことを示し、
無効の前記状態は、ノードが作り出され、まだ実行の用意ができていないことを示し、
中止後の前記状態は、ノードそれ自体がこのノードの実行を停止したことを示し、
先取後の前記状態は、ユーザ又は行動ツリーエグゼクティブがノードの実行を停止したことを示し、
前記方法はさらに、初期化後、一時停止、無効、中止後、及び先取後の前記状態のうち少なくとも１つを返す１つの制御フローノード又は実行ノードを含む、
請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に、少なくとも２つの発信エッジにそれぞれ接続される可変制御フローノードを備え、前記可変制御フローノードは、規則に従ってその子ノードを呼び出し得、その規則はまた、前記可変制御フローノードの前記子ノードにより返される前記状態以外の態様に依存する、
請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記可変制御フローノードの１つの子ノードは、主タスクに関連し得、その子ノードが前記主タスクの子ノードと定義され、前記可変制御フローノードの別の子ノードは、任意選択のタスクに関連し、その子が前記任意選択の子ノードと定義され、前記主タスクの子ノードの前記状態から独立したコンディションが満たされたなら、前記可変制御フローノードは前記任意選択の子ノードを呼び出す、
請求項５に記載の方法。
【請求項７】
前記行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に、少なくとも３つの発信エッジに接続される異種制御フローノードを備え得、前記子ノードは、スタータ子ノードと少なくとも２つの非スタータ子ノードとを備え、前記異種制御フローノードは、前記スタータ子ノードから開始して連続してその子ノードを呼び出すように適応され、前記異種制御フローノードは、規則に従ってその子を呼び出し、非スタータ子ノードごとに、前記非スタータ子ノードを呼び出すための前記規則は、それぞれの前記非スタータ子ノードの直前に呼び出される前記子ノードの前記状態に依存し、この依存性は、少なくとも２つの非スタータ子ノードに対して異なる、
請求項１から６のいずれか一項に記載の方法。
【請求項８】
少なくとも１つの制御フローノードは、回復ノードとして実現され、その回復ノードは、１番目の子ノードと、少なくとも１つのさらなる子ノードとを備える複数の子ノードを有し、前記回復ノードは、前記１番目の子ノードを呼び出し、
前記１番目の子ノードが成功を返したなら、前記回復ノードは成功を返し、前記少なくとも１つのさらなる子ノードを呼び出さない、
前記１番目の子ノードが失敗を返したなら、前記回復ノードは前記少なくとも１つのさらなる子ノードを呼び出し、
前記少なくとも１つのさらなる子ノードのうち１つが成功を返したなら、前記回復ノードは前記１番目の子ノードを呼び出し、
前記少なくとも１つのさらなる子ノードの全てが失敗を返したなら、前記回復ノードは失敗を返し、前記方法は前記回復ノードを実行する段階を備える、
請求項１から７のいずれか一項に記載の方法。
【請求項９】
前記行動ツリーアーキテクチャは、オブジェクトを選択すること、前記オブジェクトをつまみ上げること及び前記オブジェクトを所望の位置に持ってくることに関連するサブツリーを備え得、前記方法はこのサブツリーを実行する、
請求項１から８のいずれか一項に記載の方法。
【請求項１０】
前記ロボットは、移動ベース及びマニピュレータのうち少なくとも１つを含む、
請求項１から９のいずれか一項に記載の方法。
【請求項１１】
前記ロボットは、自律駆動ロボットである、
請求項１から１０のいずれか一項に記載の方法。
【請求項１２】
少なくとも１つの前記制御フローノードと、少なくとも１つの前記実行ノードとに関連するコマンドは、コンピュータソースコードにおいて実行可能な機能として実施され、
前記ノードと前記ノードに接続する前記有向エッジとがツリー構造を定義し、
前記ツリー構造は、データファイルとして格納され、
前記方法は、実行可能な機能として実施される前記コマンドと、データファイルとして格納される前記ツリー構造と、ランタイム時の行動ツリーエグゼクティブへの実行コマンドとを送信する段階を備え、
前記行動ツリーエグゼクティブは、実行可能な機能として実施される前記コマンドに基づく制御プログラムを生成し、前記ツリー構造は、データファイル及びランタイム時の前記実行コマンドとして格納される、
請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
前記ロボットは、センサーを含み得、前記方法は、前記センサーによって情報を感知する段階と、前記ロボットに前記情報に応答させる段階とを含む、
請求項１から１２のいずれか一項に記載の方法。
【請求項１４】
請求項１から１３のいずれか一項に記載の方法を実行するように適応されるデータ処理手段を備えるシステムであって、前記システムは好ましくは、ロボットを備える、
システム。
【請求項１５】
プログラミング、監視、内観、及び／又はデバッギングのための行動ツリーアーキテクチャの使用であって、上記行動ツリーアーキテクチャは、請求項１から１３のいずれか一項に説明の特徴のいずれかを備える、使用。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロボット制御に向けられる。さらに、本発明は、ロボットに向けられる。
【０００２】
ロボットは、異なる産業において、異なる目的でますます使用されている。近年、ロボットは、ロボットが単純なタスクを果たすだけでなく、より多用途のタスクを果たし、例えば、パラメータの単なる適応を超えた環境からの影響に反応するなどの「決定する」必要がある環境においてますます使用されている。
【０００３】
上記に照らせば、本発明の目的は、ロボットにおいて決定するプロセスのための改良されたルーチンを提供することである。さらに、本発明の目的はまた、ロボットにおいて決定するプロセスのための改良されたルーチンを備えたロボットを提供することである。
【０００４】
この目的は、本発明のロボット及びルーチンの利用により果たされる。
【０００５】
第１の態様によれば、行動ツリープロセスアーキテクチャは、ロボットを制御するために使用される。第２の態様によれば、ロボットが提供され、そのロボットが行動ツリーアーキテクチャを有するプロセスにより制御される。第３の態様によれば、プログラミング、監視、内観及び／又はデバッギングのためのそのような行動ツリーアーキテクチャの使用が、提供される。
【０００６】
行動ツリーは、モジュールサブアクションの構成として複雑なロボット行動を記述する手段である。例えば、オブジェクトを取ってくるタスクは、オブジェクトの方にナビゲートし、カメラを使用してそれを検出し、グリッパーを使用してそれをつまみ上げ、それを要求された位置へ持ってくるための一連のサブアクションとして記述され得る。行動ツリーは、「制御フロー」を記述し、すなわち、どの順序で及びそのコンディション下でこうしたサブアクションが実行されるべきである。
【０００７】
行動ツリーは、３種のノード、すなわち、上述のサブアクションに対応するルートノード、制御フローノード及び実行ノードを備える。こうしたノードは、有向エッジを使用して接続される。発信エッジを有するノードは、「親」と呼ばれ、受信エッジを有するノードは、「子」と呼ばれる。各ノードは、多くても１つの親ノード及び０個以上の子ノードを有する。ルートノードは、親を有さず、単一の子を有する。各制御フローノードは、１つの親及び少なくとも１つの子を有し、各実行ノードは、１つの親を有し、子は有さない。２つのタイプの制御フローノードが存在し、２つのタイプは、複数の子タスクを有し得る「複合タスク」と、単一の子タスクを包み隠す「デコレータ」である。実行ノードはまた、行動ツリーの「リーフ」と呼ばれ得る。
【０００８】
典型的には、各ノードは、ＲＵＮＮＩＮＧ、ＳＵＣＣＥＳＳ又はＦＡＩＬＵＲＥの値にノード内部実行状態を設定する対応タスクを実行するための１つの方法（例えば、「ｒｕｎ（）」と呼ばれる）を実施する。実行ノードは、それが実行するサブアクションの結果に基づきその状況を更新し、制御フローノードは、その子の状況に基づくその状況を更新する。タスクは、それが完了に成功したならＳＵＣＣＥＳＳの状況にあり、それが完了できなかったなら、ＦＡＩＬＵＲＥの状況にあり、まだ継続しているなら、ＲＵＮＮＩＮＧの状況にある。以下において、我々は、「成功する」の動詞を「ＳＵＣＣＥＳＳの状況と見なす」と等価として、「失敗する」の動詞を「ＦＡＩＬＵＲＥの状況と見なす」と等価として使用する。本技術はまた、追加の状況又は状態の利用を想定する。
【０００９】
ツリーは、ルートノードから開始して、深度第１の方式において固定された周波数（例えば、１０Ｈｚ）で通常トラバースされ得る。この周期的な再評価は、反応性行動の実施を促進する。ルートノード及び制御フローノードは、「ｒｕｎ（）」方法を呼び出すことにより、その子ノードの実行をトリガし、１番目のノードから通常開始し、その子の実行状況に応じてそれ自身の実行状況を更新する。実行結果に応じて、それらは、例えば、全ての子を次々と順に実行すべく、別の子の実行をトリガし得る。
【００１０】
行動ツリーのノード間の接続は、制御フロー、すなわちタスクがどの順序で行われるべきかを特定する。加えて、提案される方法は、タスク間でデータを渡す機能（いわゆる、「データフロー」）を含む。例えば、１つのタスクはオブジェクトを検出し、その位置を計算し、当該オブジェクトを把持しようと試みる次のタスクにこのデータを渡す可能性がある。こうしたデータは、タスクの選択の間で共有される必要があるが、データは、異なるタスクにより使用される同一の名前などの競合を回避すべく、グローバルに利用可能であるべきではない。提案される方法は、任意の構造のデータを保持し得る名前によりアクセスされ得るデータ要素を導入する。こうしたデータ要素は、サブツリーのタスクにより直接アクセスされ得るだけである。他のタスクは、こうした要素にアクセスするなら、接続がはっきりと特定される必要がある。
【００１１】
タスクは、どのデータ要素がその入力及び出力として役立つかを定義する必要がある。入力として特定されるデータ要素だけが、タスクのｒｕｎ（）方法において読み取られ得、出力として特定されるデータ要素だけが、書き込まれ得る。複合タスクは、データ要素のために内部ストレージを保有する。アクセスされた場合、複合タスクは、その親のデータ要素の内部コピーを作り出し、一度完了すると、複合タスクは、その親のデータストレージにその出力データ要素の値を書き込む。複合タスクの子は、外部に見えない子の間の連絡のために追加の入力を使用できる。
【００１２】
これは、ストレージ要素の入れ子領域を作り出す。データ要素は、それぞれの複合タスクの出力要素のリストにデータ要素を加えることにより、サブツリー外で利用可能にされ得、あるいは、この複合体によりカプセル化され、ツリーの他の部分における同じ名前の他のデータ要素と干渉しないこととなる。
【００１３】
入力データ要素及び出力データ要素の名前は、再マッピングされ得る、すなわち、タスクのデータ要素は、親のタスクのストレージにおいて異なる名前のデータ要素にリンクされ得る。これは、同じ名前が付けられたデータ要素同士の競合なく複合体において同じタイプの複数のタスクを使用するのを可能にする。
【００１４】
ＲＵＮＮＩＮＧ、ＳＵＣＣＥＳＳ及びＦＡＩＬＵＲＥの３つのタスク状態のベーシックモデルは、タスクの初期化、一時停止及び終了を含むノードのライフサイクルの型を作るべく、拡張され得る。各々の状態の移行は、タスクの実行を一時停止する前に、例えば、安全（静止）状態にロボットをする、要求された動作を行うイベントハンドラにリンクされ得る。これは、ロボットの状態及び外界の動作の効果を考慮することなく、プログラムが単に一時停止又はスイッチされ得ないロボットを制御する際に、とりわけ重要である。
【００１５】
提案される方法において、ノードは、ＩＮＶＡＬＩＤの状態で作り出され得る。ノードが、ＢＴ実行により最初に達せられた場合、初期化ルーチンが呼び出され、ノードはＲＵＮＮＩＮＧ（初期化が成功したなら）か、ＦＡＩＬＵＲＥ（初期化が失敗したなら）のいずれかに移行する。タスクが実行されている間、タスクは依然としてＲＵＮＮＩＮＧの状態にあり、通常、タスクが一度完了したなら、ＳＵＣＣＥＳＳ又はＦＡＩＬＵＲＥの２つの末端状態のうち１つに、移行することとなる。行動ツリーは、任意のタスク上のｓｕｓｐｅｎｄ（）方法を呼び出し、タスク及びその子全てを一時停止に導くことにより外部から一時停止され得る。一時停止されたタスクは、そのｒｕｎ（）方法が一度再び呼び出されたなら、自動的に再開される。
【００１６】
下記に、異なるタイプのノードが説明される。本技術は、下記に説明されるノードのうち各々及びいずれかを利用し得る。
【００１７】
１．ルートノード
ルートノードは、一定の頻度でその子を「作動する」（ｔｉｃｋ）。すなわち、ルートノードは、子を実行し、結果に基づきそれ自身の状況を更新する。
【００１８】
２．実行ノード
２つのタイプの実行ノード、動作ノード及びコンディションノードが存在する。
【００１９】
コンディションノードは、一定のコンディションをチェックし、その親にＳＵＣＣＥＳＳ又はＦＡＩＬＵＲＥを返す。例えば、ロボットが自律駆動ロボットである場合、１つの可能性としてのコンディションノードは、ロボットがどこに進んでいるかの方向に障害物が存在するかどうか（「障害物の存在」）であり得る。そのような障害物が感知された場合、その親にＳＵＣＣＥＳＳを返すであろう。そのような障害物が感知されない場合、ＦＡＩＬＵＲＥをその親に返すであろう。
【００２０】
動作ノードは、一定の動作を行う。ロボットがモーターを有する自律駆動ロボットであるなら（上記に例示されるように）、１つの例示的な動作は、モーターを停止すること（「モーター停止」）であり得る。ノードは、モーターを停止する動作がまだ続いている場合、その親にＲＵＮＮＩＮＧを返すであろう。モーターが停止されたなら、その親にＳＵＣＣＥＳＳを返し、モーターの停止が失敗したなら、ＦＡＩＬＵＲＥを返す。
【００２１】
３．制御フローノード
制御フローノードは、ロボットの行動を動作ノード及びコンディションノードから効果的に構成する、ルートノードと実行ノードとの間の中間ノードである。１つより多い子を有し得る「複合タスク」と、１つの子だけを有する「デコレータタスク」とが、区別される場合がある。異なる制御フローノードの例が、下記に説明される。
【００２２】
３．１シーケンス
シーケンスは、常に１番目の子から呼び出しを開始、その子が成功している限りその子を次々と呼び出す。通常の使用の場合において、子は、全てが複合タスクを達成すべく行われる必要があるサブアクションである可能性がある。１つの動作が失敗したなら、シーケンスはまた、その親にＦＡＩＬＵＲＥを返し、任意のさらなる子を実行しない。全ての子が成功したなら、シーケンスは同様に成功する。作動された子がＲＵＮＮＩＮＧを返す場合、シーケンスはＲＵＮＮＩＮＧを返す。
【００２３】
実行のセマンティクス（ｓｅｍａｎｔｉｃｓ）：
・子が次々と呼び出され、常に１番目の子から開始する。
・子が成功した場合、次の子が続く。
・子が失敗した場合、シーケンスは同様に失敗する。
・全ての子が成功した場合、シーケンスは成功する。
【００２４】
３．２セレクタ
セレクタノードは、１つがＳＵＣＣＥＳＳを返すまで、常に１番目の子から試行を開始し、その子の各々を順に試みる。通常の使用の場合において、子は、目標を達成する代替方法である可能性がある。作動された子がＲＵＮＮＩＮＧを返し、セレクタノードはまた、ＲＵＮＮＩＮＧを返す。１つの子供がＳＵＣＣＥＳＳを返すなら、セレクタは同様に成功し、任意のさらなる子を実行しない。全ての子が失敗したなら、セレクタも、ＦＡＩＬＵＲＥを返す。セレクタ複合物は、１番目の子が最も高い優先順位を有する状態で、その優先順位によりタスクにランクを付けるために使用され得る。各タスクが最初にその適用可能性のコンディションをチェックするなら、より高い優先順位のタスクが、次の反復で自動的にアクティブになり、より低い優先順位のタスクにより開始されるアクションをオーバーライド又はキャンセルし得る。
【００２５】
実行のセマンティクス：
・子が次々と呼び出され、常に１番目の子から開始する。
・１つの子が成功した場合、セレクタは同様に成功し、任意のさらなる子を実行しない。
・１つの子が失敗した場合、次の子が続く。
・全ての子が失敗した場合、セレクタは同様に失敗する。
【００２６】
３．３メモリシーケンス
以下の適応に対するシーケンスノードとしてのメモリシーケンスである。メモリシーケンスノードは、最後に実行していた子を記憶し、次の作動時にそこへ戻る。すなわち、メモリシーケンスノードは、その子の実行を１番目の子から開始しない。
【００２７】
実行のセマンティクス：
・前の反復においてラン中の子から開始し、子が次々と呼び出される。
・子が成功した場合、次の子が続く。
・子が失敗した場合、シーケンスは同様に失敗する。
・全ての子が成功した場合、メモリシーケンスは成功する。
【００２８】
３．４メモリセレクタ
以下の適応に対するセレクタノードとして：
メモリセレクタノードは、最後のラン中の子を記憶し、次の作動にそこへ戻る。すなわち、メモリセレクタノードは、その子の実行を１番目の子から開始しない。
【００２９】
実行のセマンティクス：
・前の反復においてラン中である子から開始し、子が次々と呼び出される。
・１つの子が成功した場合、セレクタは同様に成功し、任意のさらなる子を実行しない。
・１つの子が失敗した場合、次の子が続く。
・全ての子が失敗した場合、セレクタは同様に失敗する。
【００３０】
３．５並列ノード並列の子の実行を記述する異なるタイプのノードが存在する。
【００３１】
３．５．１パラレルワン（ＰａｒａｌｌｅｌＯｎｅ）パラレルワンノードは、全ての子を並列に実行する。パラレルワンノードは、１つが失敗したなら失敗し、１つの子が成功するとすぐに成功する。通常のアプリケーションは、監視されるコンディションが真のままの間は実行を継続し、それが一度真でなくなったなら、失敗を返すこととなる主タスクと並列に監視中のタスクを実行するものであり得る。
【００３２】
実行のセマンティクス：
・全ての子が、並列に開始される。
・１つの子が失敗した場合、同様に失敗する。
・１つの子が成功した場合、同様に成功する。
【００３３】
３．５．２パラレルオール（ＰａｒａｌｌｅｌＡｌｌ）
パラレルオールノードは、全ての子を並列に実行する。パラレルオールノードは、１つの子が失敗したなら、失敗し、全ての子が成功した場合、成功する。通常のアプリケーションは、２つの動きを同時に行い、それらの全てが完了するのを待つことであり得る。
【００３４】
実行のセマンティクス：
・全ての子が、並列に開始される。
・パラレルワンノードは、１つの子が失敗したなら、同様に失敗する。
・いくつかの子が成功し、いくつかがまだ実行中なら、実行を続ける。
・全ての子が成功した場合、同様に成功する。
【００３５】
３．５．３パラレルセレクタ（ＰａｒａｌｌｅｌＳｅｌｅｃｔｏｒ）
パラレルセレクタノードは、並列に全ての子を実行する。パラレルセレクタノードは、全てが失敗したなら、失敗し、１つが成功したなら成功する。通常のアプリケーションは、代替的な選択肢のうち１つが成功するまで、問題を並列に解決するために代替的な選択肢を試みることである。
【００３６】
実行のセマンティクス：
・全ての子が、並列に開始される。
・パラレルセレクタノードは、１つの子が成功したなら、同様に成功となる。
・いくつかの子が失敗し、いくつかがまだ実行中なら、実行を続ける。
・全ての子が失敗したなら、同様に失敗となる。
【００３７】
３．６回復
回復タスクは、１番目の子を主タスクとして実行し、主タスクの失敗から回復すべく他の子を順に試みることとなる。１番目の子が成功したなら、回復タスクが同様に成功し、その他の子を実行しない。１番目の子が失敗したなら、他の子の１つが成功するまで他の子を続ける。この場合には、１番目の子を続ける。全ての子が失敗したなら、回復タスクも同様に失敗する。この種の回復行動を簡潔に実施することが可能であることは、複雑かつ不確かな環境において操作する物理ロボットを制御するために行動ツリーを使用する場合、有利である。こうした場合において、動作は多くの場合、失敗し、失敗から回復するためのルーチンが、ロボットの制御プログラムの大部分の原因となり得る。
【００３８】
実行のセマンティクス
・１番目の子を実行する。１番目の子が成功したなら、同様に成功し、他の子に触れない。
・１番目の子が失敗したなら、他の子を続ける。
・他の子のいずれかが成功したなら、１番目の子を続ける。
・他の子のいずれかが失敗したなら、次の子を試みる。
・全ての子が失敗したなら、回復タスクは同様に失敗する。
【００３９】
３．７チェックシステムエラー（ＣｈｅｃｋＳｙｓｔｅｍＥｒｒｏｒ）
この複合ノードは、任意の認められていないシステムエラーが記録されたかどうかをチェックする。システムエラーは、ロボットのサブシステムを、例えば、モーターの故障又は破損されたセンサー等の使用不可の状態にするエラーである。こうしたエラーのいくつかは、例えば、ドライバープログラムを再スタートすることにより、プログラムに従って解決され得る一方、他のエラーは人間の介入を必要とする。両方の場合において、ロボットは、エラーが認められるまで、影響されるコンポーネントのうちいずれかを使用しようと試みるのを停止すべきである。このノードにパラメータとして渡されたロボットのサブシステムの少なくとも１つに影響を与える任意の認められていないシステムエラーが存在したなら、チェックシステムエラー複合物がブロックする。エラーが存在しないなら、１番目の子が実行される。エラーが存在したなら、ノードは、他の子を次々と試みることによりエラーを解決しようとする。エラーが子の１つにより解決され得たなら（すなわち、ＳＵＣＣＥＳＳに返ったなら）、子１の実行を続け、さもなければ失敗する。
【００４０】
実行のセマンティクス：
・１番目の子を実行する。１番目の子が成功したなら成功し、１番目の子が失敗したなら失敗する。
・システムエラーが、１番目の子の実行中に記録されたなら、１番目の子の実行を停止し、以下の子のいずれかがエラーを解決するかどうかを調べるべく、以下の子を試みる。
・他の子のいずれかが成功したなら、１番目の子を続ける。
・全ての子が失敗したなら、チェックシステムエラータスクが同様に失敗する。
【００４１】
３．８デコレータノード
デコレータノードは、単一の子を有し、返り値を変更する。すなわち、デコレータノードは、単一の子の返り値を「包み隠す」。この返り値の変更は、様々な使用の場合において、例えば、一度より多くタスクを実行するために、実行を調整するために、又はタスクを統合するために適用され得る。
【００４２】
３．８．１インバータ
このノードは、その子の返り値の反対のものを返す。すなわち、子がＦＡＩＬＵＲＥを返した場合ＳＵＣＣＥＳＳを返し、子がＳＵＣＣＥＳＳを返した場合ＦＡＩＬＵＲＥを返し、子がＲＵＮＮＩＮＧを返した場合ＲＵＮＮＩＮＧを返す。例えば、新たなコンディションノードを定義せずに、コンディションの反対のものをチェックすることが可能である。
【００４３】
３．８．２失敗の無視
このノードは、その子がＳＵＣＣＥＳＳを返した場合、又はＦＡＩＬＵＲＥを返した場合、ＳＵＣＣＥＳＳを返し、その子がＲＵＮＮＩＮＧを返した場合ＲＵＮＮＩＮＧを返す。
【００４４】
実行のセマンティクス：
・子が成功した、又は失敗した場合、ＳＵＣＣＥＳＳを返す。
・子がまだ実行中である場合、ＲＵＮＮＩＮＧを返す。
【００４５】
３．８．３ループ
このノードは、それが成功する限り、（状況によっては、無制限の）複数回（ｎｕｍ＿＿ｉｔｅｒａｔｉｏｎｓ）までループにおいて、その子を実行する。子が毎回成功したなら、ノードは成功し、子が一度失敗したなら、ノードは、失敗する。
【００４６】
実行のセマンティクス：
・子を実行する。
・子が失敗したなら、同様に失敗する。
・子が成功したなら、ｎｕｍ＿＿ｉｔｅｒａｔｉｏｎｓが到達され、成功するまで繰り返し、又はｎｕｍ＿ｉｔｅｒａｔｉｏｎｓ＝−１なら、無限に繰り返す。
【００４７】
３．８．４ループアンティル（ＬｏｏｐＵｎｔｉｌ）
このノードは、それが成功する限り、所与の（状況によっては、無制限の）最大数の反復（ｍａｘ＿ｎｕｍ＿ｉｔｅｒａｔｉｏｎｓ）までループにおいてその子を実行する。ループアンティルノードは、子が成功し、成功フラグ（ｔａｓｋ＿ｄｏｎｅ）が子により真（Ｔｒｕｅ）に設定されたなら、成功する。子が失敗した、又は最大数の反復が、真に設定された成功フラグなしで到達されたなら、ループアンティルノードは失敗する。
【００４８】
実行のセマンティクス：
・子を実行する。
・子が失敗したなら、同様に失敗する。
・子が成功したなら、子がｔａｓｋ＿ｄｏｎｅ値を真に設定する（ひいては成功する）まで、又はｍａｘ＿ｎｕｍ＿ｉｔｅｒａｔｉｏｎｓ閾値が到達される（ひいては失敗し、ｍａｘ＿ｉｔｅｒａｔｉｏｎｓ＿ｅｘｃｅｅｄｅｄ出力を真に設定する）まで繰り返す。
【００４９】
３．８．５再試行（Ｒｅｔｒｙ）
再試行デコレータは、それが成功を返すまでその子を実行する。子が成功したなら、再試行ノードは同様に成功する。子が失敗したなら、ノードは、所与の（状況によって、無制限の）回数（ｍａｘ＿ｉｔｅｒａｔｉｏｎｓ）まで子を再スタートし、子がこの閾値より頻繁に失敗したなら、失敗する。
【００５０】
実行のセマンティクス：
・子を実行する。
・子が成功したなら、同様に成功する。
・子が失敗したなら、ｍａｘ＿ｉｔｅｒａｔｉｏｎｓ回まで再試行する。
・子がｍａｘ＿ｉｔｅｒａｔｉｏｎｓ回より多く失敗したなら、ＦＡＩＬＵＲＥを返す。
【００５１】
３．８．６結果反復器（ＲｅｓｕｌｔＩｔｅｒａｔｏｒ）
結果反復器は、その子により返されるリストの全ての要素にわたって反復し、それらを１つずつ返す。例えば、子は、順序正しく訪問されるべきウェイポイントのリストを返し得る。子により返されるリストは、キャッシュ化され得、その場合に、キャッシュ値が利用可能でないなら、子が呼ばれるだけであろう。子が失敗したなら、ノードは同様に失敗する。子が成功し、値を返したなら、又は、キャッシュ値が使用され得たなら、ノードは成功する。
【００５２】
実行のセマンティクス：
・子が実行され、このデコレータのリスト入力にマッピングされたその出力キーのうち１つを経由するリストを返す。
・デコレータは、キャッシュパラメータが真であるなら、リストをキャッシュする。
・デコレータは、出力された項目を経由してリストの１番目の要素を返す。
・キャッシングが真なら、その後の呼び出しは、キャッシュされたリストの残っている要素を返すこととなる。
・キャッシングが偽なら、又はリストが使い尽くされたなら、子は新たなリストを得るべく、再び呼び出される。
・子の実行値は、変更無く通され、又はキャッシュ値が使用されたなら、ＳＵＣＣＥＳＳが返される。
【００５３】
３．８．７
サブツリールックアップ
このデコレータは、その子の返り値を変更しないが、ランタイム時の行動ツリーを拡張するために役立つ。アクセスされた場合、ストレージデバイスからサブツリーを読み込み、サブツリーをそれ自身の子として加える。これは、例えば、異なるツリー又は異なるツリーの異なる部分においてインスタンス化され得るモジュール式の再利用可能なツリーフラグメントを格納するために有益である。これは、ロボット工学における一般的な使用の場合であり、そこでは、ナビゲーション又はオブジェクト操作等の行動は、タスクの異なる部分において現れる。
【００５４】
３．８．８失敗後（Ｆａｉｌｅｄ）
失敗後のデコレータは、子がＦＡＩＬＵＲＥを返した場合ＳＵＣＣＥＳＳを返し、子がＦＡＩＬＵＲＥを返さなかった場合失敗する。
【００５５】
実行のセマンティクス：
・子がＦＡＩＬＵＲＥを返したなら、成功する。
・子がＳＵＣＣＥＳＳを返した、又はまだＲＵＮＮＩＮＧなら、失敗する。
【００５６】
３．８．９
成功後（Ｓｕｃｃｅｅｄｅｄ）
成功後のデコレータは、子がＳＵＣＣＥＳＳを返した場合、ＳＵＣＣＥＳＳを返し、子がＦＡＩＬＵＲＥを返さなかった場合失敗する。
【００５７】
実行のセマンティクス：
・子がＳＵＣＣＥＳＳを返したなら、成功となる。
・子がＦＡＩＬＵＲＥを返した、又はまだＲＵＮＮＩＮＧなら、失敗となる。
【００５８】
すなわち、簡単に言えば、本技術は、ロボットを制御するための方法に関連し、当該方法は、ロボットにより行われるタスクための行動ツリーアーキテクチャの利用法を含む。
【００５９】
公知のロボットにおいて、典型的には、有限ステートマシンがロボットを制御するために使用される。このことは、単純で、制限された数の明確に定義されたタスク（特定のコンポーネントを車両に搭載することなど）を果たす産業ロボットに適し得るが、ロボットの環境に反応する必要があるロボットには理想的ではない。本技術は、そのような環境において、ロボットのために特に有益であり、そこで、ロボットは、その環境と、（潜在的に無制限の）数の異なる状況に反応する必要がある。
【００６０】
すなわち、本技術は、異なる状況において、ロボットの反応にどのように反応し、どのように優先順位を付けるかについて、ロボットに異なる行動を持たせる。ロボットを制御するためのそのような行動ツリーアーキテクチャの使用は、複数の理由のために有利となり得る。制御方法が、例えば、有限ステートマシンとして実装された場合、その構造は、より単純となり得、必要とされていたであろうストレージスペースより小さいストレージスペースを要求する。そのグラフィック図は、ロボットの行動を実施するユーザにとってより単純、かつより直観的であり得る。特に、タスクの優先順位付けが、単純化され得る。これは、行動が実装された場合、制御ロボットは人間エラーになりにくく、それゆえ、よりフェイルセーフとなり、本技術の方法により制御されるロボットの全体的な安全性の向上をもたらし得る。新たなタスクは、行動ツリーアーキテクチャが、まさにモジュール式であり適応性があるので、より単純でより適応性がある方法において実施され得、それにより、ロボット行動に加えられるために新たなタスクに必要とされる時間を低減させ得る。
【００６１】
方法は、コンピュータが実装された方法であり得る。すなわち、行動ツリーアーキテクチャは、ロボットにより行われるタスクに優先順位をつけるために使用される。
【００６２】
方法の段階は、本明細書において特定の順序で述べられた場合はいつでも、段階は、本明細書において具体的に述べられない限り、又は熟練者に明確でない限り、本明細書に述べられる順序において、好ましくはであるが、必ずしも行われない。
【００６３】
行動ツリーアーキテクチャは、ルートノードと、少なくとも１つの制御フローノード及び少なくとも１つの実行ノードと、有向エッジとを含むノードを備え得、ノードは、有向エッジに接続され、ルートノードは、１つの発信エッジを有し、受信エッジを有さず、各制御フローノードは、１つの受信エッジ及び少なくとも１つの発信エッジを有し、各実行ノードは、１つの受信エッジを有し、発信エッジを有さず、発信エッジを有するノードは、このエッジに接続した別のノードとの関連で親ノードと定義され、受信エッジを有するノードは、このエッジに接続した別のノードとの関連で子ノードと定義され、制御フローノード及び実行ノードは、それらの親ノードに異なる状態を返すように適応され、状態は、成功、実行中及び失敗を含み、方法は、
ルートノードが制御フローノードを呼び出す段階と、
制御フローノードが１番目のノードを呼び出す段階と、
１番目のノードが制御フローノードに第１状態を返す段階と、
制御フローノードが、ルートノードに第２状態を返す段階と
を含み得る。
【００６４】
理解されるように、第１及び第２状態は、互いに等しい、又は異なり得る。
【００６５】
方法はさらに、単一のノードに対してローカルノード変数を定義する段階を備え得る。
【００６６】
ローカルノード変数は、あるノードから別のノードへと渡され得る。
【００６７】
行動ツリーアーキテクチャは、サブツリーを含み得、各サブツリーは、少なくとも１つの制御フローノードと、少なくとも１つの実行ノードとを備え、方法はさらに、サブツリーのためにローカルサブツリー変数を定義する段階を備え得る。
【００６８】
ローカルサブツリー変数は、あるサブツリーから別のサブツリーに渡され得る。
【００６９】
そのようなローカルノード又はローカルサブツリー変数の定義は、そのような定義がグローバル変数の定義より適応性があるので、有利であり得る。制御方法の異なるフラグメントは、タスクライブラリに配信され得、タスクライブラリは、他の目的のために及び異なるシナリオにおいて使用され得る。そのようなローカル変数はまた、以下の理由に対して有利である。
複雑なロボットの行動の実装において、異なる人々が、ロボットの行動の異なるセクションに取り組み得、例えば、ある人は、オブジェクトのつまみ上げに関連するサブツリーを実装し得、別の人は、ロボットの安全ルーチンに関連するサブツリーを実装し得る。異なるサブツリーを実装する人々の両方は、同じ名前（異なる態様に関連するが）を有する変数を定義することが可能であり得る。ローカル変数によって、各変数は、サブツリーごとに定義されるだけなので、これは、問題とならないかもしれない。あるいは、異なるサブツリー（異なる態様に関連するが）に対して定義される同じ変数を有することは、ロボットの操作のエラーにつながり得る。従って、ローカルノード変数の定義又はローカルサブツリー変数はさらに、ロボットの行動を改善し得、この行動をよりフェイルセーフにさせ得る。
【００７０】
状態はさらに、初期化後、一時停止、無効、中止後、及び先取後（ｐｒｅｅｍｐｔｅｄ）のうち少なくとも１つを含み得、初期化後の状態は、ノードが初期化され、実行の用意ができたことを示し、
一時停止の状態は、ノードが中断されたことを示し、
無効の状態は、ノードが作り出され、まだ実行の用意ができていないことを示し、
中止後の状態は、ノードそれ自体がこのノードの実行を停止したことを示し、
先取後の状態は、ユーザ又は行動ツリーエグゼクティブ（ｅｘｅｃｕｔｉｖｅ）がノードの実行を停止したことを示し、
方法はさらに、初期化後、一時停止、無効、中止後、及び先取後の状態のうち少なくとも１つを返す１つの制御フローノード又は実行ノードを含み得る。
【００７１】
例えば、無効状態は、ノードがまだ初期化されていない場合のノードにより想定され得、例えば、ロボットの異なるコンポーネントとの接続が依然として、確立されている必要がある場合である。
【００７２】
例えば、初期化後の状態は、ロボットの制御システムにおいてデータベース又は他のプログラムとの接続が確立されていることを示し得る。
【００７３】
一時停止の状態は、タスクが現在実行可能でないが、その実行が後で再開され得ることを示し得る。
【００７４】
例えば、無効の状態は、ノードがまだ初期化されていない場合のノードにより想定され得る。
【００７５】
中止後の状態は、ノードの実行中に、重大な又は致命的なエラーが検出された場合に想定され得る。
【００７６】
例えば、ユーザは、ある外部イベントに応答してノードを先取後に設定し得る。
【００７７】
すなわち、実行中、成功、失敗の状態に加えて、追加の状態がノードにより想定され得る。従って、タスクに関連したノード又はサブツリーは、異なる「ライフサイクル」を有し得、それによりそのような構造は、例えば、異なる（外部）変数に応じて停止及び再開され得る。そのような追加の状態の定義は、より多用途で、それゆえ改善されたロボットの行動を植え付ける可能性をユーザに提供し得る。
【００７８】
状態は、上記の段落に説明された状態の２，３，４又は５を含み得る。
【００７９】
行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に少なくとも２つの発信エッジにそれぞれ接続される可変制御フローノードを備え得、可変制御フローノードは、規則に従ってその子ノードを呼び出し得、その規則はまた、可変制御フローノードの子ノードにより返される状態以外の態様に依存する。
【００８０】
これは、例えば、順に及びセレクタノードにおいて、他の行動ツリーアーキテクチャとは異なり得、子を呼び出す規則は、完全に子に依存する。すなわち、子が返すこととなる状態を知っている場合、制御フローノードが、どのように反応することとなるかは知られている。可変制御フローノードに対して、以下が異なる。たとえ、子がどの状態を返すこととなるかを知っていたとしても、可変制御フローノードがどのように反応することとなるかはまだ知られていない。例えば、そのような可変制御フローノードは、他の態様（システムエラーを感知するシステムなど）に応じて子を呼び出し得る。そのような可変制御フローノードは、エラーの処理、及びより一般的には、外部の影響に対する反応が何か重要であるとき、ロボットを制御するために非常に便利であり得る。
【００８１】
可変制御フローノードの１つの子ノードは、主タスクに関連し得、その子ノードが主タスクの子ノードと定義され、可変制御フローノードの別の子ノードは、任意選択のタスクに関連し得、その子が任意選択の子ノードと定義され、主タスクの子ノードの状態から独立したコンディションが満たされたなら、可変制御フローノードは、任意選択の子ノードを呼び出す。
【００８２】
任意選択の子ノードは、修理の子ノードであり得、修理が必要である場合、可変制御フローノードは、修理の子ノードを呼び出し得る。
【００８３】
任意選択の子ノードは、安全の子ノードであり得、可変制御フローノードは、安全の重大な状況が検出された場合、安全の子ノードを呼び出し得る。
【００８４】
行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に、少なくとも３つの発信エッジに接続される異種制御フローノードを備え得、
子ノードは、スタータ子ノードと少なくとも２つの非スタータ子ノードとを備え、
異種制御フローノードは、スタータ子ノードから開始して連続してその子ノードを呼び出すように適応され、
異種制御フローノードは、規則に従ってその子を呼び出し、
非スタータ子ノードごとに、非スタータ子ノードを呼び出すための規則は、それぞれの非スタータ子ノードの直前に呼び出される子ノードの状態に依存し、
この依存性は、少なくとも２つの非スタータ子ノードに対して異なる。
【００８５】
それは、他のノードに対する区別であり得、そこで同じ規則が全ての子に適用される（さらなる子が存在しない場合、最後の子を除く）。本技術において、簡単に言えば、異なる規則が、子のいくつかに適用され得る。これは、他のノードとさらなる相違があり得る。例えば、シーケンスノード又はセレクタノードにおいて、ｎ≧２の場合に子ノードｎを呼び出すための規則は、子ノードｎ−１の返り値に依存する。例えば、シーケンスノードにおいて、子ｎ−１が成功した場合、子ｎが呼び出され（ｎ≧２の場合のｎから独立して）、セレクタノードにおいて、子ｎは、子ｎ−１が失敗した場合、呼び出され（ｎ≧２の場合のｎから独立して）。これは、その子を異なって扱う異種制御フローノードに対して異なる。例えば、子１が成功した場合、子２が呼ばれ得るが、子２が失敗した場合、子３が呼ばれ得る。これは、単純かつ直観的な方式においてより多用途で複雑なタスクの実施を可能にし得る。
【００８６】
少なくとも１つの制御フローノードは、回復ノードとして実現され得、その回復ノードは、１番目の子ノードと、少なくとも１つのさらなる子ノードとを備える複数の子ノードを有し、
回復ノードは、１番目の子ノードを呼び出し、
１番目の子ノードが成功を返したなら、回復ノードは成功を返し、少なくとも１つのさらなる子ノードを呼び出さない、
１番目の子ノードが失敗を返したなら、回復ノードは少なくとも１つのさらなる子ノードを呼び出し、
少なくとも１つのさらなる子ノードのうち１つが成功を返したなら、回復ノードは１番目の子ノードを呼び出し、
少なくとも１つのさらなる子ノードの全てが失敗を返したなら、回復ノードは失敗を返し、
本方法は、回復ノードを実行する段階を含み得る。
【００８７】
そのような回復ノードは、実行される必要がある主タスクと、主タスクの実行を知らせ得る異なるコンディションとを有するときに、特に有益であり得る。そのような状況において、方法は先ず、主タスクを行おうと試みる。これは、元に戻すことができるなら、追加の補助タスクが、主タスクの実行を知らせるコンディションを変更する試みにおいて行われ得る。そのような回復ノードのための１つの例は、主タスクがオブジェクトを把持するロボットであり、補助タスクは、ロボットのベースの位置にあり得る。先ず、ロボットは、オブジェクトを把持しようとする（主タスク）。これは、例えば、ベースが間違った位置にあり、それによりロボットアームがオブジェクトに届き得ないとき、元に戻すことができ得る。補助タスクとして、ロボットは次に、そのベースを再配置し得る（補助タスク）。これが一度成功したなら、オブジェクトを把持するタスク（主タスク）は、再実行され得る。
【００８８】
行動ツリーアーキテクチャは、ロボットの周囲の人間に対する感知と、ロボットの周囲において人間が感知されたならロボットを停止することとに関連するサブツリーを備え得、方法はこのサブツリーを実行し得る。
【００８９】
行動ツリーアーキテクチャは、オブジェクトを選択すること、オブジェクトをつまみ上げること及びオブジェクトを所望の位置に持ってくることに関連するサブツリーを備え得、方法はこのサブツリーを実行し得る。
【００９０】
行動ツリーアーキテクチャは、ロボットがそのバッテリー状態をチェックすること、ロボットが充電ステーションにナビゲートすること、及びロボットが充電されることに関連するサブツリーを備え得、方法はこのサブツリーを実行し得る。
【００９１】
ロボットは、自律ロボットであり得る。
【００９２】
ロボットは、移動ベース及び／又はマニピュレータを含み得る。
【００９３】
ロボットは、自律駆動ロボットであり得る。
【００９４】
ロボットは、オブジェクトをつまみ上げるように適応され得る。
【００９５】
ロボットは、センサーを含み得、方法は、センサーによって情報を感知する段階と、ロボットにその情報に応答させる段階とを含み得る。
【００９６】
方法は、コンピュータが実装された方法であり得る。
【００９７】
少なくとも１つの制御フローノードと、少なくとも１つの実行ノードとに関連するコマンドは、コンピュータソースコードにおいて実行可能な機能として実施され得、
ノードとノードに接続する有向エッジとがツリー構造を定義し、
ツリー構造は、データファイルとして格納され、
方法は、実行可能な機能として実施される上記コマンドと、データファイルとして格納される上記ツリー構造と、ランタイム時の行動ツリーエグゼクティブへの実行コマンドとを送信する段階を備え得、
行動ツリーエグゼクティブは、実行可能な機能として実施される上記コマンドに基づく制御プログラムを生成し、上記ツリー構造は、データファイル及びランタイム時の実行コマンドとして格納される。
【００９８】
ツリー構造は、実行可能なプログラムファイルではなく、データファイル（例えば、バイナリデータ形式）であることが好ましく、プログラムは、そのデータに基づき生成され得ることが好ましい。これにより、データが、ソフトウェアにより操作され、生成され、可視化され、送信されることなどを可能にする。プログラム内部から解釈することが困難であるコンパイラ型のプログラムコードでこれを行うことはより困難であろう。
【００９９】
データファイルは、テキストファイルであり得、好ましくは、ＪＳＯＮフォーマットテキストファイルであり得る。
【０１００】
言い換えれば、行動ツリーアーキテクチャは、データ構造として実施され得、実行可能なツリーは、上記データ構造及びソースコードの実行可能な機能に基づきランタイム時にインスタンス化され得る。そのように定義された仕様は、ツリーが構成され、その後変化がないままである場合、同時に設定されるタスクパラメータを含み得る。これにより、より包括的なタスクの実施を作り出すのを可能にする。特定用途向けの引数は、タスクの実施においてハードコード化される代わりに、ツリー仕様のパラメータとして定義され得るからである。これにより、行動ツリーのコンポーネントの再利用性及びモジュール性を大きく増大し得る。
【０１０１】
方法はさらに、番犬ルーチンを呼び出す上記ノードの少なくとも１つを備え、
番犬ルーチンが上記ノードの少なくとも１つにより呼び出されたときはいつでも、番犬ルーチンはタイマーを設定し、
番犬ルーチンが事前に定義された時間の間、上記ノードの少なくとも１つにより呼び出されなかった場合、タイマーは経過し、
タイマーが経過した場合、上記ノードのうち少なくとも１つの操作は停止される。
【０１０２】
言い換えれば、先ず、番犬ルーチンは、それを登録しているそれぞれのノードにより開始される。次に、タイマーは、「カウントダウン」を開始する。タイマーが、再び呼び出されないなら、タイマーが経過し、それぞれのノードの操作を停止させる。しかしながら、通常の操作の間、それぞれのノードが番犬ルーチンを再呼び出し（すなわち、ノードが繰り返し呼び出す）、それにより、タイマーはリセットされ、従って経過するのが防止され、その操作を継続する。他方、番犬ルーチンが、事前に定義された時間の間に呼び出されないなら（例えば、システムエラー又はプログラムエラー又はハードウェア故障に起因して）、タイマーは経過し、従ってノードの操作を停止する。次に、それぞれのノードは、失敗の状態を返す。
【０１０３】
そのような番犬ルーチン又は番犬メカニズムは、動作が中断された場合、特に実際のハードウェアが使用された場合に、保存行動を確実にするために有益であり得る。１つの例は、システムエラーが報告され、行動ツリーの操作がトップレベルで停止されることであり、その時、番犬メカニズムは、番犬を開始したそれぞれのノードだけが事前に定義された時間の間だけ操作し、それから停止されることを確実にする。すなわち、番犬メカニズムは、安全操作に寄与するルーチンであり、安全操作は、ハードウェアの操作のために特に有益である。また、より高い優先順位を有する別のノードの操作に起因して、特定のノードは、もはや呼び出されないことを検出することが可能となり得る。
【０１０４】
本技術はまた、上記に説明される方法のいずれかを実行するように適応されるデータ処理手段を備えるロボットに関する。より一般的には、本技術は、本明細書に説明される方法のいずれかを実行するように適応されるデータ処理手段を備えるシステムに関連する。
【０１０５】
ロボットは、自律ロボットであり得る。
【０１０６】
ロボットは、移動ベース及び／又はマニピュレータを含み得る。
【０１０７】
ロボットは、自律駆動ロボットであり得る。
【０１０８】
ロボットは、オブジェクトをつまみ上げるように適応され得る。
【０１０９】
ロボットは、センサーを含み得、方法は、センサーによって情報を感知する段階と、ロボットにその情報に応答させる段階とを含み得る。
【０１１０】
本技術はまた、プログラミング、監視、内観及び／又はデバッギングのための行動ツリーアーキテクチャの使用に関連し、行動ツリーアーキテクチャは、上記に説明された特徴のいずれかを備える。
【０１１１】
ロボットを制御するための行動ツリープロセスアーキテクチャの使用は、複数の理由のために有益であり得る：
・ロボットの制御のために一般に使用される有限ステートマシンなどのアプローチと比較して、行動ツリーとして特定される制御プログラムは、適応させるのがはるかに容易であり得る。新たな機能を有するブランチは、単一の親−子接続を加えることにより行動ツリーに組み込まれ得る一方、有限ステートマシンは、許可された全てのタスク移行に対する接続を必要とする。
・行動ツリーを大部分が独立したサブツリーへの組織化は、高度なモジュール式のタスク仕様を作り出し、異なる目的のための制御プログラムの部分の再利用性を増大する。変数は、「サブツリー」だけのためにローカルに定義され、そのことは、定義されたグローバル変数を有することより適応性がある。これは、他のシナリオにおける他の目的のために使用され得るタスクライブラリにおいて、個別のプログラムフラグメントの分配を可能にする。
・行動ツリーは、プログラミングなしでロボット行動を編集し、その結果生じた行動仕様を可視化し、実行時に制御プログラムの状態を視察し、行動故障をデバッグするために使用され得るナチュラルグラフィック表現を有する。単純化された可視化はまた、ロボットのより少ない誤りと、ロボットの誤った行動の可能性の減少とをもたらし得る。
・ロボットの制御のために一般的に使用される、例えば、有限ステートマシンと比較すると、行動ツリーとして記述される制御プログラムは、イベントに対してより反応性があり得る。これは、行動ツリーが間近の状況を考慮して次にどの動作を行うべきかを固定された頻度で評価するからであり、そのことは、有限ステートマシンに対する場合のように、次にどの動作を行うべきかの動作の終わりに決定することよりはるかに頻繁であり得る。
・例えば、有限ステートマシンと比較して、タスクの優先順位付けは、はるかに単純であり、非常に単純な方式で可視化され得る。改善及び単純化されたタスクの優先順位付けに起因して、ロボットの全体的なパフォーマンスが改善され得、すなわち、ロボットは、先ず確実に最も重要なサブルーチン（例えば、安全対策に関連したサブルーチン）を呼び出し得る。
・サブツリーのモジュール式構造及び容易な優先順位付けに起因して、行動ツリーは、名目上及び例外的な行動のためのコードを別々に編集、格納及び実行するのを可能にする。これは、例外の場合を処理するためのルーチンと交互に配置されることなく、タスクそれ自体の型を作ることに集中し得る名目上の行動のためのクリーナコードをもたらし得る。同時に、例外処理ルーチンは、１つより多いツリーのために使用され得る。これは、異なるシナリオにおいて名目上及び例外的な処理コードの両方を別々に再使用するのに役立ち得る。
【０１１２】
本技術はまた、以下の態様により規定される。
【０１１３】
１．ロボットを制御するための方法であって、ロボットにより行われるタスクの行動ツリーアーキテクチャの利用を含む方法。
【０１１４】
２．前述の態様に係る従う方法であって、
行動ツリーアーキテクチャは、ルートノード、少なくとも１つの制御フローノード及び少なくとも１つの実行ノードと、有向エッジとを含むノードを備え、
ノードは、有向エッジに接続され、
ルートノードは、１つの発信エッジを有し、受信エッジを有さず、各制御フローノードは、１つの受信エッジ及び少なくとも１つの発信エッジを有し、各実行ノードは、１つの受信エッジを有し、発信エッジを有さず、発信エッジを有するノードは、このエッジに接続した別のノードとの関連で親ノードと定義され、受信エッジを有するノードは、このエッジに接続した別のノードとの関連で子ノードと定義され、
制御フローノード及び実行ノードは、それらの親ノードに異なる状態を返すように適応され、状態は、成功、実行中及び失敗を含み、
方法は、ルートノードが制御フローノードを呼び出す段階と、
制御フローノードが１番目のノードを呼び出す段階と、
１番目のノードが制御フローノードに第１状態を返す段階と、
制御フローノードが、ルートノードに第２状態を返す段階とを含む。
【０１１５】
３．前述の態様に係る方法であって、方法はさらに、単一のノードのためにローカルノード変数を定義する段階を備える。
【０１１６】
４．前述の態様に係る方法であって、ローカルノード変数が、あるノードから別のノードに渡される。
【０１１７】
５．前述の３つの態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、サブツリーを含み、各サブツリーは、少なくとも１つの制御フローノードと、少なくとも１つの実行ノードとを備え、方法はさらに、サブツリーのためのローカルサブツリー変数を定義する段階を備える。
【０１１８】
６．前述の態様に係る方法であって、ローカルサブツリー変数が、あるサブツリーから別のサブツリーに渡される。
【０１１９】
７．前述の５つの態様のいずれかに係る方法であって、状態はさらに、初期化後、一時停止、無効、中止後、及び先取後のうち少なくとも１つを含み得、
初期化後の状態は、ノードが初期化され、実行の用意ができたことを示し、
一時停止の状態は、ノードが中断されたことを示し、
無効の状態は、ノードが作り出され、まだ実行の用意ができていないことを示し、
中止後の状態は、ノードそれ自体がこのノードの実行を停止したことを示し、
先取後の状態は、ユーザ又は行動ツリーエグゼクティブがノードの実行を停止したことを示し、
方法はさらに、初期化後、一時停止、無効、中止後、及び先取後の状態のうち少なくとも１つを返す１つの制御フローノード又は実行ノードを含む。
【０１２０】
８．前述の態様に係る方法であって、状態は、前述の態様において説明される状態の２、３、４又は５を含む。
【０１２１】
９．前述の７つの態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に、少なくとも２つの発信エッジにそれぞれ接続される可変制御フローノードを備え、
可変制御フローノードは、規則に従ってその子ノードを呼び出し得、その規則はまた、可変制御フローノードの子ノードにより返される状態以外の態様に依存する。
【０１２２】
１０．前述の態様に係る方法であって、可変制御フローノードの１つの子ノードは、主タスクに関連し得、その子ノードが主タスクの子ノードと定義され、可変制御フローノードの別の子ノードは、任意選択のタスクに関連し、その子が任意選択の子ノードと定義され、主タスクの子ノードの状態から独立したコンディションが満たされたなら、可変制御フローノードは任意選択の子ノードを呼び出す。
【０１２３】
１１．前述の態様に係る方法であって、任意選択の子ノードは、修理の子ノードであり、可変制御フローノードは、修理が必要である場合、修理の子ノードを呼び出す。
【０１２４】
１２．最後から２番目の態様に係る方法であって、任意選択の子ノードは、安全の子ノードであり、可変制御フローノードは、安全の重大な状況が検出された場合、安全の子ノードを呼び出す。
【０１２５】
１３．前述の１１個の態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に、少なくとも３つの発信エッジに接続される異種制御フローノードを備え得、子ノードは、スタータ子ノードと少なくとも２つの非スタータ子ノードとを備え、
異種制御フローノードは、スタータ子ノードから開始して連続してその子ノードを呼び出すように適応され、
異種制御フローノードは、規則に従ってその子を呼び出し、非スタータ子ノードごとに、非スタータ子ノードを呼び出すための規則は、それぞれの非スタータ子ノードの直前に呼び出される子ノードの状態に依存し、この依存性は、少なくとも２つの非スタータ子ノードに対して異なる。
【０１２６】
１４．前述の１２個の態様のいずれかに係る方法であって、少なくとも１つの制御フローノードは、回復ノードとして実現され得、その回復ノードは、１番目の子ノードと、少なくとも１つのさらなる子ノードとを備える複数の子ノードを有し、回復ノードは、１番目の子ノードを呼び出し、
１番目の子ノードが成功を返したなら、回復ノードは成功を返し、少なくとも１つのさらなる子ノードを呼び出さない、
１番目の子ノードが失敗を返したなら、回復ノードは少なくとも１つのさらなる子ノードを呼び出し、
少なくとも１つのさらなる子ノードのうち１つが成功を返したなら、回復ノードは１番目の子ノードを呼び出し、
少なくとも１つのさらなる子ノードの全てが失敗を返したなら、回復ノードは失敗を返し、本方法は回復ノードを実行する段階を含み得る。
【０１２７】
１５．前述の態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、ロボットの周囲の人間に対する感知と、ロボットの周囲において人間が感知されたならロボットを停止することとに関連するサブツリーを備え得、本方法はこのサブツリーを実行する。
【０１２８】
１６．前述の態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、オブジェクトを選択すること、オブジェクトをつまみ上げること及びオブジェクトを所望の位置に持ってくることに関連するサブツリーを備え得、方法はこのサブツリーを実行する。
【０１２９】
１７．前述の態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、ロボットがそのバッテリー状態をチェックすること、ロボットが充電ステーションにナビゲートすること、及びロボットが充電されることに関連するサブツリーを備え、方法はこのサブツリーを実行する。
【０１３０】
１８．前述の態様のいずれかに係る方法であって、ロボットは、自律ロボットである。
【０１３１】
１９．前述の態様のいずれかに係る方法であって、ロボットは、移動ベース及び／又はマニピュレータを含む。
【０１３２】
２０．前述の態様のいずれかに係る方法であって、ロボットは、自律駆動ロボットである。
【０１３３】
２１．前述の態様のいずれかに係る方法であって、ロボットは、オブジェクトをつまみ上げるように適応される。
【０１３４】
２２．前述の態様のいずれかに係る方法であって、ロボットは、センサーを含み得、方法は、センサーによって情報を感知する段階と、ロボットにその情報に応答させる段階とを含み得る。
【０１３５】
２３．前述の態様のいずれかに係る方法であって、方法は、コンピュータが実装された方法である。
【０１３６】
２４．態様２の特徴と共に前述の態様のいずれかに係る方法であって、少なくとも１つの制御フローノードと、少なくとも１つの実行ノードとに関連するコマンドは、コンピュータソースコードにおいて実行可能な機能として実施され得、ノードとノードに接続する有向エッジとがツリー構造を定義し、ツリー構造は、データファイルとして格納され、方法は、
実行可能な機能として実施される上記コマンドと、データファイルとして格納される上記ツリー構造と、ランタイム時の行動ツリーエグゼクティブへの実行コマンドとを送信する段階を備え、
行動ツリーエグゼクティブは、実行可能な機能として実施される上記コマンドに基づく制御プログラムを生成し、上記ツリー構造は、データファイル及びランタイム時の実行コマンドとして格納される。
【０１３７】
２５．前述の態様に係る方法であって、データファイルは、テキストファイルであり、好ましくは、ＪＳＯＮフォーマットテキストファイルである。
【０１３８】
２６．態様２の特徴と共に前述の態様のいずれかに係る方法はさらに、
番犬ルーチンを呼び出す上記ノードの少なくとも１つを備え、
番犬ルーチンは、
番犬ルーチンが上記ノードの少なくとも１つにより呼び出されたときはいつでも、タイマーを設定し、
番犬ルーチンが事前に定義された時間の間、上記ノードの少なくとも１つにより呼び出されなかった場合、タイマーは経過し、タイマーが経過した場合、上記ノードのうち少なくとも１つの操作は停止される。
【０１３９】
２７．前述の態様のいずれかに係る方法を実行するように適応されるデータ処理手段を備えるシステム。
【０１４０】
下記に、さらなる装置態様が論じられる。こうした態様は、数字が続く「Ｒ」（ロボットに対して）により示される。
【０１４１】
Ｒ１．前述の態様のいずれかに説明される方法を実行するように適応されるデータ処理手段を備えるロボット。
【０１４２】
Ｒ２．前述の態様に係るロボットであって、ロボットは、自律ロボットである。
【０１４３】
Ｒ３．前述の装置態様のいずれかに係るロボットであって、ロボットは、移動ベース及び／又はマニピュレータを含む。
【０１４４】
Ｒ４．前述の装置態様のいずれかに係るロボットであって、ロボットは、自律駆動ロボットである。
【０１４５】
Ｒ５．前述の装置態様のいずれかに係るロボットであって、ロボットは、オブジェクトをつまみ上げるように適応される。
【０１４６】
Ｒ６．前述の装置態様のいずれかに係るロボットであって、ロボットは、センサーを含む。
【０１４７】
Ｕ１．プログラミング、監視、内観及び／又はデバッギングのための行動ツリーアーキテクチャの使用であって、行動ツリーアーキテクチャは、上記の態様に説明された特徴のいずれかを備える。
【図面の簡単な説明】
【０１４８】
本発明の好ましい実施形態がここで、添付の図面を参照して説明されるであろう。
【図１】複数のオブジェクトを格納する棚及びロボットを示す。
【図２】ロボットを制御するために使用される行動ツリーを示す。
【図３】ロボットを制御するために使用される行動ツリーを示す。
【発明を実施するための形態】
【０１４９】
図１は、ロボット１００及び棚２を示す。棚２において、ツール４２、４４、４６として示される複数の異なるオブジェクトが位置する。図示される実施形態において、棚２に位置するねじ回し４２、ハンマー４４及びレンチ４６が示される。さらに、ロボット１００が示される。ロボット１００は、複数の車輪１０４（図１にはそのうちの２個だけが示されている）を含むベース１０２を備え、それによりロボット１００は駆動し得る。ベース１０２上に、つまみ上げ手段１０６が、位置する。図示される実施形態において、つまみ上げ手段１０６は、１又は複数の継手を有するグラプラー（ｇｒａｐｐｌｅｒ）である。つまみ上げ手段１０６の端部に、オブジェクトを把持又はつまみ上げように適応された把持ツール１０８が提供される。さらに、つまみ上げ手段１０６の端部に、カメラ１１０も提供される。ベース１０２の上部には、オブジェクト、例えば、オブジェクト４２〜４６を配置するスペース１１２が存在し得る。
【０１５０】
ロボット１００は、自律的に駆動及び実行されるロボット１００であり得る。ロボット１００は特に、商品、例えば、オブジェクト４２〜４６をつまみ上げ、所望の位置にオブジェクト４２〜４６を持ってくるべく、倉庫において使用され得る。
【０１５１】
そのようなロボット１００の典型的な利用法がここで、説明されるであろう。ユーザは、ロボット１００が、ある特定のオブジェクト、例えば、ねじ回し４２及びレンチ４６を、所望の位置、例えば、オブジェクトが配送のために梱包され得る位置に持ってくることを望み得る。ユーザは、この情報を、例えば、無線ＬＡＮのような公知の通信規格によって、ロボット１００に通信し得る。ロボット１００は、それぞれのオブジェクトが格納されている棚２に自律的に自身をナビゲートし得る。そのようにすべく、どのオブジェクトが倉庫のどの棚２に格納されているかについての情報を格納するメモリが提供され得る。ロボット１００は、その車輪１０４により正しい棚２にナビゲートし得る。ロボット１００は正しい棚２に到達すると、ロボット１００は、カメラ１１０によってオブジェクト（ここでは、ねじ回し４２及びレンチ４６）の正確な位置を突き止め得る。次に、把持ツール１０８は、レンチ４６をつまみ上げる正しい位置まで（図１に示されるように）つまみ上げ手段１０６によって延長され得る。把持ツール１０８が一度レンチ４６を把持したならつまみ上げ手段１０６は、レンチ４６をスペース１１２上に配置し得る。次に、この把持及び配置手順は、スペース１１２上にねじ回し４２をさらに配置すべく、ねじ回し４２に対して繰り返され得る。
【０１５２】
所望のオブジェクトが一度ストレージスペース１１２に配置されたなら、ロボット１００は、所望の位置、例えば、オブジェクトの梱包及び／又は配送のための位置まで自身をナビゲートし得る。
【０１５３】
ロボット１００は、特定のプロセスにより制御され得る。このプロセスは、ロボットを制御し、ロボット１００が行う必要があり得る異なるタスクに優先順位を付ける。そのような自律駆動及び操作ロボット１００について、実行されるべき、優先順位付けされるべき異なるタスクは、より単純なロボットに対してよりはるかに多用途であり得る。
【０１５４】
この制御プロセスのために、行動ツリーアーキテクチャ２０が、使用され得る。例示的な行動ツリーアーキテクチャが、図２に示される。行動ツリーの上部に、ルートノード２００が存在し、「O」付きのボックスとして識別される。ルートノード２００は、受信ノードを有さずに、１つの発信ノード２０２だけを有する。図示される実施形態において、このノード（すなわち、ルートノード２００の子）が、「？」付きのボックスにより一般的に識別されるセレクタノード２０２である。セレクタノード２０２は、２つの子２０４及び２１１を有し、後者が、最初に説明される。
【０１５５】
シーケンスノード２１１（そのようなノードは「→」付きのボックスにより一般的に識別される）及びその子２１２〜２２４は、ロボット１００により実行される一般的なタスク、すなわちユーザにより特定される「オブジェクトを入手し持ってくること」を含む。上記に論じられたように、シーケンスノード２１１は、特定の順序でその子を呼び出す（図示において、左から右に）。最初に、ノード２１２「ＳｅｌｅｃｔＯｂｊ」が呼び出される。このノード２１２は、オブジェクトが選択されたどうかをチェックし得る。オブジェクトが選択されていないなら、ノード２１２は、その親ノード２１１にＦＡＩＬＵＲＥを返し、それによりノード２１１のシーケンスを終了し、ノード２１１は順にその親ノード２０２にＦＡＩＬＵＲＥを返す。
【０１５６】
しかしながら、オブジェクトがノード２１２においてユーザにより選択されたなら、ノード２１２は、その親ノード２１１にＳＵＣＣＥＳＳを返す。次に、親ノード２１１はシーケンスの次の子、すなわちノード２１４を作動する。ノード２１４は、選択されたオブジェクト（例えば、レンチ４６）に対してナビゲーションルートを計算するためのサブルーチンである。これは、図２に示されていないさらなる段階（例えば、データセットのレンチ４６の位置を検索する段階、この位置への最も早いルートを計算する段階など）を含み得る。ノード２１４の計算が続いている限り、その親ノード２１１にＲＵＮＮＩＮＧを返す（次に、親ノード２１１はまた、ノード２０２にＲＵＮＮＩＮＧを返すであろう）。ノード２１４は、そのタスクの完了が不可能である（例えば、選択されたオブジェクトがウェアハウスにない）ことが分かったなら、ＦＡＩＬＵＲＥをセレクタノード２１１に返す。タスクが完了したなら、すなわち、ナビゲーションルートが計算されたなら、ノード２１４はその親シーケンスノード２１１にＳＵＣＣＥＳＳを返す。
【０１５７】
ノード２１１は、その子を順に呼び出す。子２１４が一度成功している（すなわち、ナビゲーションルートが決定されている）なら、最後まですべての詳細及び可能性を調べずに、ロボットをオブジェクトの位置にナビゲートする子２１６が呼び出される。このタスクが一度成功しているなら、オブジェクトは、ノード２１８において検出される。次に、オブジェクトはノード２２０においてつまみ上げられ（図１に示されるロボットにおいて、オブジェクトはまた、追加のサブルーチンにおいてストレージスペース１１２に配置される可能性がある）、所望の位置へのナビゲーションルートがノード２２２において計算され、ロボットはそれから、ノード２２４のこの所望の位置にナビゲートされる。
【０１５８】
すなわち、シーケンスノード２１１及びその子は、つまみ上げロボットのコア機能を表し得る。
【０１５９】
しかしながら、ロボット１００により行われる必要がある他のサブルーチンが存在し得る。そのような１つのサブルーチンがシーケンスノード２０４及びその子２０６〜２１０と共に図２に示されている。このサブルーチンは、人間に害が及ばないことを保証する。先ず、シーケンスノード２０４は、人間が存在するか否か（例えば、ロボット１００が進んでいる方向において、あるいはロボット１００から事前に定義された距離内において）を作動するノード２０６をチェックする。このコンディションが満たされたなら、ノード２０６は、ノード２０４にＳＵＣＣＥＳＳを返す。次に、ノード２０４は、ロボットのモーターを停止するノード２０６を呼び出す。ノード２０８は、モーターが一度停止されたなら、ＳＵＣＣＥＳＳを返す。次に、ノード２０４は、警告音をトリガするノード２１０を呼び出す。警告音が一度提供されたなら、ノード２１０はノード２０４にＳＵＣＣＥＳＳを返す。順に、ノード２０４はその親ノード、すなわちセレクタノード２０２にＳＵＣＣＥＳＳを返し、それによりその子２１１を次に呼び出さないであろう。次に、セレクタノード２０２はまた、その親ノード、ルートノード２００にＳＵＣＣＥＳＳを返す。図２の行動ツリー構造２０は、例示的な目的のためだけであり、多少簡略化され得ることに、留意されたい。具体的に、いくつかのノードは、図示及び説明の明瞭化のために省略される場合がある。例えば、シーケンスノード２０４と動作ノード２０８との間において、失敗無視ノード又は再試行ノードなどの追加のデコレータノード（図示せず）が含まれ得、人間がノード２０６において検出された場合、モーターが停止され、モーターがシーケンス２０４において停止された場合、ルーチンだけがさらに継続することを確実にし得る。同じことが、シーケンスノード２０４と動作ノード２１０との間に存在している潜在的な追加ノードに当てはまり得、警告音が人間の検出時に常にトリガされることを確実にし得る。
【０１６０】
この例は、異なるルーチンがどのように互いに組み合わされ得るかを説明する。ルーチンは、常に左から右に呼ばれる。従って、異なる優先順位でルーチンを実施し、それぞれの優先順位を可視化することは非常に容易であり（ここで、安全ルーチン２０４〜２１０は、一般のタスクルーチン２１１〜２２４より高い優先順位を有するであろう）、それにより、このアーキテクチャを特に効率良く、フェイルセーフにする。
【０１６１】
さらに、ロボット１００を制御するためのそのようなプロセスはまた、容易に適合され得、すなわち、追加の機能が、加えられ得る。これは、適合された制御アーキテクチャ２０'を示す図３において可視化されている。同様の特徴は、同様の参照符号を伴い、下記にさらなる詳細は説明されないであろう。参照符号２３０〜２３６を伴う追加ルーチンに注目すると、その追加ルーチンは、バッテリー安全ルーチンと呼ばれる場合がある。このルーチンは、親ノードとしてノード２０２を有するシーケンスノード２３０を含む。さらに、ノード２３２〜２３６が子ノードとして提供される。ノード２３２は、バッテリーをチェックし、例えば、バッテリー状態が、一定の閾値より低いかどうかがチェックされ得る。このノードが失敗した（すなわち、バッテリーが閾値より低くない）なら、ノード２３２は、ノード２３０にＦＡＩＬを返し、ノード２３０は、セレクタノード２０２にＦＡＩＬを返し、それにより次にシーケンスノード２１１に進むであろう。しかしながら、バッテリーが閾値より低いなら、ノード２３２は成功し、ノード２３０にＳＵＣＣＥＳＳを返し、それにより次にローディングステーションにロボットをナビゲートするノード２３４を呼び出す。これが一度達成されたなら、ノード２３４は、ノード２３０にＳＵＣＣＥＳＳを返し、それによりバッテリーを再ローディングすべく、次にノード２３６を呼び出す。
【０１６２】
図３を参照すると、追加の機能がそのような行動ツリーアーキテクチャにおいて容易に実装され得ることが、明らかとなる。すなわち、制御アーキテクチャは、高度に適応性がある。さらに、異なるサブルーチンの優先順位は、図３からも明らかである。サブルーチンは左に位置するほど、優先順位は高くなる。
【０１６３】
本発明は特定の実施形態を参照して説明されているが、こうした実施形態は本発明の範囲を限定するものではなく、本発明を説明するのに役立つだけであることは、理解されるべきである。
【図１】
2019512402.tif 000003
【図２】
2019512402.tif 000004
【図３】
2019512402.tif 000005
【手続補正書】
【提出日】平成30年9月26日(2018.9.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ロボットを制御するための方法であって、前記方法は、前記ロボットにより行われるタスクのための行動ツリーアーキテクチャの利用を含み、
前記行動ツリーアーキテクチャは、ルートノード、少なくとも１つの制御フローノード及び少なくとも１つの実行ノードと、有向エッジとを含むノードを備え、
前記ノードは、前記有向エッジに接続され、
前記ルートノードは、１つの発信エッジを有し、受信エッジを有さず、各制御フローノードは、１つの受信エッジ及び少なくとも１つの発信エッジを有し、各実行ノードは、１つの受信エッジを有し、発信エッジを有さず、発信エッジを有するノードは、このエッジに接続した別のノードとの関連で親ノードと定義され、受信エッジを有するノードは、このエッジに接続した別のノードとの関連で子ノードと定義され、前記制御フローノード及び前記実行ノードは、それらの親ノードに異なる状態を返すように適応され、前記状態は、成功、実行中及び失敗を含み、前記方法は、
前記ルートノードが制御フローノードを呼び出す段階と、
前記制御フローノードが１番目のノードを呼び出す段階と、
前記１番目のノードが前記制御フローノードに第１状態を返す段階と、
前記制御フローノードが、前記ルートノードに第２状態を返す段階と
を備える方法。
【請求項２】
前記行動ツリーアーキテクチャは、サブツリーを備え、各サブツリーは、少なくとも１つの制御フローノードと、少なくとも１つの実行ノードとを備え、前記方法はさらに、サブツリーのためのローカルサブツリー変数を定義する段階を備える、
請求項１に記載の方法。
【請求項３】
前記ローカルサブツリー変数は、あるサブツリーから別のサブツリーに渡される、
請求項２に記載の方法。
【請求項４】
前記状態はさらに、初期化後、一時停止、無効、中止後、及び先取後のうち少なくとも１つを含み、
初期化後の前記状態は、ノードが初期化され、実行の用意ができたことを示し、
一時停止の前記状態は、ノードが中断されたことを示し、
無効の前記状態は、ノードが作り出され、まだ実行の用意ができていないことを示し、
中止後の前記状態は、ノードそれ自体がこのノードの実行を停止したことを示し、
先取後の前記状態は、ユーザ又は行動ツリーエグゼクティブがノードの実行を停止したことを示し、
前記方法はさらに、初期化後、一時停止、無効、中止後、及び先取後の前記状態のうち少なくとも１つを返す１つの制御フローノード又は実行ノードを含む、
請求項１から３のいずれか一項に記載の方法。
【請求項５】
前記行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に、少なくとも２つの発信エッジにそれぞれ接続される可変制御フローノードを備え、前記可変制御フローノードは、規則に従ってその子ノードを呼び出し得、その規則はまた、前記可変制御フローノードの前記子ノードにより返される前記状態以外の態様に依存する、
請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記可変制御フローノードの１つの子ノードは、主タスクに関連し得、その子ノードが前記主タスクの子ノードと定義され、前記可変制御フローノードの別の子ノードは、任意選択のタスクに関連し、その子が前記任意選択の子ノードと定義され、前記主タスクの子ノードの前記状態から独立したコンディションが満たされたなら、前記可変制御フローノードは前記任意選択の子ノードを呼び出す、
請求項５に記載の方法。
【請求項７】
前記行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に、少なくとも３つの発信エッジに接続される異種制御フローノードを備え得、前記子ノードは、スタータ子ノードと少なくとも２つの非スタータ子ノードとを備え、前記異種制御フローノードは、前記スタータ子ノードから開始して連続してその子ノードを呼び出すように適応され、前記異種制御フローノードは、規則に従ってその子を呼び出し、非スタータ子ノードごとに、前記非スタータ子ノードを呼び出すための前記規則は、それぞれの前記非スタータ子ノードの直前に呼び出される前記子ノードの前記状態に依存し、この依存性は、少なくとも２つの非スタータ子ノードに対して異なる、
請求項１から６のいずれか一項に記載の方法。
【請求項８】
少なくとも１つの制御フローノードは、回復ノードとして実現され、その回復ノードは、１番目の子ノードと、少なくとも１つのさらなる子ノードとを備える複数の子ノードを有し、前記回復ノードは、前記１番目の子ノードを呼び出し、
前記１番目の子ノードが成功を返したなら、前記回復ノードは成功を返し、前記少なくとも１つのさらなる子ノードを呼び出さない、
前記１番目の子ノードが失敗を返したなら、前記回復ノードは前記少なくとも１つのさらなる子ノードを呼び出し、
前記少なくとも１つのさらなる子ノードのうち１つが成功を返したなら、前記回復ノードは前記１番目の子ノードを呼び出し、
前記少なくとも１つのさらなる子ノードの全てが失敗を返したなら、前記回復ノードは失敗を返し、前記方法は前記回復ノードを実行する段階を備える、
請求項１から７のいずれか一項に記載の方法。
【請求項９】
前記行動ツリーアーキテクチャは、オブジェクトを選択すること、前記オブジェクトをつまみ上げること及び前記オブジェクトを所望の位置に持ってくることに関連するサブツリーを備え得、前記方法はこのサブツリーを実行する、
請求項１から８のいずれか一項に記載の方法。
【請求項１０】
前記ロボットは、移動ベース及びマニピュレータのうち少なくとも１つを含む、
請求項１から９のいずれか一項に記載の方法。
【請求項１１】
前記ロボットは、自律駆動ロボットである、
請求項１から１０のいずれか一項に記載の方法。
【請求項１２】
少なくとも１つの前記制御フローノードと、少なくとも１つの前記実行ノードとに関連するコマンドは、コンピュータソースコードにおいて実行可能な機能として実施され、
前記ノードと前記ノードに接続する前記有向エッジとがツリー構造を定義し、
前記ツリー構造は、データファイルとして格納され、
前記方法は、実行可能な機能として実施される前記コマンドと、データファイルとして格納される前記ツリー構造と、ランタイム時の行動ツリーエグゼクティブへの実行コマンドとを送信する段階を備え、
前記行動ツリーエグゼクティブは、実行可能な機能として実施される前記コマンドに基づく制御プログラムを生成し、前記ツリー構造は、データファイル及びランタイム時の前記実行コマンドとして格納される、
請求項１から１１のいずれか一項に記載の方法。
【請求項１３】
前記ロボットは、センサーを含み得、前記方法は、前記センサーによって情報を感知する段階と、前記ロボットに前記情報に応答させる段階とを含む、
請求項１から１２のいずれか一項に記載の方法。
【請求項１４】
請求項１から１３のいずれか一項に記載の方法を実行するように適応されるデータ処理手段を備えるシステムであって、前記システムは好ましくは、ロボットを備える、
システム。
【請求項１５】
プログラミング、監視、内観、及びデバッギングのうちの少なくとも１つのための方法であって、前記方法は、行動ツリーアーキテクチャの使用を含み、前記行動ツリーアーキテクチャは、請求項１から１３のいずれか一項に記載のアーキテクチャのいずれかを備える、方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１６３
【補正方法】変更
【補正の内容】
【０１６３】
本発明は特定の実施形態を参照して説明されているが、こうした実施形態は本発明の範囲を限定するものではなく、本発明を説明するのに役立つだけであることは、理解されるべきである。
（項目１）
ロボットを制御するための方法であって、上記方法は、上記ロボットにより行われるタスクのための行動ツリーアーキテクチャの利用を含み、
上記行動ツリーアーキテクチャは、ルートノード、少なくとも１つの制御フローノード及び少なくとも１つの実行ノードと、有向エッジとを含むノードを備え、
上記ノードは、上記有向エッジに接続され、
上記ルートノードは、１つの発信エッジを有し、受信エッジを有さず、各制御フローノードは、１つの受信エッジ及び少なくとも１つの発信エッジを有し、各実行ノードは、１つの受信エッジを有し、発信エッジを有さず、発信エッジを有するノードは、このエッジに接続した別のノードとの関連で親ノードと定義され、受信エッジを有するノードは、このエッジに接続した別のノードとの関連で子ノードと定義され、上記制御フローノード及び上記実行ノードは、それらの親ノードに異なる状態を返すように適応され、上記状態は、成功、実行中及び失敗を含み、上記方法は、
上記ルートノードが制御フローノードを呼び出す段階と、
上記制御フローノードが１番目のノードを呼び出す段階と、
上記１番目のノードが上記制御フローノードに第１状態を返す段階と、
上記制御フローノードが、上記ルートノードに第２状態を返す段階と
を備える方法。
（項目２）
上記行動ツリーアーキテクチャは、サブツリーを備え、各サブツリーは、少なくとも１つの制御フローノードと、少なくとも１つの実行ノードとを備え、上記方法はさらに、サブツリーのためのローカルサブツリー変数を定義する段階を備える、
項目１に記載の方法。
（項目３）
上記ローカルサブツリー変数は、あるサブツリーから別のサブツリーに渡される、
項目２に記載の方法。
（項目４）
上記状態はさらに、初期化後、一時停止、無効、中止後、及び先取後のうち少なくとも１つを含み、
初期化後の上記状態は、ノードが初期化され、実行の用意ができたことを示し、
一時停止の上記状態は、ノードが中断されたことを示し、
無効の上記状態は、ノードが作り出され、まだ実行の用意ができていないことを示し、
中止後の上記状態は、ノードそれ自体がこのノードの実行を停止したことを示し、
先取後の上記状態は、ユーザ又は行動ツリーエグゼクティブがノードの実行を停止したことを示し、
上記方法はさらに、初期化後、一時停止、無効、中止後、及び先取後の上記状態のうち少なくとも１つを返す１つの制御フローノード又は実行ノードを含む、
項目１から３のいずれか１つに記載の方法。
（項目５）
上記行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に、少なくとも２つの発信エッジにそれぞれ接続される可変制御フローノードを備え、上記可変制御フローノードは、規則に従ってその子ノードを呼び出し得、その規則はまた、上記可変制御フローノードの上記子ノードにより返される上記状態以外の態様に依存する、
項目１から４のいずれか１つに記載の方法。
（項目６）
上記可変制御フローノードの１つの子ノードは、主タスクに関連し得、その子ノードが上記主タスクの子ノードと定義され、上記可変制御フローノードの別の子ノードは、任意選択のタスクに関連し、その子が上記任意選択の子ノードと定義され、上記主タスクの子ノードの上記状態から独立したコンディションが満たされたなら、上記可変制御フローノードは上記任意選択の子ノードを呼び出す、
項目５に記載の方法。
（項目７）
上記行動ツリーアーキテクチャは、各エッジに接続される１つの子ノードと共に、少なくとも３つの発信エッジに接続される異種制御フローノードを備え得、上記子ノードは、スタータ子ノードと少なくとも２つの非スタータ子ノードとを備え、上記異種制御フローノードは、上記スタータ子ノードから開始して連続してその子ノードを呼び出すように適応され、上記異種制御フローノードは、規則に従ってその子を呼び出し、非スタータ子ノードごとに、上記非スタータ子ノードを呼び出すための上記規則は、それぞれの上記非スタータ子ノードの直前に呼び出される上記子ノードの上記状態に依存し、この依存性は、少なくとも２つの非スタータ子ノードに対して異なる、
項目１から６のいずれか１つに記載の方法。
（項目８）
少なくとも１つの制御フローノードは、回復ノードとして実現され、その回復ノードは、１番目の子ノードと、少なくとも１つのさらなる子ノードとを備える複数の子ノードを有し、上記回復ノードは、上記１番目の子ノードを呼び出し、
上記１番目の子ノードが成功を返したなら、上記回復ノードは成功を返し、上記少なくとも１つのさらなる子ノードを呼び出さない、
上記１番目の子ノードが失敗を返したなら、上記回復ノードは上記少なくとも１つのさらなる子ノードを呼び出し、
上記少なくとも１つのさらなる子ノードのうち１つが成功を返したなら、上記回復ノードは上記１番目の子ノードを呼び出し、
上記少なくとも１つのさらなる子ノードの全てが失敗を返したなら、上記回復ノードは失敗を返し、上記方法は上記回復ノードを実行する段階を備える、
項目１から７のいずれか１つに記載の方法。
（項目９）
上記行動ツリーアーキテクチャは、オブジェクトを選択すること、上記オブジェクトをつまみ上げること及び上記オブジェクトを所望の位置に持ってくることに関連するサブツリーを備え得、上記方法はこのサブツリーを実行する、
項目１から８のいずれか１つに記載の方法。
（項目１０）
上記ロボットは、移動ベース及びマニピュレータのうち少なくとも１つを含む、
項目１から９のいずれか１つに記載の方法。
（項目１１）
上記ロボットは、自律駆動ロボットである、
項目１から１０のいずれか１つに記載の方法。
（項目１２）
少なくとも１つの上記制御フローノードと、少なくとも１つの上記実行ノードとに関連するコマンドは、コンピュータソースコードにおいて実行可能な機能として実施され、
上記ノードと上記ノードに接続する上記有向エッジとがツリー構造を定義し、
上記ツリー構造は、データファイルとして格納され、
上記方法は、実行可能な機能として実施される上記コマンドと、データファイルとして格納される上記ツリー構造と、ランタイム時の行動ツリーエグゼクティブへの実行コマンドとを送信する段階を備え、
上記行動ツリーエグゼクティブは、実行可能な機能として実施される上記コマンドに基づく制御プログラムを生成し、上記ツリー構造は、データファイル及びランタイム時の上記実行コマンドとして格納される、
項目１から１１のいずれか１つに記載の方法。
（項目１３）
上記ロボットは、センサーを含み得、上記方法は、上記センサーによって情報を感知する段階と、上記ロボットに上記情報に応答させる段階とを含む、
項目１から１２のいずれか１つに記載の方法。
（項目１４）
前述の項目のいずれかに記載の方法を実行するように適応されるデータ処理手段を備えるシステムであって、上記システムは好ましくは、ロボットを備える、システム。
（項目１５）
プログラミング、監視、内観、及び／又はデバッギングのための行動ツリーアーキテクチャの使用であって、上記行動ツリーアーキテクチャは、項目１から１３のいずれか１つに説明の特徴のいずれかを備える、使用。
【国際調査報告】
2019512402.tif 000006
2019512402.tif 000007