プログラムの開発をはじめるに当たり、まず、プログラムにおける基本の骨組みだけを持ったスケルトンプログラムを作成します。今後プログラムを新規作成する際はこのスケルトンプログラムを元に作り始めると便利です。
Visual Studioであれば、起動時に表示されるウィザードより「Win32APIプログラム」など、ソフトの種類ごとにスケルトンプロジェクトを作成できますが、あいにくVisual StudioにはRTコンポーネントのスケルトンを作成する機能はありません。そこで、RTコンポーネントのプロジェクト作成機能が含まれている統合開発環境「Eclipse」を利用したいと思います。
Eclipse本体は、先ほどの準備でダウンロードし、適当なフォルダ(c:\eclipse\など)にファイルを展開していると思います。では、そのフォルダを開いて「eclipse.exe」を実行してください。
※お使いのeclipseのバージョンにより画面のレイアウトが異なる場合があります。その場合、各項目名をご確認ください。
Eclipseを起動したら、メニューより「ウィンドウ」→「パースペクティブを開く」→「その他」をクリックしてください。
「パースペクティブを開く」というウィンドウが表示されるので、その中から「RTC Builder」を選択して「OK」をクリックしてください。
なお、一度EclipseでRTC Builderを開いておくとその設定が残るため、次回以降の起動時にはもう一度開く必要はありません。
メニューより「ファイル」→「Open New Builder Editor」をクリックしてください。
クリックすると、新規に作成するプロジェクトの設定画面をウィンドウ中央エリアに表示します。
設定画面では、下記の項目をそれぞれ設定してください。
↓「基本」のタブ。「モジュール名」「バージョン」「ベンダ名」「モジュールカテゴリ」「実行周期」「RTCプロジェクトの保存先」などを入れる
↓「アクティビティ」のタブ。onExecuteをクリックし、「ON」にチェックを入れる
↓「言語・環境」のタブ。C++にチェックを入れる
全ての設定が終わったら「基本」タブの「コード生成」をクリックしてください。
クリックすると「指定されたプロジェクトが〜新規に生成してもよろしいですか?」という確認画面が表示されますが、そのまま「OK」をクリックしてください。
以上で、Eclipseでの作業は終わりです。それでは試しに作成されたプロジェクトのフォルダを開いてみましょう。
RTC Builderで作成したプロジェクトは、デフォルトで「C:\Documents and Settings\(ユーザ名)\workspace\PeriodicConsoleOut」に作成されます。
フォルダの中にはVisual Studioのソリューションファイル(*.sln及び*.sld)がありますが、これらを開いてもエラーが出て正しく開けません。Visual Studioでプロジェクトを開く前に、フォルダに「copyprops.bat」というバッチファイルがあるので、一度これを実行してください。実行するとフォルダに「rtm_config.vsprops」というファイルが生成されます。これでVisual Studioで開けるようになります。
それでは、実際にVisual Studioよりプロジェクトを開き、ビルドしてみてください。「ソリューションの構成」は、「Debug」「Release」のどちらでも問題ありません。
ビルドするといくつかのフォルダとファイルが自動生成されます。このプロジェクトの実行ファイルは、「(プロジェクト名)Comp」というフォルダの「Debug」もしくは「Release」のフォルダに作成されます。また、「Release」でビルドした場合「components」というフォルダが作成され、この中にも実行ファイルがコピーされます。デバッグ作業(開発)が全て完了したら「Release」でビルドして、「components」フォルダの実行ファイルを利用してください。
正しくビルドできない場合、OpenRTM-aistのインストールが正しく行なわれていないなどの可能性があるため、一度OpenRTM-aistをアンインストールして、お使いのVisual Studioにあわせた正しいバージョンをインストールしなおしてください。
本キットでは、「VS-WRC003LV SDK」という専用ライブラリを用いて、CPUボードを通信制御します。本ライブラリを自作のRTコンポーネントに組み込む場合は、関係するファイルをフォルダにコピーしてVisual Studioの設定を変更する必要があります。VS-WRC003LV SDK自体の概要や使用方法などの説明は、以下の解説ページを参照してください。
「CWRC003LVHID.lib」「WRC003LVHID.h」の二つのファイルを、作成したRTコンポーネントのプロジェクトのフォルダにコピーしてください。
プロジェクトに最初から含まれるヘッダファイルに、「WRC003LVHID.h」と「CWRC003LVHID.lib」のインクルード・リンク設定を下記の通り記述してください。
プログラムを実行する場合は、実行ファイルと同じフォルダに「CWRC003LVHID.dll」をコピーする必要があります。実行ファイルが作成されるのは、前述した通り「(プロジェクト名)Comp」フォルダの「Debug」もしくは「Release」、及び「components」フォルダの3箇所なので、それぞれにファイルをコピーすると良いです。
続いて、このプログラムの処理部分を作成して、CPUボードから数値を読み出して画面に表示するだけの非常に簡単なプログラムを作成してみたいと思います。
作成されたプロジェクトをVisual Studioで開き、プロジェクトに含まれるC言語ソースファイル(*.cpp)を開きます。ソースファイルは二種類ありますが、ファイル名の末尾に「Comp」が付かない方を開いてください。
ソースを開くと、RTコンポーネントの仕様に応じた様々な関数があらかじめ備わっています。今回はonExecute関数に処理を追加します。この関数を以下の内容に書き直してください。
RTC::ReturnCode_t VS_RTC_SAMPLE::onExecute(RTC::UniqueId ec_id) |
ソースを書き直したらビルドしてください。ビルド時にヘッダファイルやリンクなどVS-WRC003LV SDKに関連したエラーが出る場合は、Visual Studioの設定やファイルのコピーが正しく行なわれているかご確認ください。
ちなみに、onExecute関数は、プログラム実行中は一定時間毎に1回呼ばれる処理です。この関数はRTコンポーネントの開発でよく使われます
onExecute関数が実行される間隔は、下図のように(プロジェクト名).cppのソースファイルの初めの構造体宣言で'exec_cxt.periodic.rate'の数値を記入すると設定できます。この数値はHz単位で、「1.0」であれば「1秒間に1回」、10.0に変更すると「1秒間に10回=0.1秒に1回」実行されることになります。0の場合は1000.0(=1ミリ秒に1回)と同じ設定になります。また、いずれの場合でも、関数の処理に指定の時間以上かかると実行周期が遅くなります。
では、ビルドしたRTコンポーネントを実行してみたいと思います。
通常のプログラムと同様に、ビルドして作成された*.exe形式のファイルを実行してください。
実行時に「CWRC003LVHID.dllが見つからなかったため。・・・」という警告が表示される場合は、CWRC003LVHID.dllが正しい場所にコピーされているか確認してください。また、CWRC003LVHID.dllを正しくコピーしていても、Visual Studio上で実行するとファイルパスの関係上、正しくプログラムを起動できない場合がありますので、実行ファイルをダブルクリックして起動してください。
PCとCPUボードを接続してください。
ちなみに、実際にロボットと通信するのはRTコンポーネントをアクティブにした時になります
RTMのName Serverをスタートし、続いてRT System Editorを起動してください。RT System Editorを起動したら、メニューより「File」→「Open New System Editor」をクリックしてください。
「Open New System Editor」をクリックすると、画面中央に「System Diagram」という領域が表示されます。また、画面左のツリーには、自作のRTコンポーネントの項目が表示されています。ここで自作のRTコンポーネントを「System Diagram」へドラッグしてください。ドラッグしたら、画面左上のAll Activeボタン(緑色のボタン)をクリックして、RTコンポーネントをスタートさせてください。
スタートしたら、自作のRTコンポーネントのウィンドウ(プロンプト画面)を確認してください。
CPUボードと正しく通信できていれば、下画像のようにCPUボードのセンサ情報を1秒ごとに画面に表示します。
これで、RTコンポーネントでCPUボードを使う準備が一通り整いました。
次は、データ出力ポートを持つコンポーネントでCPUボードのセンサ情報を配信してみましょう。
Bluetooth通信モジュール「VS-BT003」を拡張して、PC・ロボット間の通信を無線化する場合は、ソース内の「if(CWRC_Connect()){ 」の部分を変更します。
Bluetoothによる通信を行う場合は、CWRC_Connect_BT関数を使用します。この関数には引数「unsigned int port」が存在し、関数を実行する際にPCで認識しているVS-BT003のシリアルポート(COM)番号を数値として与える必要があります。
シリアルポート番号を調べる方法は、製品の取扱説明書をご参照ください。
この環境でCWRC_Connect_BT関数を実行する場合は、サンプルソースを以下のように書き換えます(書き換わった行は太字)
RTC::ReturnCode_t VS_RTC_SAMPLE::onExecute(RTC::UniqueId ec_id) |
以降のサンプルソースでも、Bluetoothで通信する場合は、CWRC_Connect関数をCWRC_Connect_BT関数に置き換えてビルドしてください。