特許第6943364号(P6943364)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マガジノ ゲーエムベーハーの特許一覧

特許6943364行動ツリーアーキテクチャを有するロボットの制御プロセス
<>
  • 特許6943364-行動ツリーアーキテクチャを有するロボットの制御プロセス 図000002
  • 特許6943364-行動ツリーアーキテクチャを有するロボットの制御プロセス 図000003
  • 特許6943364-行動ツリーアーキテクチャを有するロボットの制御プロセス 図000004
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6943364
(24)【登録日】2021年9月13日
(45)【発行日】2021年9月29日
(54)【発明の名称】行動ツリーアーキテクチャを有するロボットの制御プロセス
(51)【国際特許分類】
   B25J 9/22 20060101AFI20210916BHJP
【FI】
   B25J9/22 Z
【請求項の数】14
【全頁数】28
(21)【出願番号】特願2018-541426(P2018-541426)
(86)(22)【出願日】2017年2月24日
(65)【公表番号】特表2019-512402(P2019-512402A)
(43)【公表日】2019年5月16日
(86)【国際出願番号】EP2017054389
(87)【国際公開番号】WO2017148830
(87)【国際公開日】20170908
【審査請求日】2018年9月26日
【審判番号】不服2020-6198(P2020-6198/J1)
【審判請求日】2020年5月7日
(31)【優先権主張番号】16158565.8
(32)【優先日】2016年3月3日
(33)【優先権主張国】EP
(73)【特許権者】
【識別番号】518229249
【氏名又は名称】マガジノ ゲーエムベーハー
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】テノルト、モリッツ
【合議体】
【審判長】 見目 省二
【審判官】 田々井 正吾
【審判官】 大山 健
(56)【参考文献】
【文献】 特開2004−114285(JP,A)
【文献】 米国特許出願公開第2005/138544(US,A1)
【文献】 特開2003−334785(JP,A)
【文献】 Alejandro Marzinotto,Towards a Unified Behavior Trees Framework for Robot Control,2014 IEEE International Conference on Robotics & Automation,IEEE,2014年,5420−5427
(58)【調査した分野】(Int.Cl.,DB名)
B25J 9/00 - 9/22
(57)【特許請求の範囲】
【請求項1】
ロボットを制御するための方法であって、前記方法は、前記ロボットにより行われるタスクのための行動ツリーアーキテクチャの利用を含み、
前記行動ツリーアーキテクチャは、ルートノード、少なくとも1つの制御フローノード及び少なくとも1つの実行ノードを含むノードと、有向エッジとを備え、
前記ノードは、前記有向エッジに接続され、
前記ルートノードは、1つの発信エッジを有し、受信エッジを有さず、各制御フローノードは、1つの受信エッジ及び少なくとも1つの発信エッジを有し、各実行ノードは、1つの受信エッジを有し、発信エッジを有さず、発信エッジを有するノードは、このエッジに接続した別のノードとの関連で親ノードと定義され、受信エッジを有するノードは、このエッジに接続した別のノードとの関連で子ノードと定義され、前記制御フローノード及び前記実行ノードは、それらの親ノードに異なる状態を返すように適応され、前記状態は、成功、実行中及び失敗を含み、前記方法は、
前記ルートノードが制御フローノードを呼び出す段階と、
前記制御フローノードが1番目のノードを呼び出す段階と、
前記1番目のノードが前記制御フローノードに第1状態を返す段階と、
前記制御フローノードが、前記ルートノードに第2状態を返す段階と
を備え、
前記行動ツリーアーキテクチャは、サブツリーを備え、各サブツリーは、少なくとも1つの制御フローノードと、少なくとも1つの実行ノードとを備え、
サブツリーは、同じサブツリーのタスクによってのみ直接アクセス可能なデータ要素を少なくとも利用する、方法。
【請求項2】
前記方法はさらに、あるサブツリーから別のサブツリーに渡すことができるサブツリーのためのローカルサブツリー変数を定義する段階を備える、
請求項1に記載の方法。
【請求項3】
前記状態はさらに、初期化後、一時停止、無効、中止後、及び先取後のうち少なくとも1つを含み、
初期化後の前記状態は、ノードが初期化され、実行の用意ができたことを示し、
一時停止の前記状態は、ノードが中断されたことを示し、
無効の前記状態は、ノードが作り出され、まだ実行の用意ができていないことを示し、
中止後の前記状態は、ノードそれ自体がこのノードの実行を停止したことを示し、
先取後の前記状態は、ユーザ又は行動ツリーエグゼクティブがノードの実行を停止したことを示し、
前記方法はさらに、初期化後、一時停止、無効、中止後、及び先取後の前記状態のうち少なくとも1つを返す1つの制御フローノード又は実行ノードを含む、
請求項1または2に記載の方法。
【請求項4】
前記行動ツリーアーキテクチャは、各エッジに接続される1つの子ノードと共に、少なくとも2つの発信エッジにそれぞれ接続される可変制御フローノードを備え、前記可変制御フローノードは、規則に従ってその子ノードを呼び出し得、その規則はまた、前記可変制御フローノードの前記子ノードにより返される前記状態以外の態様に依存する、
請求項1からのいずれか一項に記載の方法。
【請求項5】
前記可変制御フローノードの1つの子ノードは、主タスクに関連し得、その子ノードが前記主タスクの子ノードと定義され、前記可変制御フローノードの別の子ノードは、任意選択のタスクに関連し、その子が前記任意選択の子ノードと定義され、前記主タスクの子ノードの前記状態から独立したコンディションが満たされたなら、前記可変制御フローノードは前記任意選択の子ノードを呼び出す、
請求項に記載の方法。
【請求項6】
前記行動ツリーアーキテクチャは、各エッジに接続される1つの子ノードと共に、少なくとも3つの発信エッジに接続される異種制御フローノードを備え得、前記子ノードは、スタータ子ノードと少なくとも2つの非スタータ子ノードとを備え、前記異種制御フローノードは、前記スタータ子ノードから開始して連続してその子ノードを呼び出すように適応され、前記異種制御フローノードは、規則に従ってその子を呼び出し、非スタータ子ノードごとに、前記非スタータ子ノードを呼び出すための前記規則は、それぞれの前記非スタータ子ノードの直前に呼び出される前記子ノードの前記状態に依存し、この依存性は、少なくとも2つの非スタータ子ノードに対して異なる、
請求項1からのいずれか一項に記載の方法。
【請求項7】
少なくとも1つの制御フローノードは、回復ノードとして実現され、その回復ノードは、1番目の子ノードと、少なくとも1つのさらなる子ノードとを備える複数の子ノードを有し、前記回復ノードは、前記1番目の子ノードを呼び出し、
前記1番目の子ノードが成功を返したなら、前記回復ノードは成功を返し、前記少なくとも1つのさらなる子ノードを呼び出さない、
前記1番目の子ノードが失敗を返したなら、前記回復ノードは前記少なくとも1つのさらなる子ノードを呼び出し、
前記少なくとも1つのさらなる子ノードのうち1つが成功を返したなら、前記回復ノードは前記1番目の子ノードを呼び出し、
前記少なくとも1つのさらなる子ノードの全てが失敗を返したなら、前記回復ノードは失敗を返し、前記方法は前記回復ノードを実行する段階を備える、
請求項1からのいずれか一項に記載の方法。
【請求項8】
前記行動ツリーアーキテクチャは、オブジェクトを選択すること、前記オブジェクトをつまみ上げること及び前記オブジェクトを所望の位置に持ってくることに関連するサブツリーを備え得、前記方法はこのサブツリーを実行する、
請求項1からのいずれか一項に記載の方法。
【請求項9】
前記ロボットは、移動ベース及びマニピュレータのうち少なくとも1つを含む、
請求項1からのいずれか一項に記載の方法。
【請求項10】
前記ロボットは、自律駆動ロボットである、
請求項1からのいずれか一項に記載の方法。
【請求項11】
少なくとも1つの前記制御フローノードと、少なくとも1つの前記実行ノードとに関連するコマンドは、コンピュータソースコードにおいて実行可能な機能として実施され、
前記ノードと前記ノードに接続する前記有向エッジとがツリー構造を定義し、
前記ツリー構造は、データファイルとして格納され、
前記方法は、実行可能な機能として実施される前記コマンドと、データファイルとして格納される前記ツリー構造と、ランタイム時の行動ツリーエグゼクティブへの実行コマンドとを送信する段階を備え、
前記行動ツリーエグゼクティブは、実行可能な機能として実施される前記コマンドに基づく制御プログラムを生成し、前記ツリー構造は、データファイル及びランタイム時の前記実行コマンドとして格納される、
請求項1から10のいずれか一項に記載の方法。
【請求項12】
前記ロボットは、センサーを含み得、前記方法は、前記センサーによって情報を感知する段階と、前記ロボットに前記情報に応答させる段階とを含む、
請求項1から11のいずれか一項に記載の方法。
【請求項13】
請求項1から12のいずれか一項に記載の方法を実行するように適応されるデータ処理手段を備えるシステムであって、前記システムは好ましくは、ロボットを備える、
システム。
【請求項14】
プログラミング、監視、内観、及びデバッギングのうちの少なくとも1つのための方法であって、前記方法は、行動ツリーアーキテクチャの使用を含み、前記行動ツリーアーキテクチャは、請求項1から12のいずれか一項に記載のアーキテクチャのいずれかを備える、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ロボット制御に向けられる。さらに、本発明は、ロボットに向けられる。
【0002】
ロボットは、異なる産業において、異なる目的でますます使用されている。近年、ロボットは、ロボットが単純なタスクを果たすだけでなく、より多用途のタスクを果たし、例えば、パラメータの単なる適応を超えた環境からの影響に反応するなどの「決定する」必要がある環境においてますます使用されている。
【0003】
上記に照らせば、本発明の目的は、ロボットにおいて決定するプロセスのための改良されたルーチンを提供することである。さらに、本発明の目的はまた、ロボットにおいて決定するプロセスのための改良されたルーチンを備えたロボットを提供することである。
【0004】
この目的は、本発明のロボット及びルーチンの利用により果たされる。
【0005】
第1の態様によれば、行動ツリープロセスアーキテクチャは、ロボットを制御するために使用される。第2の態様によれば、ロボットが提供され、そのロボットが行動ツリーアーキテクチャを有するプロセスにより制御される。第3の態様によれば、プログラミング、監視、内観及び/又はデバッギングのためのそのような行動ツリーアーキテクチャの使用が、提供される。
【0006】
行動ツリーは、モジュールサブアクションの構成として複雑なロボット行動を記述する手段である。例えば、オブジェクトを取ってくるタスクは、オブジェクトの方にナビゲートし、カメラを使用してそれを検出し、グリッパーを使用してそれをつまみ上げ、それを要求された位置へ持ってくるための一連のサブアクションとして記述され得る。行動ツリーは、「制御フロー」を記述し、すなわち、どの順序で及びそのコンディション下でこうしたサブアクションが実行されるべきである。
【0007】
行動ツリーは、3種のノード、すなわち、上述のサブアクションに対応するルートノード、制御フローノード及び実行ノードを備える。こうしたノードは、有向エッジを使用して接続される。発信エッジを有するノードは、「親」と呼ばれ、受信エッジを有するノードは、「子」と呼ばれる。各ノードは、多くても1つの親ノード及び0個以上の子ノードを有する。ルートノードは、親を有さず、単一の子を有する。各制御フローノードは、1つの親及び少なくとも1つの子を有し、各実行ノードは、1つの親を有し、子は有さない。2つのタイプの制御フローノードが存在し、2つのタイプは、複数の子タスクを有し得る「複合タスク」と、単一の子タスクを包み隠す「デコレータ」である。実行ノードはまた、行動ツリーの「リーフ」と呼ばれ得る。
【0008】
典型的には、各ノードは、RUNNING、SUCCESS又はFAILUREの値にノード内部実行状態を設定する対応タスクを実行するための1つの方法(例えば、「run()」と呼ばれる)を実施する。実行ノードは、それが実行するサブアクションの結果に基づきその状況を更新し、制御フローノードは、その子の状況に基づくその状況を更新する。タスクは、それが完了に成功したならSUCCESSの状況にあり、それが完了できなかったなら、FAILUREの状況にあり、まだ継続しているなら、RUNNINGの状況にある。以下において、我々は、「成功する」の動詞を「SUCCESSの状況と見なす」と等価として、「失敗する」の動詞を「FAILUREの状況と見なす」と等価として使用する。本技術はまた、追加の状況又は状態の利用を想定する。
【0009】
ツリーは、ルートノードから開始して、深度第1の方式において固定された周波数(例えば、10Hz)で通常トラバースされ得る。この周期的な再評価は、反応性行動の実施を促進する。ルートノード及び制御フローノードは、「run()」方法を呼び出すことにより、その子ノードの実行をトリガし、1番目のノードから通常開始し、その子の実行状況に応じてそれ自身の実行状況を更新する。実行結果に応じて、それらは、例えば、全ての子を次々と順に実行すべく、別の子の実行をトリガし得る。
【0010】
行動ツリーのノード間の接続は、制御フロー、すなわちタスクがどの順序で行われるべきかを特定する。加えて、提案される方法は、タスク間でデータを渡す機能(いわゆる、「データフロー」)を含む。例えば、1つのタスクはオブジェクトを検出し、その位置を計算し、当該オブジェクトを把持しようと試みる次のタスクにこのデータを渡す可能性がある。こうしたデータは、タスクの選択の間で共有される必要があるが、データは、異なるタスクにより使用される同一の名前などの競合を回避すべく、グローバルに利用可能であるべきではない。提案される方法は、任意の構造のデータを保持し得る名前によりアクセスされ得るデータ要素を導入する。こうしたデータ要素は、サブツリーのタスクにより直接アクセスされ得るだけである。他のタスクは、こうした要素にアクセスするなら、接続がはっきりと特定される必要がある。
【0011】
タスクは、どのデータ要素がその入力及び出力として役立つかを定義する必要がある。入力として特定されるデータ要素だけが、タスクのrun()方法において読み取られ得、出力として特定されるデータ要素だけが、書き込まれ得る。複合タスクは、データ要素のために内部ストレージを保有する。アクセスされた場合、複合タスクは、その親のデータ要素の内部コピーを作り出し、一度完了すると、複合タスクは、その親のデータストレージにその出力データ要素の値を書き込む。複合タスクの子は、外部に見えない子の間の連絡のために追加の入力を使用できる。
【0012】
これは、ストレージ要素の入れ子領域を作り出す。データ要素は、それぞれの複合タスクの出力要素のリストにデータ要素を加えることにより、サブツリー外で利用可能にされ得、あるいは、この複合体によりカプセル化され、ツリーの他の部分における同じ名前の他のデータ要素と干渉しないこととなる。
【0013】
入力データ要素及び出力データ要素の名前は、再マッピングされ得る、すなわち、タスクのデータ要素は、親のタスクのストレージにおいて異なる名前のデータ要素にリンクされ得る。これは、同じ名前が付けられたデータ要素同士の競合なく複合体において同じタイプの複数のタスクを使用するのを可能にする。
【0014】
RUNNING、SUCCESS及びFAILUREの3つのタスク状態のベーシックモデルは、タスクの初期化、一時停止及び終了を含むノードのライフサイクルの型を作るべく、拡張され得る。各々の状態の移行は、タスクの実行を一時停止する前に、例えば、安全(静止)状態にロボットをする、要求された動作を行うイベントハンドラにリンクされ得る。これは、ロボットの状態及び外界の動作の効果を考慮することなく、プログラムが単に一時停止又はスイッチされ得ないロボットを制御する際に、とりわけ重要である。
【0015】
提案される方法において、ノードは、INVALIDの状態で作り出され得る。ノードが、BT実行により最初に達せられた場合、初期化ルーチンが呼び出され、ノードはRUNNING(初期化が成功したなら)か、FAILURE(初期化が失敗したなら)のいずれかに移行する。タスクが実行されている間、タスクは依然としてRUNNINGの状態にあり、通常、タスクが一度完了したなら、SUCCESS又はFAILUREの2つの末端状態のうち1つに、移行することとなる。行動ツリーは、任意のタスク上のsuspend()方法を呼び出し、タスク及びその子全てを一時停止に導くことにより外部から一時停止され得る。一時停止されたタスクは、そのrun()方法が一度再び呼び出されたなら、自動的に再開される。
【0016】
下記に、異なるタイプのノードが説明される。本技術は、下記に説明されるノードのうち各々及びいずれかを利用し得る。
【0017】
1.ルートノード
ルートノードは、一定の頻度でその子を「作動する」(tick)。すなわち、ルートノードは、子を実行し、結果に基づきそれ自身の状況を更新する。
【0018】
2.実行ノード
2つのタイプの実行ノード、動作ノード及びコンディションノードが存在する。
【0019】
コンディションノードは、一定のコンディションをチェックし、その親にSUCCESS又はFAILUREを返す。例えば、ロボットが自律駆動ロボットである場合、1つの可能性としてのコンディションノードは、ロボットがどこに進んでいるかの方向に障害物が存在するかどうか(「障害物の存在」)であり得る。そのような障害物が感知された場合、その親にSUCCESSを返すであろう。そのような障害物が感知されない場合、FAILUREをその親に返すであろう。
【0020】
動作ノードは、一定の動作を行う。ロボットがモーターを有する自律駆動ロボットであるなら(上記に例示されるように)、1つの例示的な動作は、モーターを停止すること(「モーター停止」)であり得る。ノードは、モーターを停止する動作がまだ続いている場合、その親にRUNNINGを返すであろう。モーターが停止されたなら、その親にSUCCESSを返し、モーターの停止が失敗したなら、FAILUREを返す。
【0021】
3.制御フローノード
制御フローノードは、ロボットの行動を動作ノード及びコンディションノードから効果的に構成する、ルートノードと実行ノードとの間の中間ノードである。1つより多い子を有し得る「複合タスク」と、1つの子だけを有する「デコレータタスク」とが、区別される場合がある。異なる制御フローノードの例が、下記に説明される。
【0022】
3.1シーケンス
シーケンスは、常に1番目の子から呼び出しを開始、その子が成功している限りその子を次々と呼び出す。通常の使用の場合において、子は、全てが複合タスクを達成すべく行われる必要があるサブアクションである可能性がある。1つの動作が失敗したなら、シーケンスはまた、その親にFAILUREを返し、任意のさらなる子を実行しない。全ての子が成功したなら、シーケンスは同様に成功する。作動された子がRUNNINGを返す場合、シーケンスはRUNNINGを返す。
【0023】
実行のセマンティクス(semantics):
・子が次々と呼び出され、常に1番目の子から開始する。
・子が成功した場合、次の子が続く。
・子が失敗した場合、シーケンスは同様に失敗する。
・全ての子が成功した場合、シーケンスは成功する。
【0024】
3.2セレクタ
セレクタノードは、1つがSUCCESSを返すまで、常に1番目の子から試行を開始し、その子の各々を順に試みる。通常の使用の場合において、子は、目標を達成する代替方法である可能性がある。作動された子がRUNNINGを返し、セレクタノードはまた、RUNNINGを返す。1つの子供がSUCCESSを返すなら、セレクタは同様に成功し、任意のさらなる子を実行しない。全ての子が失敗したなら、セレクタも、FAILUREを返す。セレクタ複合物は、1番目の子が最も高い優先順位を有する状態で、その優先順位によりタスクにランクを付けるために使用され得る。各タスクが最初にその適用可能性のコンディションをチェックするなら、より高い優先順位のタスクが、次の反復で自動的にアクティブになり、より低い優先順位のタスクにより開始されるアクションをオーバーライド又はキャンセルし得る。
【0025】
実行のセマンティクス:
・子が次々と呼び出され、常に1番目の子から開始する。
・1つの子が成功した場合、セレクタは同様に成功し、任意のさらなる子を実行しない。
・1つの子が失敗した場合、次の子が続く。
・全ての子が失敗した場合、セレクタは同様に失敗する。
【0026】
3.3メモリシーケンス
以下の適応に対するシーケンスノードとしてのメモリシーケンスである。メモリシーケンスノードは、最後に実行していた子を記憶し、次の作動時にそこへ戻る。すなわち、メモリシーケンスノードは、その子の実行を1番目の子から開始しない。
【0027】
実行のセマンティクス:
・前の反復においてラン中の子から開始し、子が次々と呼び出される。
・子が成功した場合、次の子が続く。
・子が失敗した場合、シーケンスは同様に失敗する。
・全ての子が成功した場合、メモリシーケンスは成功する。
【0028】
3.4メモリセレクタ
以下の適応に対するセレクタノードとして:
メモリセレクタノードは、最後のラン中の子を記憶し、次の作動にそこへ戻る。すなわち、メモリセレクタノードは、その子の実行を1番目の子から開始しない。
【0029】
実行のセマンティクス:
・前の反復においてラン中である子から開始し、子が次々と呼び出される。
・1つの子が成功した場合、セレクタは同様に成功し、任意のさらなる子を実行しない。
・1つの子が失敗した場合、次の子が続く。
・全ての子が失敗した場合、セレクタは同様に失敗する。
【0030】
3.5並列ノード並列の子の実行を記述する異なるタイプのノードが存在する。
【0031】
3.5.1パラレルワン(ParallelOne)パラレルワンノードは、全ての子を並列に実行する。パラレルワンノードは、1つが失敗したなら失敗し、1つの子が成功するとすぐに成功する。通常のアプリケーションは、監視されるコンディションが真のままの間は実行を継続し、それが一度真でなくなったなら、失敗を返すこととなる主タスクと並列に監視中のタスクを実行するものであり得る。
【0032】
実行のセマンティクス:
・全ての子が、並列に開始される。
・1つの子が失敗した場合、同様に失敗する。
・1つの子が成功した場合、同様に成功する。
【0033】
3.5.2パラレルオール(ParallelAll)
パラレルオールノードは、全ての子を並列に実行する。パラレルオールノードは、1つの子が失敗したなら、失敗し、全ての子が成功した場合、成功する。通常のアプリケーションは、2つの動きを同時に行い、それらの全てが完了するのを待つことであり得る。
【0034】
実行のセマンティクス:
・全ての子が、並列に開始される。
・パラレルワンノードは、1つの子が失敗したなら、同様に失敗する。
・いくつかの子が成功し、いくつかがまだ実行中なら、実行を続ける。
・全ての子が成功した場合、同様に成功する。
【0035】
3.5.3パラレルセレクタ(ParallelSelector)
パラレルセレクタノードは、並列に全ての子を実行する。パラレルセレクタノードは、全てが失敗したなら、失敗し、1つが成功したなら成功する。通常のアプリケーションは、代替的な選択肢のうち1つが成功するまで、問題を並列に解決するために代替的な選択肢を試みることである。
【0036】
実行のセマンティクス:
・全ての子が、並列に開始される。
・パラレルセレクタノードは、1つの子が成功したなら、同様に成功となる。
・いくつかの子が失敗し、いくつかがまだ実行中なら、実行を続ける。
・全ての子が失敗したなら、同様に失敗となる。
【0037】
3.6回復
回復タスクは、1番目の子を主タスクとして実行し、主タスクの失敗から回復すべく他の子を順に試みることとなる。1番目の子が成功したなら、回復タスクが同様に成功し、その他の子を実行しない。1番目の子が失敗したなら、他の子の1つが成功するまで他の子を続ける。この場合には、1番目の子を続ける。全ての子が失敗したなら、回復タスクも同様に失敗する。この種の回復行動を簡潔に実施することが可能であることは、複雑かつ不確かな環境において操作する物理ロボットを制御するために行動ツリーを使用する場合、有利である。こうした場合において、動作は多くの場合、失敗し、失敗から回復するためのルーチンが、ロボットの制御プログラムの大部分の原因となり得る。
【0038】
実行のセマンティクス
・1番目の子を実行する。1番目の子が成功したなら、同様に成功し、他の子に触れない。
・1番目の子が失敗したなら、他の子を続ける。
・他の子のいずれかが成功したなら、1番目の子を続ける。
・他の子のいずれかが失敗したなら、次の子を試みる。
・全ての子が失敗したなら、回復タスクは同様に失敗する。
【0039】
3.7チェックシステムエラー(CheckSystemError)
この複合ノードは、任意の認められていないシステムエラーが記録されたかどうかをチェックする。システムエラーは、ロボットのサブシステムを、例えば、モーターの故障又は破損されたセンサー等の使用不可の状態にするエラーである。こうしたエラーのいくつかは、例えば、ドライバープログラムを再スタートすることにより、プログラムに従って解決され得る一方、他のエラーは人間の介入を必要とする。両方の場合において、ロボットは、エラーが認められるまで、影響されるコンポーネントのうちいずれかを使用しようと試みるのを停止すべきである。このノードにパラメータとして渡されたロボットのサブシステムの少なくとも1つに影響を与える任意の認められていないシステムエラーが存在したなら、チェックシステムエラー複合物がブロックする。エラーが存在しないなら、1番目の子が実行される。エラーが存在したなら、ノードは、他の子を次々と試みることによりエラーを解決しようとする。エラーが子の1つにより解決され得たなら(すなわち、SUCCESSに返ったなら)、子1の実行を続け、さもなければ失敗する。
【0040】
実行のセマンティクス:
・1番目の子を実行する。1番目の子が成功したなら成功し、1番目の子が失敗したなら失敗する。
・システムエラーが、1番目の子の実行中に記録されたなら、1番目の子の実行を停止し、以下の子のいずれかがエラーを解決するかどうかを調べるべく、以下の子を試みる。
・他の子のいずれかが成功したなら、1番目の子を続ける。
・全ての子が失敗したなら、チェックシステムエラータスクが同様に失敗する。
【0041】
3.8デコレータノード
デコレータノードは、単一の子を有し、返り値を変更する。すなわち、デコレータノードは、単一の子の返り値を「包み隠す」。この返り値の変更は、様々な使用の場合において、例えば、一度より多くタスクを実行するために、実行を調整するために、又はタスクを統合するために適用され得る。
【0042】
3.8.1インバータ
このノードは、その子の返り値の反対のものを返す。すなわち、子がFAILUREを返した場合SUCCESSを返し、子がSUCCESSを返した場合FAILUREを返し、子がRUNNINGを返した場合RUNNINGを返す。例えば、新たなコンディションノードを定義せずに、コンディションの反対のものをチェックすることが可能である。
【0043】
3.8.2失敗の無視
このノードは、その子がSUCCESSを返した場合、又はFAILUREを返した場合、SUCCESSを返し、その子がRUNNINGを返した場合RUNNINGを返す。
【0044】
実行のセマンティクス:
・子が成功した、又は失敗した場合、SUCCESSを返す。
・子がまだ実行中である場合、RUNNINGを返す。
【0045】
3.8.3ループ
このノードは、それが成功する限り、(状況によっては、無制限の)複数回(num__iterations)までループにおいて、その子を実行する。子が毎回成功したなら、ノードは成功し、子が一度失敗したなら、ノードは、失敗する。
【0046】
実行のセマンティクス:
・子を実行する。
・子が失敗したなら、同様に失敗する。
・子が成功したなら、num__iterationsが到達され、成功するまで繰り返し、又はnum_iterations=−1なら、無限に繰り返す。
【0047】
3.8.4ループアンティル(LoopUntil)
このノードは、それが成功する限り、所与の(状況によっては、無制限の)最大数の反復(max_num_iterations)までループにおいてその子を実行する。ループアンティルノードは、子が成功し、成功フラグ(task_done)が子により真(True)に設定されたなら、成功する。子が失敗した、又は最大数の反復が、真に設定された成功フラグなしで到達されたなら、ループアンティルノードは失敗する。
【0048】
実行のセマンティクス:
・子を実行する。
・子が失敗したなら、同様に失敗する。
・子が成功したなら、子がtask_done値を真に設定する(ひいては成功する)まで、又はmax_num_iterations閾値が到達される(ひいては失敗し、max_iterations_exceeded出力を真に設定する)まで繰り返す。
【0049】
3.8.5再試行(Retry)
再試行デコレータは、それが成功を返すまでその子を実行する。子が成功したなら、再試行ノードは同様に成功する。子が失敗したなら、ノードは、所与の(状況によって、無制限の)回数(max_iterations)まで子を再スタートし、子がこの閾値より頻繁に失敗したなら、失敗する。
【0050】
実行のセマンティクス:
・子を実行する。
・子が成功したなら、同様に成功する。
・子が失敗したなら、max_iterations回まで再試行する。
・子がmax_iterations回より多く失敗したなら、FAILUREを返す。
【0051】
3.8.6結果反復器(ResultIterator)
結果反復器は、その子により返されるリストの全ての要素にわたって反復し、それらを1つずつ返す。例えば、子は、順序正しく訪問されるべきウェイポイントのリストを返し得る。子により返されるリストは、キャッシュ化され得、その場合に、キャッシュ値が利用可能でないなら、子が呼ばれるだけであろう。子が失敗したなら、ノードは同様に失敗する。子が成功し、値を返したなら、又は、キャッシュ値が使用され得たなら、ノードは成功する。
【0052】
実行のセマンティクス:
・子が実行され、このデコレータのリスト入力にマッピングされたその出力キーのうち1つを経由するリストを返す。
・デコレータは、キャッシュパラメータが真であるなら、リストをキャッシュする。
・デコレータは、出力された項目を経由してリストの1番目の要素を返す。
・キャッシングが真なら、その後の呼び出しは、キャッシュされたリストの残っている要素を返すこととなる。
・キャッシングが偽なら、又はリストが使い尽くされたなら、子は新たなリストを得るべく、再び呼び出される。
・子の実行値は、変更無く通され、又はキャッシュ値が使用されたなら、SUCCESSが返される。
【0053】
3.8.7
サブツリールックアップ
このデコレータは、その子の返り値を変更しないが、ランタイム時の行動ツリーを拡張するために役立つ。アクセスされた場合、ストレージデバイスからサブツリーを読み込み、サブツリーをそれ自身の子として加える。これは、例えば、異なるツリー又は異なるツリーの異なる部分においてインスタンス化され得るモジュール式の再利用可能なツリーフラグメントを格納するために有益である。これは、ロボット工学における一般的な使用の場合であり、そこでは、ナビゲーション又はオブジェクト操作等の行動は、タスクの異なる部分において現れる。
【0054】
3.8.8失敗後(Failed)
失敗後のデコレータは、子がFAILUREを返した場合SUCCESSを返し、子がFAILUREを返さなかった場合失敗する。
【0055】
実行のセマンティクス:
・子がFAILUREを返したなら、成功する。
・子がSUCCESSを返した、又はまだRUNNINGなら、失敗する。
【0056】
3.8.9
成功後(Succeeded)
成功後のデコレータは、子がSUCCESSを返した場合、SUCCESSを返し、子がFAILUREを返さなかった場合失敗する。
【0057】
実行のセマンティクス:
・子がSUCCESSを返したなら、成功となる。
・子がFAILUREを返した、又はまだRUNNINGなら、失敗となる。
【0058】
すなわち、簡単に言えば、本技術は、ロボットを制御するための方法に関連し、当該方法は、ロボットにより行われるタスクための行動ツリーアーキテクチャの利用法を含む。
【0059】
公知のロボットにおいて、典型的には、有限ステートマシンがロボットを制御するために使用される。このことは、単純で、制限された数の明確に定義されたタスク(特定のコンポーネントを車両に搭載することなど)を果たす産業ロボットに適し得るが、ロボットの環境に反応する必要があるロボットには理想的ではない。本技術は、そのような環境において、ロボットのために特に有益であり、そこで、ロボットは、その環境と、(潜在的に無制限の)数の異なる状況に反応する必要がある。
【0060】
すなわち、本技術は、異なる状況において、ロボットの反応にどのように反応し、どのように優先順位を付けるかについて、ロボットに異なる行動を持たせる。ロボットを制御するためのそのような行動ツリーアーキテクチャの使用は、複数の理由のために有利となり得る。制御方法が、例えば、有限ステートマシンとして実装された場合、その構造は、より単純となり得、必要とされていたであろうストレージスペースより小さいストレージスペースを要求する。そのグラフィック図は、ロボットの行動を実施するユーザにとってより単純、かつより直観的であり得る。特に、タスクの優先順位付けが、単純化され得る。これは、行動が実装された場合、制御ロボットは人間エラーになりにくく、それゆえ、よりフェイルセーフとなり、本技術の方法により制御されるロボットの全体的な安全性の向上をもたらし得る。新たなタスクは、行動ツリーアーキテクチャが、まさにモジュール式であり適応性があるので、より単純でより適応性がある方法において実施され得、それにより、ロボット行動に加えられるために新たなタスクに必要とされる時間を低減させ得る。
【0061】
方法は、コンピュータが実装された方法であり得る。すなわち、行動ツリーアーキテクチャは、ロボットにより行われるタスクに優先順位をつけるために使用される。
【0062】
方法の段階は、本明細書において特定の順序で述べられた場合はいつでも、段階は、本明細書において具体的に述べられない限り、又は熟練者に明確でない限り、本明細書に述べられる順序において、好ましくはであるが、必ずしも行われない。
【0063】
行動ツリーアーキテクチャは、ルートノードと、少なくとも1つの制御フローノード及び少なくとも1つの実行ノードと、有向エッジとを含むノードを備え得、ノードは、有向エッジに接続され、ルートノードは、1つの発信エッジを有し、受信エッジを有さず、各制御フローノードは、1つの受信エッジ及び少なくとも1つの発信エッジを有し、各実行ノードは、1つの受信エッジを有し、発信エッジを有さず、発信エッジを有するノードは、このエッジに接続した別のノードとの関連で親ノードと定義され、受信エッジを有するノードは、このエッジに接続した別のノードとの関連で子ノードと定義され、制御フローノード及び実行ノードは、それらの親ノードに異なる状態を返すように適応され、状態は、成功、実行中及び失敗を含み、方法は、
ルートノードが制御フローノードを呼び出す段階と、
制御フローノードが1番目のノードを呼び出す段階と、
1番目のノードが制御フローノードに第1状態を返す段階と、
制御フローノードが、ルートノードに第2状態を返す段階と
を含み得る。
【0064】
理解されるように、第1及び第2状態は、互いに等しい、又は異なり得る。
【0065】
方法はさらに、単一のノードに対してローカルノード変数を定義する段階を備え得る。
【0066】
ローカルノード変数は、あるノードから別のノードへと渡され得る。
【0067】
行動ツリーアーキテクチャは、サブツリーを含み得、各サブツリーは、少なくとも1つの制御フローノードと、少なくとも1つの実行ノードとを備え、方法はさらに、サブツリーのためにローカルサブツリー変数を定義する段階を備え得る。
【0068】
ローカルサブツリー変数は、あるサブツリーから別のサブツリーに渡され得る。
【0069】
そのようなローカルノード又はローカルサブツリー変数の定義は、そのような定義がグローバル変数の定義より適応性があるので、有利であり得る。制御方法の異なるフラグメントは、タスクライブラリに配信され得、タスクライブラリは、他の目的のために及び異なるシナリオにおいて使用され得る。そのようなローカル変数はまた、以下の理由に対して有利である。
複雑なロボットの行動の実装において、異なる人々が、ロボットの行動の異なるセクションに取り組み得、例えば、ある人は、オブジェクトのつまみ上げに関連するサブツリーを実装し得、別の人は、ロボットの安全ルーチンに関連するサブツリーを実装し得る。異なるサブツリーを実装する人々の両方は、同じ名前(異なる態様に関連するが)を有する変数を定義することが可能であり得る。ローカル変数によって、各変数は、サブツリーごとに定義されるだけなので、これは、問題とならないかもしれない。あるいは、異なるサブツリー(異なる態様に関連するが)に対して定義される同じ変数を有することは、ロボットの操作のエラーにつながり得る。従って、ローカルノード変数の定義又はローカルサブツリー変数はさらに、ロボットの行動を改善し得、この行動をよりフェイルセーフにさせ得る。
【0070】
状態はさらに、初期化後、一時停止、無効、中止後、及び先取後(preempted)のうち少なくとも1つを含み得、初期化後の状態は、ノードが初期化され、実行の用意ができたことを示し、
一時停止の状態は、ノードが中断されたことを示し、
無効の状態は、ノードが作り出され、まだ実行の用意ができていないことを示し、
中止後の状態は、ノードそれ自体がこのノードの実行を停止したことを示し、
先取後の状態は、ユーザ又は行動ツリーエグゼクティブ(executive)がノードの実行を停止したことを示し、
方法はさらに、初期化後、一時停止、無効、中止後、及び先取後の状態のうち少なくとも1つを返す1つの制御フローノード又は実行ノードを含み得る。
【0071】
例えば、無効状態は、ノードがまだ初期化されていない場合のノードにより想定され得、例えば、ロボットの異なるコンポーネントとの接続が依然として、確立されている必要がある場合である。
【0072】
例えば、初期化後の状態は、ロボットの制御システムにおいてデータベース又は他のプログラムとの接続が確立されていることを示し得る。
【0073】
一時停止の状態は、タスクが現在実行可能でないが、その実行が後で再開され得ることを示し得る。
【0074】
例えば、無効の状態は、ノードがまだ初期化されていない場合のノードにより想定され得る。
【0075】
中止後の状態は、ノードの実行中に、重大な又は致命的なエラーが検出された場合に想定され得る。
【0076】
例えば、ユーザは、ある外部イベントに応答してノードを先取後に設定し得る。
【0077】
すなわち、実行中、成功、失敗の状態に加えて、追加の状態がノードにより想定され得る。従って、タスクに関連したノード又はサブツリーは、異なる「ライフサイクル」を有し得、それによりそのような構造は、例えば、異なる(外部)変数に応じて停止及び再開され得る。そのような追加の状態の定義は、より多用途で、それゆえ改善されたロボットの行動を植え付ける可能性をユーザに提供し得る。
【0078】
状態は、上記の段落に説明された状態の2,3,4又は5を含み得る。
【0079】
行動ツリーアーキテクチャは、各エッジに接続される1つの子ノードと共に少なくとも2つの発信エッジにそれぞれ接続される可変制御フローノードを備え得、可変制御フローノードは、規則に従ってその子ノードを呼び出し得、その規則はまた、可変制御フローノードの子ノードにより返される状態以外の態様に依存する。
【0080】
これは、例えば、順に及びセレクタノードにおいて、他の行動ツリーアーキテクチャとは異なり得、子を呼び出す規則は、完全に子に依存する。すなわち、子が返すこととなる状態を知っている場合、制御フローノードが、どのように反応することとなるかは知られている。可変制御フローノードに対して、以下が異なる。たとえ、子がどの状態を返すこととなるかを知っていたとしても、可変制御フローノードがどのように反応することとなるかはまだ知られていない。例えば、そのような可変制御フローノードは、他の態様(システムエラーを感知するシステムなど)に応じて子を呼び出し得る。そのような可変制御フローノードは、エラーの処理、及びより一般的には、外部の影響に対する反応が何か重要であるとき、ロボットを制御するために非常に便利であり得る。
【0081】
可変制御フローノードの1つの子ノードは、主タスクに関連し得、その子ノードが主タスクの子ノードと定義され、可変制御フローノードの別の子ノードは、任意選択のタスクに関連し得、その子が任意選択の子ノードと定義され、主タスクの子ノードの状態から独立したコンディションが満たされたなら、可変制御フローノードは、任意選択の子ノードを呼び出す。
【0082】
任意選択の子ノードは、修理の子ノードであり得、修理が必要である場合、可変制御フローノードは、修理の子ノードを呼び出し得る。
【0083】
任意選択の子ノードは、安全の子ノードであり得、可変制御フローノードは、安全の重大な状況が検出された場合、安全の子ノードを呼び出し得る。
【0084】
行動ツリーアーキテクチャは、各エッジに接続される1つの子ノードと共に、少なくとも3つの発信エッジに接続される異種制御フローノードを備え得、
子ノードは、スタータ子ノードと少なくとも2つの非スタータ子ノードとを備え、
異種制御フローノードは、スタータ子ノードから開始して連続してその子ノードを呼び出すように適応され、
異種制御フローノードは、規則に従ってその子を呼び出し、
非スタータ子ノードごとに、非スタータ子ノードを呼び出すための規則は、それぞれの非スタータ子ノードの直前に呼び出される子ノードの状態に依存し、
この依存性は、少なくとも2つの非スタータ子ノードに対して異なる。
【0085】
それは、他のノードに対する区別であり得、そこで同じ規則が全ての子に適用される(さらなる子が存在しない場合、最後の子を除く)。本技術において、簡単に言えば、異なる規則が、子のいくつかに適用され得る。これは、他のノードとさらなる相違があり得る。例えば、シーケンスノード又はセレクタノードにおいて、n≧2の場合に子ノードnを呼び出すための規則は、子ノードn−1の返り値に依存する。例えば、シーケンスノードにおいて、子n−1が成功した場合、子nが呼び出され(n≧2の場合のnから独立して)、セレクタノードにおいて、子nは、子n−1が失敗した場合、呼び出され(n≧2の場合のnから独立して)。これは、その子を異なって扱う異種制御フローノードに対して異なる。例えば、子1が成功した場合、子2が呼ばれ得るが、子2が失敗した場合、子3が呼ばれ得る。これは、単純かつ直観的な方式においてより多用途で複雑なタスクの実施を可能にし得る。
【0086】
少なくとも1つの制御フローノードは、回復ノードとして実現され得、その回復ノードは、1番目の子ノードと、少なくとも1つのさらなる子ノードとを備える複数の子ノードを有し、
回復ノードは、1番目の子ノードを呼び出し、
1番目の子ノードが成功を返したなら、回復ノードは成功を返し、少なくとも1つのさらなる子ノードを呼び出さない、
1番目の子ノードが失敗を返したなら、回復ノードは少なくとも1つのさらなる子ノードを呼び出し、
少なくとも1つのさらなる子ノードのうち1つが成功を返したなら、回復ノードは1番目の子ノードを呼び出し、
少なくとも1つのさらなる子ノードの全てが失敗を返したなら、回復ノードは失敗を返し、
本方法は、回復ノードを実行する段階を含み得る。
【0087】
そのような回復ノードは、実行される必要がある主タスクと、主タスクの実行を知らせ得る異なるコンディションとを有するときに、特に有益であり得る。そのような状況において、方法は先ず、主タスクを行おうと試みる。これは、元に戻すことができるなら、追加の補助タスクが、主タスクの実行を知らせるコンディションを変更する試みにおいて行われ得る。そのような回復ノードのための1つの例は、主タスクがオブジェクトを把持するロボットであり、補助タスクは、ロボットのベースの位置にあり得る。先ず、ロボットは、オブジェクトを把持しようとする(主タスク)。これは、例えば、ベースが間違った位置にあり、それによりロボットアームがオブジェクトに届き得ないとき、元に戻すことができ得る。補助タスクとして、ロボットは次に、そのベースを再配置し得る(補助タスク)。これが一度成功したなら、オブジェクトを把持するタスク(主タスク)は、再実行され得る。
【0088】
行動ツリーアーキテクチャは、ロボットの周囲の人間に対する感知と、ロボットの周囲において人間が感知されたならロボットを停止することとに関連するサブツリーを備え得、方法はこのサブツリーを実行し得る。
【0089】
行動ツリーアーキテクチャは、オブジェクトを選択すること、オブジェクトをつまみ上げること及びオブジェクトを所望の位置に持ってくることに関連するサブツリーを備え得、方法はこのサブツリーを実行し得る。
【0090】
行動ツリーアーキテクチャは、ロボットがそのバッテリー状態をチェックすること、ロボットが充電ステーションにナビゲートすること、及びロボットが充電されることに関連するサブツリーを備え得、方法はこのサブツリーを実行し得る。
【0091】
ロボットは、自律ロボットであり得る。
【0092】
ロボットは、移動ベース及び/又はマニピュレータを含み得る。
【0093】
ロボットは、自律駆動ロボットであり得る。
【0094】
ロボットは、オブジェクトをつまみ上げるように適応され得る。
【0095】
ロボットは、センサーを含み得、方法は、センサーによって情報を感知する段階と、ロボットにその情報に応答させる段階とを含み得る。
【0096】
方法は、コンピュータが実装された方法であり得る。
【0097】
少なくとも1つの制御フローノードと、少なくとも1つの実行ノードとに関連するコマンドは、コンピュータソースコードにおいて実行可能な機能として実施され得、
ノードとノードに接続する有向エッジとがツリー構造を定義し、
ツリー構造は、データファイルとして格納され、
方法は、実行可能な機能として実施される上記コマンドと、データファイルとして格納される上記ツリー構造と、ランタイム時の行動ツリーエグゼクティブへの実行コマンドとを送信する段階を備え得、
行動ツリーエグゼクティブは、実行可能な機能として実施される上記コマンドに基づく制御プログラムを生成し、上記ツリー構造は、データファイル及びランタイム時の実行コマンドとして格納される。
【0098】
ツリー構造は、実行可能なプログラムファイルではなく、データファイル(例えば、バイナリデータ形式)であることが好ましく、プログラムは、そのデータに基づき生成され得ることが好ましい。これにより、データが、ソフトウェアにより操作され、生成され、可視化され、送信されることなどを可能にする。プログラム内部から解釈することが困難であるコンパイラ型のプログラムコードでこれを行うことはより困難であろう。
【0099】
データファイルは、テキストファイルであり得、好ましくは、JSONフォーマットテキストファイルであり得る。
【0100】
言い換えれば、行動ツリーアーキテクチャは、データ構造として実施され得、実行可能なツリーは、上記データ構造及びソースコードの実行可能な機能に基づきランタイム時にインスタンス化され得る。そのように定義された仕様は、ツリーが構成され、その後変化がないままである場合、同時に設定されるタスクパラメータを含み得る。これにより、より包括的なタスクの実施を作り出すのを可能にする。特定用途向けの引数は、タスクの実施においてハードコード化される代わりに、ツリー仕様のパラメータとして定義され得るからである。これにより、行動ツリーのコンポーネントの再利用性及びモジュール性を大きく増大し得る。
【0101】
方法はさらに、番犬ルーチンを呼び出す上記ノードの少なくとも1つを備え、
番犬ルーチンが上記ノードの少なくとも1つにより呼び出されたときはいつでも、番犬ルーチンはタイマーを設定し、
番犬ルーチンが事前に定義された時間の間、上記ノードの少なくとも1つにより呼び出されなかった場合、タイマーは経過し、
タイマーが経過した場合、上記ノードのうち少なくとも1つの操作は停止される。
【0102】
言い換えれば、先ず、番犬ルーチンは、それを登録しているそれぞれのノードにより開始される。次に、タイマーは、「カウントダウン」を開始する。タイマーが、再び呼び出されないなら、タイマーが経過し、それぞれのノードの操作を停止させる。しかしながら、通常の操作の間、それぞれのノードが番犬ルーチンを再呼び出し(すなわち、ノードが繰り返し呼び出す)、それにより、タイマーはリセットされ、従って経過するのが防止され、その操作を継続する。他方、番犬ルーチンが、事前に定義された時間の間に呼び出されないなら(例えば、システムエラー又はプログラムエラー又はハードウェア故障に起因して)、タイマーは経過し、従ってノードの操作を停止する。次に、それぞれのノードは、失敗の状態を返す。
【0103】
そのような番犬ルーチン又は番犬メカニズムは、動作が中断された場合、特に実際のハードウェアが使用された場合に、保存行動を確実にするために有益であり得る。1つの例は、システムエラーが報告され、行動ツリーの操作がトップレベルで停止されることであり、その時、番犬メカニズムは、番犬を開始したそれぞれのノードだけが事前に定義された時間の間だけ操作し、それから停止されることを確実にする。すなわち、番犬メカニズムは、安全操作に寄与するルーチンであり、安全操作は、ハードウェアの操作のために特に有益である。また、より高い優先順位を有する別のノードの操作に起因して、特定のノードは、もはや呼び出されないことを検出することが可能となり得る。
【0104】
本技術はまた、上記に説明される方法のいずれかを実行するように適応されるデータ処理手段を備えるロボットに関する。より一般的には、本技術は、本明細書に説明される方法のいずれかを実行するように適応されるデータ処理手段を備えるシステムに関連する。
【0105】
ロボットは、自律ロボットであり得る。
【0106】
ロボットは、移動ベース及び/又はマニピュレータを含み得る。
【0107】
ロボットは、自律駆動ロボットであり得る。
【0108】
ロボットは、オブジェクトをつまみ上げるように適応され得る。
【0109】
ロボットは、センサーを含み得、方法は、センサーによって情報を感知する段階と、ロボットにその情報に応答させる段階とを含み得る。
【0110】
本技術はまた、プログラミング、監視、内観及び/又はデバッギングのための行動ツリーアーキテクチャの使用に関連し、行動ツリーアーキテクチャは、上記に説明された特徴のいずれかを備える。
【0111】
ロボットを制御するための行動ツリープロセスアーキテクチャの使用は、複数の理由のために有益であり得る:
・ロボットの制御のために一般に使用される有限ステートマシンなどのアプローチと比較して、行動ツリーとして特定される制御プログラムは、適応させるのがはるかに容易であり得る。新たな機能を有するブランチは、単一の親−子接続を加えることにより行動ツリーに組み込まれ得る一方、有限ステートマシンは、許可された全てのタスク移行に対する接続を必要とする。
・行動ツリーを大部分が独立したサブツリーへの組織化は、高度なモジュール式のタスク仕様を作り出し、異なる目的のための制御プログラムの部分の再利用性を増大する。変数は、「サブツリー」だけのためにローカルに定義され、そのことは、定義されたグローバル変数を有することより適応性がある。これは、他のシナリオにおける他の目的のために使用され得るタスクライブラリにおいて、個別のプログラムフラグメントの分配を可能にする。
・行動ツリーは、プログラミングなしでロボット行動を編集し、その結果生じた行動仕様を可視化し、実行時に制御プログラムの状態を視察し、行動故障をデバッグするために使用され得るナチュラルグラフィック表現を有する。単純化された可視化はまた、ロボットのより少ない誤りと、ロボットの誤った行動の可能性の減少とをもたらし得る。
・ロボットの制御のために一般的に使用される、例えば、有限ステートマシンと比較すると、行動ツリーとして記述される制御プログラムは、イベントに対してより反応性があり得る。これは、行動ツリーが間近の状況を考慮して次にどの動作を行うべきかを固定された頻度で評価するからであり、そのことは、有限ステートマシンに対する場合のように、次にどの動作を行うべきかの動作の終わりに決定することよりはるかに頻繁であり得る。
・例えば、有限ステートマシンと比較して、タスクの優先順位付けは、はるかに単純であり、非常に単純な方式で可視化され得る。改善及び単純化されたタスクの優先順位付けに起因して、ロボットの全体的なパフォーマンスが改善され得、すなわち、ロボットは、先ず確実に最も重要なサブルーチン(例えば、安全対策に関連したサブルーチン)を呼び出し得る。
・サブツリーのモジュール式構造及び容易な優先順位付けに起因して、行動ツリーは、名目上及び例外的な行動のためのコードを別々に編集、格納及び実行するのを可能にする。これは、例外の場合を処理するためのルーチンと交互に配置されることなく、タスクそれ自体の型を作ることに集中し得る名目上の行動のためのクリーナコードをもたらし得る。同時に、例外処理ルーチンは、1つより多いツリーのために使用され得る。これは、異なるシナリオにおいて名目上及び例外的な処理コードの両方を別々に再使用するのに役立ち得る。
【0112】
本技術はまた、以下の態様により規定される。
【0113】
1.ロボットを制御するための方法であって、ロボットにより行われるタスクの行動ツリーアーキテクチャの利用を含む方法。
【0114】
2.前述の態様に係る従う方法であって、
行動ツリーアーキテクチャは、ルートノード、少なくとも1つの制御フローノード及び少なくとも1つの実行ノードと、有向エッジとを含むノードを備え、
ノードは、有向エッジに接続され、
ルートノードは、1つの発信エッジを有し、受信エッジを有さず、各制御フローノードは、1つの受信エッジ及び少なくとも1つの発信エッジを有し、各実行ノードは、1つの受信エッジを有し、発信エッジを有さず、発信エッジを有するノードは、このエッジに接続した別のノードとの関連で親ノードと定義され、受信エッジを有するノードは、このエッジに接続した別のノードとの関連で子ノードと定義され、
制御フローノード及び実行ノードは、それらの親ノードに異なる状態を返すように適応され、状態は、成功、実行中及び失敗を含み、
方法は、ルートノードが制御フローノードを呼び出す段階と、
制御フローノードが1番目のノードを呼び出す段階と、
1番目のノードが制御フローノードに第1状態を返す段階と、
制御フローノードが、ルートノードに第2状態を返す段階とを含む。
【0115】
3.前述の態様に係る方法であって、方法はさらに、単一のノードのためにローカルノード変数を定義する段階を備える。
【0116】
4.前述の態様に係る方法であって、ローカルノード変数が、あるノードから別のノードに渡される。
【0117】
5.前述の3つの態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、サブツリーを含み、各サブツリーは、少なくとも1つの制御フローノードと、少なくとも1つの実行ノードとを備え、方法はさらに、サブツリーのためのローカルサブツリー変数を定義する段階を備える。
【0118】
6.前述の態様に係る方法であって、ローカルサブツリー変数が、あるサブツリーから別のサブツリーに渡される。
【0119】
7.前述の5つの態様のいずれかに係る方法であって、状態はさらに、初期化後、一時停止、無効、中止後、及び先取後のうち少なくとも1つを含み得、
初期化後の状態は、ノードが初期化され、実行の用意ができたことを示し、
一時停止の状態は、ノードが中断されたことを示し、
無効の状態は、ノードが作り出され、まだ実行の用意ができていないことを示し、
中止後の状態は、ノードそれ自体がこのノードの実行を停止したことを示し、
先取後の状態は、ユーザ又は行動ツリーエグゼクティブがノードの実行を停止したことを示し、
方法はさらに、初期化後、一時停止、無効、中止後、及び先取後の状態のうち少なくとも1つを返す1つの制御フローノード又は実行ノードを含む。
【0120】
8.前述の態様に係る方法であって、状態は、前述の態様において説明される状態の2、3、4又は5を含む。
【0121】
9.前述の7つの態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、各エッジに接続される1つの子ノードと共に、少なくとも2つの発信エッジにそれぞれ接続される可変制御フローノードを備え、
可変制御フローノードは、規則に従ってその子ノードを呼び出し得、その規則はまた、可変制御フローノードの子ノードにより返される状態以外の態様に依存する。
【0122】
10.前述の態様に係る方法であって、可変制御フローノードの1つの子ノードは、主タスクに関連し得、その子ノードが主タスクの子ノードと定義され、可変制御フローノードの別の子ノードは、任意選択のタスクに関連し、その子が任意選択の子ノードと定義され、主タスクの子ノードの状態から独立したコンディションが満たされたなら、可変制御フローノードは任意選択の子ノードを呼び出す。
【0123】
11.前述の態様に係る方法であって、任意選択の子ノードは、修理の子ノードであり、可変制御フローノードは、修理が必要である場合、修理の子ノードを呼び出す。
【0124】
12.最後から2番目の態様に係る方法であって、任意選択の子ノードは、安全の子ノードであり、可変制御フローノードは、安全の重大な状況が検出された場合、安全の子ノードを呼び出す。
【0125】
13.前述の11個の態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、各エッジに接続される1つの子ノードと共に、少なくとも3つの発信エッジに接続される異種制御フローノードを備え得、子ノードは、スタータ子ノードと少なくとも2つの非スタータ子ノードとを備え、
異種制御フローノードは、スタータ子ノードから開始して連続してその子ノードを呼び出すように適応され、
異種制御フローノードは、規則に従ってその子を呼び出し、非スタータ子ノードごとに、非スタータ子ノードを呼び出すための規則は、それぞれの非スタータ子ノードの直前に呼び出される子ノードの状態に依存し、この依存性は、少なくとも2つの非スタータ子ノードに対して異なる。
【0126】
14.前述の12個の態様のいずれかに係る方法であって、少なくとも1つの制御フローノードは、回復ノードとして実現され得、その回復ノードは、1番目の子ノードと、少なくとも1つのさらなる子ノードとを備える複数の子ノードを有し、回復ノードは、1番目の子ノードを呼び出し、
1番目の子ノードが成功を返したなら、回復ノードは成功を返し、少なくとも1つのさらなる子ノードを呼び出さない、
1番目の子ノードが失敗を返したなら、回復ノードは少なくとも1つのさらなる子ノードを呼び出し、
少なくとも1つのさらなる子ノードのうち1つが成功を返したなら、回復ノードは1番目の子ノードを呼び出し、
少なくとも1つのさらなる子ノードの全てが失敗を返したなら、回復ノードは失敗を返し、本方法は回復ノードを実行する段階を含み得る。
【0127】
15.前述の態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、ロボットの周囲の人間に対する感知と、ロボットの周囲において人間が感知されたならロボットを停止することとに関連するサブツリーを備え得、本方法はこのサブツリーを実行する。
【0128】
16.前述の態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、オブジェクトを選択すること、オブジェクトをつまみ上げること及びオブジェクトを所望の位置に持ってくることに関連するサブツリーを備え得、方法はこのサブツリーを実行する。
【0129】
17.前述の態様のいずれかに係る方法であって、行動ツリーアーキテクチャは、ロボットがそのバッテリー状態をチェックすること、ロボットが充電ステーションにナビゲートすること、及びロボットが充電されることに関連するサブツリーを備え、方法はこのサブツリーを実行する。
【0130】
18.前述の態様のいずれかに係る方法であって、ロボットは、自律ロボットである。
【0131】
19.前述の態様のいずれかに係る方法であって、ロボットは、移動ベース及び/又はマニピュレータを含む。
【0132】
20.前述の態様のいずれかに係る方法であって、ロボットは、自律駆動ロボットである。
【0133】
21.前述の態様のいずれかに係る方法であって、ロボットは、オブジェクトをつまみ上げるように適応される。
【0134】
22.前述の態様のいずれかに係る方法であって、ロボットは、センサーを含み得、方法は、センサーによって情報を感知する段階と、ロボットにその情報に応答させる段階とを含み得る。
【0135】
23.前述の態様のいずれかに係る方法であって、方法は、コンピュータが実装された方法である。
【0136】
24.態様2の特徴と共に前述の態様のいずれかに係る方法であって、少なくとも1つの制御フローノードと、少なくとも1つの実行ノードとに関連するコマンドは、コンピュータソースコードにおいて実行可能な機能として実施され得、ノードとノードに接続する有向エッジとがツリー構造を定義し、ツリー構造は、データファイルとして格納され、方法は、
実行可能な機能として実施される上記コマンドと、データファイルとして格納される上記ツリー構造と、ランタイム時の行動ツリーエグゼクティブへの実行コマンドとを送信する段階を備え、
行動ツリーエグゼクティブは、実行可能な機能として実施される上記コマンドに基づく制御プログラムを生成し、上記ツリー構造は、データファイル及びランタイム時の実行コマンドとして格納される。
【0137】
25.前述の態様に係る方法であって、データファイルは、テキストファイルであり、好ましくは、JSONフォーマットテキストファイルである。
【0138】
26.態様2の特徴と共に前述の態様のいずれかに係る方法はさらに、
番犬ルーチンを呼び出す上記ノードの少なくとも1つを備え、
番犬ルーチンは、
番犬ルーチンが上記ノードの少なくとも1つにより呼び出されたときはいつでも、タイマーを設定し、
番犬ルーチンが事前に定義された時間の間、上記ノードの少なくとも1つにより呼び出されなかった場合、タイマーは経過し、タイマーが経過した場合、上記ノードのうち少なくとも1つの操作は停止される。
【0139】
27.前述の態様のいずれかに係る方法を実行するように適応されるデータ処理手段を備えるシステム。
【0140】
下記に、さらなる装置態様が論じられる。こうした態様は、数字が続く「R」(ロボットに対して)により示される。
【0141】
R1.前述の態様のいずれかに説明される方法を実行するように適応されるデータ処理手段を備えるロボット。
【0142】
R2.前述の態様に係るロボットであって、ロボットは、自律ロボットである。
【0143】
R3.前述の装置態様のいずれかに係るロボットであって、ロボットは、移動ベース及び/又はマニピュレータを含む。
【0144】
R4.前述の装置態様のいずれかに係るロボットであって、ロボットは、自律駆動ロボットである。
【0145】
R5.前述の装置態様のいずれかに係るロボットであって、ロボットは、オブジェクトをつまみ上げるように適応される。
【0146】
R6.前述の装置態様のいずれかに係るロボットであって、ロボットは、センサーを含む。
【0147】
U1.プログラミング、監視、内観及び/又はデバッギングのための行動ツリーアーキテクチャの使用であって、行動ツリーアーキテクチャは、上記の態様に説明された特徴のいずれかを備える。
【図面の簡単な説明】
【0148】
本発明の好ましい実施形態がここで、添付の図面を参照して説明されるであろう。
図1】複数のオブジェクトを格納する棚及びロボットを示す。
図2】ロボットを制御するために使用される行動ツリーを示す。
図3】ロボットを制御するために使用される行動ツリーを示す。
【発明を実施するための形態】
【0149】
図1は、ロボット100及び棚2を示す。棚2において、ツール42、44、46として示される複数の異なるオブジェクトが位置する。図示される実施形態において、棚2に位置するねじ回し42、ハンマー44及びレンチ46が示される。さらに、ロボット100が示される。ロボット100は、複数の車輪104(図1にはそのうちの2個だけが示されている)を含むベース102を備え、それによりロボット100は駆動し得る。ベース102上に、つまみ上げ手段106が、位置する。図示される実施形態において、つまみ上げ手段106は、1又は複数の継手を有するグラプラー(grappler)である。つまみ上げ手段106の端部に、オブジェクトを把持又はつまみ上げように適応された把持ツール108が提供される。さらに、つまみ上げ手段106の端部に、カメラ110も提供される。ベース102の上部には、オブジェクト、例えば、オブジェクト42〜46を配置するスペース112が存在し得る。
【0150】
ロボット100は、自律的に駆動及び実行されるロボット100であり得る。ロボット100は特に、商品、例えば、オブジェクト42〜46をつまみ上げ、所望の位置にオブジェクト42〜46を持ってくるべく、倉庫において使用され得る。
【0151】
そのようなロボット100の典型的な利用法がここで、説明されるであろう。ユーザは、ロボット100が、ある特定のオブジェクト、例えば、ねじ回し42及びレンチ46を、所望の位置、例えば、オブジェクトが配送のために梱包され得る位置に持ってくることを望み得る。ユーザは、この情報を、例えば、無線LANのような公知の通信規格によって、ロボット100に通信し得る。ロボット100は、それぞれのオブジェクトが格納されている棚2に自律的に自身をナビゲートし得る。そのようにすべく、どのオブジェクトが倉庫のどの棚2に格納されているかについての情報を格納するメモリが提供され得る。ロボット100は、その車輪104により正しい棚2にナビゲートし得る。ロボット100は正しい棚2に到達すると、ロボット100は、カメラ110によってオブジェクト(ここでは、ねじ回し42及びレンチ46)の正確な位置を突き止め得る。次に、把持ツール108は、レンチ46をつまみ上げる正しい位置まで(図1に示されるように)つまみ上げ手段106によって延長され得る。把持ツール108が一度レンチ46を把持したならつまみ上げ手段106は、レンチ46をスペース112上に配置し得る。次に、この把持及び配置手順は、スペース112上にねじ回し42をさらに配置すべく、ねじ回し42に対して繰り返され得る。
【0152】
所望のオブジェクトが一度ストレージスペース112に配置されたなら、ロボット100は、所望の位置、例えば、オブジェクトの梱包及び/又は配送のための位置まで自身をナビゲートし得る。
【0153】
ロボット100は、特定のプロセスにより制御され得る。このプロセスは、ロボットを制御し、ロボット100が行う必要があり得る異なるタスクに優先順位を付ける。そのような自律駆動及び操作ロボット100について、実行されるべき、優先順位付けされるべき異なるタスクは、より単純なロボットに対してよりはるかに多用途であり得る。
【0154】
この制御プロセスのために、行動ツリーアーキテクチャ20が、使用され得る。例示的な行動ツリーアーキテクチャが、図2に示される。行動ツリーの上部に、ルートノード200が存在し、「O」付きのボックスとして識別される。ルートノード200は、受信ノードを有さずに、1つの発信ノード202だけを有する。図示される実施形態において、このノード(すなわち、ルートノード200の子)が、「?」付きのボックスにより一般的に識別されるセレクタノード202である。セレクタノード202は、2つの子204及び211を有し、後者が、最初に説明される。
【0155】
シーケンスノード211(そのようなノードは「→」付きのボックスにより一般的に識別される)及びその子212〜224は、ロボット100により実行される一般的なタスク、すなわちユーザにより特定される「オブジェクトを入手し持ってくること」を含む。上記に論じられたように、シーケンスノード211は、特定の順序でその子を呼び出す(図示において、左から右に)。最初に、ノード212「SelectObj」が呼び出される。このノード212は、オブジェクトが選択されたどうかをチェックし得る。オブジェクトが選択されていないなら、ノード212は、その親ノード211にFAILUREを返し、それによりノード211のシーケンスを終了し、ノード211は順にその親ノード202にFAILUREを返す。
【0156】
しかしながら、オブジェクトがノード212においてユーザにより選択されたなら、ノード212は、その親ノード211にSUCCESSを返す。次に、親ノード211はシーケンスの次の子、すなわちノード214を作動する。ノード214は、選択されたオブジェクト(例えば、レンチ46)に対してナビゲーションルートを計算するためのサブルーチンである。これは、図2に示されていないさらなる段階(例えば、データセットのレンチ46の位置を検索する段階、この位置への最も早いルートを計算する段階など)を含み得る。ノード214の計算が続いている限り、その親ノード211にRUNNINGを返す(次に、親ノード211はまた、ノード202にRUNNINGを返すであろう)。ノード214は、そのタスクの完了が不可能である(例えば、選択されたオブジェクトがウェアハウスにない)ことが分かったなら、FAILUREをセレクタノード211に返す。タスクが完了したなら、すなわち、ナビゲーションルートが計算されたなら、ノード214はその親シーケンスノード211にSUCCESSを返す。
【0157】
ノード211は、その子を順に呼び出す。子214が一度成功している(すなわち、ナビゲーションルートが決定されている)なら、最後まですべての詳細及び可能性を調べずに、ロボットをオブジェクトの位置にナビゲートする子216が呼び出される。このタスクが一度成功しているなら、オブジェクトは、ノード218において検出される。次に、オブジェクトはノード220においてつまみ上げられ(図1に示されるロボットにおいて、オブジェクトはまた、追加のサブルーチンにおいてストレージスペース112に配置される可能性がある)、所望の位置へのナビゲーションルートがノード222において計算され、ロボットはそれから、ノード224のこの所望の位置にナビゲートされる。
【0158】
すなわち、シーケンスノード211及びその子は、つまみ上げロボットのコア機能を表し得る。
【0159】
しかしながら、ロボット100により行われる必要がある他のサブルーチンが存在し得る。そのような1つのサブルーチンがシーケンスノード204及びその子206〜210と共に図2に示されている。このサブルーチンは、人間に害が及ばないことを保証する。先ず、シーケンスノード204は、人間が存在するか否か(例えば、ロボット100が進んでいる方向において、あるいはロボット100から事前に定義された距離内において)を作動するノード206をチェックする。このコンディションが満たされたなら、ノード206は、ノード204にSUCCESSを返す。次に、ノード204は、ロボットのモーターを停止するノード206を呼び出す。ノード208は、モーターが一度停止されたなら、SUCCESSを返す。次に、ノード204は、警告音をトリガするノード210を呼び出す。警告音が一度提供されたなら、ノード210はノード204にSUCCESSを返す。順に、ノード204はその親ノード、すなわちセレクタノード202にSUCCESSを返し、それによりその子211を次に呼び出さないであろう。次に、セレクタノード202はまた、その親ノード、ルートノード200にSUCCESSを返す。図2の行動ツリー構造20は、例示的な目的のためだけであり、多少簡略化され得ることに、留意されたい。具体的に、いくつかのノードは、図示及び説明の明瞭化のために省略される場合がある。例えば、シーケンスノード204と動作ノード208との間において、失敗無視ノード又は再試行ノードなどの追加のデコレータノード(図示せず)が含まれ得、人間がノード206において検出された場合、モーターが停止され、モーターがシーケンス204において停止された場合、ルーチンだけがさらに継続することを確実にし得る。同じことが、シーケンスノード204と動作ノード210との間に存在している潜在的な追加ノードに当てはまり得、警告音が人間の検出時に常にトリガされることを確実にし得る。
【0160】
この例は、異なるルーチンがどのように互いに組み合わされ得るかを説明する。ルーチンは、常に左から右に呼ばれる。従って、異なる優先順位でルーチンを実施し、それぞれの優先順位を可視化することは非常に容易であり(ここで、安全ルーチン204〜210は、一般のタスクルーチン211〜224より高い優先順位を有するであろう)、それにより、このアーキテクチャを特に効率良く、フェイルセーフにする。
【0161】
さらに、ロボット100を制御するためのそのようなプロセスはまた、容易に適合され得、すなわち、追加の機能が、加えられ得る。これは、適合された制御アーキテクチャ20'を示す図3において可視化されている。同様の特徴は、同様の参照符号を伴い、下記にさらなる詳細は説明されないであろう。参照符号230〜236を伴う追加ルーチンに注目すると、その追加ルーチンは、バッテリー安全ルーチンと呼ばれる場合がある。このルーチンは、親ノードとしてノード202を有するシーケンスノード230を含む。さらに、ノード232〜236が子ノードとして提供される。ノード232は、バッテリーをチェックし、例えば、バッテリー状態が、一定の閾値より低いかどうかがチェックされ得る。このノードが失敗した(すなわち、バッテリーが閾値より低くない)なら、ノード232は、ノード230にFAILを返し、ノード230は、セレクタノード202にFAILを返し、それにより次にシーケンスノード211に進むであろう。しかしながら、バッテリーが閾値より低いなら、ノード232は成功し、ノード230にSUCCESSを返し、それにより次にローディングステーションにロボットをナビゲートするノード234を呼び出す。これが一度達成されたなら、ノード234は、ノード230にSUCCESSを返し、それによりバッテリーを再ローディングすべく、次にノード236を呼び出す。
【0162】
図3を参照すると、追加の機能がそのような行動ツリーアーキテクチャにおいて容易に実装され得ることが、明らかとなる。すなわち、制御アーキテクチャは、高度に適応性がある。さらに、異なるサブルーチンの優先順位は、図3からも明らかである。サブルーチンは左に位置するほど、優先順位は高くなる。
【0163】
本発明は特定の実施形態を参照して説明されているが、こうした実施形態は本発明の範囲を限定するものではなく、本発明を説明するのに役立つだけであることは、理解されるべきである。
(項目1)
ロボットを制御するための方法であって、上記方法は、上記ロボットにより行われるタスクのための行動ツリーアーキテクチャの利用を含み、
上記行動ツリーアーキテクチャは、ルートノード、少なくとも1つの制御フローノード及び少なくとも1つの実行ノードと、有向エッジとを含むノードを備え、
上記ノードは、上記有向エッジに接続され、
上記ルートノードは、1つの発信エッジを有し、受信エッジを有さず、各制御フローノードは、1つの受信エッジ及び少なくとも1つの発信エッジを有し、各実行ノードは、1つの受信エッジを有し、発信エッジを有さず、発信エッジを有するノードは、このエッジに接続した別のノードとの関連で親ノードと定義され、受信エッジを有するノードは、このエッジに接続した別のノードとの関連で子ノードと定義され、上記制御フローノード及び上記実行ノードは、それらの親ノードに異なる状態を返すように適応され、上記状態は、成功、実行中及び失敗を含み、上記方法は、
上記ルートノードが制御フローノードを呼び出す段階と、
上記制御フローノードが1番目のノードを呼び出す段階と、
上記1番目のノードが上記制御フローノードに第1状態を返す段階と、
上記制御フローノードが、上記ルートノードに第2状態を返す段階と
を備える方法。
(項目2)
上記行動ツリーアーキテクチャは、サブツリーを備え、各サブツリーは、少なくとも1つの制御フローノードと、少なくとも1つの実行ノードとを備え、上記方法はさらに、サブツリーのためのローカルサブツリー変数を定義する段階を備える、
項目1に記載の方法。
(項目3)
上記ローカルサブツリー変数は、あるサブツリーから別のサブツリーに渡される、
項目2に記載の方法。
(項目4)
上記状態はさらに、初期化後、一時停止、無効、中止後、及び先取後のうち少なくとも1つを含み、
初期化後の上記状態は、ノードが初期化され、実行の用意ができたことを示し、
一時停止の上記状態は、ノードが中断されたことを示し、
無効の上記状態は、ノードが作り出され、まだ実行の用意ができていないことを示し、
中止後の上記状態は、ノードそれ自体がこのノードの実行を停止したことを示し、
先取後の上記状態は、ユーザ又は行動ツリーエグゼクティブがノードの実行を停止したことを示し、
上記方法はさらに、初期化後、一時停止、無効、中止後、及び先取後の上記状態のうち少なくとも1つを返す1つの制御フローノード又は実行ノードを含む、
項目1から3のいずれか1つに記載の方法。
(項目5)
上記行動ツリーアーキテクチャは、各エッジに接続される1つの子ノードと共に、少なくとも2つの発信エッジにそれぞれ接続される可変制御フローノードを備え、上記可変制御フローノードは、規則に従ってその子ノードを呼び出し得、その規則はまた、上記可変制御フローノードの上記子ノードにより返される上記状態以外の態様に依存する、
項目1から4のいずれか1つに記載の方法。
(項目6)
上記可変制御フローノードの1つの子ノードは、主タスクに関連し得、その子ノードが上記主タスクの子ノードと定義され、上記可変制御フローノードの別の子ノードは、任意選択のタスクに関連し、その子が上記任意選択の子ノードと定義され、上記主タスクの子ノードの上記状態から独立したコンディションが満たされたなら、上記可変制御フローノードは上記任意選択の子ノードを呼び出す、
項目5に記載の方法。
(項目7)
上記行動ツリーアーキテクチャは、各エッジに接続される1つの子ノードと共に、少なくとも3つの発信エッジに接続される異種制御フローノードを備え得、上記子ノードは、スタータ子ノードと少なくとも2つの非スタータ子ノードとを備え、上記異種制御フローノードは、上記スタータ子ノードから開始して連続してその子ノードを呼び出すように適応され、上記異種制御フローノードは、規則に従ってその子を呼び出し、非スタータ子ノードごとに、上記非スタータ子ノードを呼び出すための上記規則は、それぞれの上記非スタータ子ノードの直前に呼び出される上記子ノードの上記状態に依存し、この依存性は、少なくとも2つの非スタータ子ノードに対して異なる、
項目1から6のいずれか1つに記載の方法。
(項目8)
少なくとも1つの制御フローノードは、回復ノードとして実現され、その回復ノードは、1番目の子ノードと、少なくとも1つのさらなる子ノードとを備える複数の子ノードを有し、上記回復ノードは、上記1番目の子ノードを呼び出し、
上記1番目の子ノードが成功を返したなら、上記回復ノードは成功を返し、上記少なくとも1つのさらなる子ノードを呼び出さない、
上記1番目の子ノードが失敗を返したなら、上記回復ノードは上記少なくとも1つのさらなる子ノードを呼び出し、
上記少なくとも1つのさらなる子ノードのうち1つが成功を返したなら、上記回復ノードは上記1番目の子ノードを呼び出し、
上記少なくとも1つのさらなる子ノードの全てが失敗を返したなら、上記回復ノードは失敗を返し、上記方法は上記回復ノードを実行する段階を備える、
項目1から7のいずれか1つに記載の方法。
(項目9)
上記行動ツリーアーキテクチャは、オブジェクトを選択すること、上記オブジェクトをつまみ上げること及び上記オブジェクトを所望の位置に持ってくることに関連するサブツリーを備え得、上記方法はこのサブツリーを実行する、
項目1から8のいずれか1つに記載の方法。
(項目10)
上記ロボットは、移動ベース及びマニピュレータのうち少なくとも1つを含む、
項目1から9のいずれか1つに記載の方法。
(項目11)
上記ロボットは、自律駆動ロボットである、
項目1から10のいずれか1つに記載の方法。
(項目12)
少なくとも1つの上記制御フローノードと、少なくとも1つの上記実行ノードとに関連するコマンドは、コンピュータソースコードにおいて実行可能な機能として実施され、
上記ノードと上記ノードに接続する上記有向エッジとがツリー構造を定義し、
上記ツリー構造は、データファイルとして格納され、
上記方法は、実行可能な機能として実施される上記コマンドと、データファイルとして格納される上記ツリー構造と、ランタイム時の行動ツリーエグゼクティブへの実行コマンドとを送信する段階を備え、
上記行動ツリーエグゼクティブは、実行可能な機能として実施される上記コマンドに基づく制御プログラムを生成し、上記ツリー構造は、データファイル及びランタイム時の上記実行コマンドとして格納される、
項目1から11のいずれか1つに記載の方法。
(項目13)
上記ロボットは、センサーを含み得、上記方法は、上記センサーによって情報を感知する段階と、上記ロボットに上記情報に応答させる段階とを含む、
項目1から12のいずれか1つに記載の方法。
(項目14)
前述の項目のいずれかに記載の方法を実行するように適応されるデータ処理手段を備えるシステムであって、上記システムは好ましくは、ロボットを備える、システム。
(項目15)
プログラミング、監視、内観、及び/又はデバッギングのための行動ツリーアーキテクチャの使用であって、上記行動ツリーアーキテクチャは、項目1から13のいずれか1つに説明の特徴のいずれかを備える、使用。
図1
図2
図3