IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ イントリンシック イノベーション エルエルシーの特許一覧

特表2023-505631ロボット制御システム用の構成可能性フレームワーク
<>
  • 特表-ロボット制御システム用の構成可能性フレームワーク 図1
  • 特表-ロボット制御システム用の構成可能性フレームワーク 図2
  • 特表-ロボット制御システム用の構成可能性フレームワーク 図3
  • 特表-ロボット制御システム用の構成可能性フレームワーク 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-02-10
(54)【発明の名称】ロボット制御システム用の構成可能性フレームワーク
(51)【国際特許分類】
   B25J 13/08 20060101AFI20230203BHJP
【FI】
B25J13/08 A
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2022523837
(86)(22)【出願日】2020-12-29
(85)【翻訳文提出日】2022-06-09
(86)【国際出願番号】 US2020067334
(87)【国際公開番号】W WO2021138340
(87)【国際公開日】2021-07-08
(31)【優先権主張番号】16/730,871
(32)【優先日】2019-12-30
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】521430508
【氏名又は名称】イントリンジック イノベーション エルエルシー
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100126480
【弁理士】
【氏名又は名称】佐藤 睦
(72)【発明者】
【氏名】プリサメント,グレゴリー ジェイ.
(72)【発明者】
【氏名】ベアーズワース,マイケル
【テーマコード(参考)】
3C707
【Fターム(参考)】
3C707AS01
3C707BS10
3C707KS03
3C707KT01
3C707KT06
3C707LW12
3C707NS02
(57)【要約】
【課題】 多数のサブシステムの低レベル動作の調整を支援する構成可能性フレームワークのための、コンピュータ記憶媒体に符号化されているコンピュータプログラムを含む方法、システム、及び装置。
【解決手段】 方法のうち1つは、多数のロボット構成要素を有するロボット実行環境を制御することを含む動作を実行するように構成されているリアルタイムロボット制御システム用のマルチデバイスアプリケーション定義を受信することであって、アプリケーション定義は、多数のロボット構成要素の各ロボット構成要素用の1つ又は複数のカスタム高レベルソフトウェアモジュールと、各カスタム高レベルソフトウェアモジュール用の各モジュールインターフェース定義であって、カスタム高レベルソフトウェアモジュールのモジュールインターフェース定義は、1つ又は複数の非同期又はリアルタイム通信チャネルを指定する各モジュールインターフェース定義と、各々の多数のロボット構成要素用の各デバイスインターフェース定義とを含む、受信することと、アプリケーション定義を処理して、多数のロボット構成要素によってそれぞれ実行されるべき出力プログラムを生成することとを含む。
【選択図】 図1
【特許請求の範囲】
【請求項1】
1つ又は複数のコンピュータと、前記1つ又は複数のコンピュータによって実行される場合、動作を前記1つ又は複数のコンピュータに実行させるように動作可能な命令を記憶する1つ又は複数の記憶デバイスとを含むシステムであって、前記動作は、
多数のロボット構成要素を有するロボット実行環境を制御することを含む動作を実行するように構成されているリアルタイムロボット制御システム用のマルチデバイスアプリケーション定義を受信することであって、前記アプリケーション定義は、
前記多数のロボット構成要素の各ロボット構成要素用の1つ又は複数のカスタム高レベルソフトウェアモジュールであって、各カスタム高レベルソフトウェアモジュールは、前記ロボット構成要素の1つ又は複数の機能を実行するように構成されており、各カスタム高レベルソフトウェアモジュールは、前記各ロボット構成要素の1つ又は複数の低レベルソフトウェアモジュールに依存する1つ又は複数のカスタム高レベルソフトウェアモジュールと、
各カスタム高レベルソフトウェアモジュール用の各モジュールインターフェース定義であって、カスタム高レベルソフトウェアモジュールのモジュールインターフェース定義は、前記カスタム高レベルソフトウェアモジュールが、異なるカスタム高レベルソフトウェアモジュールから入力データを受信する、又は前記異なるカスタム高レベルソフトウェアモジュールに出力データを送信することができる1つ又は複数の非同期又はリアルタイム通信チャネルを指定する各モジュールインターフェース定義と、
各々の多数のロボット構成要素用の各デバイスインターフェース定義であって、ロボット構成要素のデバイスインターフェース定義は、前記ロボット構成要素が実行することができる前記ソフトウェアモジュールを宣言する各デバイスインターフェース定義と
を含む、マルチデバイスアプリケーション定義を受信することと、
前記アプリケーション定義を処理して、前記多数のロボット構成要素によってそれぞれ実行されるべき出力プログラムを生成することであって、前記出力プログラムは、前記1つ又は複数のカスタム高レベルソフトウェアモジュールを実行する複数のコマンドを含み、前記多数のロボット構成要素の第1のロボット構成要素用の第1の出力プログラムは、前記第1のロボット構成要素に、第1の通信チャネルに関する情報を前記多数のロボット構成要素の第2のロボット構成要素用の第2の出力プログラムに伝達させる、出力プログラムを生成することと
を含むシステム。
【請求項2】
ロボット構成要素の各低レベルソフトウェアモジュールは、前記特定のロボット構成要素に対してカスタマイズされているカスタムソフトウェアモジュールに依存する、請求項1に記載のシステム。
【請求項3】
前記カスタムソフトウェアモジュールは、前記ロボット構成要素の製造業者によって提供されている、請求項2に記載のシステム。
【請求項4】
前記アプリケーション定義は、前記第2のロボット構成要素の前記1つ又は複数の高レベルソフトウェアモジュールが、前記第1のロボット構成要素から受信される前記情報を待つべきであることを指定する、請求項1~3のいずれか一項に記載のシステム。
【請求項5】
前記第1のロボット構成要素は、リアルタイムロボットであり、前記第1の通信チャネルに関する伝達情報は、前記リアルタイムロボットの関節の関節位置である、請求項1~4のいずれか一項に記載のシステム。
【請求項6】
前記第1のロボット構成要素は、カメラであり、前記第1の通信チャネルに関する前記伝達情報は、前記実行環境における物体の姿勢である、請求項1~4のいずれか一項に記載のシステム。
【請求項7】
前記出力プログラムのうち1つ又は複数の出力プログラムは、非同期的に実行可能である、請求項1~6のいずれか一項に記載のシステム。
【請求項8】
各々の多数のロボット構成要素用の前記デバイスインターフェース定義は、前記デバイスが実行することができる各高レベルソフトウェアモジュールの1つ又は複数のモジュールインターフェース定義を含む、請求項1~7のいずれか一項に記載のシステム。
【請求項9】
前記アプリケーション定義は、前記多数のロボット構成要素の第3のロボットの第1の高レベルソフトウェアモジュールの第1のモジュールインターフェースと前記第3のロボットの第2の高レベルソフトウェアモジュールの第2のモジュールインターフェースとの間の第2の通信チャネルの定義を更に含む、請求項1~8のいずれか一項に記載のシステム。
【請求項10】
請求項1~9のいずれか一項に記載の動作を含む方法。
【請求項11】
複数のコンピュータによって実行される場合、請求項1~9のいずれか一項に記載の動作を前記複数のコンピュータに実行させるコンピュータプログラム命令が符号化されている1つ又は複数の持続性コンピュータ記憶媒体。
【発明の詳細な説明】
【背景技術】
【0001】
背景
この明細書は、ソフトウェア制御システム用のフレームワークに関する。
【0002】
ソフトウェア制御システムは、物理的デバイス(例えば、アクチュエーター又はロボット)の動作を制御するソフトウェアシステムである。幾つかのソフトウェア制御システムは、リアルタイムシステムを制御するリアルタイムソフトウェア制御システムである。リアルタイムソフトウェア制御システムは、正常な動作を達成するための厳しいタイミング要件内で制御ルーチンを実行する必要がある。タイミング要件は、システムが故障状態に入るのを回避するために特定の時間窓内で、特定の動作を実行する必要がある、又は出力を生成する必要があることを指定することが多い。故障状態において、システムは、実行を停止する、又は正常な動作を中断する他の幾つかの措置を講じることができる。
【0003】
高い精度及びタイミング要件を有する物理的機械を制御するために、このようなリアルタイムソフトウェア制御システムを使用することが多い。1つの例として、コマンドを特定の周波数(例えば、1、10、又は100kHz)で繰り返し受信するように各ロボットに要求するリアルタイムソフトウェア制御システムによって、産業用ロボットの実行環境を制御することができる。ロボットのうち1つのロボットが、周期的時間窓のうち1つの時間窓中にコマンドを受信しない場合、ロボットは、ロボットの動作を停止することによって、又は保守位置に戻る回復手順を自動的に実行することによって、故障状態に入ることができる。
【0004】
このようなタイミング要件のために、非常に専門的なタスク用に特別に構成されている閉ソフトウェアモジュールによって、物理的機械用のソフトウェア制御システムを実施することが多い。例えば、構成要素を持ち上げ、印刷回路基板上に置くロボットを、低レベルピックアンドプレース動作の各々を制御する閉ソフトウェアシステムによって制御することができる。このようなソフトウェア制御モジュールの調整は、センサー観測、計画の生成、及び計画に従う動作を含む観測、計画、及び動作パターンに従うことが多い。
【発明の概要】
【課題を解決するための手段】
【0005】
概要
この明細書は、1つ又は複数のリアルタイムロボットを含むことができる多数のサブシステムの低レベル動作の調整を支援する構成可能性フレームワークを説明する。一般的に、フレームワークは、特定の実行環境でアプリケーションを構築する幾つかの基本機能を提供するソフトウェアモジュールのライブラリである。この明細書において、実行環境は、各計算ハードウェアを各々が有する多数のサブシステムを含む。フレームワークは、非同期通信チャネル、低レベル性能の発見、及び多数の独立デバイス間の調整のための機構を提供する。後述の技法は、観測、計画、動作機能を各々が有することができる、実行環境で多数のサブシステムを調整するアプリケーションを構築するフレームワークを提供する。
【0006】
下記の利点のうち1つ又は複数の利点を実現するように、この明細書に記載の主題の特定の実施形態を実施することができる。
【0007】
幾つかの既存のロボットアプリケーションフレームワークは、デバイス及びソフトウェアモジュールのインターフェースを指示し、ユーザが、特定の使用事例のためにインターフェースをカスタマイズすることができない。このアプリケーションに記載の幾つかのシステムにより、ユーザは、汎用低レベルソフトウェアモジュールを構成し、ニーズに合う高レベルソフトウェアモジュールを生成することができる。ユーザは、ソフトウェアモジュールのデータインターフェースを形成することもできる。更に、このような幾つかのシステムは、ソフトウェアモジュールの高レベル構成可能性を可能にし、カスタム高レベルソフトウェアモジュールを、それら自体で、より高いレベルのソフトウェアモジュールに更に構成することができる。このような高いレベルのソフトウェアモジュールは、これらの各構成ソフトウェアモジュールの間の通信チャネルを確立することができ、これらの各構成ソフトウェアモジュールの実行を調整することができる。
【0008】
この明細書に記載の幾つかのシステムは、ユーザの要求に応じてデバイス及びソフトウェアモジュールの各データインターフェースを宣言するデバイス及びソフトウェアモジュール用の発見機構を提供することもできる。従って、システムは、ユーザが、ソフトウェアモジュールを呼び出し、ソフトウェアモジュールのデータインターフェースを検索しやすくすることによって、ソフトウェアモジュールの使いやすい管理を提供する。従って、これらのシステムを、幅広いアプリケーション及び幅広いデバイスに適用することができる。
【0009】
この明細書に記載の幾つかのシステムにより、ユーザは、2つ以上のデバイスの間の通信チャネルを確立することができる。通信チャネルは、デバイス間でデータを渡すことができ、デバイスは、1つ又は複数のソフトウェアモジュールを非同期的に実行することができる。
【0010】
この明細書の主題の1つ又は複数の実施形態の詳細を、下記の添付図面及び明細書に記載する。主題の他の特徴、態様、及び利点は、明細書、図面、及び特許請求の範囲から明白になるであろう。
【図面の簡単な説明】
【0011】
図面の簡単な説明
図1】システムの例を示す線図である。
図2】多数のデバイスを有する実行環境の例を示す。
図3】デバイスインターフェース定義の例及びソフトウェアモジュールの例を示す。
図4】実行環境における1つ又は複数のデバイスによって実行されるべきプログラムを生成する処理の例のフローチャートである。
【発明を実施するための形態】
【0012】
様々な図面における同じ参照符号及び名称は、同じ要素を示す。
【0013】
詳細な説明
図1は、システム100の例を示す線図である。システム100は、この明細書に記載の技法を実施することができるシステムの例である。
【0014】
システム100は、プランナー120及びリアルタイムロボット制御システム150を含む多くの機能構成要素を含む。任意の適切な通信ネットワーク(例えば、イントラネット又はインターネット、又はネットワークの組み合わせ)を介して互いに結合された1つ又は複数の場所で1つ又は複数のコンピュータにインストールされたコンピュータプログラムとして、これらの構成要素の各々を実施することができる。システム100は、N個のロボット170a-nを含む実行環境170を更に含む。
【0015】
リアルタイムロボット制御システム150は、実行環境170でロボット170a-nを制御するように構成されている。リアルタイムロボット制御システム150は、実行環境170の動作における1つ又は複数の厳しい時間的制約条件を満たす必要がある。例えば、等間隔(例えば、10ミリ秒)で特定の動作を実行するように、実行環境170におけるロボットのうち1つに要求してもよく、ロボットが所与の時間窓で動作を常に実行することができない場合、ロボットは、故障状態に入る。
【0016】
リアルタイムロボット制御システム150は、ロボット170a-nを制御するために所定の順序で繰り返し実行する多数のソフトウェアモジュールを各々が含む1つ又は複数のソフトウェアモジュールループで構成されている。簡単にするために、図1は、M個のソフトウェアモジュール150a-mを含む単一のソフトウェアモジュールループを示す。各ソフトウェアモジュールは、ロボット170a-nの各ロボットの1つ又は複数の機能を実行することができる。
【0017】
各ソフトウェアモジュールは、ソフトウェアモジュールが入力として受信し、出力として供給するリアルタイムデータを指定する対応するデータインターフェースを有することができる。実行中に、ソフトウェアモジュールは、各ソフトウェアモジュールが実行するために必要なP個のリアルタイムメッセージ152a-pを交換する。例えば、ソフトウェアモジュール150aは、リアルタイムメッセージ152aをソフトウェアモジュール150bに供給することができ、ソフトウェアモジュール150bは、リアルタイムメッセージ152pをソフトウェアモジュール150mに供給することができる。
【0018】
プランナー120の全体的な目的は、特定のタスクを実行するために実行環境170でロボットをリアルタイムロボット制御システム150が制御することができるスケジュール135を生成することである。
【0019】
プランナー120は、アプリケーション定義110を受信する。アプリケーション定義110を、ユーザによって生成することができる。アプリケーション定義110は、実行環境170でロボットによって完了されるべき特定のタスクを識別することができる。タスクを完了するために、アプリケーション定義110は、ソフトウェアモジュールループにおけるソフトウェアモジュール150a-mを識別することを含む、ソフトウェアモジュールループを指定することができる。更に、アプリケーション定義110は、ソフトウェアモジュールのデータインターフェースに従ってソフトウェアモジュール間で交換されるリアルタイムメッセージ152a-pを指定することができる。
【0020】
ソフトウェアモジュール150a-mの一部は、低レベルソフトウェアモジュールを用いてユーザによって生成された1つ又は複数の低レベルソフトウェアモジュール及びデータインターフェースで構成された高レベルソフトウェアモジュールであることができる。即ち、カスタム高レベルソフトウェアモジュールは、1つ又は複数の低レベルソフトウェアモジュールに依存することができる。
【0021】
低レベルソフトウェアモジュールは、ロボット170a-nの各ロボットの基本機能を実行することができる。幾つかの実装形態において、各低レベルソフトウェアモジュールは、各ロボットに対してカスタマイズされているカスタムソフトウェアモジュールに依存する。即ち、カスタムソフトウェアモジュールは、特定のロボットのために設計されている、例えば、特定のロボットの特定の仕様のために調整されている特定の低レベル機能を実行することができる。場合によっては、低レベルソフトウェアモジュールは、ロボットの製造業者によって提供されているカスタムソフトウェアモジュールに依存することができ、即ち、カスタムソフトウェアモジュールを、追加設定なしでロボットのユーザに提供することができる。
【0022】
各ソフトウェアモジュールを、実行環境170におけるロボットのうち1つ又は複数のロボットに関連付けることができ、デバイスインターフェース定義を用いて、所与のデバイスが支援するソフトウェアモジュールを識別することができる。この処理について、図2及び図3を参照してより詳細に後述する。
【0023】
プランナー120は、アプリケーション定義110を使用して、リアルタイムロボット制御システム150用のスケジュール135を生成し、ソフトウェアモジュールループを実行し、特定のタスクを完了する。
【0024】
プランナー120は、リアルタイムロボット制御システム150にスケジュール135を与え、スケジュール135に従ってソフトウェアモジュールループを実行する。即ち、リアルタイムロボット制御システム150は、ソフトウェアモジュール150a-mを実行し、リアルタイムロボット制御システム150は、ロボット170a-nの移動を駆動するために実行環境170にコマンド155を発するようにする。ソフトウェアモジュール150a-mは実行環境170を制御しながら、ソフトウェアモジュール150a-mは、リアルタイムメッセージ152a-pを交換している。
【0025】
図2は、実行環境200の例を示す。実行環境は、アーム215を有するロボット210、ベルトコンベヤー220、及びカメラ230を含む幾つかのロボット構成要素を含む。
【0026】
実行環境における各デバイスは、どのソフトウェアモジュールを各デバイスが実行することができるのかを宣言するデバイスインターフェース定義を有する。例えば、ロボット210は、高レベルソフトウェアモジュール1A及び1B、及び低レベルソフトウェアモジュール1Cを含む、ロボットが実行することができるソフトウェアモジュールのリストを指定するロボットインターフェース210aを有する。各高レベルソフトウェアモジュールは、1つ又は複数の低レベルソフトウェアモジュール及び/又は1つ又は複数の他の高レベルソフトウェアモジュールで構成可能である。構成可能なソフトウェアモジュールについて、図3を参照してより詳細に後述する。
【0027】
同様に、ベルトコンベヤー220は、ベルトコンベヤーが実行することができるソフトウェアモジュールのリストを指定するベルトコンベヤーインターフェース220aを有し、カメラ230は、カメラが実行することができるソフトウェアモジュールのリストを指定するカメラインターフェース230aを有する。
【0028】
特定のタスクを達成するために実行環境200におけるデバイス用のアプリケーション定義を生成するユーザは、環境200におけるデバイスによって実行可能なソフトウェアモジュールを判定するためにデバイスインターフェース定義210a-cを使用することができ、タスクを達成するために利用可能なソフトウェアモジュールを構成することができる。特定の例として、アプリケーション定義は、ベルトコンベヤー220がロボット210の前の物体を移動させることができるベルトコンベヤーインターフェース220aにおける1つ又は複数のソフトウェアモジュールを識別することができる。更に、アプリケーション定義は、ロボット210が物体のピックアンドプレースを実行することができるロボットインターフェース210aにおける1つ又は複数のソフトウェアモジュールを識別することができ、ロボット210のアーム215は、ベルトコンベヤー220上のある位置からベルトコンベヤー220上の別の位置に物体を移動させる。最後に、アプリケーション定義は、カメラが、物体を移動させた後に物体の画像を取り込み、物体が正確な位置にあることを確認するためにこの画像を使用することができるカメラインターフェース230aにおける1つ又は複数のソフトウェアモジュールを識別することができる。例えば、カメラインターフェース230aにおけるソフトウェアモジュールは、画像を処理し、画像における識別物体の予測姿勢を生成する機械学習認知アルゴリズムを実行してもよい。アプリケーション定義は、これらのソフトウェアモジュールがソフトウェアモジュールループで反復的に実行されるべきであることを指定することができ、即ち、ベルトコンベヤーは、物体の位置を認可した後に物体をラインの更に下へ移動させることができ、ロボット210の前の同じ場所でその物体を新しい物体と交換することができる。
【0029】
更に、各ソフトウェアモジュールは、他のソフトウェアモジュールと通信することができる方法を識別するデータインターフェースを有することができる。例えば、ベルトコンベヤーインターフェース220aにおけるソフトウェアモジュールは、新しい物体がロボット210の前に移動されていることを伝達するロボットインターフェース210aにおけるソフトウェアモジュールにリアルタイムメッセージを送信してもよい。データインターフェースについて、図3を参照してより詳細に後述する。
【0030】
更に、実行環境200におけるデバイスによって実行されるべきソフトウェアモジュールを識別するアプリケーション定義は、ソフトウェアモジュールのうち1つ又は複数を非同期的に実行すべきであることを指定することができる。即ち、アプリケーション定義から生成された計画を実行するリアルタイムロボット制御システム、例えば、図1に示すリアルタイムロボット制御システム150は、ソフトウェアモジュールを起動し、ソフトウェアモジュールが完了しているコールバックを受信するまで、他の動作を実行することができる。例えば、リアルタイムロボット制御システムは、第1のソフトウェアモジュール及び第2のソフトウェアモジュールを並行して起動することができる。幾つかの既存のシステムにおいて、ソフトウェアモジュールを起動する場合、システムは、ソフトウェアモジュールが任意の他の動作を続ける前に完了されるのを待つ必要がある。ソフトウェアモジュールを非同期的に実行する能力は、CPUの観点からデバイス作動が実行するのに長い時間がかかるので、重要であり、従って、並行して多数の動作を実行することによって、ソフトウェアモジュールループの所与の反復で、多くの時間を節約することができる。例えば、実行環境200におけるロボット210によって実行される関節移動は、リアルタイム状況で長い時間である3秒かかることがある。
【0031】
図3は、デバイスインターフェース定義310の例及びソフトウェアモジュール320及び350の例を示す。
【0032】
デバイスインターフェース定義310は、特定のデバイス又はデバイスの特定のグループが実行することができるソフトウェアモジュールを宣言する。例えば、特定のデバイスは、高レベルソフトウェアモジュール320及び330、及び低レベルソフトウェアモジュール340を実行することができる。各高レベルソフトウェアモジュールは、1つ又は複数の低レベルソフトウェアモジュール及び/又は1つ又は複数の他の高レベルソフトウェアモジュールに依存する。各低レベルソフトウェアモジュールは、各デバイスの基本機能を実行することができる。高レベルソフトウェアモジュール320は、高レベルソフトウェアモジュール320a及び低レベルソフトウェアモジュール320b及び320cで構成されている。即ち、高レベルソフトウェアモジュール320によって実行される動作は、連続して又は並行して、高レベルソフトウェアモジュール320a及び低レベルソフトウェアモジュール320b及び320cによって実行される動作を含む。
【0033】
例えば、デバイスインターフェース定義310は、ロボットアームのためであることができ、高レベルソフトウェアモジュール320は、ピックアンドプレース動作を実行することができ、アームは、実行環境で物体を持ち上げ、実行環境で物体を異なる場所に移動させ、物体を下に置く。高レベルソフトウェアモジュール320aは、アームの移動を実行することができ、低レベルソフトウェアモジュール320bは、アームに装着された吸引把持部の吸引動作を実行することができ、低レベルソフトウェアモジュール320cは、アームに装着された吸引把持部の吸引除去動作を実行することができる。従って、物体の上の場所にアームを移動させる高レベルソフトウェアモジュール320a、吸引把持部を用いて物体を持ち上げる低レベルソフトウェアモジュール320b、物体を異なる場所に再度移動させる高レベルソフトウェアモジュール320a、及び吸引把持部を用いて物体を解放する低レベルソフトウェアモジュール320cを呼び出すことによって、高レベルソフトウェアモジュール320は、ピックアンドプレースを実行することができる。
【0034】
同様に、アームを移動させる高レベルソフトウェアモジュール320aは、M個の低レベルソフトウェアモジュール321-mで構成可能である。例えば、各低レベルソフトウェアモジュール321a-mは、特定の自由度でアームの移動を実行することができる。特定の例として、ロボットアームは、6自由度を有してもよく、その結果、アームを移動させる高レベルソフトウェアモジュールは、特定の自由度を各々が制御する6つの低レベルソフトウェアモジュールで構成されてもよい。
【0035】
高レベルソフトウェアモジュール320は、モジュールインターフェース322を含む。モジュールインターフェースは、高レベルソフトウェアモジュール320が、データを入力として受信する、又はデータを出力として送出することができる1つ又は複数の通信チャネルを指定する。通信チャネルは、即ち、同じロボットによって実行される2つのソフトウェアモジュールの間(例えば、高レベルソフトウェアモジュール320及び330の間)の内部にあることができる。通信チャネルは、即ち、それぞれ異なるロボットによって実行される2つのソフトウェアモジュールの間の外部にあることもできる。
【0036】
特定の例として、モジュールインターフェース322は、高レベルソフトウェアモジュール320と異なるロボット構成要素によって実行される別の高レベルソフトウェアモジュール350との間の通信チャネル360を指定することができる。同様に、高レベルソフトウェアモジュール350は、通信チャネル360を指定するモジュールインターフェース352を有する。
【0037】
場合によっては、通信チャネル360は、ハードリアルタイム通信チャネルであることができる。即ち、通信チャネル360は、特定のタイプのデータパケットを高レベルソフトウェアモジュール320から高レベルソフトウェアモジュール350に連続して(例えば、10ms又は100ms毎に)送信するように構成されている。場合によっては、高レベルソフトウェアモジュール350は、高レベルソフトウェアモジュール320がデータパケットを送信することができない場合、エラー状態に入ることができる。
【0038】
他の場合、通信チャネル360は、非同期であることができる。即ち、通信チャネル360は、特定のタイプのデータパケットを、データパケットが高レベルソフトウェアモジュール320によって利用される時はいつでも、高レベルソフトウェアモジュール320から高レベルソフトウェアモジュール350に送信するように構成されている。換言すれば、高レベルソフトウェアモジュール320は、不規則な頻度でデータパケットを生成し、従って、高レベルソフトウェアモジュール350は、変動する間隔でデータパケットを受信する。次に、高レベルソフトウェアモジュール350は、高レベルソフトウェアモジュール320がデータパケットを送信する毎に特定の動作を実行することができる。
【0039】
デバイスインターフェース定義310は、デバイスが入力データを受信する、又は出力データを送信することができる通信チャネルのリストを含むこともできる。即ち、デバイスインターフェース定義310は、デバイスインターフェース定義310における各ソフトウェアモジュールの外部通信チャネルを宣言することができ、外部通信チャネルは、ソフトウェアモジュールが、異なるデバイスの別のソフトウェアモジュールと共用する通信チャネルである。
【0040】
特定の例として、デバイスインターフェース定義310は、実行環境におけるカメラのためであることができ、高レベルソフトウェアモジュール320は、カメラによって取り込まれた実行環境における物体の画像を処理し、物体の推測姿勢を生成する機械学習認知アルゴリズムを実行することができる。ここで、物体の姿勢は、実行環境における物体の位置及び/又は向きを特徴付けるデータである。高レベルソフトウェアモジュール350は、実行環境におけるロボットアームによって物体のピックアンドプレースを実行することができる。従って、ソフトウェアモジュール350は、物体を持ち上げる前に物体の姿勢を知る必要がある。従って、通信チャネル360は、推測姿勢を高レベルソフトウェアモジュール320によって生成する時に、推測姿勢を高レベルソフトウェアモジュール320から高レベルソフトウェアモジュール350に非同期的に送信することができる。高レベルソフトウェアモジュール320は、受信推測姿勢を補間し、例えば、補間姿勢を、別の高レベル又は低レベルソフトウェアモジュールに別の通信チャネル上でリアルタイムに送信することができる。
【0041】
場合によっては、ソフトウェアモジュールのモジュールインターフェースによって指定された通信チャネルは、任意選択であることができ、即ち、ソフトウェアモジュールは、通信チャネルなしで実行することができる。他の場合、指定通信チャネルを必要とすることができる。
【0042】
高レベルソフトウェアモジュール320を、ユーザによって生成することができる。即ち、システムは、1つ又は複数のデバイスによって実行可能な多数の低レベルソフトウェアモジュール、及び高レベルソフトウェアモジュールを生成するために低レベルソフトウェアモジュールを構成するツールを提供することができる。例えば、システムは、高レベルソフトウェアモジュールの各モジュールインターフェースが継承することができるベースクラスを提供することができ、その結果、ユーザは、特定の入力チャネル及び出力チャネルを指定する任意のインターフェースを容易に設計することができる。従って、ユーザは、このような高レベルソフトウェアモジュールが所与のデバイス又はデバイスのグループに対して追加設定なしでハードウェア製造業者によって提供されない場合、特定の使用事例に特有の高レベルソフトウェアモジュールを生成することができる。
【0043】
幾つかの実装形態において、デバイスインターフェース定義310は、デバイスの分散システムのためであることができる。即ち、デバイスインターフェース定義310は、分散システムにわたる多数のデバイス、例えば、通信チャネルによって接続された多数のコンピュータ又はロボットによって実行可能なソフトウェアモジュールを宣言する。これらの場合、通信チャネルにより、ソフトウェアモジュールは、多数のデバイスにわたって非同期及びリアルタイム動作を実行することができる。
【0044】
図4は、実行環境における1つ又は複数のデバイスによって実行されるべきプログラムを生成する処理400の例のフローチャートである。処理400を、1つ又は複数のコンピュータにインストールされ、この明細書に従ってプログラムされた1つ又は複数のコンピュータプログラムによって実施することができる。例えば、処理400を、図1に示すプランナー120によって実行することができる。便宜上、処理400を、1つ又は複数のコンピュータのシステムによって実行するとして説明する。
【0045】
システムは、実行環境における各デバイス用の1つ又は複数のカスタム高レベルソフトウェアモジュールを受信する(ステップ410)。カスタム高レベルソフトウェアモジュールの一部又は全部は、リアルタイムロボット用の低レベルソフトウェアモジュールを含むことができる。
【0046】
システムは、各カスタム高レベルソフトウェアモジュール用のモジュールインターフェース定義を受信する(ステップ415)。ソフトウェアモジュールのモジュールインターフェース定義は、ソフトウェアモジュール用のモジュールインターフェースを宣言する。特に、カスタム高レベルソフトウェアモジュールのモジュールインターフェース定義は、カスタム高レベルソフトウェアモジュールが、異なるカスタム高レベルソフトウェアモジュールから入力データを受信する、又は異なるカスタム高レベルソフトウェアモジュールに出力データを送信することができる1つ又は複数の非同期又はリアルタイム通信チャネルを指定することができる。
【0047】
システムは、実行環境における各デバイス用のデバイスインターフェース定義を受信する(ステップ420)。特定のデバイスのデバイスインターフェース定義は、特定のデバイスが実行することができるソフトウェアモジュールを宣言することができる。特定のデバイスのデバイスインターフェース定義は、特定のデバイスが実行することができる各ソフトウェアモジュール用の1つ又は複数のモジュールインターフェースを含むこともできる。即ち、異なるデバイスによって実行される異なるソフトウェアモジュールで特定の通信チャネルを指定するモジュールインターフェースをソフトウェアモジュールが有する場合、特定のデバイス用のデバイスインターフェース定義は、特定の通信チャネルを指定することもできる。
【0048】
システムは、実行環境における第1のデバイスの第1のインターフェースと実行環境における第2のデバイスの第2のインターフェースとの間の通信チャネルの定義を受信する(ステップ430)。場合によっては、第2のデバイスの1つ又は複数のソフトウェアモジュールの実行は、通信チャネルを介して受信される情報を必要とし、従って、第1のデバイスから情報を受信するまで待つ。即ち、通信チャネルは、非同期であることができる。特定の例として、第1のデバイスは、リアルタイムロボットであることができ、チャネルに関する伝達情報は、リアルタイムロボットの関節の関節位置であることができる。別の特定の例として、第1のデバイスは、カメラであることができ、チャネルに関する伝達情報は、実行環境における物体の姿勢であることができる。
【0049】
受信高レベルソフトウェアモジュール、デバイスインターフェース定義、モジュールインターフェース定義、及び非同期チャネルの定義を、総称して「アプリケーション定義」と呼ぶことができる。
【0050】
システムは、受信アプリケーション定義を処理して、デバイスによって実行されるべき出力プログラムを生成する(ステップ440)。幾つかの実装形態において、出力プログラムのうち1つ又は複数の出力プログラムは、非同期的に実行可能である。
【0051】
この明細書に記載のロボット機能を、少なくとも部分的にハードウェア非依存であるハードウェア非依存ソフトウェアスタック、又は略して単にソフトウェアスタックによって実施することができる。換言すれば、ソフトウェアスタックは、特定のモデルのロボット又は特定のロボット構成要素に具体的に関連するコマンドを必要とすることなく上述の計画処理によって生成されるコマンドを入力として受け入れることができる。例えば、ソフトウェアスタックを、図1のリアルタイムロボット制御システムによって少なくとも部分的に実施することができる。
【0052】
ソフトウェアスタックは、一方の方向にハードウェア特定性を増加し、他方の方向にソフトウェア抽象化を増加する多数のレベルを含むことができる。低レベル動作を実行するデバイス及び低レベル状態を報告するセンサーを含むロボット構成要素は、ソフトウェアスタックの最低レベルである。例えば、ロボットは、モーター、エンコーダー、カメラ、ドライバー、把持部、特定用途向けセンサー、線形又は回転位置センサー、及び他の周辺デバイスを含む様々な低レベル構成要素を含むことができる。一例として、モーターは、加えられるべきトルク量を示すコマンドを受信することができる。コマンドの受信に応じて、モーターは、例えば、エンコーダーを用いて、ロボットの関節の現在位置をソフトウェアスタックのより高いレベルに報告することができる。
【0053】
ソフトウェアスタックにおける各々の次に高いレベルは、多数の異なる基本的な実装形態を支援するインターフェースを実施することができる。一般的に、レベル間の各インターフェースは、状態メッセージを下位レベルから上位レベルに供給し、コマンドを上位レベルから下位レベルに供給する。
【0054】
典型的に、コマンド及び状態メッセージを、各制御サイクル(例えば、1制御サイクル毎に1つの状態メッセージ及び1つのコマンド)中に周期的に生成する。ソフトウェアスタックのより低いレベルは一般的に、ソフトウェアスタックのより高いレベルよりも厳しいリアルタイム要件を有する。ソフトウェアスタックの最低レベルで、例えば、制御サイクルは、実際のリアルタイム要件を有することができる。この明細書において、リアルタイムは、ソフトウェアスタックの1つのレベルで受信されたコマンドを実行する必要があることを意味し、任意選択的に、状態メッセージを特定の制御サイクル時間内でソフトウェアスタックの上位レベルに戻って供給することを意味する。このリアルタイム要件を満たさない場合、例えば、全動作を静止させることによって、故障状態に入るように、ロボットを構成することができる。
【0055】
次に高いレベルで、ソフトウェアスタックは、モーターフィードバック制御器と呼ばれる特定の構成要素のソフトウェア抽象化を含むことができる。モーターフィードバック制御器は、任意の適切な低レベル構成要素のソフトウェア抽象化であることができ、単に文字通りのモーターでない。従って、モーターフィードバック制御器は、より低いレベルのハードウェア構成要素へのインターフェースを介して状態を受信し、スタックにおけるより高いレベルから受信された上位レベルコマンドに基づいてインターフェースを介してコマンドをより低いレベルのハードウェア構成要素に戻って送信する。モーターフィードバック制御器は、どのように上位レベルコマンドを解釈して下位レベルコマンドに変換すべきであるかを判定する任意の適切な制御規則を有することができる。例えば、モーターフィードバック制御器は、単純な論理規則からより上級の機械学習技法まで何でも使用して、上位レベルコマンドを下位レベルコマンドに変換することができる。同様に、モーターフィードバック制御器は、任意の適切な故障規則を使用して、故障状態に達している時を判定することができる。例えば、モーターフィードバック制御器が、上位レベルコマンドを受信し、特定の部分の制御サイクル内に低レベル状態を受信しない場合、モーターフィードバック制御器は、ロボットが、全動作を停止する故障状態に入るようにすることができる。
【0056】
次に高いレベルで、ソフトウェアスタックは、アクチュエーターフィードバック制御器を含むことができる。アクチュエーターフィードバック制御器は、各モーターフィードバック制御器を介して多数のロボット構成要素を制御する制御論理を含むことができる。例えば、幾つかのロボット構成要素(例えば、関節アーム)を、多数のモーターによって実際に制御することができる。従って、アクチュエーターフィードバック制御器は、多数のモーターのモーターフィードバック制御器にコマンドを送信するために関節アームの制御論理を使用することによって、関節アームのソフトウェア抽象化を提供することができる。
【0057】
次に高いレベルで、ソフトウェアスタックは、関節フィードバック制御器を含むことができる。関節フィードバック制御器は、ロボットにおける論理的自由度にマップする関節を表すことができる。従って、例えば、ロボットの手首をアクチュエーターの複雑なネットワークによって制御することができるけれども、関節フィードバック制御器は、その複雑さを取り除いて抽象化することができ、その自由度を単一関節として顕在化させる。従って、各関節フィードバック制御器は、アクチュエーターフィードバック制御器の任意に複雑なネットワークを制御することができる。一例として、実際のフィードバック制御器の別々のネットワークを各々が制御する6つの異なる関節フィードバック制御器によって、6自由度のロボットを制御することができる。
【0058】
ソフトウェアスタックの各レベルは、レベルに特有の制約を実行することもできる。例えば、アクチュエーターフィードバック制御器によって受信された特定のトルク値が許容範囲外である場合、アクチュエーターフィードバック制御器は、そのトルク値を範囲内に修正する、又は故障状態に入ることができる。
【0059】
関節フィードバック制御器への入力を駆動するために、ソフトウェアスタックは、低レベルにおける各構成要素に対するコマンドパラメータ(例えば、システムにおける各モーターに対する正、トルク、及び速度)を含むコマンドベクトルを使用することができる。関節フィードバック制御器から状態を顕在化させるために、ソフトウェアスタックは、低レベルにおける各構成要素に対する状態情報(例えば、システムにおける各モーターに対する位置、速度、及びトルク)を含む状態ベクトルを使用することができる。幾つかの実装形態において、コマンドベクトルは、低レベルにおける制御器によって実行されるべき制約に関する幾つかの制限情報を更に含む。
【0060】
次に高いレベルで、ソフトウェアスタックは、関節収集制御器を含むことができる。関節収集制御器は、部品抽象化のセットとして顕在化されるコマンド及び状態ベクトルの発行を処理することができる。各部品は、運動学的モデル(例えば、逆運動学的計算を実行する)、制限情報、及び関節状態ベクトル及び関節コマンドベクトルを含むことができる。例えば、単一関節収集制御器を使用して、ポリシーの異なるセットを低レベルにおける異なるサブシステムに適用することができる。関節収集制御器は、モーターを物理的に表す方法と制御ポリシーをこれらの部品に関連付ける方法との間の関係を効果的に分離することができる。従って、例えば、ロボットアームが可動ベースを有する場合、関節収集制御器を使用して、アームが移動する方法に関する制限ポリシーのセットを実行し、可動ベースが移動することができる方法に関する制限ポリシーの異なるセットを実行することができる。
【0061】
次に高いレベルで、ソフトウェアスタックは、関節選択制御器を含むことができる。関節選択制御器は、異なるソースから発行されているコマンドから動的に選択する役割を果たすことができる。換言すれば、関節選択制御器は、制御サイクル中に多数のコマンドを受信し、制御サイクル中に実行されるべき多数のコマンドのうち1つのコマンドを選択することができる。リアルタイム制御サイクル中に多数のコマンドから動的に選択する能力により、従来のロボット制御システムの制御の柔軟性を大幅に高めることができる。
【0062】
次に高いレベルで、ソフトウェアスタックは、関節位置制御器を含むことができる。関節位置制御器は、目標パラメータを受信し、目標パラメータを達成するのに必要なコマンドを動的に計算することができる。例えば、関節位置制御器は、位置目標を受信することができ、目標を達成するために設定点を計算することができる。
【0063】
次に高いレベルで、ソフトウェアスタックは、デカルト位置制御器及びデカルト選択制御器を含むことができる。デカルト位置制御器は、デカルト空間における目標を入力として受信し、逆運動学解法を使用して、関節位置空間における出力を計算することができる。次に、デカルト選択制御器は、関節位置空間における計算結果をスタックの次に低いレベルにおける関節位置制御器に渡す前に、デカルト位置制御器によって計算された結果に関する制限ポリシーを実行することができる。例えば、デカルト座標x、y及びzにおける3つの別々の目標状態を、デカルト位置制御器に与えることができる。ある場合、目標状態は、位置であることができる一方、他の場合、目標状態は、所望の速度であることができる。
【0064】
従って、ソフトウェアスタックによって提供されるこれらの機能は、上述の高レベル計画技法と自然に一致する方法で目標状態として容易に表されるべき制御指向性に対する広い柔軟性を与える。換言すれば、とられるべき具体的な動作を生成するために、計画処理が処理定義グラフを使用する場合、動作を、個々のロボット構成要素用の低レベルコマンドで指定する必要がない。むしろ、最終的に低レベルコマンドになるまで様々なレベルを介して変換されるソフトウェアスタックによって受け入れられる高レベル目標として、動作を表すことができる。更に、計画処理を介して生成される動作を、人間のオペレーターが動作を理解できる方法で、デカルト空間で指定することができ、その結果、スケジュールのデバッグ及び解析を、より簡単に、より速く、より直観的に実行する。更に、計画処理を介して生成される動作を、任意の特定のロボットモデル又は低レベルコマンド形式に密結合する必要がない。代わりに、ロボットモデルが同じ自由度を支援し、適切な制御レベルがソフトウェアスタックで実施されている限り、計画処理中に生成される同じ動作を、異なるロボットモデルによって実際に実行することができる。
【0065】
この明細書に記載の主題の実施形態及び機能動作を、この明細書に開示の構造及びこれらの構造の均等物を含む、デジタル電子回路、明白に具体化されたコンピュータソフトウェア又はファームウェア、コンピュータハードウェアで、又はこれらのうち1つ又は複数の組み合わせで、実施することができる。この明細書に記載の主題の実施形態を、1つ又は複数のコンピュータプログラムとして、即ち、データ処理装置による実行のための、又はデータ処理装置の動作を制御するための明白な持続性記憶媒体に符号化されているコンピュータプログラム命令の1つ又は複数のモジュールとして、実施することができる。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダム又は順次アクセスメモリデバイス、又はこれらのうち1つ又は複数の組み合わせであることができる。代わりに又は更に、データ処理装置による実行のための適切な受信器装置への送信用の情報を符号化するために生成される人工生成伝搬信号(例えば、機械生成電気、光、又は電磁信号)に、プログラム命令を符号化することができる。
【0066】
用語「データ処理装置」は、データ処理ハードウェアを意味し、プログラマブルプロセッサ、コンピュータ、又は多数のプロセッサ又はコンピュータを一例として含む、データを処理する全種類の装置、デバイス、及び機械を含む。装置は、専用論理回路(例えば、FPGA(フィールドプログラマブルゲートアレイ)又はASIC(特定用途向け集積回路))であることもでき、又はこの専用論理回路を更に含むことができる。任意選択的に、装置は、ハードウェアに加えて、コンピュータプログラム用の実行環境を生成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、又はこれらのうち1つ又は複数の組み合わせを構成するコードを含むことができる。
【0067】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリケーション、モジュール、ソフトウェアモジュール、スクリプト、又はコードとも呼ばれる、又は、プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリケーション、モジュール、ソフトウェアモジュール、スクリプト、又はコードとして記載されるコンピュータプログラムを、コンパイラ又はインタープリタ型言語、又は宣言又は手続き型言語を含む任意の形のプログラミング言語で書くことができ、コンピュータプログラムを、スタンドアロンプログラム又はモジュール、構成要素、サブルーチン、又は計算環境で用いるのに適している他のユニットとして含む任意の形で展開することができる。プログラムは、ファイルシステムにおけるファイルに対応してもよいけれども、ファイルを必要としなくてもよい。他のプログラム又はデータを保持するファイルの一部(例えば、マーク付け言語文書に記憶される1つ又は複数のスクリプト)、当該プログラムに専用の単一ファイル、又は多数の調整ファイル(例えば、1つ又は複数のモジュール、サブプログラム、又はコードの一部を記憶するファイル)に、プログラムを記憶することができる。1つのコンピュータに、又は1つの場所に設置された、又は多数の場所にわたって分散されデータ通信ネットワークによって相互接続された多数のコンピュータに、コンピュータプログラムを展開して実行することができる。
【0068】
特定の動作又は行動を実行するように構成されている1つ又は複数のコンピュータのシステムの場合、動作又は行動を動作中にシステムに実行させるソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせにシステムがインストールされていることを意味する。特定の動作又は行動を実行するように構成されている1つ又は複数のコンピュータプログラムの場合、データ処理装置によって実行される場合、動作又は行動を装置に実行させる命令を1つ又は複数のプログラムが含むことを意味する。
【0069】
この明細書で使用されるように、「エンジン」又は「ソフトウェアエンジン」は、入力と異なる出力を与えるソフトウェア実装入出力システムを意味する。エンジンは、機能の符号化ブロック(例えば、ライブラリ、プラットフォーム、ソフトウェア開発キット(「SDK」)、又はオブジェクト)であることができる。各エンジンを、1つ又は複数のプロセッサ及びコンピュータ可読媒体を含む任意の適切なタイプの計算デバイス(例えば、サーバー、携帯電話、タブレットコンピュータ、ノートブックコンピュータ、音楽プレーヤー、電子ブックリーダー、ラップトップ又はデスクトップコンピュータ、個人用デジタル補助装置、スマートフォン、又は他の固定又は携帯デバイス)で実施することができる。更に、エンジンのうち2つ以上エンジンを、同じ計算デバイス又は異なる計算デバイスで実施してもよい。
【0070】
入力データで動作し、出力を生成することによって機能を果たす1つ又は複数のコンピュータプログラムを実行する1つ又は複数のプログラマブルコンピュータによって、この明細書に記載の処理及び論理フローを実行することができる。更に、専用論理回路(例えば、FPGA又はASIC)によって、又は専用論理回路及び1つ又は複数のプログラム式コンピュータの組み合わせによって、処理及び論理フローを実行することができる。
【0071】
コンピュータプログラムの実行に適しているコンピュータは、汎用又は専用マイクロプロセッサ又は両方のマイクロプロセッサ、又は任意の他の種類の中央処理装置に基づくことができる。一般的に、中央処理装置は、命令及びデータを読み出し専用メモリ又はランダムアクセスメモリ又は両方のメモリから受信する。コンピュータの重要な要素は、命令を実施又は実行する中央処理装置、及び命令及びデータを記憶する1つ又は複数のメモリデバイスである。中央処理装置及びメモリを、専用論理回路によって補うことができ、又は専用論理回路に組み込むことができる。一般的に、コンピュータは、データを記憶する1つ又は複数の大容量記憶デバイス(例えば、磁気、光磁気ディスク、又は光ディスク)を更に含む、又は、大容量記憶デバイスからデータを受信し、又は大容量記憶デバイスにデータを転送し、又はデータを受信及び転送するように動作可能に結合されている。しかし、コンピュータは、このようなデバイスを有する必要がない。更に、コンピュータを、別のデバイス(例えば、ほんの数例を挙げると、携帯電話、個人用デジタル補助装置(PDA)、モバイル音声又は映像プレーヤー、ゲーム機、全地球測位システム(GPS)受信器、又は携帯記憶デバイス(例えば、ユニバーサルシリアルバス(USB)フラッシュドライブ))に組み込むことができる。
【0072】
コンピュータプログラム命令及びデータを記憶するのに適しているコンピュータ可読媒体は、半導体メモリデバイス(例えば、EPROM、EEPROM、及びフラッシュメモリデバイス)、磁気ディスク(例えば、内蔵ハードディスク又は取り外し可能ディスク)、光磁気ディスク、及びCD-ROM及びDVD-ROMディスクを一例として含む、全ての形の不揮発性メモリ、媒体及びメモリデバイスを含む。
【0073】
ユーザとの対話を提供するために、情報をユーザに表示する表示デバイス(例えば、CRT(陰極線管)又はLCD(液晶ディスプレイ)モニター)、及びキーボード及びポインティングデバイス(例えば、マウス、トラックボール、又はユーザがコンピュータへの入力を与えることができる存在感知可能ディスプレイ又は他の表面)を有するコンピュータで、この明細書に記載の主題の実施形態を実施することができる。他の種類のデバイスを使用して、同様にユーザとの対話を提供することができる。例えば、ユーザに与えられるフィードバックは、任意の形の感覚フィードバック(例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバック)であることができる。音響、音声、又は触覚入力を含む、ユーザからの入力を、任意の形で受信することができる。更に、ユーザによって使用されるデバイスに文書を送信し、このデバイスから文書を受信することによって、例えば、ウェブブラウザから受信された要求に応じてユーザのデバイス上のウェブブラウザにウェブページを送信することによって、コンピュータは、ユーザと対話することができる。更に、メッセージングアプリケーションを実行する個人用デバイス(例えば、スマートフォン)にテキストメッセージ又は他の形式のメッセージを送信し、返答としてユーザから応答メッセージを受信することによって、コンピュータは、ユーザと対話することができる。
【0074】
バックエンド構成要素(例えば、データサーバーとして)を含む、又はミドルウェア構成要素(例えば、アプリケーションサーバー)を含む、又はフロントエンド構成要素(例えば、この明細書に記載の主題の実装形態とユーザが対話することができるグラフィカルユーザインターフェース、ウェブブラウザ、又はアプリケーションを有するクライアントコンピュータ)を含む計算システムで、又は1つ又は複数のこのようなバックエンド、ミドルウェア又はフロントエンド構成要素の任意の組み合わせで、この明細書に記載の主題の実施形態を実施することができる。システムの構成要素を、任意の形又は媒体のデジタルデータ通信(例えば、通信ネットワーク)によって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(LAN)及びワイドエリアネットワーク(WAN)(例えば、インターネット)を含む。
【0075】
計算システムは、クライアント及びサーバーを含むことができる。クライアント及びサーバーは、一般的に、互いに遠く離れており、典型的に、通信ネットワークを介して対話する。クライアント及びサーバーの関係は、各コンピュータで実行し、互いにクライアント・サーバー関係を有するコンピュータプログラムによって生じる。幾つかの実施形態において、サーバーは、例えば、クライアントとしての機能を果たすデバイスと対話するユーザにデータを表示し、このユーザからユーザ入力を受信する目的で、データ(例えば、HTMLページ)をユーザデバイスに送信する。ユーザデバイスで生成されたデータ(例えば、ユーザ対話の結果)を、デバイスからサーバーで受信することができる。
【0076】
上述の実施形態に加えて、下記の実施形態も革新的である。
【0077】
実施形態1は、
多数のロボット構成要素を有するロボット実行環境を制御することを含む動作を実行するように構成されているリアルタイムロボット制御システム用のマルチデバイスアプリケーション定義を受信することであって、アプリケーション定義は、
多数のロボット構成要素の各ロボット構成要素用の1つ又は複数のカスタム高レベルソフトウェアモジュールであって、各カスタム高レベルソフトウェアモジュールは、ロボット構成要素の1つ又は複数の機能を実行するように構成されており、各カスタム高レベルソフトウェアモジュールは、各ロボット構成要素の1つ又は複数の低レベルソフトウェアモジュールに依存する1つ又は複数のカスタム高レベルソフトウェアモジュールと、
各カスタム高レベルソフトウェアモジュール用の各モジュールインターフェース定義であって、カスタム高レベルソフトウェアモジュールのモジュールインターフェース定義は、カスタム高レベルソフトウェアモジュールが、異なるカスタム高レベルソフトウェアモジュールから入力データを受信する、又は異なるカスタム高レベルソフトウェアモジュールに出力データを送信することができる1つ又は複数の非同期又はリアルタイム通信チャネルを指定する各モジュールインターフェース定義と、
各々の多数のロボット構成要素用の各デバイスインターフェース定義であって、ロボット構成要素のデバイスインターフェース定義は、ロボット構成要素が実行することができるソフトウェアモジュールを宣言する各デバイスインターフェース定義と
を含む、受信することと、
アプリケーション定義を処理して、多数のロボット構成要素によってそれぞれ実行されるべき出力プログラムを生成することであって、出力プログラムは、1つ又は複数のカスタム高レベルソフトウェアモジュールを実行する複数のコマンドを含み、多数のロボット構成要素の第1のロボット構成要素用の第1の出力プログラムは、第1のロボット構成要素に、第1の通信チャネルに関する情報を多数のロボット構成要素の第2のロボット構成要素用の第2の出力プログラムに伝達させる、生成することと
を含む方法である。
【0078】
実施形態2は、ロボット構成要素の各低レベルソフトウェアモジュールは、特定のロボット構成要素に対してカスタマイズされているカスタムソフトウェアモジュールに依存する、実施形態1に記載の方法である。
【0079】
実施形態3は、カスタムソフトウェアモジュールは、ロボット構成要素の製造業者によって提供されている、実施形態1又は2に記載の方法である。
【0080】
実施形態4は、アプリケーション定義は、第2のロボット構成要素の1つ又は複数の高レベルソフトウェアモジュールが、第1のロボット構成要素から受信される情報を待つべきであることを指定する、実施形態1~3のいずれか1つに記載の方法である。
【0081】
実施形態5は、第1のロボット構成要素は、リアルタイムロボットであり、第1の通信チャネルに関する伝達情報は、リアルタイムロボットの関節の関節位置である、実施形態1~4のいずれか1つに記載の方法である。
【0082】
実施形態6は、第1のロボット構成要素は、カメラであり、第1の通信チャネルに関する伝達情報は、実行環境における物体の姿勢である、実施形態1~5のいずれか1つに記載の方法である。
【0083】
実施形態7は、出力プログラムのうち1つ又は複数の出力プログラムは、非同期的に実行可能である、実施形態1~6のいずれか1つに記載の方法である。
【0084】
実施形態8は、各々の多数のロボット構成要素用のデバイスインターフェース定義は、デバイスが実行することができる各高レベルソフトウェアモジュールの1つ又は複数のモジュールインターフェース定義を含む、実施形態1~7のいずれか1つに記載の方法である。
【0085】
実施形態9は、アプリケーション定義は、多数のロボット構成要素の第3のロボットの第1の高レベルソフトウェアモジュールの第1のモジュールインターフェースと第3のロボットの第2の高レベルソフトウェアモジュールの第2のモジュールインターフェースとの間の第2の通信チャネルの定義を更に含む、実施形態1~8のいずれか1つに記載の方法である。
【0086】
実施形態10は、1つ又は複数のコンピュータと、1つ又は複数のコンピュータによって実行される場合、実施形態1~9のいずれか1つに記載の方法を1つ又は複数のコンピュータに実行させるように動作可能な命令を記憶する1つ又は複数の記憶デバイスとを含むシステムである。
【0087】
実施形態11は、データ処理装置によって実行される場合、実施形態1~9のいずれか1つに記載の方法をデータ処理装置に実行させるように動作可能な命令を含むコンピュータプログラムが符号化されているコンピュータ記憶媒体である。
【0088】
この明細書は多くの特定の実装形態の詳細を含むけれども、これらの詳細は、任意の発明の範囲、又は特許請求の範囲に記載の内容の範囲への限定と解釈されるべきではなく、むしろ、特定の発明の特定の実施形態に特有であり得る特徴の説明と解釈されるべきである。個々の実施形態の文脈でこの明細書に記載されている特定の特徴を、単一の実施形態で組み合わせて実施することもできる。逆に、単一の実施形態の文脈で記載されている様々な特徴を、多数の実施形態で別々に、又は任意の適切な部分組み合わせで実施することもできる。更に、特徴を、特定の組み合わせで動作すると上述し、そのようなものとして最初に特許請求の範囲に記載することができるけれども、場合によっては、特許請求の範囲に記載の組み合わせからの1つ又は複数の特徴を、組み合わせから削除することができ、特許請求の範囲に記載の組み合わせを、部分組み合わせ又は部分組み合わせの変型例に向けてもよい。
【0089】
同様に、動作を特定の順序で図面に示しているけれども、この順序は、望ましい結果を達成するために、図示の特定の順序又は逐次的順序でこのような動作を実行すること、又は例示の全動作を実行することを必要とすると理解されるべきではない。特定の状況で、マルチタスク処理及び並列処理は、有利であり得る。更に、上述の実施形態における様々なシステムモジュール及び構成要素の分離は、全実施形態でこのような分離を必要とすると理解されるべきではなく、記載のプログラム構成要素及びシステムを、一般的に、単一のソフトウェア製品に統合する、又は多数のソフトウェア製品にパッケージ化することができると理解されるべきである。
【0090】
主題の特定の実施形態が記載されている。他の実施形態は、下記の特許請求の範囲の範囲内にある。例えば、特許請求の範囲に列挙の動作は、異なる順序で実行可能であり、更に、望ましい結果を達成することができる。一例として、添付図面に示す処理は、望ましい結果を達成するために、図示の特定の順序又は逐次的順序を必ずしも必要としない。特定の場合によっては、マルチタスク処理及び並列処理は、有利であり得る。
図1
図2
図3
図4
【国際調査報告】