Defining Naming Formats
on OpenRTM-aist C++ for Windows
Windows OS上のOpenRTM-aist C++版でのネーミングフォーマットの定義方法を解説します。
▶ 更新履歴
1. はじめに
RTCを実行すると、そのRTCはネーミングサービスに登録されます。
このときどのような名前でネーミングサービスに登録するのか、定義することができます。
ネーミングフォーマットを定義することで、同じRTCを同時に複数個実行することもできます。
それでは実際に、ネーミングフォーマットを定義し、同じRTCを複数実行してみましょう。
5. おわりに
これでOpenRTM-aist C++版で、Naming Formatsの基本的な使用方法を学べました。
このように、命名規約を定義することで、各RTCを判別しやすくするだけでなく、
同じRTCを複数個ネーミングサービスに登録することもできます。
また、1つのRTCは複数のRTCと接続することができることも確認しました。
4. 動作確認
作成し配置した各RTCを実行し、動作確認を行って下さい。
このとき、Name Serverに登録された各RTCの名前が先ほど定義したとおりに命名されていることを確認してください。
また、以下のように、ConsoleInを3つのConsoleOutに接続してください。
-
RTC::ReturnCode_t ConsoleIn::onExecute(RTC::UniqueId ec_id)
-
{
-
std::cout << "input number: ";
-
std::cin >> m_data.data;
-
-
setTimestamp(m_data);
-
m_dataOut.write();
-
-
return RTC::RTC_OK;
-
}
-
3-4行目
キーボードから数値を入力するよう促し、データを格納します。
-
6-7行目
タイムスタンプをセットし、Outポートから出力します。
以上のコーディングが終了したら、Releaseモードに変更した後、F7ボタンを押してビルドして下さい。
もしエラーが出た場合は、コードの記述ミスを探して修正して下さい。
これで、ConsoleIn RTCの完成です。
2.2 ConsoleOutの実装
ConsoleOutのテンプレートの設定は以下のようになります。
-
モジュール名 ConsoleOut
-
ベンダ名 あなたの名前
-
モジュールカテゴリ TEST
-
実行周期 1000
-
アクションコールバック
onInitialize
onExecute
-
ポート名(InPort) receive
-
データ型 TimedLong
-
変数名 data
-
表示位置 LEFT
-
言語 C++
ConsoleOut.cppのコードを以下に示します。
2. テスト用RTCの作成
ConsoleInとConsoleOutを使ってネーミングフォーマットについて学びます。
まずは、2つのRTCを実装してください。
以前作成したものがある場合は、それを使用しても構いません。
2.1 ConsoleInの実装
ConsoleInのテンプレートの設定は以下のようになります。
-
モジュール名 ConsoleIn
-
ベンダ名 あなたの名前
-
モジュールカテゴリ TEST
-
実行周期 1000
-
アクションコールバック
onInitialize
onExecute
-
ポート名(OutPort) keyboard
-
データ型 TimedLong
-
変数名 data
-
表示位置 RIGHT
-
言語 C++
ConsoleIn.cppのコードを以下に示します。
-
RTC::ReturnCode_t ConsoleOut::onExecute(RTC::UniqueId ec_id)
-
{
-
if(m_dataIn.isNew())
-
{
-
m_dataIn.read();
-
std::cout << "received: " << m_data.data << std::endl;
-
std::cout << "sec: " << m_data.tm.sec << " nsec: " << m_data.tm.nsec << std::endl;
-
}
-
-
return RTC::RTC_OK;
-
}
-
3-8行目
新しいデータが入力された場合、値をコンソール上に表示します。
・3行目
m_dataInのisNewメソッドで新しいデータがあるか調べます。
・6-7行目
m_dataInのreadメソッドで値を読み、コンソール上に取得した値とタイムスタンプを表示します。
以上のコーディングが終了したら、Releaseモードに変更した後、F7ボタンを押してビルドして下さい。
もしエラーが出た場合は、コードの記述ミスを探して修正して下さい。
これで、ConsoleOut RTCの完成です。
3. ネーミングフォーマットの定義
ネーミングフォーマットの定義方法を学びます。
3.1 実行環境の構築
つぎのように実行ファイルやコンフィグレーションファイルを配置し、RTCの実行環境を構築します。
RTCの実行ファイルは先ほどビルドしたものをコピーして配置してください。
また、コンフィグレーションファイルについては次節以降で説明します。
-
TestRTCsフォルダ
-
ConsoleInフォルダ
-
ConsoleInComp.exe
-
ConsoleIn.conf
-
rtc.conf
-
-
ConsoleIn_0フォルダ
-
ConsoleInComp.exe
-
ConsoleIn.conf
-
rtc.conf
-
-
ConsoleIn_1フォルダ
-
ConsoleInComp.exe
-
ConsoleIn.conf
-
rtc.conf
-
-
ConsoleIn_2フォルダ
-
ConsoleInComp.exe
-
ConsoleIn.conf
-
rtc.conf
-
-
以上のように、各RTCごとにフォルダを用意し、その中に実行ファイルとコンフィグレーションファイルを配置します。
各RTCはrtc.confを読みにいき、その中に記述されているコンフィグレーションファイルを読むという構成になっています。
そのため、コンフィグレーションファイルを2つずつ用意しています。
3.2 ConsoleInのコンフィグレーションファイルの作成
ConsoleInが読み込むコンフィグレーションファイルを作成します。
適当なテキストエディタで各ファイルを作成してください。
ConsoleIn_Xフォルダ内のrtc.confのコードを以下に示します。
Xには0,1,2を代入して考えて下さい。
-
1行目
<モジュールカテゴリ>.<RTC名>.config_file: <コンフィグレーションファイル名>
以上のように、コンフィグレーション名を記述します。
ConsoleIn_Xフォルダ内のConsoleOut.confのコードを以下に示します。
-
TEST.ConsoleOut.config_file: ConsoleOut.conf
-
exec_cxt.periodic.rate:1000.0
-
naming.formats: %m_X.rtc
-
1行目
exec_cxt.periodic.rate: <実行周期>
以上のように、RTCの実行周期をを記述します。
この値を変更することで、あとからRTCの実行周期を指定することができます。
-
2行目
naming.formats: <RTC名>
以上のように、RTCの命名規約を定義することができます。
命名規約に使用できるキーワードには以下のようなものがあります。
キーワード
%n
%t
%m
%v
%V
%c
%h
%M
%p
説明
インスタンス名
タイプ名
モジュール名
ヴァージョン名
ベンダー名
カテゴリ名
ホスト名
マネージャ名
プロセスID
例
ConsoleIn0
ConsoleIn
ConsoleIn
1.0.0
あなたの名前
TEST
PC名
manager
6068
このようなキーワードと文字列リテラルを組み合わせることでRTC名を命名できます。
今回は、%mがキーワードになり、_X.rtcが文字列リテラルになります。
この名前が違えば、同じRTCを複数個登録することができます。
ここでは、3つのConsoleOutを同時に使用することを考えています。
