MultipleOrderedECの使用方法
MultipleOrderedECを使用方法する方法について説明します
注意
RTミドルウェアに関する注意点
事前にC++版の場合はOpenRTM-aist-1.1.0-RELEASE、Python版の場合はOpenRTM-aist-Python-1.1.0-RC1をインストールしてください。
Python版に関する注意点
Python版を使用する場合は解凍したフォルダに移動して、
python setup.py install
とすることでインストールしてください。
スクリプトファイルによる編集に関する注意点
C++版は実行順序をLuaにより編集できます。そのため、lua5.1.dll、lua51.dllをパスの通ったフォルダに配置してください。
Python版はPythonで編集するため特に注意する点はないです。
GUIを使用する場合の注意点
C++版の場合は、QtCore4.dll、QtGui4.dllを動的リンクする必要があります。パスの通ったフォルダに配置してください。
また、Python版でGUIを使用する場合は、PyQtのインストールが必要です。
UbuntuでC++版を使用する場合の注意点
UbuntuでC++版を使用する場合、そちらでビルドする必要があります。
Lua(5.1以上)、Qt(4.6.0以上)をインストールしてください。
また、luabind-0.9.1をダウンロードして、MultipleOrderedEC-GUIのフォルダにコピーします。
開発環境としてCodeBlocksをインストールします。
そして、MultipleOrderedEC.cbpを開いてBuild Optionでluabindのヘッダーファイルのディレクトリの指定等を行った後ビルドします。
5.1 全体の手順
複数のRTCをMultipleOrderedECに関連付けして駆動するまでの手順を以下に示す。
5.2 MultipleOrderedECをRTCの実行コンテキストに指定
OpenRTM-aistでは実行コンテキストは設定ファイルrtc.confで設定可能です。
OpenRTM-aistのC++版で作成したRTCではMultipleOrderedECのC++版、OpenRTM-aistのPython版で作成したRTCではMultipleOrderedECのPython版を使用してください。
まずは、C++版の場合はMultipleOrderedEC.dll、Python版の場合はMultipleOrderedEC.pyの存在するフォルダを指定します。
manager.modules.load_path: MultipleOrderedEC.dll、MultipleOrderedEC.pyの存在するフォルダ
次に、MultipleOrderedEC.dll、もしくはMultipleOrderedEC.pyをダイナミックロードをします。
manager.modules.preload: MultipleOrderedEC.dllもしくはMultipleOrderedEC.py
そして、MultipleOrderedECを実行コンテキストに指定します。
exec_cxt.periodic.type: MultipleOrderedEC
rtc.confの例を以下に示します。
C++版
exec_cxt.periodic.type: MultipleOrderedEC corba.nameservers: localhost naming.formats: %n.rtc exec_cxt.periodic.rate: 1000 manager.modules.abs_path_allowed: no manager.modules.preload: MultipleOrderedEC.dll exec_cxt.periodic.gui: YES exec_cxt.periodic.filename: CompList.lua
Python版
exec_cxt.periodic.type: MultipleOrderedEC corba.nameservers: localhost naming.formats: %n.rtc exec_cxt.periodic.rate: 1000 manager.modules.abs_path_allowed: no manager.modules.preload: MultipleOrderedEC.py exec_cxt.periodic.gui: YES exec_cxt.periodic.filename: CompList.py
5.3 複数のRTCをMultipleOrderedECに関連付け
複数のRTCを1つの実行コンテキストに関連付けするには以下の方法があります。
5.3.1 複合コンポーネント
複数のRTCを1つの複合コンポーネントにすることで1つのMultipleOrderedECに関連付けする方法について説明します。
MultipleOrderedECを実行コンテキストに指定してMultipleOrderedECManager※、もしくはMultipleOrderedECManager-Python※を立ち上げてください。
※軽量版を使用したい場合は、軽量版をダウンロードしてファイルを差し替えてください
その際、rtc.confには以下のように記述しすることで、マスターマネージャを起動してください。
manager.is_master: YES
今回使用したrtc.confはここからダウンロードできます。
次に使用するコンポーネントを起動します。
そして、RT System Editorのエディタ上でコンポーネントを選択して右クリックして「複合コンポーネントの作成を選択します。
図5.1 複合コンポーネントの作成
そして、マネージャに立ち上げたマスターマネージャを指定します。
そして、実行コンテキストを共有する必要があるのでTypeにPeriodicECSharedを指定してOKを押すと複合コンポーネントが作成できます。
図5.2 複合コンポーネントの設定
5.3.2 add_componentにより関連付け
まず、OpenRTM-aist-1.1.0-Pyton-RC1、RTCtree、RTShellをインストールします。
そして、RTCを操作するためのスクリプトファイルを作成します。
スクリプトの流れを以下に示します。
RTCツリーではネームサーバーに登録されたコンポーネント等をツリー構造で表します。
RTCツリーは以下のコードで作成できます。
tree = rtctree.tree.RTCTree(servers='localhost')
RTCと実行コンテキストの関連付けのために、関連付けしたいRTCのノードを取得します。以下のようなコードで取得できます。引数にはコンポーネントのパスを記述します。
Test1 = tree.get_node(['/', 'localhost','Test10.rtc'])
続いて関連付けしたい実行コンテキストを取得します。以下のようなコードで取得できます。
EC1 = Test1.owned_ecs
このコードではTest1のRTCがオーナーの実行コンテキストを取得しています。
そして実行コンテキストとRTCを関連付けを行います。
EC1[0]._obj.add_component(Test2._obj)
このコードではTest2のRTCとTest1の実行コンテキストを関連付けしています。Test1の実行コンテキストにMultipleOrderedECを指定した場合、その他のRTCをTest1の実行コンテキストに関連付けすることになります。
さらに、先ほど関連付けした実行コンテキスト上でTest2のRTCをアクティブにするためには以下のようなコードを使用します。
EC1[0]._obj.activate_component(Test2._obj)
5.3.3 RT System Editorから関連付け
RT System EditorからRTCと実行コンテキストの関連付けをするためには、実行コンテキストビューから選択した実行コンテキストにアタッチします。
図5.3 RTSによる実行コンテキストの設定
この例ではTest10のRTCのオーナーの実行コンテキストにTest20のRTCを関連付けしています。
図5.4 RTSによる実行コンテキストとRTCの関連付け
関連付けしたTest20をTest10がオーナーの実行コンテキスト上でアクティブにするためには、Test20の実行コンテキストビューから、先ほど関連付けした実行コンテキストを選択してアクティブ化します。
図5.5 RTSによるRTCのアクティブ化
5.4 実行順序を編集
実行順序の作成GUIは以下の構成になっています。
図5.6 実行順序編集用GUIの構成
どのRTCのコアロジックを実行するかの選択はRTCの名前の選択ボックスから選択します。選択ボックスにはMultipleOrderedECに関連付けしたRTCが表示されます。
図5.7 実行するRTCの選択
RTCの実行ブロックを追加するにはRTCの実行ブロック追加ボタンを押します。ボタンは上下にあり、押した位置にブロックが追加されます。
図5.8 RTCの実行ブロックの追加
直列ブロックは直列ブロック追加ボタンにより追加できます。
図5.9 直列ブロックの追加
並列ブロックは並列ブロック追加ボタンにより追加できます。ボタンは上下にあり、押したボタンの位置に追加できます。
図5.10 並列ブロックの追加
実行順序を追加するには、実行順序追加ボタンを押します。以下の図のようにタブが追加されます。
図5.11 実行順序の追加
5.5 実行順序の条件の編集
実行順序の条件の編集GUIは以下の図のようになっています。各RTCの条件を変更するには条件選択ボタンから選択します。
図5.12 実行順序の選択条件編集用GUIの構成
以下の図ではTest10、Test20、Test30のRTCの状態で実行順序1の条件を決めています。Test10は「条件なし」なのでどの状態でも構わないということになります。しかし、Test20はActive、Test30はInActiveの状態でないと実行順序1は選択されません。
図5.13 構成の例
5.6 実行順序を開く、保存する
MultipleOrderedEC.dllの存在するフォルダに後述のオプションで指定するファイルが存在する場合はGUIが立ちあがった時に自動的に読み込みますが、別のファイルから読み込む場合はFile→Openを選択して任意のファイルを開きます。
図5.14 ファイルの保存
実行順序を保存するにはFile→Saveを選択して任意の名前で保存します。保存すると実行コンテキストのRTCの実行順序に反映されます。
5.7 テキストファイルによる実行順序の編集
実行順序はGUIからだけではなく、テキストファイルからも編集できます。軽量版では基本的にこの方法で実行順序を編集することになります。以下に例を示します。
{ { Test10 INACTIVE Test20 ACTIVE } { { Test20 Test30 ; Test10 ; } { Test10 ; } } } { { Test10 ERROR Test30 ACTIVE } { { Test20 Test10 Test30 ; Test10 Test20 ; } } }
この例に説明を加えると以下のようになります。
一番外側の括弧に各実行順序、さらにその中の最初の括弧に実行順序の選択条件、次の括弧に具体的な実行順序を記述します。
具体的な実行順序の括弧内には並列ブロック、さらにその中に直列ブロックを記述します。
各RTCの実行ブロックはスペースで区切り、直列ブロックの終了は「;」で記述します。
注意
コメント文は記述できません。
全角のスペースでは区切れません。
構文エラーの検出はできません。
要望があれば今後改善していきたいと思います。
5.8 スクリプトファイルによる編集
スクリプトファイルによる編集方法について説明します。C++版ではLua、Python版ではPythonにより記述できます。
5.8.1 C++版
C++版ではLuaにより記述できます。
.luaの拡張子のファイルを作成して、後述のオプションによりファイルを指定してください。
付属のCompList.luaは一例です。
Luaのテーブルで記述して、変数CompListに代入する必要があります。
CompList = { { { {"Test10", INACTIVE}, {"Test20", ACTIVE} }, { { {"Test20", "Test30"}, {"Test10"} }, { {"Test10"} } } }, { { {"Test10",ERROR}, {"Test30",ACTIVE} }, { { {"Test20","Test10","Test30"}, {"Test10","Test20"} } } } }
5.8.2 Python版
Python版ではPythonにより記述できます。
.pyの拡張子のファイルを作成してください。
付属のCompList.pyは一例です。
Pythonのリストで記述して、変数CompListに代入する必要があります。
また以下のように記述して、OpenRTM_aist.RTCをインポートしてください。
from OpenRTM_aist import RTC
さらに、各RTCの状態は
と記述します。
from OpenRTM_aist import RTC CompList = [ [ [ ["Test10", RTC.INACTIVE_STATE], ["Test20", RTC.ACTIVE_STATE] ], [ [ ["Test20", "Test30"], ["Test10"] ], [ ["Test10"] ] ] ], [ [ ["Test10",RTC.ERROR_STATE], ["Test30",RTC.ACTIVE_STATE] ], [ [ ["Test20","Test10","Test30"], ["Test10","Test20"] ] ] ] ]
5.9 特有なオプション
rtc.confのMultipleOrderedEC特有の設定項目は以下の通りです。
exec_cxt.periodic.gui
GUIを表示するかの設定。YESなら表示でそれ以外は非表示となります。
exec_cxt.periodic.filename
実行順序をどのファイルから読み込むかを設定します。ファイルの名前を記述してください。