<概要>
■「リモートブレイン」タイプのロボットシステム
Remo(リモ)は、ロボットとPCを無線で接続する「リモートブレイン」タイプのロボットシステムです。
オプション使用によりいろいろなバリエーションのリモートブレインロボットを作ることができます。
■Bluetoothによる無線接続
RemoのメインボードにはBluetoothVer2.0+EDR(以下BTと約す)機能があり、460.8kbpsでPCと通信します。PC側は、安価(1500〜2000円前後)なUSBタイプのBTモジュールが使えます。
■PC上でプログラミング
プログラムはPC上で作成するので、ロボット内のマイコンにプログラムを書く方式に比べ、
1)メモリの制約がないので長いプログラムが書ける
2)画像処理など、高速で複雑なプログラムも動かせる
3)VisualStudioなど、教本が沢山でている
というメリットがあります。
■2眼のイメージセンサ
メインボードには2眼のイメージセンサを搭載。本ページ下の方のサンプルプログラムの項で画像処理に関するプログラミング例も紹介。
■足裏センサ
ロボットキット版の足裏感圧センサーを開発中。足裏重心測定によるバランス制御が可能になる予定です。
■ロボット神経システム互換
浅草ギ研のロボット神経システムAGB65シリーズ互換(*)のI/Fを搭載。RCサーボ、シリアルサーボ、DCモータなどを駆動でき、センサー入力、音声出力も可能。
(*)AGB65シリーズで460Kbps対応のものに限る
■ACアダプタによる連続動作
オプションのLiPo充電基板により、ACアダプタを使用しての連続稼動が可能です。シリアルサーボを使用したロボットの場合、動作時以外を脱力にしておくことにより、数日の連続稼動などが可能となります。
<購入前のご注意>
■本製品を使用するには460800bpsの通信速度が出るBluetooth無線機がPC側に必要です。Bluetoothの機種によっては115200bpsまでしか出ないものが多くありますのでご注意願います。PC側のBluetoothについては本ページの動作説明の所で詳しく説明しています。
■本製品はバッテリを使用しますので、安全には十分気をつけてください。バッテリ破損などにより損害が起きても浅草ギ研は補償できかねますのでご了承下さい。
<もくじ>
・構成
・価格
・仕様
・ピン配列と寸法
・接続
・オプションフレームの組み立て
・動作説明
・シリアル通信コマンド
・RemoMortionEditor(動作確認ソフト)
・サンプルプログラム
・トラブルシューティング、Q&A
・使用上の注意
<構成>
<ピルクス製シリアルサーボを使用したヒューマノイドロボットの構成例>
※写真は開発中のものです。製品はアルミパーツが黒アルマイト処理されています。
<価格>
メインボード Remo 39,900円 (本体価格38,000円)
LiPo充電基板 AGB-LIPOCHG 6,300円 (本体価格6,000円) ※2セル用です。
LiPoバッテリ(2セル) 3,150円 (本体価格3,000円) ※仕様詳細は通信販売のページにて
ACアダプタ9V1.5A 3,150円 (本体価格3,000円)
シリアルサーボコントロールボード(for ピルクスサーボ系) AGB65-SSC/P 5,040円(4,800円)
シリアルサーボ PRS-DE07MS改 13,800円(本体価格13,143円)
※通常品との違い:耳カット済み、460Kbps設定済み、長ネジ付き
足裏重心センサ AG-RemoSole 発売予定
フェースカバー 発売予定
<キット>
RemoHeadKit/P 52,500円 (本体価格50,000円)
・内容物:Remo、LiPo充電基板、LiPoバッテリ、ACアダプタ、ロボットフレーム(頭部のみ)
RemoHumanoidKit/P 399,000円 (本体価格380,000円)
・内容物:Remo、LiPo充電基板、LiPoバッテリ、ACアダプタ、ロボットフレーム、PRS-DE07MS改x20個、シリアルサーボコントロールボード
<460kbps対応のAGB65シリーズ>(型名末尾に/460kが付きます)
センサボード AGB65-ADC/460K 12,600円 (本体価格12,000円)
MP3音声再生ボード AGB65-MP3/460K 14,700円 (本体価格14,000円)
RCサーボコントローラ AGB65-RSC2 発売予定 ※一般的なラジコンサーボ用コントローラ
<仕様>
電源電圧(*1)
|
+5.5〜+10V コネクタ:日圧B2P-VH |
基板消費電流(*2)
|
動作時最大
1.5A 平均750mA |
BTバージョン
|
Bluetooth
Ver2.0+EDR Class2 |
BT通信仕様
|
全二重調歩同期式
460800bps RTS/CTSフロー制御 ノンパリティ ストップビット1 |
画像フォーマット
|
160x56
8bit YUVカラー(1画面あたり17920Byte) |
画像機能
|
AWB機能(On/Off可)、自動露出、1/4圧縮データ転送 |
I/F
|
AGB65シリーズの460kbps版に対応(接続可能機種は下記にて説明します)
|
固有ID
|
97 (IDについては下記取扱い説明に書いてあります。)
|
寸法/重量
|
寸法80(W)x70(D)mm 高さ:最大21mm,平均6mm
重量:26g (メインボードのみ) |
付属品
|
■RSCケーブル (電源用)
■電源延長ケーブルx1 (AGB65と電源を共有するケーブル)
■通信ケーブルx1 (AB65と通信するケーブル) |
(*1)サーボなどを駆動する場合はそれらの電圧に合った電源を使用してください。但し、サーボ電圧が10V以上の場合は、Remoとサーボの電源を別にしてください。
(*2)市販のACアダプタなどでは動きません。たとえ出力が1.5A以上の表示のものでもACアダプタや普通の安定化電源では安定して電流が流せないものが多いです。基本的にはニッカド、ニッケル水素、LiPoバッテリを使用してください。
<ピン配列>
<寸法>
<接続>
<電源の接続>
Remoは5.5〜13.2Vの電源電圧で動きます。Remoへの電源供給方法はいろいろと考えられますが、システム全体に十分な電流を供給できるものを用意してください。基本的にはニッカド、ニッケル水素、LiPoなどの二次電池で動くように想定されています。尚、二次電池は取り扱い方によっては破裂等しますので取り扱いには十分注意してください。バッテリ破裂などによる保障はできかねますのでご了承下さい。
例1)浅草ギ研のLiPo充電システムで構成する場合(推奨)
浅草ギ研で動作を確認している構成です。LiPoバッテリはラジコン用のものなら大体OKですが、たまに相性がありますので、浅草ギ研から販売されいるバッテリ以外を使う場合は事前に十分テストしてから使用してください。
LiPoバッテリの状態は常に監視され、充電状態が保たれます。サーボを連続駆動しなければ、連続稼動が可能です。
サーボ駆動時には基本的にはACアダプタを抜いて使います。但し、サーボに負荷があまりかからないような状態であれば、ACアダプタをさしたままサーボを駆動することができます。もし、サーボに負荷が大きくかかり、大きな電流が流れる場合は、まずACアダプタが破損します。この場合はACアダプタを交換すれば直ります。
バランス充電ラインのコネクタはXHコネクタになります(ラジコン用LiPoで使われているコネクタ)。必要なケーブル類はそれぞれの製品に添付されています。
例2)バッテリを直接接続する場合
5.5〜13.2VのバッテリであればRemoに直接接続することができます。尚、バッテリの電圧は満充電のときには公称電圧よりも高くなり、バッテリがなくなると公称電圧よりも低くなりますので注意してください。
2次電池は過放電すると使用できなくなります。よって、この構成で連続稼動はできません。ロボットコンテストなど、バッテリの状態を常に最高の状態で、かつ短時間使用するという場合はこの構成になります。
例3)その他の場合
その他には下記が考えられます。
乾電池は、内部抵抗が高いので、電流変動により電圧も変動します。Remoはサーボを駆動していない場合でも1A程度流れる場合がありますので乾電池は使えません。
市販のACアダプタや安定化電源は、それほど安定化されていません。特に数千円の安価なものは表示されている出力電流を安定的に供給できないものがほとんどなので、ACアダプタでの直接駆動はお勧めできません。弊社でテストした結果でも、ほとんどの安価なACアダプタは誤動作しました。
自作ロボットでは、サーボ駆動テスト用に無線機用の大出力電源がよく使われています。出力が大きいものであればACアダプタよりも安定して動く可能性がありますが、製品によっては急激な電流変化についていけないものなどがあります。
<AGB65 I/Fの接続>
サーボモータコントロール、センサー入力はロボット神経システムAGB65シリーズと接続して行います。以下、基本的な接続方法を示します。各ケーブルはAGB65側に添付されています。
<システム構成例 (ピルクス系サーボでヒューマノイドを構成)>
<AGB65電源ケーブル接続時の注意>
AGB65電源ケーブルは、なれないと差し込みづらいので、下の図を参照に、慎重に差し込んでください。まっすぐに挿入すると簡単に入ります。簡単に入らない場合は無理をして端子を曲げないように注意して下さい。逆に挿すとシステムが破損しますので十分注意してください。
<オプションフレームの組み立て>
オプションフレームの組み立てについてはRemoHumanoidKit/Pのページを参照願います。電気的な接続及び、プログラム等についてはこのページを参照願います。
<動作説明>
Remoを動かすまでには大きく次のステップがあります。
1)接続(上記を参照)
2)無線のペアリング
3)PCアプリケーションソフトの作成
RemoにはスレーブのBluetooth無線が搭載され、PC側のマスターBluetooth無線機と接続し、データのやりとりを行います。Remoに搭載されているBluetoothは、一度ペアリングを行うと、相手のBluetooth機器を記憶しますので、次に電源を入れたとき以降はペアリング作業なしで自働的に接続できるようになります。実際には、PCのCOMポートをオープンするだけで通信が可能となります。
<電源スイッチ>
電源スイッチをON側にすると、Remoの電源が入ります。また、AGB65I/Fへの電源もONにすることで供給されます。
<無線モード表示LEDとBT新規ペアリングスイッチの説明>
RemoのBluetoothモジュール(緑色の基板)の周辺には、無線動作状態を示すLEDと、ReNewプッシュボタンが配置されています。
<ReNewボタン>
一度ペアリングをした後、別な相手とペアリングしたい場合はこのボタンを3秒以上押してから離します。
たとえば、あるPCとRemoをペアリングしていたが、PCを変えたい場合、などにこのReNewボタンを押します。
ペアリング情報が消えると、LED_Sの状態が変わり、消えたことがわかります。
LED配置
<LED_A>
Bluetoothモジュールが正常に起動すると、点灯します。動作中はそのまま点灯しつづけます。
<LED_S>
Bluetoothモジュールの動作状態を点滅で表します。
<LED_T>
PC側でシリアルポート(COMポート)がオープンされ、通信が可能(接続状態)になるとこのLEDが点灯します。PC側でシリアルポートをクローズすると消灯します。
出荷時はまだペアリングをしていないので、電源を入れるとLED_A(黄)が点灯した後に、LED_S(赤)が早く点滅する状態になります。その後、ペアリングをすると一秒おきに点滅します。尚、購入直後にLED_Sが一秒おきに点滅している場合はReNewボタンを3秒以上押して、早い点滅状態にしてください。
ペアリング方法については下で説明します。
<PC側のBluetooth>
RemoのBluetoothモジュールは通信速度が460800bps固定となっております。よって、PC側のBluetoothも460800bps対応のものが必要となります。
PCにBluetoothを増設する場合、一番簡単で安価なのはUSBアダプタータイプのBluetoothを取り付けることです。USBタイプは1500〜3000円程度で市販されています。地方の方はamazon.comなどを利用すると良いでしょう。BluetoothVer2.0+EDRのものを用意してください。尚、NOTE−PCなどでもともとBluetoothが付いている場合は、それを試してもよいでしょう。
USBアダプタータイプの場合、大きく3つの系統に分かれます。
■TOSHIBA系:浅草ギ研で460800bpsで動作確認済みです。
■Bloadcom系:460800bpsに対応しています。
■Bluesoleil系:115200bpsまでしか出せません。
浅草ギ研ではプリンストン製のPTM-UBT3Sで動作確認をしていますので、どうしても通信が出来ない場合はこちら、またはこれの後継機を購入することをお勧めします。
USBタイプの場合、購入するとドライバが入ったCD-ROMが付属していますので、それをまずPCに入れて、ドライバをインストールします。TOSHIBA系のインストールの様子はこちらに記事があります。
どの製品が460800bps出るかをテストした記事がこちらにあります(ページ下の方の表です)。
<ペアリング>
ペアリングのやりかたはPC側のBluetoothのドライバソフトによって違います。ここでは、TOSHIBA系の例を示しますが、他社製でも流れは同じですので参考にしてください。
まず、ブルートゥースUSBアダプタをインストールすると、Bluetooth設定ソフトもインストールされますので、それを立ち上げます。TOSHIBA系の場合は画面右下のアイコンをダブルクリック(場合によっては2回ダブルクリック)すると設定ソフトが立ち上がります。
上の例ではすでに何個かペアリングされている状態ですが、初めての場合は中心には何も無い状態かと思います。
Remoの電源を立ち上げると、LED_Aが点灯し、LED_Sが早く点滅する状態になります。このとき、Remo側はPC側から検索されるのを待っている状態です。ここで「新しい接続」ボタンを押します。
「新しい接続の追加ウィザード」ウィンドウが開きます。エクスプレスモードが選択されている状態で「次へ」を押します。
PCから検索を開始します。場合によってはしばらく時間がかかることがあります。
Remoが検索されると、Remoと表示されます。尚、バージョンによってはRemoの後に番号が表示される場合があります。上の例では「Remo002」と検索されました。他に検索待ちのBluetooth機器が有った場合はそれも同時に表示されますので注意してください。Remo(xx)が選択されている状態で「次へ」を押します。
パスキー(PINコード)を入力する画面になりますので、半角で 0000 と0を4つ入力して「OK」を押します。
「xxの設定が完了しました」と出ます。上の例ではCOM47になっています。これがPC側で通信をする窓口となるCOMポートとなります。この番号を覚えて置いてください。これでペアリングが終了となります。「次へ」を押して終了します。
尚、TOSHIBA系以外では、ペアリング時にはCOMの番号が表示されない場合がありますので、それぞれの設定ソフトの使い方を参照願います。
Remo002が追加されているのがわかります。
<PCアプリケーションソフトの作成>
PCとRemoとのペアリングが終わると、ペアリングしたCOMポート(上の例ではCOM47)をオープンするとRemoとPCが接続されます。以降はシリアル通信でデータをやり取りしてRemoの機能を使います。次の項ではシリアル通信のコマンドについて説明します。また、その次の項では、Microsoftから無償で入手できる開発環境のVisualC#2008ExpressEditionでRemoと通信し、いろいろな機能の使い方を説明します。
<RemoMortionEditor>
、サンプルとしてRemoHumanoidKit/Pで組んだ二足歩行ロボットを操作するプログラムを作りました。Remo単体の動作確認にも使えます。また、ピルクス系のシリアルサーボを動かすこともでき、遠隔操作が可能です。尚、Remoのコマンドについては次の節で説明しています。またその次ではC#によるサンプルプログラムを掲載しています。
RemoMortionEditorのページ
尚、当プログラムはサンプルプログラムにつき、ご質問や改造のご要望にはお答えできませんのでご注意願います。使用にはMicrosoftのVisualC#2008が必要です。VisualC#2008ExpressEditionがMicrosoftのページ(MSDNのページ)から無償で取得できます。
<シリアルデータ通信コマンド>
Remoは、浅草ギ研のロボット神経システムAGB656シリーズと同じ命令体系になっています。AGB65シリーズはIDによって動かす機器を指定します。RemoのIDは「97」です。RemoはAGB65I/Fを持ち、RemoとAGB65を同一ラインで動かすことができます。
たとえば、先の例ではPCのBluetoothがCOM47に接続されましたので、PC側からCOM47をオープンすると、上記3つの機器と通信ができるようになります。その上で、ID97に対してコマンドを送るとRemoの機能を使うことができます。上の例では、Remoへコマンドを送っている時は、SSC/PとADCは自分のIDではないので反応しません。このようにしてPCからの1回線で沢山の機器を動かすことができます。
以下ではRemoに対してのコマンドのみを説明します。その他についてはそれぞれの説明ページを参照願います。
RemoHumanoidKit/Pをお使いの方は、下記サンプルプログラムの「RemoMortionEditorで遊んでみる」
のところで、サーボ駆動などを含めて説明しています。
<データ形式>
PCからRemoへの指示は、バイトサイズの数値データで送られます。バイトサイズ(8ビット)なので、表される数値は0〜255の256種類になります。
尚、以下特に記述がない場合は、数値は10進数で表しています。
−基本形−
データの基本形は次の通りになります。[ ]内は1バイトを表します。()内は送りえる数値の範囲を表します。
[シンクロバイト(255)] [ID(97)] [送信バイト長(1-2)] [命令1] [命令2] ...
シンクロバイト |
Remoにデータの通信開始を知らせるデータで、常に「255」で始まります。 |
ID |
Remoに設定された固有のID。97で固定です。 |
送信バイト長 |
送信される命令の(バイト)数。シンクロバイト、ID、送信バイト数は数えません。 |
命令 |
Remoに動作させたい命令。以下で詳しく説明します。 |
|
−命令一覧−
命令値 |
動作 |
方向 |
フォーマット |
104 |
輝度設定 |
送信 |
[255][ID(97)][バイト長(2)][命令(104)][輝度値(0-254)] |
128 |
左画像取得(RAW) |
送信 |
[255][ID(97)][バイト長(1)][命令(128)] |
129 |
右画像取得(RAW) |
送信 |
[255][ID(97)][バイト長(1)][命令(129)] |
130 |
左画像取得(COMP) |
送信 |
[255][ID(97)][バイト長(1)][命令(130)] |
131 |
右画像取得(COMP) |
送信 |
[255][ID(97)][バイト長(1)][命令(131)] |
132 |
カメラリセット |
送信 |
[255][ID(97)][バイト長(1)][命令(132)] |
133 |
カメラAWBオフ |
送信 |
[255][ID(97)][バイト長(1)][命令(133)] |
上以外 |
無視されます。 |
|
|
※上記はRemoに対する命令です。返信画像データについては下記で説明します。
【命令104:輝度設定】
<説明>
カメラの輝度を調整します。輝度は左右両方に適用されます。左右別々の輝度設定はできません。初期値は0で、値が大きくなるほど、輝度が上がります(明るい画像になります)。
<送信フォーマット>
[255][ID(97)][バイト長(2)][命令(104)][輝度値(0-254)]
・シンクロバイトは255で固定です。(データを送信する先頭は必ず255)
・IDは97で固定です。
・バイト長は2で固定です。
・命令は104で固定です。
・輝度値には輝度の値を指定します。
<送信データプログラム例>
輝度を50に設定する場合は次のようになります。
byte[] sndData = new byte[5];
sndData[0] = 255;
sndData[1] = 97;
sndData[2] = 2;
sndData[3] = 104;
sndData[4] = 50;
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
serialPort1.Write(sndData, 0, 5);
【命令128:左画像取得(RAW)】
<説明>
左カメラの画像を返信します。画像は非圧縮のYUVデータで返されます。
<送信フォーマット>
[255][ID(97)][バイト長(1)][命令(128)]
・シンクロバイトは255で固定です。(データを送信する先頭は必ず255)
・IDは97で固定です。
・バイト長は1で固定です。
・命令は128で固定です。
<送信データプログラム例>
byte[] sndData = new byte[4];
sndData[0] = 255;
sndData[1] = 97;
sndData[2] = 1;
sndData[3] = 128;
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
serialPort1.Write(sndData, 0, 4);
<返信データ形式>
Remoは命令128を受け取ると、命令と同じデータをヘッダに付けて、1画面分の画像データを連続で返信します。YUVは1ピクセルあたり2バイトのデータになりますので、横160x縦56x2バイト=17920バイトになります。
[255][97][1][128][data1][data2]...[data17920]
RemoはYUV422という形式でデータを表しています。
<YUV422>
YUVは輝度情報と色差情報を分けた表し方です。YUVのYは輝度、Uは青色差、Vは赤色差のデータです。UはCb、VはCrとも表します。YもCrもCbも各8ビットで表します。
Yデータだけを扱うと白黒画像になります。
PCなどで画像を扱う場合、RGBが直感的にわかりやすく、よく使われますが、本製品はイメージセンサとしての機能を重視したために色体系はYUVを使用しています。色を判定する場合などはRGBそのままでは明暗があるものを判定できないので、結局YUVに変換して計算したりします。もともとYUVなら変換する手間がなく、高速に画像処理するプログラムを組むことができます。
YUV”422”は色データ量を減らして16ビットで1ピクセルを表す方法です。”422”の意味ですが、これは8バイトのうち、4バイトをY、2バイトをCb、2バイトをCrに割り当てて4ピクセルを表します。こうすることで輝度Yは劣化がなくなります。各ピクセルと出力の関係は次のようになります。(4バイトで2ピクセルではなく、8(4+2+2)バイトで4ピクセルなので422)
人間の目は輝度情報には敏感ですが、色についてはあまり解像度がよくありませんので、色情報を間引いてもあまり劣化したようには感じられません。
四角はそれぞれ1画素に相当します。
各データの横の番号はたとえばY0の場合は輝度0ピクセル目、Y1は1ピクセル目...という意味です。4ピクセルをCb0,Y0,Cr0,Y1,Cb2,Y2,Cr2,Y3の順番にの8バイトで出力しますので1ピクセル辺り2バイト換算のデータ量になります。但し、上の図のようにカラー情報は2ピクセルごとに省略されています。
上の図ではY1とY3のカラー情報がありませんが、計算時や画像表示時にはとなりのピクセルの色情報で計算します。
YUVのイメージは次のようになります。
この画像は違う製品のもの(S-EYEで撮影)なので、画面サイズはRemoとは異なりますのでご注意願います。
この例のように、Yデータは劣化が無いものです。Cr(V)とCb(U)は本当は横方向に半分になった画像を横に2倍に伸ばしたものです。CrとCbの2つの色差情報しかありませんが、合成するとちゃんとしたカラー画像になります。
PC上で画像を表示する場合はRGB形式を使う場合があります。YUVをRGBに変換する場合は次の式となります。(ITU-RBT601方式)
R=1.164x(Y-16)+1.569x(Cr-128)
G=1.164x(Y-16)-00.391x(Cb-128)-0.813x(Cr-128)
B=1.164x(Y-16)+2.018x(Cb-128)
ただし、計算中に整数にまるめられ値がオーバーフロー(8bit値より繰り上がる)やアンダーフロー(0より下回る)になる可能性がありますので、PC上では倍精度符号付変数(WindowsXPの場合double)で計算し、255以上の場合は255、0以下の場合は0に修正しています。
実際のPCでの表示については、下記サンプルプログラムのページを参照願います。
【命令129:右画像取得(RAW)】
<説明>
右カメラの画像を返信します。画像は非圧縮のYUVデータで返されます。 返信データについては、上の左画像取得を参照願います。
<送信フォーマット>
[255][ID(97)][バイト長(1)][命令(129)]
・シンクロバイトは255で固定です。(データを送信する先頭は必ず255)
・IDは97で固定です。
・バイト長は1で固定です。
・命令は129で固定です。
<送信データプログラム例>
byte[] sndData = new byte[4];
sndData[0] = 255;
sndData[1] = 97;
sndData[2] = 1;
sndData[3] = 129;
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
serialPort1.Write(sndData, 0, 4);
【命令130:左画像取得(COMP)】
<説明>
左カメラの画像を返信します。画像は1/4に圧縮されたYUVデータで返されます。Windowsで通信した場合、速いPCだと1画面につき秒間4枚前後の画像が取得できますので、動画風に画像を取得することができます。
<注意事項>
圧縮画像のデコードはPCのCPUパワーを大きく使いますので、PCの動作状態によってはあまり高速にならなかったり、PCのCOMポートがハングアップしたりする場合があります。PCのバックグランドで動いているものを減らしたり、他のアプリケーションを閉じたりしてCPUの負荷がかからない状態で使用してください。
また、通信不良が多発した場合はRemo側のシステムがハングアップする場合もあります。この場合は通信の接続を切り、Remo側の電源を入れなおしてください。
ACアダプタ使用による長時間の画像センシングなどのアプリケーションの場合は、なるべく非圧縮画像を使った方がハングアップの危険がなくてよいと思います。
<送信フォーマット>
[255][ID(97)][バイト長(1)][命令(130)]
・シンクロバイトは255で固定です。(データを送信する先頭は必ず255)
・IDは97で固定です。
・バイト長は1で固定です。
・命令は130で固定です。
<送信データプログラム例>
byte[] sndData = new byte[4];
sndData[0] = 255;
sndData[1] = 97;
sndData[2] = 1;
sndData[3] = 130;
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
serialPort1.Write(sndData, 0, 4);
<返信データ形式>
画像は8x8ピクセル(64ピクセル)ごとに1/4圧縮(16バイト)されます。データはY、Cb(U)、Cr(V)の順番に送られてきます。圧縮はJpegと似た方式の独自方式となっています。画像は生データよりはボヤけた感じになります。
このデコードについては説明が非常に長くなりますので、下のサンプルプログラムの項の圧縮データの取得のページを参照願います。
【命令131:右画像取得(COMP)】
<説明>
右カメラの画像を返信します。画像は1/4に圧縮されたYUVデータで返されます。返信データその他については、上の左画像取得を参照願います。
<送信フォーマット>
[255][ID(97)][バイト長(1)][命令(131)]
・シンクロバイトは255で固定です。(データを送信する先頭は必ず255)
・IDは97で固定です。
・バイト長は1で固定です。
・命令は131で固定です。
<送信データプログラム例>
byte[] sndData = new byte[4];
sndData[0] = 255;
sndData[1] = 97;
sndData[2] = 1;
sndData[3] = 131;
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
serialPort1.Write(sndData, 0, 4);
【命令132:カメラリセット】
<説明>
カメラをリセットします。リセットした瞬間に写っている画像から自働的に露出を計算して設定します。輝度値は0に戻ります。AWBはオンになります。
<送信フォーマット>
[255][ID(97)][バイト長(1)][命令(132)]
・シンクロバイトは255で固定です。(データを送信する先頭は必ず255)
・IDは97で固定です。
・バイト長は1で固定です。
・命令は132で固定です。
<送信データプログラム例>
byte[] sndData = new byte[4];
sndData[0] = 255;
sndData[1] = 97;
sndData[2] = 1;
sndData[3] = 132;
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
serialPort1.Write(sndData, 0, 4);
【命令133:カメラAWBオフ】
<説明>
カメラ起動後はAWBがオンになっています。この命令を実行するとAWBがオフになります。
<送信フォーマット>
[255][ID(97)][バイト長(1)][命令(133)]
・シンクロバイトは255で固定です。(データを送信する先頭は必ず255)
・IDは97で固定です。
・バイト長は1で固定です。
・命令は133で固定です。
<送信データプログラム例>
byte[] sndData = new byte[4];
sndData[0] = 255;
sndData[1] = 97;
sndData[2] = 1;
sndData[3] = 133;
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
serialPort1.Write(sndData, 0, 4);
<AWBについて>
AWB(オート・ホワイト・バランス)は、色データを8ビットで有効に利用できるように色を調整する機能です。これは写真を撮る時に使う機能で、画像処理の色判定時にはじゃまな場合があります。よって、色判定時にはAWB機能をオフにすることが必要です。
下記、例です。この画像は他の製品(CMOS-EYE)で撮影したものなので画面サイズが違います。ご注意下さい。
1)がAWBが効いている場合です。右のように赤が多くなると、自働的に赤が抑えられる働きをします。色認識の場合はこれでは問題がおきます。2)はAWBをオフにした場合です。赤が多くなってもそのままの色で表現されます。
|
<サンプルプログラム>
■Windowsのプログラミング〜簡単な方法で画像を取得してみる。(Windows開発ビギナー向け)
■非圧縮データの画像を取得する。カメラリセット、AWB機能。(命令128、129、132、133)
■圧縮データの画像を取得し動画風に表示する。輝度調整。(命令130、131、104)
■動体検知(S-EYEで同様の実験をやっています。こちらを参照してください。)
■人検知(S-EYEで同様の実験をやっています。こちらを参照してください。)
■サーボ駆動(AGB65-SSCのサンプルを参照)
<トラブルシューティングQ&A>
Q:乾電池、ACアダプタ、無線用電源などを使っているが動かない。
A:LiPo、ニッケル水素バッテリ、ニッカドバッテリを使用してください。無線用の大電流電源を使っていたとしても、機種によっては電圧が安定しないものが多いです。市販の”安定化電源”でも、Remoの動作基準からみると安定していないものが多いです。スイッチング電源などはノイズが多いので向きません。
Q:初めてペアリングするが、ペアリングできない。
A:Remo出荷時に、間違って出荷テスト用PCとペアリングしている場合があります。LED_SのLEDが一秒おきに点滅している場合はReNewボタンを3秒以上おしてペアリングを解除してください。
また、PCの環境やUSBBluetoothの機種によっては、ペアリング操作をしてもすんなり接続できない場合があります。この場合は、PCを再起動すると治る場合が多いです。このとき、Remo側も電源を切り入りしてください。
Q:ロボットがブルブルする。
A:調整か組み立ての問題です。以下の原因が考えられます。
・ネジがゆるんでいる
・外している部品がある。特に、顔と腕の付け根は片持ち構造なので、背中カバーを外した状態だとそれらがブルブル振動する可能性があります。
・モーション作成時に、ひもなどで吊るすと思いますが、この場合は手足の先が安定していないので振動します。床に置くと直る場合が多いです。
・それでも振動する場合は、サーボの調整でおさまります。1)デッドバンドを広げる2)使用していないサーボをオフにする3)ゲインを下げる、で解決できます。
Q:サーボホーンの穴が削れてしまって、ネジが留まらない。
A:サーボホーンはプラスチック製なので、ネジを強引に回すと穴が削れる場合があります。この場合は、サーボホーンを外して、削れていない穴になるように場所を変えてからサーボホーンを入れなおしてください。サーボホーンとアルミフレームの取り付けは、三角形に3箇所とまれば機能するようになっています。5箇所全部とめなくても大丈夫です。
Q:サーボを取り付けるネジを強くまわしたら、サーボのネジ穴がつぶれてしまった(空回りする)。
A:ネジの先端にホットボンドを付けてネジを入れてください。
Q:無線が途切れやすい。
A:ロボットとPCの間に遮蔽物が多いと、近くでも無線が途切れる場合があります。特にアルミ板は電波を通しません。また、PC側でUSBタイプのBluetoothを使っている場合、近くのUSBになにかささっていると無線が途切れやすくなることがあります。
Q:少ないサーボの時、複数同時にサーボを動かす命令を出すと応答速度が悪い。
A:つながっていないサーボに対してAGB65-SSC/Pなどから命令を送った場合、もしくはサーボの応答が無い場合、は10mSecのタイムアウトまで応答を待ってしまいます。サーボのIDを少ない順番からシーケンスに設定(1〜5、とか。飛び飛びにしない)し、SSCに対してサーボ数設定を行うとタイムアウトが発生しません。
Q:複数のサーボを駆動するプログラムを作ったが、場所によって動きが遅いところがある。動くタイミングがバラバラになったりする。
A:複数同時駆動の命令を使わないとタイミングがバラバラの動作をします。WindowsPCからシリアル通信を行う場合、データ送信命令を出しても即座には送信されません。PCの動作にもよりますが、10〜40mSecは間が空くことが多いです。たとえば、10個のサーボの対して、間接位置データを10回送信すると、初めのサーボが動き出してから最後のサーボが動き出すまで、最大10x40=400mSecの差が出ます。このようなことをふせぐためにAGB65-SSCには一斉動作コマンドがあります。このコマンドはPCからの送信をとりあえず複数サーボ分一度に送り、SSC側で高速に各サーボへ命令を振り分けています。
Q:LiPo充電基板を使っているが、間違ってスイッチが入ったまま放置してしまい、過放電になってしまった。
A:Remo用の充電基板はトリクル充電しますので、過放電しても、すぐに充電すればLiPoが復活する場合があります。但し、過放電したLiPoは危険といわれているので、なるべく使わないようにしてください。
Q:LiPo充電基板を使っているが、一週間ぐらいACアダプタをさしっぱなしにしたら電圧が9V付近までいってしまった。
A:長期間の充電はおやめ下さい。LiPo充電基板は終止電圧が8.35Vに設定されています。これよりも1V前後上がってしまうようでしたら、そのLiPoは使用しないで下さい。
Q:充電をしていると、鈴虫のような音が聞こえる。
A:満充電近くなると、トリクル充電モードになり、充電基板の回路が高速にON/OFFする場合があります。このとき、音が出ます。バッテリの異常ではありませんのでご安心下さい。
Q:圧縮画像の時、あるブロックで上下が逆になる場合がある。
A:圧縮画像の場合、ブロックの真ん中あたりから上下に白黒に分かれているものは、計算結果によっては上下の白黒の色が逆転する場合があります。これは非可逆圧縮(完全に元にはもどらない圧縮)をしているため、ある条件で計算誤差がおおきくなることが原因です。残念ながら、これは治せません。白黒の横縞模様などの撮影は、非圧縮の画像を使ってください。
Q:RemoHKPを使っているが、ロボットの向きによって無線がつながりにくくなる場合がある。
A:アルミは電波を通しませんが、RemoHKPの顔の前面はアルミになっていますので、PC側にロボットが向くと若干無線が通りにくくなります。
Q:左右の眼で色合いが違う
A:起動時はAWBがオンになっています。たとえば、右目に赤いものが写っていて左目にはない場合は左右の色合いはかわってきてしまいます。両目が同じような風景を見ている状態でAWBをオフ(このしゅんかんにAWB調整が固定され、色が変更されなくなる)にしてください。その後は片目にある色が多く写っていても、両目の画像の色合いがおなじようになります。
Q:サーボが時々脱力する。
A:ロボットにあまり負荷をかけるとサーボへの電気の供給が下がり、サーボがリセットする場合があります。サーボがリセットされるとOFF状態になりますので、サーボON命令を実行してください。
また、バッテリが少なくなってくると、サーボリセットがかかることが多くなります。バッテリを充電すると治ります。
対策としてはいろいろありますが、下記が効果があると思われます。
1)サーボ負荷がかからないようなモーションを作る
2)サーボの配線順を変えて、脱力しやすいサーボをなるべく基板に近い順番にする
3)別途基板を作り、各サーボへの電流供給ライン(信号線以外の2本)を太くする
<使用上の注意>
・このボードは電子機器です。取扱い、輸送時には静電気対策を行ってください。ICの足や、各ピンを直接手で触ったりすると静電破壊される場合があります。
・バッテリ使用時には電源ラインをショートさせると、バッテリが破裂・発火する可能性があります。作業中にはショートさせないよう十分注意して下さい。また、取り付け後も、あいている電源ラインに導電物質が触らないように注意して下さい。
・バッテリは過充電、過放電しないように注意してください。Remo用の充電器の終止電圧は8.35Vです。9V以上、又は6V以下にならないように管理してください。
・バッテリの取り扱い不注意、ロボットへの過負荷などによる損害については補償できかねますのでご注意下さい。
|