(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-02-04
(45)【発行日】2025-02-13
(54)【発明の名称】リアルタイムロボット制御フレームワーク
(51)【国際特許分類】
G06F 9/48 20060101AFI20250205BHJP
B25J 13/00 20060101ALI20250205BHJP
【FI】
G06F9/48 300F
B25J13/00 Z
(21)【出願番号】P 2023556921
(86)(22)【出願日】2022-04-29
(86)【国際出願番号】 US2022026893
(87)【国際公開番号】W WO2022232483
(87)【国際公開日】2022-11-03
【審査請求日】2023-11-14
(32)【優先日】2021-04-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】521430508
【氏名又は名称】イントリンジック イノベーション エルエルシー
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100126480
【氏名又は名称】佐藤 睦
(72)【発明者】
【氏名】ガシュラー,アンドレ
(72)【発明者】
【氏名】プリサメント,グレゴリー ジェイ.
(72)【発明者】
【氏名】カセロ,ショーン アレクサンダー
(72)【発明者】
【氏名】バーグ,ニルス
(72)【発明者】
【氏名】ベアーズワース,マイケル
(72)【発明者】
【氏名】コックス,ニコラス ジュリアン
(72)【発明者】
【氏名】ブレマー,ベンジャミン
【審査官】坂東 博司
(56)【参考文献】
【文献】特開平04-365138(JP,A)
【文献】特開2011-067943(JP,A)
【文献】米国特許出願公開第2011/0071676(US,A1)
【文献】特表2018-527680(JP,A)
【文献】米国特許出願公開第2018/0229367(US,A1)
【文献】米国特許出願公開第2009/0254217(US,A1)
【文献】特開2002-187082(JP,A)
【文献】米国特許出願公開第2003/0114959(US,A1)
【文献】米国特許出願公開第2022/0314434(US,A1)
【文献】米国特許出願公開第2009/0254214(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/48
B25J 13/00
(57)【特許請求の範囲】
【請求項1】
コンピュータ実装方法であって、
リアルタイムロボット制御フレームワークによって、カスタムリアルタイム制御関数の定義を受信することであって、前記定義は、複数のアクション及び1つ以上のカスタム反応を指定し、それぞれのカスタム反応は、前記複数のアクションにおける1つのアクションの実行から別のアクションの実行へのリアルタイム切り替えのための1つ以上の条件を含む、前記カスタムリアルタイム制御関数の定義を受信することと、
前記リアルタイムロボット制御フレームワークによって、1つ以上の物理ロボットを駆動するリアルタイムロボットシステムのそれぞれの所定のティックにおいて前記カスタムリアルタイム制御関数を繰り返し実行することであって、
1つ以上の状態変数の現在値を取得することと、
前記1つ以上の状態変数の前記現在値に従って、前記カスタムリアルタイム制御関数によって指定された前記1つ以上のカスタム反応を評価することと、
カスタム反応が満たされるたびに、満たされた前記カスタム反応に従って現在のアクションをリアルタイムで更新することと、
前記現在のアクションの次のティックを実行することと、を含む、前記カスタムリアルタイム制御関数を繰り返し実行することと、を含む、コンピュータ実装方法。
【請求項2】
前記カスタムリアルタイム制御関数を実行することは、前記1つ以上のロボットの動作環境内の1つ以上のセンサによって生成された1つ以上のセンサ値を取得することを含む、請求項1に記載の方法。
【請求項3】
前記カスタムリアルタイム制御関数を実行することは、
前記動作環境内のセンサから生成された1つ以上のセンサ値によって反応が満たされていることを判定することと、
前記判定することに応答して、第1のリアルタイムアクションと第2のリアルタイムアクションとの間のリアルタイム切り替えを実行することと、を含む、請求項
1に記載の方法。
【請求項4】
前記カスタム反応が満たされるたびに、前記更新された現在のアクションによって使用される新しいセンサ値を取得する、請求項2に記載の方法。
【請求項5】
1つ以上のカスタム反応は、リアルタイムでセンサ入力を使用する、請求項2に記載の方法。
【請求項6】
前記カスタムリアルタイム制御関数の前記定義は、カスタム反応によって関係付けられるアクションのリアルタイム状態機械を指定する、請求項
1に記載の方法。
【請求項7】
前記カスタムリアルタイム制御関数は、前記リアルタイムロボット制御フレームワークを実行又は提供するエンティティとは異なるエンティティによって提供される、請求項
1に記載の方法。
【請求項8】
前記カスタムリアルタイム制御関数によって指定された前記1つ以上のカスタム反応を評価することは、現在のアクションに関連付けられたカスタム反応のみを評価することを含む、請求項
1に記載の方法。
【請求項9】
前記カスタムリアルタイム制御関数は、決定論的タイミングで実行されるアクションのシーケンスを指定する、請求項
1に記載の方法。
【請求項10】
前記現在のアクションの前記次のティックを実行することは、非リアルタイム制御パラメータをリアルタイム制御パラメータに変換することを含む、請求項
1に記載の方法。
【請求項11】
前記リアルタイムロボット制御フレームワークは、制御層と通信するアプリケーション層を含み、カスタムリアルタイム制御関数の前記定義を受信することは、前記アプリケーション層において前記定義を受信することを含み、実行のために前記制御層に前記定義を送信することを更に含む、請求項
1に記載の方法。
【請求項12】
前記制御層によって、カスタムリアルタイム制御関数の新しい定義を受信することと、
前記新しい定義によって定義された第1のアクションに実行を切り替えることと、を更に含む、請求項11に記載の方法。
【請求項13】
1つ以上のコンピュータと、命令を記憶する1つ以上の記憶デバイスと、を備えるシステムであって、前記命令は、前記1つ以上のコンピュータによって実行されたときに、前記1つ以上のコンピュータに、請求項1~12のいずれか一項に記載の方法を実施させる、システム。
【請求項14】
命令を記憶する1つ以上の非一時的コンピュータ可読記憶媒体であって、前記命令は、1つ以上のコンピュータによって実行されたときに、前記1つ以上のコンピュータに、請求項1~12のいずれか一項に記載の方法を実施させる、1つ以上の非一時的コンピュータ可読記憶媒体。
【請求項15】
コンピュータ実装方法であって、
リアルタイムロボット制御フレームワークによって、リアルタイム制御サイクルのそれぞれの所定のティックにおいて位置を駆動するために制御層のリアルタイムスレッドによって実行されるカスタムリアルタイム制御コードを受信することであって、
前記カスタムリアルタイム制御コードは、
1つ以上の状態変数の現在値を取得するためのカスタム状態取得関数と、
前記1つ以上の状態変数の前記取得された値を使用して運動パラメータをリアルタイムで計算するカスタム制御関数と、を含む、関数を定義する、前記カスタムリアルタイム制御コードを受信することと、
前記リアルタイムロボット制御フレームワークによって、リアルタイムロボット制御サイクルのそれぞれの所定のティックにおいて前記カスタムリアルタイム制御コードを繰り返し実行することであって、
前記カスタム状態取得関数を実行して、前記1つ以上の状態変数の前記現在値を取得することと、
前記カスタム制御関数を実行して、1つ以上の更新された運動パラメータを計算することと、
前記カスタム制御関数を実行することによって計算される前記更新された運動パラメータに従って、前記リアルタイムロボットシステムを駆動することと、を含む、前記カスタムリアルタイム制御コードを繰り返し実行することと、を含む、コンピュータ実装方法。
【請求項16】
前記カスタム制御関数を実行することは、前記リアルタイムロボット制御サイクルの現在のティックにおいて更新されたセンサ値を使用することを含む、請求項15に記載の方法。
【請求項17】
前記リアルタイムロボット制御フレームワークは、カスタムリアルタイムロボット制御を実装するために、前記制御サイクル内のそれぞれのティックにおいて状態機械としてユーザ提供のソフトウェアモジュールを自動的に実行するように構成されている、請求項15~16のいずれか一項に記載の方法。
【請求項18】
前記リアルタイムロボット制御フレームワークは、リアルタイムロボット制御のための前記リアルタイム環境を準備するために、ユーザ提供の非リアルタイムソフトウェアモジュールを自動的に実行するように構成されている、請求項1
5に記載の方法。
【請求項19】
前記カスタムリアルタイム制御コードは、リアルタイムセンサデータを取得するためのカスタム感知関数を更に含み、
前記カスタムリアルタイム制御コードを実行することは、
更新されたセンサ値を取得するために前記カスタム感知関数を実行することを更に含み、
前記カスタム制御関数を実行することは、前記取得された更新されたセンサ値を使用することを含む、請求項1
5に記載の方法。
【請求項20】
前記リアルタイムロボット制御フレームワークによって、カスタムパラメータ準備関数を定義するカスタム非リアルタイム制御コードを受信することと、
前記カスタムリアルタイム制御コードを実行する前に、前記カスタム非リアルタイム制御コードを実行することと、を更に含む、請求項1
5に記載の方法。
【請求項21】
前記リアルタイムロボット制御フレームワークは、前記リアルタイムロボット制御サイクルの非リアルタイムスレッドにおいて前記非リアルタイム制御コードを実行し、リアルタイムスレッドにおいて前記カスタムリアルタイム制御コードを実行する、請求項19に記載の方法。
【請求項22】
1つ以上のコンピュータと、命令を記憶する1つ以上の記憶デバイスと、を備えるシステムであって、前記命令は、前記1つ以上のコンピュータによって実行されたときに、前記1つ以上のコンピュータに、請求項15~21のいずれか一項に記載の方法を実施させる、システム。
【請求項23】
命令を記憶する1つ以上の非一時的コンピュータ可読記憶媒体であって、前記命令は、1つ以上のコンピュータによって実行されたときに、前記1つ以上のコンピュータに、請求項15~21のいずれか一項に記載の方法を実施させる、1つ以上の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【0001】
本明細書は、ソフトウェア制御システムのフレームワークに関する。
【0002】
リアルタイムソフトウェア制御システムは、通常の動作を達成するために厳密なタイミング要件内で実行しなければならないソフトウェアシステムである。タイミング要件は、多くの場合、システムが障害状態に入ることを回避するために、ある動作が実行されなければならないこと、又は出力が特定の時間ウィンドウ内で生成されなければならないことを指定する。障害状態では、システムは、実行を停止するか、又は通常のオペレーションを中断する何らかの他の動作をする可能性がある。このようなリアルタイムソフトウェア制御システムは、高い精度及びタイミング要件を有する物理マシンを制御するために使用されることが多い。一例として、産業用ロボットのワークセルは、それぞれのロボットがある周波数、例えば、1、10、又は100kHzでコマンドを繰り返し受信することを必要とするリアルタイムソフトウェア制御システムによって制御され得る。ロボットの1つが、周期的時間ウィンドウの1つの間にコマンドを受信しない場合、そのロボットは、その動作を停止することによって、又は保守位置に戻るために回復手順を自動的に実行することによって、障害状態に入り得る。本明細書では、ワークセルは、ロボットが動作する物理的環境である。ワークセルは、ロボットがワークセル内でどのように移動することができるかについて制約を課す、特定の物理的特性、例えば、物理的寸法を有する。
【0003】
そのようなタイミング要件に起因して、物理マシンのためのソフトウェア制御システムは、多くの場合、高度に特殊化されたタスクのために特に構成された閉鎖的ソフトウェアモジュールによって実装される。例えば、プリント回路基板上に配置するために部品を取り上げるロボットは、低レベルの取り上げ及び配置アクションのそれぞれを制御する閉鎖的ソフトウェアシステムによって制御され得る。
【発明の概要】
【0004】
本明細書は、カスタムリアルタイム制御のための複数の新しい能力を達成するための統一プラットフォームを提供する、リアルタイムロボット制御フレームワークを説明する。一例として、本明細書で説明される技法は、ユーザが、1つ以上の物理ロボットのためのカスタムリアルタイム反応を定義することを可能にする。別の例として、本明細書に記載する技法は、カスタムリアルタイム反応が、ロボットのリアルタイム動作が継続している間にリアルタイムで検出された外部刺激に応答して、非リアルタイム関数、例えばアプリケーションレベル制御関数へのコールバックをトリガすることを可能にする。更に別の例として、本明細書で説明される技法は、ストリーミング入力のカスタムリアルタイム処理を可能にする。ストリーミング入力は、変化するレートで、又は非決定論的に、あるいはその両方で到達することができるリアルタイム入力である。加えて、いくつかのそのような例では、本明細書で説明する技法は、ユーザがカスタムリアルタイム制御コード、カスタムコールバックコード、カスタムストリーミング制御コード、又はそれらの組み合わせを定義することができるフレームワークを提供する。
【0005】
本明細書において、フレームワークは、ユーザが、リアルタイムロボットシステムの低レベル制御機能を実装しながら、高レベルプログラム定義を提供することを可能にするソフトウェアシステムである。本明細書では、動作環境は、複数のサブシステムを含み、そのそれぞれは、1つ以上のリアルタイムロボット、ロボットの動作をサポートするソフトウェア又はハードウェアモジュールを有する1つ以上のコンピューティングデバイス、又はその両方を含み得る。フレームワークは、ロボットアプリケーションシステムから制御パラメータを転送すること、カスタムアクションを計算する際に使用するためにリアルタイムロボット制御システムにセンサ測定値を提供すること、及びリアルタイムロボット制御システムからカスタムアクションのために計算されたハードウェア制御入力を受信すること、を含む、複数のシステム間のブリッジ、通信、又は調整のための機構を提供し、その間ずっと、リアルタイムロボット制御システムの厳しいタイミング制約、例えば、1ミリ秒程度を維持する。
【0006】
本明細書において説明される主題の特定の実施形態は、以下の利点のうちの1つ以上を実現するように実装することができる。
【0007】
いくつかの既存のロボットアプリケーションフレームワークは、デバイス及びソフトウェアモジュールのインターフェースを規定し、ユーザが、特定のユースケース、ましてリアルタイムのカスタムユースケースのためにインターフェースをカスタマイズすることを可能にしない。本出願で説明されるいくつかのシステムは、ユーザが、そのニーズに適合する1つ以上のロボットによるカスタムアクションの実行を容易にするカスタムソフトウェアモジュールを構成することを可能にし、ユーザはまた、リアルタイムロボット制御フレームワークの構成ソフトウェアモジュールのデータインターフェースを定式化することができる。次いで、いくつかのそのようなソフトウェアモジュールは、非同期プログラミング若しくはストリーミング入力又は両方を更にサポートしながら、カスタムアクションのリアルタイム制御を可能にする制御システム内に展開され得る。リアルタイム制御システムは、通常の動作を達成するために、厳密なタイミング要件内でアクションを実施することが要求されるソフトウェアシステムである。
【0008】
開示されるリアルタイムロボット制御フレームワークの設計の下で、カスタムソフトウェアモジュールは、ロボットが、ハードリアルタイムシステムにおいてさえも、リアルタイムセンサ情報及びカスタム制御論理の両方を組み込むことを可能にする。カスタムソフトウェアモジュールを使用することは、場合によっては、ロボットがより自然で流動的な方法で反応するための追加の能力を提供し得、これは、特定のタスクを完了するときに、より高精度の移動、より短いサイクル時間、及びより高い信頼性をもたらす。カスタムソフトウェアモジュールを使用することはまた、ハードウェア抽象化層を通して特定のロボットハードウェアとの容易な統合を促進し得る。
【0009】
本明細書の主題の1つ以上の実施形態の詳細は、添付の図面及び以下の説明に記載される。主題の他の特徴、態様、及び利点は、説明、図面、及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0010】
【
図2】カスタムリアルタイム反応を実行するための例示的なプロセスのフロー図である。
【
図3】カスタムリアルタイム反応によって関係付けられるアクションのリアルタイム状態機械の一例を示す。
【
図4】本明細書で説明されるフレームワークを使用してカスタムリアルタイム制御コードを実装するためにユーザが定義することができるモジュールを示す。
【
図5】コールバック関数を使用するカスタムリアルタイム反応を実行するための例示的なプロセスのフロー図である。
【
図6】コールバック関数を使用するカスタムリアルタイム反応のための実行トレースの例示的な図である。
【
図7】ストリーミング入力を使用するカスタムアクションを実行するための例示的なプロセスのフロー図である。
【
図8】ストリーミング入力を使用するカスタムリアルタイム反応のための実行トレースの例示的な図である。
【0011】
種々の図面における同様の参照番号及び名称は、同様の要素を示す。
【発明を実施するための形態】
【0012】
図1は、例示的なシステム100の図である。システム100は、動作環境170内の複数のロボット172a~nを駆動するリアルタイムロボット制御システム150を含む。システム100は、それぞれ、任意の適切な通信ネットワーク、例えば、イントラネット若しくはインターネット、又はネットワークの組み合わせを介して互いに結合された1つ以上の場所にある1つ以上のコンピュータ上にインストールされるコンピュータプログラムとして実装され得るいくつかの機能構成を含む。
【0013】
システム100は、本明細書に記載されるリアルタイムロボット制御フレームワークを実装し得るシステムの一実施例である。特に、システム100は、非同期プログラミング又はストリーミング入力あるいはその両方を同時にサポートしながら、ユーザが複数の異なるタイプのカスタムリアルタイム制御を達成することを可能にする統一フレームワークを提供し得る。本明細書において、ロボット制御システムは、通常の動作を達成するために厳密なタイミング要件内で実行することが要求されるリアルタイム手段として説明される。タイミング要件は、多くの場合、システムが障害状態に入ることを回避するために、ある動作が実行されなければならないこと、又は出力が特定の時間ウィンドウ内で生成されなければならないことを指定する。簡潔にするために、それぞれの時間ウィンドウは、ティック又は制御ティックと称され得る。障害状態では、その必要とされる計算又はアクションを完了することなくティックが経過した後、システムは、実行を停止するか、又は正常の動作を中断する何らかの他のアクションをとる、例えば、ロボットを開始姿勢又は障害姿勢に戻し得る。
【0014】
本明細書では、リアルタイム制御がカスタムであるということは、ユーザが、ワークセル内のロボットがリアルタイム制御サイクルのそれぞれのティックでどのようにアクションを起こす又は反応すべきかを指定できることを意味する。アクションとは、ロボットアーム上のツールを点Aから点Bに移動させるなど、予め計算されたモーションパラメータを有する運動を指す。反応は、リアルタイムで更新されるセンサデータを含み得る特定の指定された条件によるアクション間のリアルタイムの切り替えを指す。加えて、システム100は、ユーザが、予め計算されたモーションパラメータに従って低レベルコマンドを発行するのとは対照的に、リアルタイム制御サイクルのそれぞれのティックにおいて進行中にモーションパラメータを再計算するために実行されるカスタムリアルタイム制御コードを指定することを可能にする。
【0015】
システム100によって提供されるフレームワークの利点は、ユーザがそのようなカスタムリアルタイム制御情報を比較的少量のユーザコードで指定することを可能にすることができることであり、これは、いくつか例を挙げると、C++、Python、Lua、及びGoを含むオブジェクト指向プログラミング(OOP)言語などの高レベルプログラミング言語で表現され得る。高レベルのカスタムリアルタイム制御を提供するこの能力は、関節角度又は電流レベルに関連する低レベルコマンドのみを使用してロボット運動をプログラミングするよりもはるかに容易であり、より強力である。
【0016】
システム100のユーザは、カスタムリアルタイム制御コードをリアルタイムロボット制御システム150に提供することによって、カスタムリアルタイム制御の実行を開始することができる。例えば、ユーザは、ユーザデバイス190を使用して、カスタムリアルタイム制御コードをアプリケーション層122aに提供することができる。ユーザデバイス190は、例えば、リアルタイムロボット制御システム150と互換性のある統合開発環境(integrated development environment、IDE)を実行することができる。IDEは、リアルタイムロボット制御システム150における展開のために、ユーザがソフトウェアを書くこと、及び任意選択でソフトウェアをテストすることを容易にするツールを提供するソフトウェアスイートである。ユーザは、IDEのエディタにおいてカスタムソフトウェアアプリケーションを開発することができる。例えば、ユーザは、カスタムアクションを実施するために1つ以上のロボットのリアルタイム制御を容易にするために必要とされるコード、例えば、クラス、オブジェクト、又はメソッドインスタンスを書くことができる。システムはまた、制御スタック122に含まれるべき異なるソフトウェアモジュール又は単一のソフトウェアモジュールの異なるコンポーネントのためのコードを書くようにユーザに促し得る。例えば、ユーザインターフェースサブシステム190は、展開されると、制御スタック122内に含まれるそれぞれのソフトウェアモジュールを構成する、異なるクラス、オブジェクト、又はメソッドインスタンスのためのコードを書くようにユーザを促す又は誘導する、ユーザインターフェース提示を生成し得る。
【0017】
クラスは、データがどのように記憶されアクセスされるかを定義する、ファイルにカプセル化されたメソッド及びデータの組み合わせである。クラスは、実行コードのインスタンスが作成又はインスタンス化され得るテンプレートを形成し得る。オブジェクト又はコードオブジェクトは、解釈、コンパイル、又はその両方を行うことができるコードである。オブジェクトは、特定の目的のためにインスタンス化されたクラスの例であり得る。
【0018】
次いで、リアルタイムロボット制御システム150は、実行のためにカスタムリアルタイム制御コードを準備し得る。カスタムリアルタイム制御コードの異なる部分は、制御スタックの異なる層において、例えば、クライアント123a、非リアルタイムサーバ123b、リアルタイム制御層123c、又はこれらの何らかの組み合わせにおいて実行され得る。
【0019】
一般に、リアルタイムロボット制御システム150の制御スタックは、クライアント123aが、リアルタイムコードと非リアルタイムコードとの間の境界124を越えてコマンドを渡すことを処理する非リアルタイムサーバ123bにコマンドを提供するクライアント-サーバモデルに従う。非リアルタイムサーバ123bは、クライアント123aと共通のコンピュータ上で実行することも、又は異なるコンピュータ上で動作することもできる。上述したように、この構成は、非リアルタイムサーバ123bが、リアルタイム制御層123cにリアルタイムでアクションの実行を切り替えさせるカスタムリアルタイム反応を実装することを可能にする。したがって、リアルタイムサーバ123bは、どの制御サイクルでリアルタイム反応が生じるべきかを決定する役割を果たし得る。
【0020】
次いで、リアルタイムロボット制御システム150は、カスタムリアルタイム制御コードに従って、動作環境170内のロボット172a~nを制御するように構成される。動作環境170内のロボット170a~nを制御するために、リアルタイムロボット制御システム150は、動作環境170内の1つ以上のロボット、例えばロボット172a~nによって実行されるコマンド、例えばコマンド155a~nを提供する。コマンド155を計算するために、リアルタイムロボット制御システム150は、動作環境170内のデータを収集する1つ以上のセンサ171a~nによって行われた観測値175a~nを消費する。
図1に例解されるように、それぞれのセンサ171は、対応のロボット172に結合される。しかしながら、センサは、ロボットと1対1の対応を有する必要はなく、ロボットに結合される必要もない。実際、それぞれのロボットは、複数のセンサを有することができ、センサは、動作環境170内の静止表面又は移動可能表面上に装着され得る。いくつか例を挙げると、距離センサ、力センサ、トルクセンサ、カメラなどの任意の適切なセンサ171が使用され得る。
【0021】
リアルタイムロボット制御システム150は、リアルタイム制御コマンド155をロボット172a~nに提供することを処理する制御スタック122を介してコマンドを提供し得る。制御スタック122は、少なくとも部分的にハードウェア非依存であるソフトウェアスタックとして実装され得る。換言すると、いくつかの実装形態では、ソフトウェアスタックは、コマンドが具体的にロボットの特定のモデル又は特定のロボットコンポーネントに関することを必要とせずに、制御システム150によって生成されたコマンドを入力として受け入れることができる。
【0022】
制御スタック122は、複数のレベルを含み、それぞれのレベルは、1つ以上の対応するソフトウェアモジュールを有する。
図1において、最下位レベルはリアルタイムハードウェア抽象化層122cであり、最上位レベルはアプリケーション層122aである。ソフトウェアモジュール122a~cのうちのいくつかは、1つ以上の低レベルソフトウェアモジュールと、低レベルソフトウェアモジュールを使用してユーザによって生成されたデータインターフェースとからなる高レベルソフトウェアモジュールであり得る。すなわち、カスタム高レベルソフトウェアモジュールは、1つ以上の低レベルソフトウェアモジュールに依存し得る。
【0023】
制御スタック122は、最終的に、下位レベルアクションを実行するデバイスと、下位レベルステータスを報告するセンサと、を含むロボットコンポーネントを駆動する。例えば、ロボットは、モータ、エンコーダ、カメラ、ドライバ、グリッパ、特定用途向けセンサ、線形又は回転位置センサ、及び他の周辺デバイスを含む、様々な下位レベルコンポーネントを含むことができる。一実施例として、モータは、印加されるべきトルクの量を示すコマンド155を受信し得る。コマンドの受信に応答して、モータは、例えば、エンコーダを使用して、ロボットの関節の現在位置を指定するステータスメッセージを上位レベルのソフトウェアスタックに報告し得る。別の例として、制御スタック122は、ロボット172に物理的に結合されてもされなくてもよい動作環境170内の1つ以上のセンサによって生成された観測値を直接受信し得る。例えば、観測値は、腕に取り付けられたカメラ又は壁に取り付けられたカメラによって生成された画像データを含み得る。
【0024】
典型的には、コマンド及びステータスメッセージは、各制御サイクル中に周期的に生成され、例えば、制御サイクル当たり1つのステータスメッセージ及び1つのコマンドが生成される。ソフトウェアスタックの下位レベルは、概して、ソフトウェアスタックの上位レベルよりも厳しい時間要件を有する。例えば、ソフトウェアスタックの最下位レベルでは、制御サイクルは、実際のリアルタイム要件を有することができる。
【0025】
いくつかの実装形態では、アプリケーション層122aは、ロボットコンポーネントのための標的軌道情報を提供し得る。カスタムリアルタイム制御コードの場合、ターゲット軌道情報は、制御スタック122内の他のソフトウェアモジュールによって生成されるステータスメッセージ、リアルタイム観測値175、又はその両方に基づき得る。軌道情報は、少なくともロボットコンポーネントの軌道設定点(「目標状態」)と、任意選択で他のメタデータと、を含む。目標状態は、特定の期間における瞬間ごとに、ロボットコンポーネントの位置、速度、又は加速度のうちの1つ以上を含むことができる。アプリケーション層122aによって生成される軌道は、デカルト空間座標内にあっても又は関節空間座標内にあってもよい。
【0026】
軌道情報は、リアルタイム制御層123cによって消費され得、リアルタイム制御層123cは、軌道情報を使用して、例えば、ロボット関節などのロボットコンポーネントのリアルタイム位置、速度、又はトルクを含む連続リアルタイム制御信号を生成し、連続リアルタイム制御信号は、目標軌道に従うためにロボット172a~nのモータ及びアクチュエータをどのように駆動するかを決定する。次いで、連続リアルタイム制御信号は、ハードウェア抽象化層122cによって消費され得る。ハードウェア抽象化層122cは、例えば、リアルタイムコマンド155a~nを発行して、動作環境170内のロボット172a~nの関節などの可動コンポーネントの運動を駆動して目標軌道に追従させることによって、ロボット172a~nとインターフェースするソフトウェアモジュール、例えば、リアルタイムコントローラモジュールを含み得る。
【0027】
リアルタイムコントローラは、一般に、コントローラによって制御されるロボットが目標軌道に沿ってどのように駆動されるかを決定するパラメータを有する。したがって、ロボットシステムの挙動は、軌道情報だけでなく制御パラメータによっても決定される。異なるタスクは、異なる制御パラメータを必要とするか、又は異なる制御パラメータから利益を得る場合があり、それらの制御パラメータはまた、最良の性能のためにタスク中に変化する必要がある場合がある。本明細書では、制御パラメータは、軌道に従うためにリアルタイムコントローラがロボットコンポーネントをどのように移動させるかを指定する値である。
【0028】
タイミング制約の詳細及びタイミングウィンドウに関連する柔軟性は、一般に、実施されるタスクに合わせて調整され得るリアルタイムロボット制御システム150の構成可能な態様である。例示的なシステムでは、システム150のリアルタイム要件は、ハードウェア抽象化層122cが第1のレート(又は周波数)で、例えば、5、10、又は20ミリ秒ごとにコマンドを提供することを要求し、一方、システム150の非リアルタイム要件は、制御層122bが、第1のレートよりも多くの場合は低い第2のレートで、例えば、25、50、又は100ミリ秒ごとにハードウェア抽象化層122cにコマンドを提供すべきであることを指定する。加えて、レートは固定される必要はない。例えば、ハードウェア抽象化層122cは、固定レートでコマンドを提供し得るが、アプリケーション層122aは、変動レート又は散発的なレートでコマンドを提供し得る。
【0029】
制御スタック122内の上位レベルのソフトウェアモジュールによって生成された非リアルタイムコマンドと、制御スタック122内の下位レベルのソフトウェアモジュールによって生成されたリアルタイムコマンドとの間の境界を埋めるために、リアルタイムロボット制御システム150は、制御層122bを使用することができ、次いで制御層122bは、クライアント123aによって発行されたコマンドからのカスタムアクションのリアルタイム制御を集合的に容易にするリアルタイム制御層123c及び非リアルタイムサーバ123bの両方を含み得る。制御層122bは、それぞれの非リアルタイムコマンドを、低レベルリアルタイムコマンドを生成する役割を果たすリアルタイムコントローラによって消費され得るデータに変換する、制御スタック内のブリッジングモジュールとしての役割を果たす。そのような低レベルリアルタイムコマンドは、例えば、コマンドによって指定された運動を引き起こすためにそれぞれの時点でロボットモータ及びアクチュエータに印加される電流の実際のレベルに関係し得る。それぞれのカスタムリアルタイムアクションについて、制御層122b内のリアルタイム制御モジュールの構成ソフトウェアモジュールを含む、制御層122bの構成ソフトウェアモジュールのうちのいくつか又は全てが、ユーザによって開発され得る。いったん開発されると、構成ソフトウェアモジュールは、1つ以上のアプリケーションプログラミングインターフェース(application programming interface、API)の形態で提供されてもよく、ロボットのカスタムリアルタイム制御を促進するように、アプリケーションモジュール122b内のものと連携してもよい。
【0030】
第1のタイプのカスタムリアルタイム制御は、カスタムリアルタイムアクションである。ユーザは、1組の運動パラメータを指定することによってカスタムリアルタイムアクションを定義することができる。運動パラメータは事前に計算され得、これは、例えば、クラウドベースのモーションプランナによって計算されるように、アクションが定義される前に運動パラメータが生成され得ることを意味する。クライアントは、カスタムリアルタイムアクションの定義を非リアルタイムサーバ123bに提供し得、次いで、非リアルタイムサーバ123bは、リアルタイム実行のために全てのモーションパラメータ及び他の状態変数を初期化し得る。例えば、非リアルタイムサーバ123bは、メモリを予め割り当て、非リアルタイムデータフォーマットとリアルタイムデータフォーマットとの間のデータフォーマット変換を実施し得る。次いで、クライアントは、非リアルタイムサーバ123bに開始コマンドを提供し得、これにより、カスタムリアルタイムアクションの実行を開始する。
【0031】
カスタムリアルタイム制御の第2のタイプは、カスタムリアルタイム反応である。カスタムリアルタイム反応は、1つ以上の条件に従って2つのリアルタイムアクション間のリアルタイム遷移を定義する。一例として、2つの運動アクションは、第1のアクションを、第1のアクションの終了を表す反応条件に関連付けることによって、互いに連鎖させることができる。条件が満たされると、リアルタイム制御層は、自動的に、かつリアルタイムで第2のアクションの実行に切り替わる。言い換えれば、リアルタイム制御層は、第2のアクションの実行を開始するために、より高いレベルのコントローラからの確認又は命令を待つ必要がない。これらの機構はまた、ユーザがアクションの強力で複雑なステートマシンを簡単に定義することを可能にし、その遷移はリアルタイムで実行される。
【0032】
本明細書で説明されるフレームワークの別の強力な特徴は、カスタムリアルタイム制御の機構へのリアルタイムセンサデータの統合である。これを行う1つの方法は、カスタムリアルタイム反応に関連付けられた条件をセンサデータに依存させることである。例えば、ユーザは、アームが表面と接触するときにロボットアームのアドミタンス制御を変更するカスタムリアルタイム反応を定義することができる。そうするために、ユーザは、力センサによって測定された力が特定の閾値を超えるときに、リアルタイム制御層が自動的に、かつリアルタイムで実行を異なるアクションに切り替えることができるように、力センサに基づいて条件を定義することができる。
【0033】
別のタイプのカスタム制御は、カスタムリアルタイム制御コードである。カスタムアクション及びカスタム反応を定義するコードとは異なり、カスタムリアルタイム制御コードは、一般に、動作環境においてロボットを駆動するためのモーションパラメータを計算するために、リアルタイム制御層自体によって実行される。この構成は、リアルタイムセンサデータをカスタムリアルタイム制御に統合するための別の機構を提供する。例えば、ユーザは、溶接又は接着タスクを実行するときに、表面上の特定の距離、例えば0.5mmを維持するようにカスタムリアルタイム制御コードを定義することができる。表面からのツールの実際の現在距離と、距離を調整するためのモーションパラメータとの両方は、ユーザのカスタムリアルタイム制御コードに従ってリアルタイムで計算され得る。
【0034】
本明細書で説明されるフレームワークの別の強力な特徴は、カスタムリアルタイム制御の機構への非同期プログラミングの統合である。これにより、ユーザは、例えば、ロボット172a~nの動作中にリアルタイムで検出されるイベントに反応するように、アプリケーション層122aで1つ以上の簡潔なコールバック関数を定義する、例えば、C++、Python、Lua、又はGoなどの比較的少量のコードを書くことができる。
【0035】
同期プログラミングは簡単である。関数への呼び出しが行われると、呼び出しスレッドはブロックされ、関数が完了するまで待機してからブロック解除される。対照的に、非同期プログラミングでは、関数への非同期呼び出しを開始する呼び出しスレッドは、ブロックされず、他の処理を実行することができ、それによって、計算が実行されている間に、進行中の作業が継続すること、又は他の追加の作業が実施されることを可能にする。実行が完了すると、呼び出しスレッドは、コールバックによって結果を通知され得る。
【0036】
コールバック関数は、引数として別の関数に渡される実行可能コードへのポインタである。コールバック関数は、システム150によって実行されたときにイベントを処理するコードであり得る。したがって、コールバック関数は、イベントが発生したことをクライアント123aに通知するために使用され得る。一般的な意味において、イベントは、状況が発生したときに送信されるメッセージ又は信号である。例えば、そのようなイベントは、ロボット172a~nの構成の変化、又は動作環境170のレイアウトの変化を含み得、これらは、センサ171a~nを使用することによって観察され得る。
【0037】
より具体的には、フレームワークは、いくつかの機能を実行し、結果をカスタムリアルタイム反応に返すアプリケーション層レベル制御関数を呼び出すために、リアルタイムスレッドで動作している制御層122bにおけるカスタムリアルタイム反応を可能にし得る。更に、フレームワーク内で非同期動作を実装することによって、制御層122bは、同期的動作で行われるようにリアルタイムロボット制御の実行を継続する前に応答を待機せず、阻止もしない。むしろ、ロボット動作を制御するリアルタイムスレッドは継続し、アプリケーション層レベル制御関数からの結果をいつでも受け入れることができる。その結果、フレームワークは、ロボット172a~nのカスタムリアルタイム制御を確実にしながら、動作環境の異なるコンポーネントを制御すること、又は異なるシステムとインターフェースすることを伴う時間集約的タスクを含む追加のタスクをサポートする能力をリアルタイムロボット制御システム150に提供する。
【0038】
本明細書で説明されるフレームワークの更なる強力な特徴は、カスタムリアルタイム制御の機構へのストリーミング入力の統合である。言い換えれば、フレームワークは、ストリーミング入力のカスタムリアルタイム処理を容易にする。ストリーミング入力は、変化するレートで、又は非決定論的に、例えば、不完全な情報を伴って、あるいはその両方で到着し得る制御層への入力である。例えば、クライアント123aは、機械学習制御アルゴリズムなどのいくつかの計算コストの高い制御機能を実行するとき、ストリーミング制御コマンドを生成して制御層122bに提供し得る。
【0039】
ストリーミング入力間のギャップを処理するために、リアルタイムロボット制御システム150は、非リアルタイムサーバ123bにおいてリアルタイムストリーミング制御関数を実行し得る。例えば、リアルタイムストリーミング制御関数は、例えば、ロボットの位置、速度、加速度、関節角度、又はそれらの組み合わせに関して、ロボットの目標状態を指定する、補間又は外挿された制御パラメータ情報を生成する、いくつかのデータ補間又は外挿論理を実装し得る。それぞれの補間又は外挿された制御パラメータは、ロボットが想定し得る可能な値の定義された範囲を有し得る。例えば、リアルタイムストリーミング制御関数は、期間中のそれぞれの時点において、又は一連の計算された制御パラメータ値として、制御パラメータ値を生成し得る。補間された制御パラメータは、システムのリアルタイム保証を達成するために、例えば、クライアント123aによって生成された軌道に沿ってロボット172a~nを駆動するために、ハードウェア抽象化層122cによって使用される。これは、ロボット172a~nを制御する際に使用するためのリアルタイムロボット制御システム150において計算コストが高い何らかの高レベル制御関数を実行することを実現可能にする。これはまた、制御パラメータが典型的にはロボット設備のセットアップ時に一度設定され、その後再び変更されることがない従来のロボット制御システムとは非常に異なる。
【0040】
フレームワークは、同様に、ユーザが、カスタムリアルタイムストリーミング制御関数を定義するコードを書いて提供することを可能にし、それによって、ストリーミング入力間のギャップを処理する方法を明示的に定義する。代替的又は追加的に、フレームワークは、ユーザが、例えば、目標状態を計算するためのユーザ選択補間関数として、そのようなギャップを処理するためにフレームワークによって提供される予め定義されたリアルタイムストリーミング制御関数のライブラリから選択することを可能にする。
【0041】
図2は、カスタムリアルタイム反応を実行するための例示的なプロセスのフロー図である。このプロセスは、1つ以上のコンピュータにインストールされ、本明細書に従ってプログラムされた1つ以上のコンピュータプログラムによって実装され得る。例えば、このプロセスは、
図1に示すリアルタイムロボット制御システム150によって実施され得る。便宜上、このプロセスは、1つ以上のコンピュータのシステムによって実行されるものとして説明される。
【0042】
上述したように、システムは、1つ以上のロボットを制御するために所定のシーケンスで繰り返し実行され得る複数のソフトウェアモジュールのスタックから構成されるリアルタイムロボット制御フレームワークを実行する。そのようなソフトウェアモジュールのうちの1つは、それぞれの非リアルタイムコマンドを、カスタムアクションを実行するように1つ以上のロボットを制御するための低レベルリアルタイムコマンドを生成する役割を果たすリアルタイムコントローラによって消費され得るデータに変換する、制御スタック内のブリッジングモジュールである。
【0043】
システムは、カスタムリアルタイム制御関数の定義を受信する(210)。カスタムリアルタイム制御関数は、決定論的タイミングで実行されるべきアクションのシーケンスと、アクションのシーケンスを連鎖させる1つ以上のカスタム反応と、を指定する。アクションのシーケンスを連鎖させるために、それぞれのカスタム反応は、複数のアクションにおける一対のアクション間のリアルタイム切り替え、すなわち、ロボットの第1のアクションの完了と第2のアクションの開始との間のリアルタイム切り替えのための1つ以上の条件を含み得る。また、反応自体はユーザ定義のカスタム反応とすることができる。
【0044】
カスタムリアルタイム制御関数は、リアルタイムロボット制御フレームワークを実行する又は提供するエンティティとは異なるエンティティによって提供され得る。例えば、リアルタイムロボット制御フレームワークは、ロボットの製造業者によって、又はロボット設備のセットアップを担当するエンティティによって、又はロボット設備を所有及び操作するエンティティによって事前に構成され得る。換言すれば、リアルタイムロボット制御フレームワークは、ユーザが、ロボット製造業者又は設備を最初にセットアップするエンティティに依存することなく、ロボット設備のユーザ自身のリアルタイム制御を容易に供給することを可能にする。
【0045】
カスタムリアルタイム制御関数は、いくつかの異なる時間に提供され得る。場合によっては、コードがリアルタイム制御層のソフトウェアにコンパイルされるように、コンパイル時にカスタムリアルタイム制御関数が提供され得る。代替的に又は追加的に、カスタムリアルタイム制御関数は、リアルタイム制御層において、例えばプラグインとして、実行時に動的に提供され得、システムのユーザは、カスタムリアルタイム制御関数のカスタム構成を供給することによって定義を提供し得る。
【0046】
場合によっては、1つ以上のロボットを制御するシステムのユーザは、ロボットのためのカスタムアクション及びカスタム反応を定義することによって、リアルタイム状態機械を設計することができ、カスタムリアルタイム制御関数の定義は、カスタム反応によって関係付けられるアクションのリアルタイム状態機械の形態で、ユーザによって提供され得る。
【0047】
本明細書において、リアルタイム状態機械は、ロボットによって実行される動作遷移の表現である。リアルタイム状態機械は、ノード及びエッジを含み、それぞれのノードは、ロボットのリアルタイム状態又はロボットが実行し得る1組のアクションを表し、第1のノードと第2のノードとの間のそれぞれのエッジは、1つ以上の「切り替え条件」を表し、切り替え条件が満たされると、ロボットを第1のノードによって表されるアクションの実行から第2のノードによって表されるアクションの実行に遷移させる。したがって、システムがリアルタイム状態機械の特定のノード内にあるとき、システムは、リアルタイムコマンドを送信して、特定のノードによって表されるアクションを実行するようにロボットを駆動する一方で、ノードのスイッチング状態を連続的に監視する。切り替え条件のうちの1つが満たされるたびに、システムは、異なるリアルタイムコマンドを送信して、ロボットをリアルタイム状態機械の異なるノードによって表される状態にさせることによって、リアルタイム状態機械の異なるノードに遷移し得る。
【0048】
表1は、カスタムリアルタイムアクションを定義し開始するために書かれたユーザコードの例を含む。
【0049】
【0050】
例示的なユーザコードは、事前に計算された1組の運動パラメータを使用して、リアルタイムロボット制御システムのクライアントによって実行され得る。
【0051】
1行目で、クライアントは非リアルタイムサーバとのセッションを開始する。
【0052】
2行目で、アクションが定義される。アクションの定義は、ID(3行目)、タイプ(4行目)、及び運動パラメータ(5行目)を含む。6行目は、このアクションに関連付けられた反応がないことを示し、したがって、実行されると、システムは、それを1回限りのリアルタイムアクションとして単純に実行し、その後、実行を終了する。
【0053】
7行目で、クライアントは、アクションIDを参照するコマンドを非リアルタイムサーバに送信することによって、リアルタイムアクションを開始する。次いで、システムの制御層は、リアルタイム環境を初期化し、それに応じてアクションを実行する。
【0054】
表2は、カスタムリアルタイム反応を定義するためのユーザコードの例を含む。
【0055】
【0056】
2行目及び13行目で、2つのアクションがそれぞれ定義される。しかしながら、表1の例とは異なり、それぞれのアクションは関連する反応を有する。
【0057】
7~10行目に示すように、第1のアクションは、条件及び応答を指定する反応を有する。この場合、条件は、単に、アクションが完了したことを示す制御信号に従ってアクションが行われたか否かである。
【0058】
アクションを互いに連鎖させるために、関連する応答は、10行目に示すように、1のaction_idを有する第2のアクションを開始することである。
【0059】
他のアクションであるaction1も、18~21行目で定義された同様の関連する反応を有する。しかしながら、応答は、単に、アクションのシーケンスが完了したという信号を生成することである。
【0060】
31行目で、クライアントアプリケーションは、この信号を使用して、シーケンスが完了するまで待機し得る。
【0061】
表3は、リアルタイムセンサフィードバックを統合する状態機械を定義するためのユーザコードの例を含む。この例は、距離センサ(「距離計」センサ)の読み取り値に基づいて、ロボットエンドエフェクタを30秒間繰り返し上下に移動させる。「上へ移動」及び「下へ移動」の2つの状態は、アクション、action0及びaction1としてそれぞれ表される。
【0062】
【0063】
この例では、反応に関連付けられた条件は、リアルタイムセンサ入力を使用し、このリアルタイムセンサ入力は、このクライアント側コードでは、名前「rangefinder_distance」を有する変数によって参照される。リアルタイムロボット制御システムがカスタムリアルタイム制御コードの実行を準備するとき、システムは、距離計センサの結果がリアルタイムで自動的に更新される対応するメモリロケーションを用いて変数名のインスタンスを自動的に更新し得る。
【0064】
この場合、状態機械の第1の状態は、エンドエフェクタが下方に移動しているアクション1によって表される。リアルタイム制御サイクルのティックごとに、システムは、現在実行中のアクションに関連付けられた任意の条件をチェックし得る。反応条件のいずれも満たされない場合、アクションは継続し、その場合、それぞれのティックにおいて、システムは、2行目及び8行目の関数VelocityMoveWithRangefinderFixedParams()によって生成される運動パラメータに従ってエンドエフェクタを移動させる。この場合、両方のアクションは同じ位置モーションパラメータを有するが、異なる目標速度を有する。
【0065】
実行中、システムは、上記に示された例示的なコードスニペットに対応するソフトウェアアプリケーションを実行して、カスタムリアルタイムアクションを実施するようにロボットを制御することに関連付けられた制御パラメータをリアルタイムで計算し得る。次いで、システムは、計算された制御パラメータを、リアルタイムで実行されるようにシステム内の他の関連モジュール(例えば、サーバで動作するリアルタイムソフトウェア制御モジュール)に送信し得る。
【0066】
図3は、カスタムリアルタイム反応によって関係付けられるアクションのリアルタイム状態機械の一例を示す。
図3において、ロボットは、動作環境において、例えばワークセルにおいて、対象物に接着剤を塗布するための接着タスクを実行するように割り当てられている。
【0067】
図3に示される例示的なリアルタイム状態機械300は、ロボットによる関節運動アクション310から始まる。関節運動アクション310を実行している間、システムは、関節運動アクション310に対する反応に関連付けられた条件が満たされているかどうかを評価する。それぞれのアクションは、それぞれが1つ以上の条件を有する複数の反応に関連付けられ得る。したがって、それぞれの制御ティックにおいて、システムは、現在実行中のアクションに対する全ての反応に関連付けられた条件を評価し得る。レイテンシを改善するため、いくつかの実装形態では、システムは、実行していない他のアクションの反応のための条件が満たされたかどうかを考慮する必要がない。言い換えれば、システムは、現在実行中の動作に関連付けられた反応の条件のみを考慮することができる。
【0068】
上述したように、条件を評価することは、リアルタイムセンサデータを消費し得る。したがって、共通のパターンは、システムが、関節運動アクション中に、ロボットが特定の位置又は姿勢を達成したかどうかを判定することである。この場合、システムは、例えば、ロボットが接着を開始すべき地点に到達したかどうかを判定するための条件を使用し得る。
【0069】
反応の条件が満たされた場合、システムは、ユーザのカスタムリアルタイム反応コードで定義された状態機械に従ってリアルタイムで次のものに遷移する。したがって、システムは、接着剤塗布アクション320にリアルタイムで遷移し得る。重要なことに、システムは、高レベル計画を評価する必要がなく、次のアクションの計算に時間を費やす必要もない。アクション間の全てのリアルタイム遷移は、ユーザのカスタムリアルタイム反応コードによって明示的に指定され、これにより、アクション間の信頼性の高いリアルタイム切り替えが可能になる。
【0070】
反応の条件が満たされない場合、システムは、現在のアクションの次の制御ティックを実施する。したがって、アクション及び反応が状態機械を定義するために使用されるとき、反応に関連付けられた条件が満たされないときはいつでも、暗黙のループバック遷移(破線で示される)が存在する。
【0071】
この例では、反応が満たされているかどうかを判定するための条件は、ロボットが接着のための位置に入ったかどうか、対象物を固定して接着するためにクランプが対象物上で閉じているかどうか、又はその両方を判定することを含み得る。
【0072】
反応が満たされると、システムは、現在のアクションを接着アクション320に更新し、それに応じて、対象物上に接着剤を塗布するアクションを実施するようにロボットを制御し得る。しかしながら、接着アクション320は、ロボットが接着のための位置に入るまで、クランプが閉じられるまで、又はその両方まで起こり得ない。
【0073】
接着剤塗布アクション320から、リアルタイム状態機械300は、2つの反応を有し得、第1の反応は、接着剤塗布アクション320の実施を終了し、関節運動アクション340に遷移することであり、第2の反応は、接着剤塗布アクション520の実施を終了し、停止アクション340に遷移することである。例えば、第1の反応が満たされたかどうかを判定するための条件は、接着剤塗布アクション320が所定の期間にわたって実施されたかどうか、クランプが開いているかどうか、又はその両方を判定することを含み得る。また、第2の反応が満たされているかどうかを判定するための条件は、接着剤塗布アクション320中に人間がロボットに近接していることが検出されたかどうかを判定することを含み得る。次いで、反応が満たされると、システムは、対象物から離れて移動を開始するための関節運動アクション330、又は停止アクション340、すなわち、進行中の接着剤塗布アクション320を「フリーズ」することのいずれかに遷移し得る。
【0074】
図2に戻って参照すると、システムは、1つ以上の物理的ロボットを駆動するリアルタイムロボット制御システムのそれぞれの所定の制御ティックにおいてカスタムリアルタイム制御関数を繰り返し実行する。例えば、システムは、事前に決定された制御スケジュールに従って、例えば、リアルタイム制御関数の実行の開始に続いて、システムのそれぞれの制御ティックにおいてカスタムリアルタイム制御関数を繰り返し実行し得る。簡単に言えば、これは、1つ以上の状態変数の現在値を取得すること(220)、1つ以上の状態変数の現在値に従ってカスタムリアルタイム制御関数によって指定された1つ以上のカスタム反応を評価すること(230)、及びカスタム反応が満たされるたびに、満たされたカスタム反応に従って現在のアクションをリアルタイムで更新すること(240)、及び現在のアクションの次のティックを実行すること(250)を伴う。
【0075】
カスタムリアルタイム制御関数のカスタム定義で指定されるカスタム反応の一部又は全部は、センサ入力をリアルタイムで使用することができる。したがって、カスタムリアルタイム制御関数の実行中に、システムは、1つ以上のロボットの動作環境内の1つ以上のセンサによって生成された1つ以上のセンサ値を繰り返し取得する。例えば、センサは、距離センサ、力センサ、トルクセンサ、又は動作環境内で観察を行うカメラを含み得る。
【0076】
システムは、カスタム反応が動作環境内のセンサから生成された1つ以上のセンサ値によって満たされるかどうかを判定し得る。肯定的な判定に応答して、システムは、その後、第1のリアルタイムアクションと第2のリアルタイムアクションとの間のリアルタイム切り替えを実行する。いくつかの実装形態では、カスタム反応が満たされるたびに、システムはまた、更新された現在のアクションによって使用されるべき新しいセンサ値を取得する。
【0077】
システムは、現在のアクションを実行しながら、1つ以上の状態変数の現在値を取得する(220)。状態変数は、一般に、センサ値又はセンサ値から導出された情報、又はその両方を含み得る。
【0078】
図3の例では、システムが関節運動アクション310にあるとき、接着剤塗布アクション320に遷移する反応が満たされているかどうかを判定するために、システムは、距離センサによって生成された距離読取値又はカメラによって生成されたカメラ画像を含むセンサ値を取得し、次いで、センサ値を使用して、ロボットが接着のための位置に入ったかどうか、対象物を固定して接着するためにクランプが対象物上で閉じているかどうか、又はその両方を判定し得る。
【0079】
システムは、1つ以上の状態変数の現在値に従って、カスタムリアルタイム制御関数によって指定された1つ以上のカスタム反応を評価する(230)。
【0080】
いくつかの実装形態では、カスタム反応が満たされているかどうかを判定するために、システムは、カスタムリアルタイム制御関数によって指定されたカスタム反応の全てを評価し得る。他の実装形態では、システムは、現在のアクションに関連付けられたカスタム反応のみを評価し得る。
図3の例では、システムが関節運動アクション310にあるとき、関節運動アクション330又は停止アクション340に遷移するための他の反応ではなく、接着剤塗布アクション320に遷移するための反応のみが、システムによって評価され得る。
【0081】
カスタム反応が満たされるたびに、システムは、満たされたカスタム反応に従って、リアルタイムで、すなわち、現在の制御ティック内で現在のアクションを更新する(240)。任意選択で、システムはまた、更新された現在のアクションによって使用されるべき新しいセンサ値を取得する。
図3において、例えば、接着剤塗布アクション320と関節運動アクション330との間のリアルタイム切り替えのための条件は、所定の厚さの接着剤が対象物上に塗布されていることであってもよく、接着剤の厚さに関する状態変数の現在値に従って反応を評価することによる肯定的な判定に応答して、システムは、接着剤塗布アクション320の実施を停止し、関節運動アクション330に遷移して対象物から離れ始めることができる。
【0082】
代替として、カスタム反応が満たされない場合、システムは、現在のアクションの次の制御ティックを実行し続ける(250)。すなわち、プロセス200は、システムが1つ以上の状態変数の新しい値を取得するステップ220に戻る。
【0083】
図4は、本明細書で説明されるフレームワークを使用してカスタムリアルタイム制御コードを実装するためにユーザが定義することができるモジュールを示す。上記の例では、基礎となる制御システムによって公開される事前計算されたモーションパラメータ及びセンサデータを有するアクションのためのカスタムリアルタイム反応をユーザがどのように定義できるかを説明した。
【0084】
しかしながら、上述したように、本明細書に記載されるフレームワークは、ユーザが、モーションパラメータを進行中に計算するためにサーバにおいてリアルタイムで実行されるカスタムリアルタイム制御コードを定義することも可能にし得る。モーションパラメータがリアルタイムでどのように計算されるかを正確に定義する能力をユーザに与えることに加えて、フレームワークはまた、センサデータ値がどのように取得され、解釈され、使用されるかについてのユーザ制御を提供する。
【0085】
高レベルでは、モジュールは、異なるドメインで実行される2つのサブグラフに概念的に編成される。第1のサブグラフ410は、制御層の非リアルタイムスレッドによる、例えば、非リアルタイムサーバ123bによる実行の順序を表す。本質的に、第1のサブグラフ410は、フレームワークが、カスタム制御コードをリアルタイムで実行するために実行環境をどのように準備するかを示す。これらのモジュールにおいて定義される機能は、リアルタイムセーフである必要はないが、いくつかの実装形態は、それらがスレッドセーフであることを必要とする。
【0086】
第2のサブグラフ420は、リアルタイム制御サイクルのそれぞれの制御ティックでのモジュールの実行順序を表す。したがって、フレームワークは、カスタムリアルタイム制御を実装するために、制御サイクル内のそれぞれのティックにおいてこの順序で、これらのユーザ提供モジュールを状態機械として自動的に実行する。第2のサブグラフ420は、一般に複数のティックにわたって実行される上述のリアルタイム反応状態機械とは異なり、それぞれの制御サイクルで感知から制御までリアルタイムで完全に実行され得る。
【0087】
図4に示すように、第2のサブグラフ420のモジュールは、1つ以上のリアルタイムスレッドで実行され、したがって、リアルタイムセーフでなければならない。これらは、任意選択でスレッドセーフでなくてもよい。特に、システムは、コンパイル時チェックを実施して、関数が、メモリの割り当て又はネットワーク通信の実施などの非決定論的タイミングで動作を試みないことを確実にし得る。
図4に示される例示的なモジュールは、任意の適切なプログラミング言語、例えば、ほんの数例を挙げると、C++、Python、Lua、又はGoで書くことができる。
【0088】
より詳細には、第1のサブグラフ410は、静的「Create」関数412と、リアルタイムアクションオブジェクトのためのコンストラクタ414と、「PrepareParameters」関数416との間の非リアルタイム関数呼び出しを含む。
【0089】
コンストラクタ414は、システムによって実行されたときにリアルタイムアクションオブジェクトのインスタンスを作成するプログラム又はクラスとすることができる。コンストラクタ414によって作成されるリアルタイムアクションオブジェクトは、オブジェクト指向プログラミング(OOP)によって定義されるようなオブジェクトの概念に準拠するが、一般に、そのアクション及びデータを他のオブジェクトから継承してもしなくてもよく、又はそのアクション及びデータが他のオブジェクトによって継承されることを可能にしてもしなくてもよい、アクション及びデータのカプセル化表現である。コンストラクタ414の概念は、Create関数412を含む。
【0090】
フレームワークは、特定のタイプの入力、特定のタイプの出力、特定の制御法則、又はそれらの組み合わせを使用するリアルタイムロボット挙動ごとにロボット動作クラスを定義し得る。それぞれのリアルタイムオブジェクトは、1つ以上の可動コンポーネント、例えばロボットの1つ以上の関節の具体的なセットを制御する役割を果たし得る。1つのリアルタイムオブジェクトは、そのアクションパートグループの組み合わせに対する全てのアクションインスタンスを実行し得る。リアルタイムアクションオブジェクトは、それらの可動コンポーネントの構成に基づいて、例えば自由度(DoF)の数に従って初期化され得る。
【0091】
プロセスを開始するために、システムは、静的Create関数412を呼び出して、リアルタイムアクションオブジェクトを作成し得る。このプロセス中に、Create関数412は、ハードウェアインターフェース、又は制御スタックの上位層へのインターフェースを発見し得る。例えば、Create関数412は、リアルタイムアクションオブジェクトのための特徴インターフェースを取得して、関節位置を読み取るか若しくは制御し、逆運動学を計算し、又は特定の展開のための関節速度限界を読み取り得る。
【0092】
次いで、システムは、リアルタイムオブジェクトをインスタンス化するためにリアルタイムアクションクラスのコンストラクタ414を呼び出し、リアルタイム実行のための制御パラメータを準備するためにPrepareParameters416を呼び出し得る。これらの関数は、非リアルタイムスレッドから呼び出され得るため、メモリを動的に割り当て、任意の長さのアルゴリズムを実行し得る。より詳細には、「PrepareParameters」関数416を利用して、汎用制御パラメータをアンパックし、リアルタイムセーフパラメータに変換し、パラメータが限界内にあるかどうかを検証するために広範なチェックを行い、必要な場合には、逆運動学的解を準備し得る。特に、リアルタイムアクションの実行中に、システムは、任意の非リアルタイム制御パラメータをリアルタイム制御パラメータに変換するために「PrepareParameters」関数を使用し得る。例えば、非リアルタイム制御パラメータは、ロボットコンポーネントのための異なる軌道設定点を含み得る一方、リアルタイム制御パラメータは、コマンドによって指定された運動を引き起こすために、それぞれの時点においてロボットモータ及びアクチュエータに印加される電流の実際のレベルに関係し得る。
【0093】
リアルタイム実行中、システムは、サブグラフ420に示される順序でモジュールを自動的に実行し、サブグラフ420は、4つのリアルタイム関数、すなわち、「Sense」関数422、「GetStateVariable」関数424、「SetParameters」関数426、及び「Control」関数428の間の関数呼出しを含む。
【0094】
サブグラフ420において、システムは、まず、「Sense」関数422を利用して、更新されたセンサ値、例えば、ロボットの可動コンポーネントの状態及び位置を読み取り得る。次いで、システムは、「GetStateVariable」関数424を利用して、更新された状態変数を取り出し得る。状態変数は、その選択がユーザ指定であってもよく、センサ値若しくはセンサ値から導出された情報、又はその両方を含み得る。例えば、状態変数は、関節などのロボットコンポーネントのトルク読み取り値、速度、位置、又は向きを含み得る。別の例として、1つの状態変数は、現在のアクションの完了に向かうロボットの進行、例えば、目標位置までの距離を特徴付けることができる。状態変数はそれぞれ、1つ以上の数値に関連付けられ得る。場合によっては、「Sense」関数及び「GetStateVariable」関数はそれぞれ、制御ティックごとに1回呼び出される。他の場合には、これらの関数は、同じ制御サイクルにおけるアクション切り替えを容易にするために、各制御ティック中に複数回呼び出される。
【0095】
システムは、「SetParameters」関数426を利用して、リアルタイムセーフである制御パラメータの値に変更を適用し得る。システムは、「Control」関数を利用して、カスタム制御法則を実行し、可動コンポーネントに新しい制御点を設定し得る。「SetParameters」関数及び「Control」関数は、典型的には、制御ティックごとに1回呼び出される。
【0096】
サブグラフ410内の「コンストラクタ」及び「PrepareParameters」関数が、非リアルタイムスレッドから呼び出され、したがって、動的に割り当てられ、より長いアルゴリズムを実行する可能性があるのとは異なり、サブグラフ420内のこれらの関数は、リアルタイムスレッドから呼び出され、例えば、割り当て及び非決定論的時間計算を回避することによって、リアルタイムセーフで実装されなければならない。計算時間に関して、「Control」関数は、制御ティックの期間内に完了しなければならず、「Sense」関数及び「GetStateVariable」関数を含む他のリアルタイム関数は、制御ティックごとに複数回呼び出される可能性があるので、実質的により高速に実行する必要がある場合がある。
【0097】
表4は、カスタムリアルタイム制御を実装するために
図4に示されるモジュールを定義するユーザコードの例を含む。この単純な例では、ユーザコードは、事前計算されるのとは対照的に、カスタムコードに従ってリアルタイムで計算される運動パラメータに関節を従わせる。結果として生じる計算は、フレームワークに入力され、フレームワークによって実行されると、ロボット関節をロボットの第4の関節による正弦波に従わせ、したがって、リアルタイムアクションクラスは「SineWaveAction」と名付けられる。
【0098】
【0099】
図4の例示的な図を再び参照すると、「SineWaveAction」コンストラクタ、「SineWaveAction::Create」関数及び「SineWaveAction::PrepareParameters」関数は、非リアルタイムサブグラフ410を集合的に構成する。
【0100】
そして、「SineWaveAction::Sense」、「SineWaveAction::Control」、「SineWaveAction::SetParameters」及び「SineWaveAction::GetStateVariable」関数は、サブグラフ420内のリアルタイム関数を集合的に構成する。
【0101】
実行中、「SineWaveAction::Sense」関数は、ロボットの更新された位置を検索するためにシステムによって使用され得、「SineWaveAction::GetStateVariable」関数は、更新された状態変数を検索するために使用され得、「SineWaveAction:SetParameters」関数は、制御パラメータの値に、すなわち、「SineWaveAction:Control」関数の実行結果として変更を適用するために使用され得る。
【0102】
なお、「SineWaveAction::Control」関数は、正弦波運動アクションを達成するために、ユーザ提供コードに従ってリアルタイムでモーションパラメータを計算する。「SineWaveAction::Control」関数内のコードは、実行されると、正弦波制御法則及びロボットの関節限界に従って、ロボット関節のリアルタイム目標位置を計算し得るユーザコードを含む。
【0103】
次に、いくつかの使用事例について説明する。特定の例として、フレームワークは、1つ以上のロボットのカスタムリアルタイムアドミタンス制御を達成する能力をユーザに提供し得る。アドミタンス制御は、ユーザがロボットと環境との相互作用を調整したい場合に有効であり得る。例えば、移動-接触、接触操作、又は物体との接触ベースの相互作用を実行するために、リアルタイムロボット制御システムは、フレームワークを使用して、例えば、ロボットツールチップに配置されるセンサから力又はトルク読み取り値を読み取り、リアルタイムでロボットアームの位置又は速度を制御し得る。
【0104】
別の特定の例として、フレームワークは、公称経路を有する1つ以上のロボットのカスタムリアルタイムセンサベース制御を達成する能力をユーザに提供し得る。例えば、接着、バリ取り、研磨又は他のタスクは、一般に、ロボットが連続経路をたどることを必要とするが、部品が変動を有するか、自由に配置されるか、又はセルが正確に較正されない場合、ロボットアームが現在たどる経路は、修正、すなわち部品に適合することを必要とする。適合は、センサ入力、例えば、ロボットツールチップにおけるセンサから、又は視覚距離センサからの力及びトルク入力を使用して、リアルタイム制御サイクルにおいて行われなければならない。
【0105】
別の特定の例として、フレームワークは、リアルタイムカスタム制御戦略に従うことによって1つ以上のロボットを制御する能力をユーザに提供し得る。例えば、力押し、穴へのペグ打ち、又は組み立て作業のためのカスタム制御戦略は、カスタム制御法則、例えば、剛性を減少させたインピーダンス制御されたスパイラルモーションに従うようにロボットを制御することを必要とする。この例では、センサはロボットアーム内のトルクセンサであってもよいが、制御法則はユーザによって提供されるものであり、予め構成されたロボット制御ソフトウェアの一部ではない。
【0106】
図5は、コールバック関数を使用するカスタムリアルタイム反応を実行するための例示的なプロセス500のフロー図である。このプロセスは、1つ以上のコンピュータにインストールされ、本明細書に従ってプログラムされた1つ以上のコンピュータプログラムによって実装され得る。例えば、このプロセスは、
図1に示すリアルタイムロボット制御システム150によって実施され得る。便宜上、このプロセスは、1つ以上のコンピュータのシステムによって実行されるものとして説明される。
【0107】
上述したように、システムは、1つ以上のロボットを制御するために所定のシーケンスで繰り返し実行され得る複数のソフトウェアモジュールのスタックから構成されるリアルタイムロボット制御フレームワークを実行する。そのようなソフトウェアモジュールのうちの1つは、カスタムリアルタイム制御関数を実行し、コマンドを生成する制御スタック内のアプリケーションモジュールであり、コマンドの一部又は全部は、1つ以上のロボットのための非リアルタイムコマンドであってもよい。別のそのようなソフトウェアモジュールは、それぞれの非リアルタイムコマンドを、カスタムアクションを実施するように1つ以上のロボットを制御するための低レベルリアルタイムコマンドを生成する役割を果たすリアルタイムコントローラによって消費され得るデータに変換する、制御スタック内のブリッジングモジュールである。
【0108】
システムは、カスタムリアルタイム制御関数の定義を受信する(510)。カスタムリアルタイム制御関数は、カスタムコールバック関数、動作、及びカスタムコールバック関数を参照するカスタム反応を指定し得る。カスタム反応は、カスタムコールバック関数を呼び出すためにリアルタイムロボット制御サイクルをトリガするための1つ以上の条件を含み得る。
【0109】
図2を参照して同様に上述したように、カスタムリアルタイム制御関数は、リアルタイムロボット制御フレームワークを実行又は提供するエンティティとは異なるエンティティによって提供され得る。例えば、システムは、システムのユーザから、例えば、決定論的タイミングで実行されるアクションのシーケンスを定義する
図2のステップ210で受信されたユーザコード、及びアクションのシーケンスを連鎖させる1つ以上のカスタム反応に加えて、カスタムコールバック関数を定義するカスタムリアルタイム制御コードを受信し得る。カスタムリアルタイム制御コードは、受信されると、リアルタイムロボット制御フレームワークのアプリケーション層で動作し得る。
【0110】
決定論的タイミングで実行される必要があるカスタムリアルタイム制御関数によって定義されたアクションとは異なり、カスタムコールバック関数は、実行のためにトリガされたときに、そのうちのいくつかがシステムのリアルタイム保証を保存しない可能性がある任意の複雑さを有する制御論理又は他の計算を実装し得る。しかしながら、非同期プログラミングによって、アプリケーション層におけるカスタムコールバック関数の実行は、システムがロボットのカスタムリアルタイム制御を維持することを妨げない。これは、そうでなければ厳しいタイミング制約のために不可能である時間集約的なタスクを含む、様々な異なるタスクをサポートする追加の能力をシステムに与える。
【0111】
システムは、カスタムリアルタイム制御関数によって定義されたアクションを開始する(520)。すなわち、システムは、アクションを実行するようにロボットを制御し始める。アクションの実行を開始するために、システムは、アプリケーション層内のソフトウェアモジュールを実行して、フレームワークの制御層内の非リアルタイムサーバに開始コマンドを提供し得る。例えば、アクションは、システムに提供されたユーザコードによって指定されるリアルタイム状態機械における第1のカスタムリアルタイムアクションとすることができる。
【0112】
システムは、リアルタイムロボット制御フレームワークの制御層を使用することによって、1つ以上の物理ロボットを駆動するリアルタイムロボット制御システムのそれぞれの所定の制御ティックにおいてカスタムリアルタイム制御関数を繰り返し実行する。例えば、システムは、事前に決定された制御スケジュールに従って、例えば、リアルタイム制御関数の実行の開始に続いて、システムのそれぞれの制御ティックにおいてカスタムリアルタイム制御関数を繰り返し実行し得る。簡単に言えば、これは、1つ以上の状態変数の現在値を取得すること(530)、1つ以上の状態変数の現在値に従ってカスタムリアルタイム制御関数によって指定されたカスタム反応を評価すること(540)、及びカスタム反応の1つ以上の条件が満たされるたびに、カスタムコールバック関数を呼び出すこと(550)を伴う。
【0113】
上述のように、制御層は次に、実行中、アプリケーション層と通信するように構成された非リアルタイムスレッドを実行する非リアルタイムサーバと、実行中、ハードウェア抽象化層とインターフェースすることによってリアルタイムロボット制御サイクルに沿ってロボットを駆動するように構成されたリアルタイムスレッドを実行するリアルタイム制御層と、を含み得る。
【0114】
システムは、カスタムリアルタイム制御関数によって定義された動作を実行しながら、1つ以上の状態変数の現在値を取得する(530)。
図2を参照して上述したように、状態変数は、一般に、センサ値若しくはセンサ値から導出された情報、又はその両方を含み得る。
【0115】
システムは、1つ以上の状態変数の現在値に従ってカスタムリアルタイム制御関数によって指定されたカスタム反応を評価し(540)、カスタム反応の1つ以上の条件が満たされるたびに、システムはカスタムコールバック関数を呼び出す(550)。
【0116】
代替として、カスタム反応が満たされない場合、システムは、現在のアクションの次の制御ティックを実行し続ける。すなわち、プロセス500は、システムが1つ以上の状態変数の新しい値を取得するステップ530に戻る。
【0117】
カスタムコールバック関数を呼び出すために、リアルタイム制御層で動作するリアルタイムスレッドは、非リアルタイムサーバで動作する非リアルタイムスレッドに、カスタムコールバック関数が呼び出されるべきであるという通知を提供し得る。次いで、非リアルタイムスレッドは、フレームワークのアプリケーション層に、カスタムコールバック関数が呼び出されるべきであるという通知を提供し得る。非リアルタイムスレッドから通知を受信することに応答して、フレームワークのアプリケーション層は、フレームワークのアプリケーション層内のカスタムコールバック関数を実行し得る。
【0118】
これは、コールバック関数を使用するカスタムリアルタイム反応のための例示的な実行トレースをグラフで示す
図6に示されている。
図6において、水平の線分はスレッド実行に費やされた時間を示し、線分の間の矢印はスレッド間の因果関係を、例えば通知の形で示す。図示されるように、アプリケーションレベルコード及びカスタムリアルタイム制御コードは非同期的に処理される。
【0119】
カスタム反応の1つ以上の条件が満たされていると判定すること(1)に応答して、リアルタイムスレッド610は、非リアルタイムスレッド630に通知(2)を提供する。次に、非リアルタイムスレッド630は、通知(3)をアプリケーション層に提供し、次いで、アプリケーション層は、カスタムコールバック関数650の実行を開始する。その間、リアルタイムスレッド610はカスタムリアルタイム制御コードを処理し続ける(4)。カスタムコールバック関数が計算又は実行結果を生成する場合、カスタムコールバック関数の実行が完了したときはいつでも、すなわち、カスタムコールバック関数を呼び出すための非リアルタイムスレッド630への通知が行われた後、及びリアルタイムスレッド610が依然としてカスタムリアルタイム制御コードを処理している間の任意の時点で、そのような結果をリアルタイム制御層に返すことができる(5)。
【0120】
一般に、コールバック関数は、引数として別の関数に渡される実行可能コードへのポインタである。したがって、カスタムコールバック関数を呼び出すことは、カスタムコールバック関数への引数としてリアルタイムスレッドによって使用されるリアルタイムデータの1つ以上の要素を提供することを伴い得る。
【0121】
より詳細には、いくつかの実装形態では、システムは、リアルタイムデータの1つ以上の要素を、制御層の非リアルタイムスレッドによってアクセス可能なメモリロケーションに書き込むことと、非リアルタイムスレッドを使用することによって、メモリロケーションにおける更新された値を読み取ることと、非リアルタイムスレッドを使用することによって、リアルタイムスレッドによってメモリロケーションに書き込まれた更新された値をアプリケーション層に提供することと、によってこれを行い得る。
【0122】
例えば、リアルタイムデータの要素は、カスタム反応の1つ以上の条件がリアルタイムスレッドにおいて満たされたときを表すタイムスタンプを含む。別の例として、リアルタイムデータの要素は、カスタム反応が満たされる前に実行された以前のアクションの識別を含む。更に別の例として、リアルタイムデータの要素は、カスタム反応をトリガした現在のアクションの識別を含む。
【0123】
表5は、コールバック関数を定義するために書かれたユーザコードの例を含む。
【0124】
【0125】
例示的なユーザコードは、ロボットコンポーネント、例えばロボットアームが目標位置の25cmの閾値距離内で移動したイベントに応答して、リアルタイムロボット制御システムのクライアントによって実行され得るクライアント側コードである。
【0126】
1行目で、コールバック関数が定義される。この場合、コールバック関数は、単に、クライアントデバイス190において、例えば「Almost there!」というテキストを印刷することである。実際には、コールバック関数は、典型的にはるかに複雑であり、そのうちのいくつかは、計算又は実行結果を生成し、そのような結果を呼び出しスレッドに返し得る。
【0127】
4行目で、アクションが定義される。アクションの定義は、ID(5行目)、タイプ(6行目)、及び運動パラメータ(7行目)を含む。
【0128】
8~16行目に示すように、アクションは、条件及び応答を指定する反応を有する。この場合、条件は、ロボットコンポーネントが目標位置の25cmの閾値距離内に移動したか否かであり、応答は、コールバック関数を呼び出すことである(14行目)。
【0129】
17行目で、クライアントは、アクションIDを参照するコマンドを非リアルタイムサーバに送信することによって、リアルタイムアクションを開始する。次いで、システムの制御層は、リアルタイム環境を初期化し、それに応じて、条件が満たされるたびにコールバック関数を呼び出すことを含む、アクションを実行する。
【0130】
図7は、ストリーミング入力を使用するカスタムアクションを実行するための例示的なプロセス700のフロー図である。このプロセスは、1つ以上のコンピュータにインストールされ、本明細書に従ってプログラムされた1つ以上のコンピュータプログラムによって実装され得る。例えば、このプロセスは、
図1に示すリアルタイムロボット制御システム150によって実施され得る。便宜上、このプロセスは、1つ以上のコンピュータのシステムによって実行されるものとして説明される。
【0131】
上述したように、システムは、1つ以上のロボットを制御するために所定のシーケンスで繰り返し実行され得る複数のソフトウェアモジュールのスタックから構成されるリアルタイムロボット制御フレームワークを実行する。そのようなソフトウェアモジュールのうちの1つは、カスタムリアルタイム制御関数を実行し、コマンドを生成する制御スタック内のアプリケーションモジュールであり、コマンドの一部又は全部は、1つ以上のロボットのための非リアルタイムコマンドであってもよい。別のそのようなソフトウェアモジュールは、それぞれの非リアルタイムコマンドを、カスタムアクションを実施するように1つ以上のロボットを制御するための低レベルリアルタイムコマンドを生成する役割を果たすリアルタイムコントローラによって消費され得るデータに変換する、制御スタック内のブリッジングモジュールである。
【0132】
システムは、カスタムリアルタイムストリーミング制御関数の定義を受信する(710)。カスタムリアルタイムストリーミング制御関数は、ストリーミング入力を使用するカスタムアクション(「カスタムストリーミングアクション」)を定義し得る。ストリーミング入力は、変化するレートで、若しくは非決定論的に、例えば、不完全な情報を伴って、又はその両方で到着し得るリアルタイム入力である。カスタムストリーミングアクションは、動作環境内のロボットの目標状態を指定し得る。例えば、目標状態は、ロボットの位置、速度、加速度、関節角度、又はそれらの組み合わせに関して定義され得る。
【0133】
カスタムリアルタイムストリーミング制御関数は、ストリーミング入力間、例えば、現在の目標状態の受信とアプリケーション層からの任意の更新された目標状態との間のギャップのカスタム処理を定義する関数を含み得る。例えば、カスタムリアルタイムストリーミング制御関数は、ロボットの目標状態を計算するためのユーザ定義の補間又は外挿関数を含み得る。別の例として、カスタムリアルタイムストリーミング制御関数は、ロボットの目標状態を計算するために、ユーザ選択関数、すなわち、事前定義された補間又は外挿関数のライブラリから選択された関数に対する関数呼び出しを行い得る。
【0134】
図2を参照して同様に上述したように、カスタムリアルタイムストリーミング制御関数は、リアルタイムロボット制御フレームワークを実行又は提供するエンティティとは異なるエンティティによって提供され得る。例えば、システムは、システムのユーザから、例えば、決定論的タイミングで実行されるアクションのシーケンスを定義する
図2のステップ210で受信されたユーザコード、及びアクションのシーケンスを連鎖させる1つ以上のカスタム反応に加えて、カスタムリアルタイム制御関数を定義するカスタムリアルタイムストリーミング制御コードを受信し得る。カスタムリアルタイムストリーミング制御コードは、受信されると、リアルタイムロボット制御フレームワークのアプリケーション層で実行し得る。
【0135】
システムは、カスタムリアルタイムストリーミング制御関数によって定義されたカスタムストリーミングアクションを開始する(720)。すなわち、システムは、カスタムストリーミングアクションを実行するようにロボットを制御し始める。カスタムストリーミングアクションの実行を開始するために、システムは、アプリケーション層内のソフトウェアモジュールを実行して、フレームワークの制御層内の非リアルタイムサーバに開始コマンドを提供し得る。例えば、カスタムストリーミングアクションは、1つ以上のストリーミング入力を使用するユーザ指定のリアルタイム状態機械におけるカスタムリアルタイムアクションであり得る。
【0136】
システムは、カスタムストリーミングアクションのための更新された目標状態を、リアルタイムロボット制御フレームワークの制御層に繰り返し提供する(730)。システムは、フレームワークのアプリケーション層でカスタムリアルタイムストリーミング制御関数を実行することによってこれを行い得る。
【0137】
更新された目標状態を受信することに応答して、制御層は、リアルタイムロボット制御サイクルのそれぞれの所定のティックにおいて、ロボットを最新の目標状態に向かって駆動することを含む、カスタムストリーミングアクションを実行するように構成される。例えば、制御層は、例えば、カスタムストリーミングアクションの実行の開始に続いて、事前に決定された制御スケジュールに従って、システムのそれぞれの制御ティックにおいてカスタムストリーミングアクションを繰り返し実行し得る。
【0138】
様々な場合において、アプリケーション層が更新された目標状態を制御層に提供する第1のレートは、リアルタイムロボット制御サイクルの第2のレートとは異なる。例えば、第1のレートは、カスタムリアルタイムストリーミング制御関数において指定されたユーザ定義の期間であり、リアルタイムロボット制御サイクルの第2のレートより低く、場合によってははるかに低い。
【0139】
これらの場合、システムのリアルタイム保証を実現するために、制御層は、アプリケーション層から任意の追加の更新された目標状態を受信する前に、リアルタイムロボット制御サイクルの1つ以上の追加のティック中に、ロボットを最新の目標状態に向かって駆動するように更に構成される。
【0140】
そうするために、非リアルタイムスレッドとして実行している制御層の非リアルタイムサーバは、アプリケーション層から更新された目標状態を受信し、リアルタイムスレッドとして実行している制御層のリアルタイム制御層に更新された目標状態を提供するリアルタイムロボティクス制御サイクルの現在又は将来のティックを選択し得る。これにより、リアルタイム制御層がストリーミング入力からの任意のジッタの影響を緩和することを可能にする。
【0141】
これは、ストリーミング入力を使用するカスタムリアルタイム反応のための例示的な実行トレースをグラフで示す
図8に示されている。
図8は、「サイクル0」で始まる合計5回のリアルタイムロボット制御サイクルを示す。水平線分の間の上向きの矢印は、2つのスレッド間で送信される制御入力、例えばロボットの目標状態を示す。図示されるように、アプリケーション層は、リアルタイムロボット制御サイクルのティックごとにロボットの目標状態を制御層(リアルタイム制御層及び非リアルタイム制御サーバを含む)に提供しないため、制御入力はストリーミング入力である。例えば、「サイクル2」、「サイクル3」、及び「サイクル5」のティックにおいて、非リアルタイムスレッド830に到達する目標状態はない。
【0142】
アプリケーション層(1)によって提供されるロボットの更新された目標状態を含む制御入力が非リアルタイムスレッド830において受信される、制御サイクルのそれぞれのティックにおいて、例えば、「サイクル0」において、非リアルタイムスレッド830は、制御層がロボットを更新された目標状態に向かって駆動するように、ロボットの更新された目標状態(2)をリアルタイムスレッド810に提供する。
【0143】
アプリケーション層によって提供されるロボットの任意の更新された目標状態を含む制御入力が非リアルタイムスレッド830において受信されない(3)、制御サイクルのそれぞれのティックにおいて、例えば、「サイクル2」において、非リアルタイム制御サーバにおいて動作する非リアルタイムスレッド830は、アプリケーション層から受信される補間された目標状態をリアルタイムスレッドに提供するための制御サイクルの現在又は将来のティックを選択し得る。特に、補間された目標状態は、非リアルタイムスレッド830又はリアルタイムスレッド810のいずれかによって、リアルタイムハードウェア抽象化層に提供され得る。例えば、「サイクル2」において、非リアルタイムスレッド830は、システムがロボットを最新の目標状態に向けて駆動するように、ロボットの更新された目標状態として、補間された目標状態(4)を、リアルタイム制御層を介してリアルタイムハードウェア抽象化層に提供する。別の例として、「サイクル5」において、リアルタイムスレッド810は、ロボットの更新された目標状態として、補間された目標状態(5)をリアルタイムハードウェア抽象化層に提供する。
【0144】
上述のように、補間された目標状態が生成される方法は、ユーザ選択可能なオプションとすることができる。例えば、非リアルタイムスレッド830(又はリアルタイムスレッド810)は、アプリケーション層から受信した最新の目標状態を補間された目標状態として、すなわち、アプリケーション層から(又は非リアルタイムスレッド830から)任意の追加の目標状態を受信するまで、繰り返し使用し得る。別の例として、非リアルタイムスレッド830(又はリアルタイムスレッド810)は、アプリケーション層から(又は非リアルタイムスレッド830から)受信された1つ以上の最新の目標状態に基づいて、何らかのカスタム補間又は外挿関数を実行することによって、補間された目標状態を計算し得る。
【0145】
表6は、カスタムリアルタイムストリーミング制御関数を定義するために書かれたユーザコードの例を含む。この例は、カスタム補間関数を使用して、6自由度ロボットの補間された目標状態を計算する。目標状態は、ロボットの6つの関節のそれぞれに対する目標位置及び目標速度を含む。
【0146】
【0147】
5~12行目は、運動パラメータがストリーミングパラメータであることを示す。
【0148】
13行目で、ストリーミングアクションが定義される。ストリーミングアクションの定義は、ID(14行目)、タイプ(15行目)、及びストリーミング運動パラメータ(16行目)を含む。17行目は、このストリーミングアクションに関連付けられた反応がないことを示す。
【0149】
19行目で、サーバのストリーミングの準備をするために、サーバへの接続が開始される。
【0150】
24行目で、クライアントは、アクションIDを参照するコマンドを非リアルタイムサーバに送信することによって、ストリーミングアクションを開始する。次いで、システムの制御層は、リアルタイム環境を初期化し、それに応じてストリーミングアクションを実行する。
【0151】
27~38行目は、ロボットの関節に対する新しい目標位置の値を見つけるために例示的な1-D補間関数をどのように使用するかを示す。
【0152】
32行目:「stream.write」関数を用いて次の値を繰り返し入力するためのループが定義される。
【0153】
本明細書において説明されたロボット機能は、少なくとも部分的にハードウェア非依存である、ハードウェア非依存型ソフトウェアスタック、又は簡潔にするために単にソフトウェアスタック、によって実装され得る。換言すると、ソフトウェアスタックは、コマンドが具体的にロボットの特定のモデル又は特定のロボットコンポーネントに関することを必要とせずに、上で説明された計画プロセスによって生成されたコマンドを入力として受け入れることができる。例えば、ソフトウェアスタックは、
図1のリアルタイムロボット制御システム150によって少なくとも部分的に実装することができる。
【0154】
本明細書に記載の主題及び機能的動作の実施形態は、本明細書に開示された構造体及びそれらの構造的均等物を含む、デジタル電子回路、有形に具現化されたコンピュータソフトウェア若しくはファームウェア、コンピュータハードウェア、又はそれらのうちの1つ以上の組み合わせに、実装することができる。本明細書において説明される主題の実施形態は、1つ以上のコンピュータプログラム、すなわち、データ処理装置による実行のために、又はデータ処理装置のオペレーションを制御するために有形の非一時的記憶媒体上に符号化されたコンピュータプログラム命令の1つ以上のモジュールとして実装され得る。コンピュータ記憶媒体は、機械可読ストレージデバイス、機械可読ストレージ基板、ランダム若しくはシリアルアクセスメモリデバイス、又はそれらのうちの1つ以上の組み合わせであり得る。代替的又は追加的に、プログラム命令は、データ処理装置による実行のための好適な受信機装置への送信のための情報を符号化するために生成される、人工的に生成された伝搬信号、例えば、機械生成された電気信号、光信号、又は電磁信号上で符号化され得る。
【0155】
「データ処理装置」という用語は、データ処理ハードウェアを指し、例として、プログラマブルプロセッサ、コンピュータ、又は複数のプロセッサ若しくはコンピュータを含む、データを処理するためのあらゆる種類の装置、デバイス、及びマシンを包含する。装置はまた、特殊目的ロジック回路、例えば、FPGA(field programmable gate array、フィールドプログラマブルゲートアレイ)又はASIC(application-specific integrated circuit、特定用途向け集積回路)であるか、又はそれを更に含むことができる。装置は、任意選択的に、ハードウェアに加えて、コンピュータプログラムのための動作環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、又はそれらのうちの1つ以上の組み合わせを構成するコードを含むことができる。
【0156】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、スクリプト、若しくはコードとして称されるか又は説明され得る)コンピュータプログラムは、コンパイラ型言語若しくはインタープリタ型言語、又は宣言型言語若しくは手続き型言語を含む、任意の形態のプログラミング言語で書くことができ、スタンドアローンプログラムとして、又はモジュール、コンポーネント、サブルーチン、若しくはコンピューティング環境における使用に好適な他のユニットとして含む、任意の形態で展開することができる。プログラムは、ファイルシステム内のファイルに対応することができるが、対応する必要はない。プログラムは、他のプログラム又はデータを保持するファイルの一部分、例えば、マークアップ言語文書内、問題のプログラム専用の単一ファイル内、又は複数の協調ファイル、例えば、1つ以上のモジュール、サブプログラム、又はコードの一部分を記憶するファイル内に記憶された1つ以上のスクリプトにおいて記憶され得る。コンピュータプログラムは、1つのコンピュータ上で、又は1つのサイトに位置する、若しくは複数のサイトにわたって分散され、かつデータ通信ネットワークによって相互接続された複数のコンピュータ上で実行されるように展開することができる。
【0157】
1つ以上のコンピュータのシステムが特定の動作又はアクションを実行するように構成されているとは、システムが、動作中にシステムに動作又はアクションを実行させる、ソフトウェア、ファームウェア、ハードウェア、又はそれらの組み合わせをインストールしていることを意味する。1つ以上のコンピュータプログラムが特定の動作又はアクションを実行するように構成されているとは、1つ以上のプログラムが、データ処理装置によって実行されたとき、装置に動作又はアクションを実行させる命令を含むことを意味する。
【0158】
本明細書で使用されるように、「エンジン」又は「ソフトウェアエンジン」は、入力とは異なる出力を提供する、ソフトウェア実装入力/出力システムを指す。エンジンは、ライブラリ、プラットフォーム、ソフトウェア開発キット(software development kit、「SDK」)、又はオブジェクト等、符号化された機能ブロックであり得る。各エンジンは、1つ以上のプロセッサ及びコンピュータ可読媒体を含む、任意の適切なタイプのコンピューティングデバイス、例えば、サーバ、モバイルフォン、タブレットコンピュータ、ノートブックコンピュータ、音楽プレーヤ、電子書籍リーダ、ラップトップ若しくはデスクトップコンピュータ、PDA、スマートフォン、又は他の固定若しくはポータブルデバイス上に実装することができる。加えて、エンジンのうちの2つ以上は、同じコンピューティングデバイス上に、又は異なるコンピューティングデバイス上に実装され得る。
【0159】
本明細書に記載のプロセス及び論理フローは、入力データに対して動作して出力を生成することによって機能を実行するように、1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルコンピュータによって実行することができる。プロセス及びロジックフローはまた、特殊目的ロジック回路、例えば、FPGA若しくはASICによって、又は特殊目的ロジック回路と1つ以上のプログラムされたコンピュータとの組み合わせによって実施され得る。
【0160】
コンピュータプログラムの実行に好適なコンピュータは、汎用若しくは専用のマイクロプロセッサ、又はその両方、あるいは任意の他の種類の中央処理装置に基づくことができる。概して、中央処理装置は、読み出し専用メモリ、又はランダムアクセスメモリ、又はその両方から命令及びデータを受信する。コンピュータの必須要素は、命令を実施するか又は実行するための中央処理装置、及び命令及びデータを記憶するための1つ以上のメモリデバイスである。中央処理装置及びメモリは、特殊目的ロジック回路によって補完され得るか、又は特殊目的ロジック回路に組み込まれ得る。概して、コンピュータはまた、データを記憶するための1つ以上の大容量記憶デバイス、例えば、磁気ディスク、光磁気ディスク、又は光ディスクを含むか、又はそれらからデータを受信するか、それらにデータを転送するか、又はその両方を行うように動作可能に結合される。しかしながら、コンピュータは、そのようなデバイスを有する必要はない。更に、コンピュータは別のデバイス、例えばほんの数例を挙げると、携帯電話、電子手帳(PDA)、モバイルオーディオ若しくはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、又はポータブル記憶デバイス、例えばユニバーサルシリアルバス(USB)フラッシュドライブなどに組み込むことができる。
【0161】
コンピュータプログラム命令及びデータを記憶するのに好適なコンピュータ可読媒体は、例として、半導体メモリデバイス、例えば、EPROM、EEPROM、及びフラッシュメモリデバイス、磁気ディスク、例えば、内蔵ハードディスク又はリムーバブルディスクと、光磁気ディスク、並びにCD-ROM及びDVD-ROMディスクを含む、あらゆる形態の不揮発性メモリを含む。
【0162】
ユーザとの相互作用を提供するために、本明細書において説明される主題の実施形態は、ディスプレイデバイス、例えば、ユーザに情報を表示するためのCRT(cathode ray tube、陰極線管)又はLCD(liquid crystal display、液晶ディスプレイ)モニタと、キーボードと、ポインティングデバイス、例えば、マウス、トラックボール、又はユーザがコンピュータに入力を提供することができる存在感知ディスプレイ若しくは他の表面と、を有するコンピュータ上で実装され得る。他の種類のデバイスが、ユーザとの相互作用を提供するために同様に使用され得、例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバックであり得、ユーザからの入力は、音響、音声、又は触覚入力を含む、任意の形態で受信され得る。加えて、コンピュータは、ユーザによって使用されるデバイスに文書を送信し、デバイスから文書を受信すること、例えば、ウェブブラウザから受信された要求に応答して、ユーザのデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと相互作用することができる。また、コンピュータは、テキストメッセージ又は他の形式のメッセージをパーソナルデバイス、例えば、スマートフォンに送信し、メッセージングアプリケーションを実行し、返信としてユーザから応答メッセージを受信することによって、ユーザと相互作用することができる。
【0163】
本明細書において説明される主題の実施形態は、例えば、データサーバとしてのバックエンドコンポーネントを含む、又はミドルウェアコンポーネント、例えば、アプリケーションサーバを含む、又はフロントエンドコンポーネント、例えば、グラフィカルユーザインターフェース、ウェブブラウザ、若しくはユーザが本明細書において説明される主題の実装形態と相互作用することができるアプリを有するクライアントコンピュータを含む、又は1つ以上のかかるバックエンド、ミドルウェア、若しくはフロントエンドコンポーネントの任意の組み合わせを含む、コンピューティングシステムにおいて実装することができる。システムのコンポーネントは、デジタルデータ通信の任意の形態又は媒体、例えば、通信ネットワークによって相互接続することができる。通信ネットワークの例には、ローカルエリアネットワーク(LAN)及びワイドエリアネットワーク(WAN)、例えばインターネットが含まれる。
【0164】
コンピューティングシステムは、クライアント及びサーバを含むことができる。クライアント及びサーバは概して互いに離れており、典型的には通信ネットワークを介して対話する。クライアント及びサーバの関係は、それぞれのコンピュータ上で実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムによって生じる。いくつかの実施形態では、サーバは、例えば、クライアントとして動作するデバイスと相互作用するユーザにデータを表示し、ユーザからユーザ入力を受信する目的で、データ、例えば、HTMLページをユーザデバイスに送信する。ユーザデバイスにおいて生成されたデータ、例えば、ユーザ相互作用の結果は、デバイスからサーバにおいて受信され得る。
【0165】
上で説明された実施形態に加えて、以下の実施形態もまた革新的である。
【0166】
実施形態1は、方法であって、
リアルタイムロボット制御フレームワークによって、カスタムリアルタイム制御関数の定義を受信することであって、定義は、複数のアクション及び1つ以上のカスタム反応を指定し、それぞれのカスタム反応は、複数のアクションにおける1つのアクションの実行から別のアクションの実行へのリアルタイム切り替えのための1つ以上の条件を含む、ことと、
リアルタイムロボット制御フレームワークによって、1つ以上の物理ロボットを駆動するリアルタイムロボットシステムのそれぞれの所定のティックにおいてカスタムリアルタイム制御関数を繰り返し実行することであって、
1つ以上の状態変数の現在値を取得することと、
1つ以上の状態変数の現在値に従って、カスタムリアルタイム制御関数によって指定された1つ以上のカスタム反応を評価することと、
カスタム反応が満たされるたびに、満たされたカスタム反応に従って現在のアクションをリアルタイムで更新することと、
現在のアクションの次のティックを実行することと、を含む、ことと、を含む、方法である。
【0167】
実施形態2は、カスタムリアルタイム制御関数を実行することが、1つ以上のロボットの動作環境内の1つ以上のセンサによって生成された1つ以上のセンサ値を取得することを含む、実施形態1に記載の方法である。
【0168】
実施形態3は、カスタムリアルタイム制御関数を実行することが、
動作環境内のセンサから生成された1つ以上のセンサ値によって反応が満たされていることを判定することと、
判定することに応答して、第1のリアルタイムアクションと第2のリアルタイムアクションとの間のリアルタイム切り替えを実行することと、を含む、実施形態1又は2のいずれか1つに記載の方法である。
【0169】
実施形態4は、カスタム反応が満たされるたびに、更新された現在のアクションによって使用される新しいセンサ値を取得する、実施形態2に記載の方法である。
【0170】
実施形態5は、1つ以上のカスタム反応が、リアルタイムでセンサ入力を使用する、実施形態2に記載の方法である。
【0171】
実施形態6は、カスタムリアルタイム制御関数の定義が、カスタム反応によって関係付けられるアクションのリアルタイム状態機械を指定する、実施形態1~5のいずれか1つに記載の方法である。
【0172】
実施形態7は、カスタムリアルタイム制御関数が、リアルタイムロボット制御フレームワークを実行又は提供するエンティティとは異なるエンティティによって提供される、実施形態1~6のいずれか1つに記載の方法である。
【0173】
実施形態8は、カスタムリアルタイム制御関数によって指定された1つ以上のカスタム反応を評価することが、現在のアクションに関連付けられたカスタム反応のみを評価することを含む、実施形態1~7のいずれか1つに記載の方法である。
【0174】
実施形態9は、カスタムリアルタイム制御関数が、決定論的タイミングで実行されるアクションのシーケンスを指定する、実施形態1~8のいずれか1つに記載の方法である。
【0175】
実施形態10は、現在のアクションの次のティックを実行することが、非リアルタイム制御パラメータをリアルタイム制御パラメータに変換することを含む、実施形態1~9のいずれか1つに記載の方法である。
【0176】
実施形態11は、リアルタイムロボット制御フレームワークが、制御層と通信するアプリケーション層を含み、カスタムリアルタイム制御関数の定義を受信することが、アプリケーション層において定義を受信することを含み、実行のために制御層に定義を送信することを更に含む、実施形態1~10のいずれか1つに記載の方法である。
【0177】
実施形態12は、
制御層によって、カスタムリアルタイム制御関数の新しい定義を受信することと、
実行を新しい定義によって定義された第1のアクションに切り替えることと、を更に含む、実施形態11に記載の方法である。
【0178】
実施形態13は、
リアルタイムロボット制御フレームワークによって、リアルタイム制御サイクルのそれぞれの所定のティックにおいて位置を駆動するために制御層のリアルタイムスレッドによって実行されるカスタムリアルタイム制御コードを受信することであって、
カスタムリアルタイム制御コードは、
1つ以上の状態変数の現在値を取得するためのカスタム状態取得関数と、
1つ以上の状態変数の取得された値を使用して運動パラメータをリアルタイムで計算するカスタム制御関数と、を含む、関数を定義する、ことと、
リアルタイムロボット制御フレームワークによって、リアルタイムロボット制御サイクルのそれぞれの所定のティックにおいてカスタムリアルタイム制御コードを繰り返し実行することであって、
カスタム状態取得関数を実行して、1つ以上の状態変数の現在値を取得することと、
カスタム制御関数を実行して、1つ以上の更新された運動パラメータを計算することと、
カスタム制御関数を実行することによって計算される更新された運動パラメータに従って、リアルタイムロボットシステムを駆動することと、を含む、ことと、を含む、方法である。
【0179】
実施形態14は、カスタム制御関数を実行することが、リアルタイムロボット制御サイクルの現在のティックにおいて更新されたセンサ値を使用することを含む、実施形態13に記載の方法である。
【0180】
実施形態15は、リアルタイムロボット制御フレームワークが、カスタムリアルタイムロボット制御を実装するために、制御サイクル内のそれぞれのティックにおいて状態機械としてユーザ提供のソフトウェアモジュールを自動的に実行するように構成されている、実施形態13~14のいずれか1つに記載の方法である。
【0181】
実施形態16は、リアルタイムロボット制御フレームワークが、リアルタイムロボット制御のためのリアルタイム環境を準備するために、ユーザ提供の非リアルタイムソフトウェアモジュールを自動的に実行するように構成されている、実施形態13~15のいずれか1つに記載の方法である。
【0182】
実施形態17は、カスタムリアルタイム制御コードが、リアルタイムセンサデータを取得するためのカスタム感知関数を更に含み、
カスタムリアルタイム制御コードを実行することが、
更新されたセンサ値を取得するためにカスタム感知関数を実行することを更に含み、
カスタム制御関数を実行することが、取得された更新されたセンサ値を使用することを含む、実施形態13~16のいずれか1つに記載の方法である。
【0183】
実施形態18は、方法が、
リアルタイムロボット制御フレームワークによって、カスタムパラメータ準備関数を定義するカスタム非リアルタイム制御コードを受信することと、
カスタムリアルタイム制御コードを実行する前に、カスタム非リアルタイム制御コードを実行することと、を更に含む、実施形態13~17のいずれか1つに記載の方法である。
【0184】
実施形態19は、リアルタイムロボット制御フレームワークが、リアルタイムロボット制御サイクルの非リアルタイムスレッドにおいて非リアルタイム制御コードを実行し、リアルタイムスレッドにおいてカスタムリアルタイム制御コードを実行する、実施形態17に記載の方法である。
【0185】
実施形態20は、1つ以上のコンピュータと、命令を記憶する1つ以上の記憶デバイスと、を備えるシステムであって、当該命令は、1つ以上のコンピュータによって実行されたときに、1つ以上のコンピュータに、実施形態1~19のいずれか1つに記載の方法を実施させるように動作可能である、システムである。
【0186】
実施形態21は、コンピュータプログラムで符号化されたコンピュータ記憶媒体であり、プログラムは、データ処理装置によって実行されたときに、データ処理装置に、実施形態1~19のいずれか1つの方法を実施させるように動作可能な命令を含む。
【0187】
本明細書は、多くの特定の実装形態の詳細を含むが、これらは、任意の発明の範囲又は特許請求され得るものの範囲に対する限定として解釈されるべきではなく、むしろ、特定の発明の特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。別個の実施形態の文脈において本明細書に説明されるある特定の特徴はまた、単一の実施形態において組み合わせて実装することもできる。逆に、単一の実施形態の文脈で説明されている種々の特徴は、複数の実施形態で別個に、又は任意の好適な部分的組み合わせで実装することもできる。更に、特徴は、ある組み合わせで動作するものとして上で説明され、最初にそのように特許請求され得るが、特許請求される組み合わせからの1つ以上の特徴は、いくつかの場合では、組み合わせから削除することができ、特許請求される組み合わせは、部分的組み合わせ又は部分的組み合わせの変形形態を対象とすることができる。
【0188】
同様に、動作は特定の順序で図面に描写されているが、これは、所望の結果を達成するために、そのような動作が示された特定の順序で若しくは連続的な順序で実施されること、又は全ての例示された動作が実施されることを必要とすると理解されるべきではない。ある特定の状況では、マルチタスキング及び並列処理が有利であり得る。更に、上で説明された実施形態における様々なシステムモジュール及びコンポーネントの分離は、全ての実施形態においてかかる分離を必要とすると理解されるべきではなく、説明されたプログラムコンポーネント及びシステムは、概して、単一のソフトウェア製品にともに一体化され得るか、又は複数のソフトウェア製品にパッケージ化され得ることを理解されたい。
【0189】
主題の特定の実施形態が説明されてきた。他の実施形態は、以下の特許請求の範囲内である。例えば、特許請求の範囲内に記載された動作は、異なる順序で実施することができ、それでも所望の結果を達成することができる。一実施例として、添付の図面内に描写されたプロセスは、所望の結果を達成するために、示される特定の順序、又は連続的な順序を必ずしも必要としない。あるいくつかの場合では、マルチタスキング及び並列処理が有利であり得る。