RTM-Lua

View the Project on GitHub Nobu19800/RTM-Lua

RTC作成手順

以下の手順はOpenRTM-aist 1.2以降のOpenRTPでしか実行できません。 OpenRTM-aist 1.2がリリースされていない場合は、こちらの手順を参考にしてください。

概要

このページでは、インポートの入力データを定数倍してアウトポートから出力するRTCの作成手順を説明します。

rtm_lua13

ひな型の作成

RTC Builderの起動

OpenRTP起動後に、ワークスペースの指定を行います。

ここで指定したディレクトリにプロジェクトが生成されるため、指定したディレクトリは覚えておいてください。 openrtp_lua1-1

Welcomeページが開きますが、×を押して消してください。 openrtp_lua2-1

右上のパースペクティブを開くボタンを押してください。 openrtp_lua3-1

一覧からRTC BuilderをダブルクリックするとRTC Builderが起動します。 openrtp_lua4-1

コード生成

プロジェクト作成

プロジェクトを作成します。 左上のOpen New RtcBuilder Editorボタンを押してください。 openrtp_lua5-1

プロジェクト名は適当な名前に設定してください。 ここではtest_luaと設定します。 openrtp_lua6-1

基本情報の設定

RTCの情報を入力します。 基本タブを開いている場合は、モジュール名、バージョン、カテゴリ名等の基本情報を入力することができます。 ここではモジュール名test_luaと設定します。

openrtp_lua7-1

アクティビティの設定

アクティビティの設定を行います。

まずRTCの基本的な動作として状態遷移があります。 RTCは生成状態、非アクティブ状態アクティブ状態エラー状態の4種類が存在します。 このうち生成状態については、即座に非アクティブ状態に遷移するため特に気にする必要はありません。

rtse_lua

非アクティブ状態は処理の開始を待っている状態であり、アクティブ状態は処理を実行している状態です。 例えばロボットを制御するなどの処理はアクティブ状態時に実行するため、処理を開始するためにはアクティブ状態にする必要があります。

アクティビティには以下の種類があり、RTCの状態遷移により実行されます。 以下のアクティビティコールバック関数に、ロボットを制御するなどの処理を記述します。

アクティビティ名 処理
onInitialize 初期化処理
onActivated アクティブ化されるとき1度だけ呼ばれる
onExecute アクティブ状態時に周期的に呼ばれる
onDeactivated 非アクティブ化されるとき1度だけ呼ばれる
onAborting ERROR状態に入る前に1度だけ呼ばれる
onReset resetされる時に1度だけ呼ばれる
onError ERROR状態のときに周期的に呼ばれる
onFinalize 終了時に1度だけ呼ばれる
onStateUpdate onExecuteの後毎回呼ばれる
onRateChanged ExecutionContextのrateが変更されたとき1度だけ呼ばれる
onStartup ExecutionContextが実行を開始するとき1度だけ呼ばれる
onShutdown ExecutionContextが実行を停止するとき1度だけ呼ばれる

アクティビティタブを開いてください。 今回はonExecuteコールバックのみを有効にします。 onExecuteをクリック後、下のON・OFFボタンをONに設定してください。

openrtp_lua8-1

データポートの設定

データポートの設定を行います。 データポートは連続的なデータをやり取りするためのポートです。 データの出力ポートがOutPort、入力ポートがInPortです。

rtse_lua2

今回はTimedLong型のデータをやり取りするInPort、OutPortを追加します。 データポートタブを開いてください。 以下のAddボタンを押すとポートを追加できます。

openrtp_lua10-1

ポート名を変更するには、名前をクリックしてください。

InPortの設定

以下のInPortを設定してください。

   
ポート名 in
データ型 RTC::TimedLong
OutPortの設定

以下のOutPortを設定してください。

   
ポート名 out
データ型 RTC::TimedLong

TimedLong型はタイムスタンプ付きのLong型データを格納できます。

コンフィギュレーションパラメータの設定

コンフィギュレーションパラメータの設定を行います。

コンフィギュレーションパラメータはRT System Editor等のツール、あるいはRTC起動時に値を変更可能なパラメータです。 データポートは連続的に値を入出力する場合に使いますが、コンフィギュレーションパラメータは制御のゲインなど変更の頻度の低いパラメータの使用するようにすると汎用性が高くなりやすいです。

コンフィギュレーションタブを開いてください。

Addボタンを押すとパラメータを追加できます。

rtm_lua12

以下のパラメータを設定してください。

   
名称 K
データ型 long
デフォルト値 10
制約条件 0<x<100
Widget spin

言語の設定

言語・環境タブを開いて言語にLuaを選択してください。 openrtp_lua11-1

コード生成

最後に基本タブに戻ってコード生成ボタンを押すとコードを生成します。

openrtp_lua12-1

この時、コードはワークスペースに設定したフォルダ内(workspace\test_lua\)に生成されます。

ソースコード編集

Luaソースコードを編集して処理を記述します。 test_lua.luaをSciTE等のエディタで開いてください。

openrtp_lua13-1

test_lua.luaのnew関数内に以下の変数が定義されています。

変数名 意味
obj._d_out OutPort出力データを格納する変数
obj._d_in InPort入力データを格納する変数
obj._outOut OutPortオブジェクト
obj._inIn InPortオブジェクト

openrtp_lua14-1

これらの変数はデータの入出力を行う際に使用するため覚えておいてください。

onExecute関数に処理を記述します。 onExecute関数はアクティブ状態の時に周期的に実行される関数です。

openrtp_lua15-1

onExecute関数を以下のように編集してください。

	function obj:onExecute(ec_id)
		if self._inIn:isNew() then
			local data = self._inIn:read()
			self._d_out.data = data.data * self._K._value
			self._outOut:write()
		end

		return self._ReturnCode_t.RTC_OK
	end

動作確認

RT System Editor起動

RT System Editorを起動します。 パースペクティブを開くウィンドウからRT System EditorをダブルクリックするとRT System Editorが起動します。 openrtp_lua16-1

ネームサービス起動

まずはネームサービスを起動してください。 ネームサービスは名前でオブジェクトを管理するためのサービスであり、RTCを名前でネームサービスに登録することができます。 ネームサービス起動ボタンで起動できます。 ネームサービスが起動したら、ネームサービスビューにlocalhostと表示されます。

openrtp_lua18-1

System Diagram表示

System Diagramを表示してください。 System Diagram上でRTSystemを作成します。

rtm_lua10

RTC起動

test_luaの起動

先ほど作成したテスト用コンポーネントtest_lua.luaをダブルクリックして起動します。

サンプルコンポーネントの起動

サンプルコンポーネントのConsoleInConsoleOutを起動します。 以下からOpenRTM Lua版のファイル一式を入手して、ConsoleIn.batConsoleOut.batをダブルクリックすると起動します。

既にダウンロード済みの場合は、そちらで起動しても問題ありません。

RTCが正常に起動した場合は、RT System EditorのネームサービスビューにRTCが表示されます。

openrtmlua600

ポート接続、アクティブ化

RT System EditorのOpen New System Editorボタンを押してシステムダイアグラムを表示してください。

openrtmlua630

システムダイアグラム上にRTCをドラックアンドドロップしてください。

openrtmlua610

InPortをOutPortにドラックアンドドロップしてコネクタを接続してください。

openrtmlua620

All Activateボタンを押すとRTCがアクティブ化して動作を開始します。 RTCが緑色に変化しない場合がありますが、動作に問題はありません。

openrtmlua640

ConsoleIn.luaを実行した時に起動したウィンドウに数値を入力すると、ConsoleOut側で10倍した数値が表示されます。

test_lua0のコンフィギュレーションパラメータKを操作すると、ConsoleIn側で入力した数値が同じでもConsoleOut側で表示される数値が変化します。

システムダイアグラム上のtest_lua0をクリックして、コンフィグレーションビューの編集ボタンを押してください。

openrtmlua650

編集ボタンで表示されたウインドウでコンフィギュレーションパラメータの操作ができます。 今回はWidgetをspinに設定したため、スピンボックスで設定できます。

openrtmlua660