Urbi は、ロボット工学や複雑なシステム向けのアプリケーション開発に使用される、C++で記述されたオープンソースのクロスプラットフォーム ソフトウェアコンピューティング プラットフォームです。 [ 2 ] Urbi は、UObject 分散 C++ コンポーネント アーキテクチャに基づいています。また、並列かつイベント駆動型のスクリプト 言語であるurbiscriptオーケストレーション言語も含まれています。UObject コンポーネントは urbiscript にプラグインでき、相互作用やデータ交換を指定するためにスクリプト化できるネイティブ オブジェクトとして表示されます。UObject は urbiscript インタープリタにリンクすることも、「リモート」モードで自律プロセスとして実行することもできます。
urbiscript言語は、2003年にパリのENSTAの認知ロボティクス研究所でジャン=クリストフ・バイリーによって作成されました。2006年に設立されたGostai社を通じて、業界で積極的に開発が進められてきました。現在はBSDライセンスのオープンソースプロジェクトとしてGitHubで公開されています。[ 3 ]
urbiscript言語は、オーケストレーションスクリプト言語と表現するのが最も適切でしょう。ビデオゲームにおけるLuaのように、urbiscriptはC++コンポーネントを機能的な動作に統合するために使用できます。CPU負荷の高いアルゴリズム部分はC++に任せ、動作のスクリプト部分は、より柔軟で保守しやすく、プログラム実行中の動的な相互作用を可能にするスクリプト言語に任せることができます。オーケストレーション言語として、urbiscriptは並列処理とイベントベースプログラミングを言語セマンティクスの一部として持つことで、プログラムにいくつかの有用な抽象化をもたらします。並列動作とイベントへの反応のスクリプト化は、ほとんどのロボットや複雑なAIアプリケーションの中核的な要件であるため、urbiscript(およびUrbiプラットフォーム全体)は、そのようなアプリケーションに最適です。
以下の例は、urbiscriptでボール追跡アクション/知覚ループを記述する方法を示しています。headYaw /headPitchは2つのモーターオブジェクトで、ballはボール検出オブジェクトです(xとyの範囲は-1/2から1/2です)。
( ball.visible )が真であるときはいつでも、headYaw.valにcamera.xfov * ball.xを加算し、headPitch.valにcamera.yfov * ball.yを加算する。when は、関連付けられた条件が真である限り、ループ内でコードの一部を実行するために使用されます。記号&は、両方のコマンドが同時に開始され、並列実行されることを指定するために使用されます。
その他の注目すべきイベント駆動型構造としては、イベントが発生したときに一度だけ関連コードを実行する` at`などがあります。
( speech.hear ?( "hello" ) ) { voice.say ( " How are you? " ) & robot.standup ( ) ; }すべてのコマンドまたはコマンドのグループにはタグを付けることができ、必要に応じて後で停止する方法が提供されます。
myTag : while ( true ) echo ( "これは終わりのないループです" ), at ( button . pressed ) myTag . stop ;上記の例では、コマンドの最後にカンマが付いていることに注目してください。これにより、直前のコマンドがバックグラウンドで実行され、フローの実行、特に次の「at」コマンドの実行が続行されます。
UObjectコンポーネントアーキテクチャにより、開発者はUrbi内で任意のJava/C++オブジェクトと連携させることができ、選択されたメソッドと属性をurbiscriptで可視化できます。これらのメソッドと属性は実際にはコンパイル済みのコードです。オブジェクトの属性には特別な通知機能を設定することで、urbiscript/Urbi側でこれらの属性に変更があった場合にC++側に通知することができます。
UObjectはC++テンプレートを使用して、要求されたメソッドを型チェックを処理するインターフェース機構に透過的にマッピングします。
UObjectは、コンパイル時にUrbiに直接リンクされている場合、または動的ロードされている場合に、プラグインモードで使用できます。この場合、C++オブジェクトはUrbiメモリを直接共有するため、効率的な統合が実現します。これは通常、モータードライバやセンサードライバなどの時間制約の厳しいコンポーネントに使用されます。同じUObjectは、変更せずにリモートコンポーネントとして使用することもできます。この場合、UObjectはUrbiサーバーのIPアドレスをパラメータとして実行される自律プログラムになります。どちらの場合も、オブジェクトはurbiscript内でネイティブのurbiscriptオブジェクトとして透過的に表示されます。
リリース日:
発表済み: