5. ConsoleOutFloatのソースコード編集

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

5.1 CMake

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

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

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

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

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

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

ポート名 m_infloatIn
変数名 m_infloat

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

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

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

m_infloat.data=1.5
5.3 VisualStudioでソースコードを編集

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

onActivated()

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

onDeactivated()

RTC::ReturnCode_t ConsoleOutFloat::onDeactivated(RTC::UniqueId ec_id)
{
    std::cout << "ConsoleOutFloat onDeactivated" << std::endl;

  return RTC::RTC_OK;
}

onExecute()

RTC::ReturnCode_t ConsoleOutFloat::onExecute(RTC::UniqueId ec_id)
{
    if (m_infloatIn.isNew())
    {
        m_infloatIn.read();
        std::cout << "float number :" << m_infloat.data << std::endl;
    }

  return RTC::RTC_OK;
}

編集を終えたら保存をしてください。
保存後、右クリックでコンポーネントのビルドをするか、画面上部の[BUILD]から[Build Solution]を選択してビルドをしてください。ビルドが終了すればコンポーネントが生成されます。

C:\rtcws\ConsoleOutFloat\build\src\Debug に生成されたConsoleOutFloatComp.exeをダブルクリックで起動させます。
問題なく起動できることを確認してください。


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

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

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

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

ポート名 self._InFloatIn
変数名 self._d_infloat

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

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

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

self._d_infloat.data=1.5
5.2 ソースコードの編集

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

onActivated()

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

onDeactivated()

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

onExecute()

	def onExecute(self, ec_id):
		if self._InFloatIn.isNew():
			self._d_infloat.data=self._InFloatIn.read()
			print("float number :",self._d_infloat.data)
		return RTC.RTC_OK

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