ここでは、サンプルロボットアプリケ-ションのRobotMimamoriSample(ロボット見守りサービス)を実行します。
構築するロボットアプリケーションの概要と機能、システム構成
準備するもの
- ノートPC
- USBカメラ(Webカメラ)
ロボットアプリケーションの機能
- ロボットの状態を定期的にサーバへ通知します。
- 撮影したカメラ画像を定期的にサーバに送信します。
- 撮影した画像は、ロボットサービス(RSNPサーバ上)に実装されたRSiロボットマップからの参照が可能です。
開発環境の設定
ロボットアプリケーションを開発するためにはロボットアプリケーションの開発環境を構築してください。ロボットアプリケーションの開発環境は、ロボットアプリケーションの環境構築から設定できます。
Webカメラの接続(認識の確認)
Webカメラを使って画像を認識できることを確認します。(※WebカメラをPC上で認識するために、専用のデバイスドライバのインストールが必要な場合があります。)
Eclipseの起動と環境設定
ロボットアプリケーションのダウンロードとインポート
-
プロジェクトのダウンロード
RobotMimamoriSample.zipをダウンロードして、任意のフォルダに解凍します。
-
プロジェクトのEclipseへのインポート
- Eclipseを起動し、「ファイル」-「インポート」から「インポート」ダイアログを開き、「一般」-「既存のプロジェクトをワークスペースへ」を選択し、「次へ」ボタンをクリックします。
- インポートするプロジェクトを選択するウィンドウが表示されます。「ルート・ディレクトリーの選択」にチェックを行い、右側にある「参照」ボタンを押します。インポートするプロジェクトが含まれるディレクトリを指定して「OK」ボタンをクリックします。
- インポート可能なプロジェクトの一覧が表示されます。インポートしたいプロジェクトの左側のチェックボックスにチェックを行った後で「終了」ボタンをクリックします。
- パッケージ・エクスプローラーの中にインポートしたプロジェクトが追加されて表示されます。
Java Media Framework(JMF)のインストールとビルドパスの設定
本アプリケーションではWebカメラから画像を取得して、利用します。そのために、音声や動画など時系列で変化するメディアをJavaアプリケーションやアプレットに追加するためのJavaライブラリーであるJMFをインストールします。その後に、EclipseのJavaのビルド・パスにJMFを追加します。
JMFのインストール
ORACLEのJMFダウンロードサイト (http://www.oracle.com/technetwork/java/javase/download-142937.html) より、”JMF”をダウンロードし、インストールします。
EclipseへのJMFのビルド・パス設定
インストールしたJMFへのビルド・パスをEclipseへ設定します。
- インストールしたJMFのlibフォルダ配下にある以下のライブラリーを、”RobotMimamoriSample”プロジェクトのlibフォルダにコピーします。
- jmf.jar
- 『パッケージ・エクスプローラー』ビューで”RobotMimamoriSample”プロジェクトを選択し、右クリックでポップアップメニューを表示し、「プロパティー」を選択して『プロパティー』ダイアログを開き、左ペインのツリーで「Java のビルド・パス」を選択し、右ペインで「ライブラリー」タグを開きます。
- 「JARの追加…」ボタンを押し、『JAR の選択』ダイアログを開き、先ほど追加したlibフォルダ配下のライブラリファイルを選択し、「OK」ボタンを押します。
- ビルド・パス上のJARおよびクラス・フォルダーの内容を確認し「OK」ボタンを押します。
ロボットアプリケーションの実行、動作確認
ロボットアプリケーションを実行し、その動作を確認します。ソースコードの変更を行わない場合には、Webカメラの画像ではなく、単色画像がロボットアプリケーションからの画像としてロボットサービスに送られます。まず、この状態で動作確認を行います。
-
アカウント設定
アカウント情報は、ロボットアプリケーションはロボットサービスと接続するための、ロボットアカウントと、Webブラウザからサービスへログインし、ロボットの動作確認を行うための管理者アカウントがあります。アカウント情報を下記に記述します。
ロボットアカウント(ロボットからのロボットサービスへの接続に使用)
- ユーザID:robot030
- パスワード:robot030_pass
ロボット管理者アカウント(Webブラウザからの動作確認に使用)
- ユーザID:rssr030
- パスワード:rssr030_pass
ロボットアカウントについては、ロボットアプリケーションにあらかじめ引数を設定します。Eclipseを起動し、RobotMimamoriSampleプロジェクトを右クリックしてポップアップメニューを表示します。「実行」を選択して『実行の構成』ダイアログを開き、左ペインのツリーで「Java アプリケーション」-「RobotMimamoriMain」を選択します。「引数」タグに、上記で示したロボットアカウントをユーザID、パスワードの順で記述します。
-
ロボットアプリケーションの実行
RobotMimamoriMain.javaを選択し、プログラムを実行してください。
-
ロボットアプリケーションの動作確認
Webブラウザから以下のURLへアクセスし、ロボットサービス上でロボットアプリケーションがどのように動作しているのかを確認してみましょう。
-
RSiロボットマップ(http://rsi.aiit.ac.jp/)
RSiロボットマップ上にロボットが点在しています。一時間以上アクセスしていないロボットは灰色、アクセス一時間未満のロボットは緑色に表示されます。StateNotificator.javaのrunメソッドは、緯度・経度の引数を持ちます。マップ上では、この経度・緯度の位置にロボットが表示されます。表示のロボットをクリックすると、ロボットの詳細情報を確認できます。
public void run() {
if (statusParams != null && inp != null) {
synchronized (this) {
// XML作成
buff.append(“<latitude>35.423936</latitude>”
+ “<longitude>136.760750</longitude>”
+ “<location>岐阜</location>”
+ “<comment>RSNPチュートリアル@日本</comment>”);
buff.append(“</status></mimamori>”);
・
・ -
ロボットみまもりサービス
ロボットみまもりサービス(http://rsi.aiit.ac.jp/rsnpServer/mimamori/login/)に行くと、Login画面が表示されます。「アカウント設定」で示したロボット管理者アカウントでLoginします。Login後ロボットアプリケーションからの情報(ロボットの位置・現在の接続状態・ロボット周辺の画像)を確認できます。
-
ロボットアプリケーションの停止操作
http://localhost:9000/ にアクセスすることによってロボットアプリケーションからロボットサービスへの接続が切断されます。
実際のカメラ画像表示、動作確認
単色画像ではなく、実際のWebカメラ画像をロボットアプリケーションからロボットサービスに配信するソースコードに書き換えます。下記のように、CameraImage.javaのcreateImageメソッドの一部を変更します。“byte[] bytes = out.toByteArray();”はコメントアウトします。
// 画像を取得
BufferedImage im;
im = new BufferedImage(240, 180, BufferedImage.TYPE_INT_RGB);
・
・
}
// 単色画像を取得する場合のロジック
//byte[] bytes = out.toByteArray();
// カメラ画像を取得する場合のロジック
byte[] bytes = ImgCapture.getInstance().getImg();
return bytes;
アレンジ(ソースコードを変更し、表示位置・コメント等が変更されたことを確認)
StateNotificator.javaのrunメソッドの一部を改変することでロボットアプリケーションがロボットサービスに送る位置情報を変更することができます。下記ソースコードの位置情報(緯度・経度・場所)を変更して、RSiロボットマップでどのように変更が反映されるか確認します。RSiロボットマップ上のロボットの表示位置が異なることを確認します。
if (statusParams != null && inp != null) {
synchronized (this) {
// XML作成
buff.append(“<latitude>33.83752</latitude>”
+ “<longitude>132.798969</longitude>”
+ “<location>松山</location>”
+ “<comment>RSNPチュートリアル@日本</comment>”);
buff.append(“</status></mimamori>”);
・
・