以下の手順はOpenRTM-aist 1.2以降のOpenRTPでしか実行できません。 OpenRTM-aist 1.2がリリースされていない場合は、こちらの手順を参考にしてください。
このページでは、インポートの入力データを定数倍してアウトポートから出力するRTCの作成手順を説明します。

OpenRTP起動後に、ワークスペースの指定を行います。
ここで指定したディレクトリにプロジェクトが生成されるため、指定したディレクトリは覚えておいてください。

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

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

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

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

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

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

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

非アクティブ状態は処理の開始を待っている状態であり、アクティブ状態は処理を実行している状態です。 例えばロボットを制御するなどの処理はアクティブ状態時に実行するため、処理を開始するためにはアクティブ状態にする必要があります。
アクティビティには以下の種類があり、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に設定してください。

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

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

ポート名を変更するには、名前をクリックしてください。
以下のInPortを設定してください。
| ポート名 | in |
| データ型 | RTC::TimedLong |
以下のOutPortを設定してください。
| ポート名 | out |
| データ型 | RTC::TimedLong |
TimedLong型はタイムスタンプ付きのLong型データを格納できます。
コンフィギュレーションパラメータの設定を行います。
コンフィギュレーションパラメータはRT System Editor等のツール、あるいはRTC起動時に値を変更可能なパラメータです。 データポートは連続的に値を入出力する場合に使いますが、コンフィギュレーションパラメータは制御のゲインなど変更の頻度の低いパラメータの使用するようにすると汎用性が高くなりやすいです。
コンフィギュレーションタブを開いてください。
Addボタンを押すとパラメータを追加できます。

以下のパラメータを設定してください。
| 名称 | K |
| データ型 | long |
| デフォルト値 | 10 |
| 制約条件 | 0<x<100 |
| Widget | spin |
言語・環境タブを開いて言語にLuaを選択してください。

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

この時、コードはワークスペースに設定したフォルダ内(workspace\test_lua\)に生成されます。
Luaソースコードを編集して処理を記述します。 test_lua.luaをSciTE等のエディタで開いてください。

test_lua.luaのnew関数内に以下の変数が定義されています。
| 変数名 | 意味 |
|---|---|
| obj._d_out | OutPort出力データを格納する変数 |
| obj._d_in | InPort入力データを格納する変数 |
| obj._outOut | OutPortオブジェクト |
| obj._inIn | InPortオブジェクト |

これらの変数はデータの入出力を行う際に使用するため覚えておいてください。
onExecute関数に処理を記述します。
onExecute関数はアクティブ状態の時に周期的に実行される関数です。

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が起動します。

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

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

先ほど作成したテスト用コンポーネントtest_lua.luaをダブルクリックして起動します。
サンプルコンポーネントのConsoleIn、ConsoleOutを起動します。
以下からOpenRTM Lua版のファイル一式を入手して、ConsoleIn.bat、ConsoleOut.batをダブルクリックすると起動します。
既にダウンロード済みの場合は、そちらで起動しても問題ありません。
RTCが正常に起動した場合は、RT System EditorのネームサービスビューにRTCが表示されます。

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

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

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

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

ConsoleIn.luaを実行した時に起動したウィンドウに数値を入力すると、ConsoleOut側で10倍した数値が表示されます。
test_lua0のコンフィギュレーションパラメータKを操作すると、ConsoleIn側で入力した数値が同じでもConsoleOut側で表示される数値が変化します。
システムダイアグラム上のtest_lua0をクリックして、コンフィグレーションビューの編集ボタンを押してください。

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