<RemoMortionEditorについて>
Remo Mortion Editor(以降、RMEと略す)はRemoを動かすためのサンプルソフトとして作成されたものです。Remo単体、又はヒューマノイドキットのRemoHKP、又はオプションのAGB65シリーズなどを動作テストさせることが可能です。
又、AGB65-SSC/Pを使ったロボット(RemoHKPを含む)であれば、モーションの登録や再生などもできますので、リモートロボットを構築することもできます。
ここにおいてあるバージョンは簡単な操作しかできませんが、Remoのページのサンプルプログラムのところに自律ロボット作成に必要なTIPSや、RMEの改造方法などが紹介しています。
本ソフトウェアはサンプルソフトにつき、ご質問等にはお答えできませんのでご了承下さい。
<開発環境について>
RMEはMicrosoftのVisualC#2008(以降VC#と略す)で作られています。VC#はVisualStudio(以降VSと略す)という製品の一部です。RMEを使うには無償版のVisualC#2008ExpressEdisionをMicrosoftのホームページから入手するか、VisualStudioを購入するかが必要です。
VisualStudioはバージョンがいろいろありますが、StandardEditionで十分だと思います。アカデミック版で1万円ぐらい、普通に買うと3万円ぐらいです。
無償で入手できるExpressEditionはこちらからダウンロードできます。ExpressEditionは、言語が固定されるだけで、機能的にはStandardとあまり変わりません。個人でプログラムする範囲で、個人使用するならExpressEditionで十分です。
??2008ExpressEditionのダウンロードページ
2009年11月25日現在で、ExpressEditionのダウンロードページはこのようになっています。C#2008の「Webインストール(ダウンロード)」というところを押すとダウンロードが開始されます。ダウンロード及びインストールにはかなり時間がかかりますので、注意してください。インストール時には同時に.NetFreamWork3.5というソフトもインストールされます(これが無いとVSが動かない)。
※このページはMicrosoftの都合で変わったりしますので、適時、ホームページを探して入手してください。現時点ですでにVS2010が発表されています。
なぜC#か?というところですが、現在はWindowsPCのプログラムはC++、C#、BisualBasicが主流かと思います。
C#はC++やJavaをもとに作られた言語(と聞いてます)ですので、C++が理解できる方はC#のソースを理解できると考えました。
BisualBasicは、もともと高度なプログラムを組む目的ではなかったものを無理やり改変した結果現在に至り、最新版では過去のものと大きくかわったりしています。初心者が覚えやすいというメリットもあまり無く、ビギナーが始めて覚えるならC#の方がわかりやすい(構文が短い)ようなので、C#を選択しました。実際に、企業用途では、BisualBasicプログラマがC#へ移行しているところが多いようです。
<C#の勉強方法、MSDNの活用>
プログラム未経験者がプログラムを覚えようとする場合、本やインターネットを見るかと思いますが、どうしても人に聞きたくなる場合があります。このような場合のために、MicrosoftではMSDNというプログラマー向けのページがあります。ここのフォーラムで質問をすると、教えてもらえます。
書籍で勉強する場合ですが、難易度が違う複数の本で勉強することをお勧めします。私の場合、初心者向け1冊、中級向け4冊、逆引き大全1冊で勉強しました。C#(またはWindowsPCプログラム)未経験者という方であれば、RME程度のプログラムを書くまでにおそらく1日2時間勉強して一ヶ月程度はかかると思われます。まず、書籍などでひととおり勉強した後に、RMEを改造するなどしても良いでしょう。
<RMEダウンロード>
Remo
Mortion Editor ダウンロード(Remo Mortion Editor.lzh)
(右クリックで対象を保存。その後、解凍)
VC#2008のプロジェクトがそのまま圧縮されています。
<VC#の起動〜RMEプロジェクトを開く>
ここまでで、VC#のインストールが終わり、RMEをダウンロードして解凍したとします。
Windowsで「スタート」−>「全てのプログラム」−>「Microsoft Visual C# Express
Edition」(又はVisualStudio)で、VC#を起動します。
すると、このようなウィンドウが開きます。これがVS(もしくはVC#ExpressEdition)の開発ウィンドウになります。
「ファイル」−>「開く」−>「プロジェクト」でプロジェクトを開きます。
ファイルの選択になるので、「Remo Mortion Editor.csproj」ファイルを指定し、「開く」ボタンを押します。
すると、RMEのプロジェクトが開いて、プログラムを書き換えたり実行したりできるようになります。
<RMEの起動>
「F5」キーを押すとRMEが実行されます。
終了時には、右上の×を押すか、メニューから「ファイル」−>「終了」を選択します。
<COMポートの設定>
ここでは、すでにPC側のBluetoothとREMのBluetoothがペアリングされ、COMポートがわかっている状態とします。ペアリングをしていない場合は、Remoのページの動作説明の部分を参照願います。
RMEとPCを通信させる場合は、Bluetoothで設定したCOMポート番号をRMEに設定します。
「通信設定」−>「COM設定」を押します。
COM設定ウィンドウが開くので、ペアリングした際にPCのBluetoothに割り当てられたCOM番号を選択し、「設定」ボタンを押します。
この後、画面上には変化がありませんが、内部ではCOM番号を記録しています。プログラムを閉じるとこの情報が消えてしまいますので、ファイルに保存します。
メニューから「ファイル」−>「保存」を押します。
「名前を付けて保存」ウィンドウが開くので、ファイル名に適当な名前(上の例だと”MyRobot”)を付けて、「保存」ボタンを押します。ファイルにはrsfという拡張子が自動的につけられます。このファイルは、COM番号や、サーボ配置などを記録する、ロボット情報ファイルになります。
保存する(又はファイルを開く)と、タイトルの横に、現在のロボット情報ファイル名が表示されます。
rsfファイルはテキスト形式なので、メモ帳などで開くことができます(が、書き換えないで下さい。)。試しに、今作ったファイルを開いてみると、
このように、<<COM>>というところに、選択したCOM番号が記録されているのがわかります。
次回からは、このロボット情報ファイルを開くだけで、COM番号が設定されます。
<接続>
Remo側に電源をつないで、スイッチを入れてください。すでにペアリングは終了しているので、Remo側のLED_SのLEDが一秒おきに点滅している状態だと思います。この状態は、ペアリングが終了して、Remo側がPC側から接続されるのを待っている状態です。
接続するには、PC側のCOMポートをオープンするだけで接続されます。
RMEの場合、通信ボタンを押すことによってCOMのオープン、クロースをするようになっています。
<−通信ボタン
通信ボタンはプッシュボタンのような動きをします。ボタン上の表示が現在の状態を表します。起動直後は接続していませんので、色が赤で、「通信 切断中」という表示になっています。
Remoの電源が入っていることを確認し、通信ボタンを押すと、2,3秒で接続され、ボタンの表示が変わります。
接続されるとこのような表示になり、RemoのLED_TのLEDが点灯します。
尚、RMEは簡易に作ったので、万が一、通信不能の場合でも、通信ボタンが「通信中」になる場合がありますので注意してください。接続までに10秒ちかくかかる場合は接続されていない場合が多いです。Remoの電源が切れていた場合でも、10秒ちかくかかった後に、「通信中」になります。Remo側のLEDを見て、通信状態を確認してください。
<カメラの表示>
では実際に動作させてみましょう。Remoには2眼カメラがついているのでこれを表示させてみます。
各ボタンを押すと、Remoへ画像取得命令が送られ、画像が返信されます。上の画像は1mぐらい離れた本棚を撮影したものです。
Bluetoothは短距離無線なので、あまり距離が離れたり、間に障害物が沢山あると通信ができなくなります。たとえば、まったく通信が出来ない場合は、カメラ画像は上のようになります。カメラからの画像はYUVで来るので、データが全部0の場合は画面が緑色になります。
また、PC側で沢山のソフトがバックグランドで動いてたりすると、表示処理が追いつかなくて、画面が緑になることがあります。
通信が途中でコケる場合はこのようになります。
RightEyeの方は、PCとRemo間にアルミ板(電波を反射する)を置いて、障害物が多い室内で4mほど離したものです。データの一部しか取れていません。
LeftEyeの方は、同じく2mぐらいの距離の場合です。ほとんどのデータが取れてますが、最後の数ラインが切れています。
<カメラの調整>
Remoのカメラは、遠隔で、AWBのオン/オフと、輝度調整ができます。
<輝度>
まず、普通の状態で、机の下を撮影してみます。明るいところで起動した場合、その時の露出を記憶しますので、より暗いところに移動すると画面がまっくろになったりします。
輝度は、起動時には0、つまり最低の状態に設定されています。
「Brightness」ボタンの右のテキストボックスに、0〜200ぐらいの数値を入れて、Brightnessボタンを押すと、テキストボックスの数値が、左右両方のカメラに設定されます。数値が大きいほど、明るくなります。
上の状態で、Brightnessを100に設定した画像です。このように、なにかあるか判別できる画像になりました。
<AWB>
AWB(オート・ホワイトバランス)は、色を均一に修正する機能です。カメラの場合はそのような処理も必要ですが、色認識などの場合は色が修正されてはこまりますので、AWBをオフにします。尚、Remo起動時にはAWBはオンになっていますので、色を計算する場合はかならずAWBをオフにすることが必要です。
「AWB off」ボタンを押すと左右両方のカメラのAWBがオフになります。
<リセット>
輝度の設定を戻す時、又は起動した時よりも環境が変わった時、又はAWBを戻すときはリセットコマンドを送ります。「cam
Reset」ボタンを押すと、左右両方のカメラがリセットされます。
<圧縮画像の表示>
非圧縮の静止画の取得には、(PCの状態にもよりますが)約750mSec掛かります。Remoはデータの画質を落として、データ量を1/4にする機能もあります。「Live」のチェックボックスをオンにすると、左画像の場所に、約4枚/秒の速さで圧縮画像が表示されつづけます。動画のような表示になります。
右が非圧縮の静止画、左が圧縮画像です。圧縮画像の方が画質がわるいですが、簡易動画のような表示になります。尚、この場合、PCの動作状態や、CPU性能によって表示スピード、つまり動画の速度が変わりますので注意してください。
YUVのデータや、圧縮データを表示する方法についてはRemoのページのサンプルプログラムのところで詳しく説明します。
尚、圧縮画像による高速の画像表示はかなりのCPUパワーを使いますので、通信不良が多発するとRemo側のシステムがハングアップする場合があります。この場合は通信の接続を切り、Remo側の電源を入れなおしてください。
ACアダプタ使用による長時間の画像センシングなどのアプリケーションの場合は、なるべく非圧縮画像を使った方がハングアップの危険がなくてよいと思います。
<サーボの駆動>
RMEはピルクス系のシリアルサーボもコントロールできます。RemoHKP(ヒューマノイドロボットのキット)にはピルクスのシリアルサーボPRS−DE07MSが使用されています。ここではRemoHKPを使ってRMEの機能を説明します。
RemoHKPでは20個あるサーボのIDがあらかじめ1〜20に設定されています。RemoHKPを組み立てた直後の状態では、どのサーボが何番のIDか何かわかりません。ここで、IDごとにサーボを駆動してみてどこがどの番号か確認します。
REM画面右側が、サーボなど、Remo以外との通信をするところです。ServoControlのところがサーボを個別に操作するところです。ServoIDのテキストボックスに動かしたいサーボIDを入れ、「Servo On」ボタンを押すとそのサーボがオンになり、設定された場所(初期値では中心値である900)に移動します。
サーボを指定した位置に回転させたい場合は「Obj Position」ボタンを押します。ボタンの左のテキストボックスに入れた場所にサーボが回転します。尚、サーボをオンしていないと回転しません。位置は設定されます。
現在のサーボの位置を読み取るには「Position Read」ボタンを押します。読み取りが成功するとボタン右のテキストボックスにその値が入ります。読み取りが失敗すると9999の値が表示されます。尚、デッドバンドを設定しているので、指定した場所の数値と、読み取った数値の値は若干ズレます。これを逆に応用すると、間接にどちらの方向から力が加わっているかを測定するセンサーとして使うこともできます。大きな力が加わった場合は大きくズレます。
「Servo Off」ボタンを押すと、ServoIDで指定した番号のサーボがオフになります。
このようにしてどの間接がどのIDかを調べることができます。
<ロボットの構成の登録>
どのサーボがどの番号かわかったところで、ロボットのサーボ構成の登録を行います。
メニューから「設定」−>「ロボット構成」を選択します。
ロボット構成ウィンドウが開きます。3x16のマスがあります。これはボタンになっており、それぞれを押すと、サーボ構成ウィンドウが開くようになっています。サーボ構成ウィンドウの「有効」にチェックが入っているのを確認し、「サーボID」の右のテキストボックスにサーボIDを入れて登録を押すと、その場所にサーボIDが配置されます。この配置は以後のモーション作成時などにトラックバーが表示される場所になりますので、ロボットの形と同じようにIDを配置して下さい。
ここでは説明用のRemoHKPのIDが次のようになりました。
実
配置ができたら「登録」ボタンを押します。
メニューから「ファイル」−>「保存」で、ロボット情報を保存しておきます。
<ホームポジションの登録>
ホームポジション、つまり基本的な間接位置を登録します。
メニューから「設定」−>「モーション作成」を選びます。
モーション作成ウィンドウが開きます。
ここで、全サーボON/OFFボタンを押すと、とりあえずの初期値、全部900の位置に全サーボがゆっくり動きます。このとき、サーボどこかに引っかかるような形になっているとサーボに大きな電流が流れ、そのままにしておくとサーボが壊れる可能性がありますのでいつでもRemoのスイッチをオフにできるようにしておいてください。
全サーボをONにするコマンドを送った後、ボタンは青に変わり、「全サーボON」の表示になります。トラックバーを調整すると対応したサーボが動くはずですので、ロボットが直立するような姿勢に調整してください。トラックバーではおおまかな値しか動かせませんので、微調整をする場合には「サーボ微調整」のところのボタンを押します。また、トラックバー右のテキストボックスに数値を入れてEnterキーを押すと、その位置にサーボが動きます。
ロボットが直立の状態になったら、メニューから「ホームポジション」−>「現在値をホームポジションに設定」を押します。すると現在位置がホームポジションに設定されます。
試しに、全サーボON/OFFボタンを押して全サーボをオフにし、再度ボタンを押してオンにしてみてください。今度は900の位置ではなく、ホームポジションで設定した位置に自動的に移動します。
ホームポジションはロボット情報ファイルに保存されます。全サーボをオフし、モーション作成のウィンドウの右上の×を押してウィンドウを閉じてください。
その後、基本画面でメニューから「ファイル」−>「保存」でファイルを保存してください。
ここでは、前と同じ名前myRobot.rsfにし、上書きしました。
基本画面でも全サーボのON/OFFができます。試しにこちらで全サーボをオンにしてみます。
すると、登録したホームポジションの位置にサーボが動きます。確認したらもう一度全サーボON/OFFボタンを押してサーボをオフにしてください。
<モーションの登録>
メニューから「設定」−>「モーション作成」を選びます。
|