8. ConsoleConvertFloatのソースコード編集

コンポーネントのソースコードを編集します。

8.1 CMake

ここまでの作業でConsoleConvertFloatの雛型が生成されました。
次の作業としてCMakeを利用してビルド環境のConfigureを行います。
[3.1 CMake]と同じ手順でCMakeを行ってください。

8.2 ひな型作成時の宣言とプログラムの変数の関係

・データポート
OpenRTPで設定したポート名と変数名は、C++のプログラムでは以下の変数名で定義されます。

InPort ポート名 m_変数名In
変数名 m_変数名
OutPort ポート名 m_変数名Out
変数名 m_変数名

ポート名はビルドビューで使用されます。

そのため、このプログラムでは以下の変数名で定義されています。

インポート名 m_infloatIn
インポート変数名 m_infloat
アウトポート名 m_outfloatOut
アウトポート変数名 m_outfloat

今回OpenRTPで指定したポートの変数はRTC::TimedFloat型になります。
RTC::TimedFloat型は、以下の構造体で定義されています。

データ型 変数 意味
float data floatの値
RTC::time tm タイムスタンプ

floatの値を代入するには、以下のように記述します。

m_infloat.data=1.5
m_outfloat.data=1.5

・コンフィギュレーション
コンフィギュレーションはC++では以下の変数名で定義されます。

変数名 m_変数名

そのため、このプログラムではm_valueで定義されています。

8.3 VisualStudioでソースコードを編集

先ほど指定したbuildディレクトリの中のConsoleConvertFloat.slnをダブルクリックしてVisual Studioを起動します。
起動後、ConsoleConvertFloat.cppを開き、onActivated(), onDeactivated(), onExecute()を実装します。

onActivated()

RTC::ReturnCode_t ConsoleConvertFloat::onActivated(RTC::UniqueId ec_id)
{
    std::cout<<" ConsoleConvertFloat onActivated" << std::endl;
  return RTC::RTC_OK;
}

onDeactivated()

RTC::ReturnCode_t ConsoleConvertFloat::onDeactivated(RTC::UniqueId ec_id)
{
    std::cout << " ConsoleConvertFloat onDeactivated" << std::endl;
  return RTC::RTC_OK;
}

onExecute()

RTC::ReturnCode_t ConsoleConvertFloat::onExecute(RTC::UniqueId ec_id)
{
    float value = 0;
    if (m_infloatIn.isNew())
    {
        m_infloatIn.read();
        value = m_infloat.data * m_value;
        std::cout << m_infloat.data << " * " << m_value << std::endl;
        m_outfloat.data = value;
        m_outfloatOut.write();

    }

  return RTC::RTC_OK;
}

編集を終えたら保存をしてください。
以下のように右クリックでコンポーネントのビルドをするか、画面上部の[BUILD]から[Build Solution]を選択してビルドをしてください。ビルドが終了すればコンポーネントが生成されます。
C:\rtcws\ConsoleConvertFloat\build\src\Debug に生成されたConsoleConvertFloatComp.exeをダブルクリックで起動させます。
問題なく起動できることを確認してください。


8.1 ひな型作成時の宣言とプログラムの変数の関係

OpenRTPで設定したポート名と変数名は、Pythonでは以下の変数名で定義されます。

InPort ポート名 self._ポート名In
変数名 self._d_変数名
OutPort ポート名 self._ポート名Out
変数名 self._d_変数名

そのため、このプログラムでは以下の変数名で定義されています。

インポート名 self._InFloatIn
インポート変数名 self._d_infloat
アウトポート名 self._OutFloatOut
アウトポート変数名 self._d_outfloat

RTC.TimedFloat型は、以下の構造体で定義されています。

データ型 変数 意味
float data floatの値
RTC.time tm タイムスタンプ

floatの値を代入するには、以下のように記述します。

self._d_infloat.data=1.5
self._d_outfloat.data=1.5

・コンフィギュレーション
Pythonでは以下の変数名で定義されます。

変数名 self._変数名の配列の1番目

そのため、このプログラムではself._value[0]と記述します。

8.2 ソースコードの編集

ConsoleConvertFloatディレクトリの中のConsoleConvertFloat.pyを開いてください。
以下のように、onActivated(), onDeactivated(), onExecute()を実装します。

onActivated()

	def onDeactivated(self, ec_id):
		print("ConsoleFloatConvert onActivated")
		return RTC.RTC_OK

onDeactivated()

	def onActivated(self, ec_id):
		print("ConsoleFloatConvert onDeactivated")
		return RTC.RTC_OK

onExecute()

	def onExecute(self, ec_id):
		if self._InFloatIn.isNew():
			data=self._InFloatIn.read()
			value =data.data*self._value[0]
			print(data.data ," * ", self._value[0])
			self._d_outfloat.data =float(value)
			self._OutFloatOut.write()
		return RTC.RTC_OK

編集を終えたら保存をしてください。
ConsoleConvertFloat.pyをダブルクリックで起動させます。
問題なく起動できることを確認してください。