まずは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