RTM-Lua

View the Project on GitHub Nobu19800/RTM-Lua

独自データ型の作成手順

IDLファイルの作成

まずは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を使用する場合(OpenRTM-aist 1.2以降)

RTC Builderのデータポート設定画面でIDLファイルの横のBrowse…ボタンを押してIDLファイルを選択します。

rtcb1

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

rtcb2

この後の手順は通常のRTCと同じですが、現状ではBasicDataType.idlがコピーされないため、プロジェクトのidlフォルダにBasicDataType.idlをコピーしてください。

ソースコードを編集する場合

まずはtest.idlBasicDataType.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