3.ConsoleInFloatのソースコード編集

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

3.1 CMake

ここまでの作業でConsoleInFloatの雛型が生成されました。
次の作業としてCMakeを利用してビルド環境のConfigureを行います。
スタートメニューからCMake (cmake-gui)を起動します。

画面上部に以下のテキストボックスがあります。
・Where is the source code
・Where to build the binaries
「Where is the source code」にCMakeLists.txtがある場所、「Where to build the binaries」にビルドディレクトリを指定します。
CMakeLists.txtはデフォルトでは、<ワークス ペースディレクトリ>/ ConsoleInFloatに存在します。
ビルドディレクトリとは、ビルドするためのプロジェクトファイルやオブジェクトファイル、バイナリを格納する場所のことです。場所は任意ですが、この場合<ワークスペースディレクトリ>/ConsoleInFloat/buildのように分かりやすい名前をつけたConsoleInFloatのサブディレクトリを指定することをお勧めします。
ディレクトリは自動で生成されるので指定前に作成する必要はありません。
今回は以下のディレクトリを指定してください。

Where is the source code C:\rtcws\ConsoleInFloat
Where to build the binaries C:\rtcws\ConsoleInFloat\build


3_1
 

図 3-1 CMake
指定したら、下のConfigureボタンを押します。すると下図のようなダイアログが表示されますので、生成したいプロジェクトの種類を指定します。

3_2
 

図3-2 CMakeプロジェクト選択画面
・Specifty the generator for project

Visual Studioバージョン 生成したいプロジェクトの種類
Visual Studio 2013 Visual Studio 12 2013
Visual Studio 2015 Visual Studio 14 2015
Visual Studio 2017 Visual Studio 15 2017
Visual Studio 2019 Visual Studio 16 2019

・Optional platform for generator

オペレーション 選択
32 bit win32
64 bit x64

※空欄のまま実行すると64bitで実行されます。
ダイアログでFinishを押すとConfigureが始まります。問題がなければ下部のログウインドウにConfiguring doneと出力されますので、続けてGenerateボタンを押します。Generating doneと表示されればプロジェクトファイル・ソリューションファイル等の出力が完了します。

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

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

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

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

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

ポート名 m_outfloatOut
変数名 m_outfloat

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

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

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

m_outfloat.data=1.5
3.3 VisualStudioでソースコードを編集

先ほど指定したbuildディレクトリの中のConsoleInFloat.slnをダブルクリックしてVisual Studioを起動します。

3_11

図3-1 Visual Studio :起動画面

ConsoleInFloat.cppを開き、onActivated(), onDeactivated(), onExecute()を実装します。

onActivated()

RTC::ReturnCode_t ConsoleInFloat::onActivated(RTC::UniqueId ec_id)
{
    std::cout << " ConsoleInFloat onActivated" << std::endl;

  return RTC::RTC_OK;
}

onDeactivated()

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

onExecute()

RTC::ReturnCode_t ConsoleInFloat::onExecute(RTC::UniqueId ec_id)
{
    float num = 0;
    std::cout << "Plase input float number"; std::cin >> num;
    std::cout << "Output float number :" << num << std::endl;
    m_outfloat.data = num;
    m_outfloatOut.write();

  return RTC::RTC_OK;
}

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

3_12
 

図3-2 Visual Studio :ビルド

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


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

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

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

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

ポート名 self._OutFloatOut
変数名 self._d_outfloat

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

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

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

self._d_outfloat.data=1.5
3.2 ソースコードの編集

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

onActivated()

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

onDeactivated()

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

onExecute()

	def onExecute(self, ec_id):
		
		print("Please input float number")
		num=input()
		num=float(num)
		self._d_outfloat.data=num
		self._OutFloatOut.write()

		return RTC.RTC_OK

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