まずはIDLファイル(今回はtest.idl)を作成します。 OpenRTM-aist 1.2からは必ずデータ型にタイムスタンプが必要になっています。 BasicDataType.idlをインクルードして、データ型にタイムスタンプ(RTC::Time tm;)を追加してください。
#include "BasicDataType.idl"
module Sample {
struct SampleDataType
{
RTC::Time tm;
double data1;
short data2;
};
};
RTC Builderのデータポート設定画面でIDLファイルの横のBrowse…ボタンを押してIDLファイルを選択します。

するとデータ型一覧に独自データ型が追加されるため、SampleDataTypeを追加してください。

この後の手順は通常のRTCと同じですが、現状ではBasicDataType.idlがコピーされないため、プロジェクトのidlフォルダにBasicDataType.idlをコピーしてください。
まずはtest.idl、BasicDataType.idlを適当なフォルダに配置します。
--
|-- Sample.lua(RTCのソースコード)
|-- idl
|--test.idl
|--BasicDataType.idl
Sample.luaでIDLファイルの読み込み、データポートの初期化を行います。
local Sample = {}
Sample.new = function(manager)
local obj = {}
setmetatable(obj, {__index=openrtm.RTObject.new(manager)})
-- 以下が追加するコード
manager:loadIdLFile("idl/test.idl")
obj._d_in = openrtm.RTCUtil.instantiateDataType("::Sample::SampleDataType")
obj._inIn = openrtm.InPort.new("in", obj._d_in, "::Sample::SampleDataType")
この後は通常のデータポートの利用方法と同じです。
function obj:onExecute(ec_id) if self._inIn:isNew() then local data = self._inIn:read() print(data.data1) print(data.data2) end return self._ReturnCode_t.RTC_OK end