ROBO-Q のリモコンコマンドを調べてみました。
ROBO-Q 赤外線 コマンドは 7bit (最後は固定なので、data 6bit + 終端bit かもしれない) 先頭 終端 S S T T B B 0 SS = 速度 00 = AUTO 等のコマンド送信 01 = 前進 速度L 10 = 前進 速度M 11 = 前進 速度H TT = ターン他 (bit が 1 の方の足を止める) 00 = 前進 (両足とも止めない) 01 = 右回転 (右足を止める) / 回避モード 10 = 左回転 (左足を止める) / 回避モード 11 = 追跡モード BB = バンド 00 = BAND A 01 = BAND B 10 = BAND C 11 = BAND D 全部の組み合わせ 前進L = 0100bb0 前進M = 1000bb0 前進H = 1100bb0 右回転L = 0101bb0 右回転M = 1001bb0 右回転H = 1101bb0 左回転L = 0110bb0 左回転M = 1010bb0 左回転H = 1110bb0 AI回避 = 0011bb0 AI追跡 = 0010bb0 / 0001bb0
移動はコマンドを送信し続ける必要があります。
何もコマンドが送られていない状態が停止です。
●解析に使用したもの
PC に USB 接続できる学習リモコンキットです。
BUFFALO と 玄人志向 どちらも同じものだそうです。
・BUFFALO PC-OP-RS1
・玄人志向 KURO-RS
●PC-OP-RS1 WindowsVista x64 用ドライバ
付属ドライバも web から落とせるドライバも Windows x64 に対応していません。
x64 で動作させるために下記のページを参考にさせていただきました。
・プログラミング研究所 KURO-RSをWindows XP x64で使用する
上のページを参考にして FTDI Virtual COM Port Drivers の最新版を入れました。
これで PC-OP-RS1 を Vista x64 で使用することが出来ます。
以下詳細手順
● x64 ドライバ導入手順のメモ
(1) FTDI Virtual COM Port Drivers から 2.04.16 を download (CDM 2.04.16 WHQL Certified.zip)
(2) デバイスマネージャーから PC-OP-RS1 のデバイスIDを確認しておく
不明なデバイスのままで構わない。
プロパティ→詳細→ハードウエアID
これで vid=0411, pid=00b3 であることがわかる
(3) (1) のアーカイブを展開しフォルダ内の *.inf ファイルを書き換える
2つあります。
どちらも [FtdiHw]/[FtdiHw.NTamd64] の項目の先頭行を複製して VID/PID を書き換える
だけです。[Strings] は書き換えなくてもインストールできました。
ftdibus.inf の対応する項目に追加する行(追加する行だけ記述)
[FtdiHw] %USB\VID_0411&PID_00b3.DeviceDesc%=FtdiBus.NT,USB\VID_0411&PID_00b3 [FtdiHw.NTamd64] %USB\VID_0411&PID_00b3.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0411&PID_00b3 [String] USB\VID_0411&PID_00b3.DeviceDesc="USB Serial Converter"
ftdiport.inf の対応する項目に追加する行(追加する行だけ記述)
[FtdiHw] %VID_0411&PID_00b3.DeviceDesc%=FtdiPort232.NT,FTDIBUS\COMPORT&VID_0411&PID_00b3 [FtdiHw.NTamd64] %VID_0411&PID_00b3.DeviceDesc%=FtdiPort232.NTamd64,FTDIBUS\COMPORT&VID_0411&PID_00b3 [String] VID_0411&PID_00b3.DeviceDesc="BUFFALO RemoteStation PC-OP-RS1"
ドライバインストール時は、上記フォルダを手動で指定します。
ドライバを検索せずにディスク使用まで持って行く。
KURO-RS でもおそらく同じです。
● PC-OP-RS1 を使ったデータ取り込み
すべて下記のページを参考にさせていただきました。
ツールも下記ページからダウンロードできる IrReceiver/IrSender を使用しています。
● ROBO-Q 赤外線コマンドの信号
「スーの道具箱/分解してみよう/PC-OP-RS1」によると、受信データは
0.1ms のサンプリング情報とのこと。
240byte x 8bit = 1920bit が 0.1ms 単位だとすると 192ms 分の情報が一度に
取れます。
実際にサンプリングした bit パターンを見てみると下記のようになっています。
実際には 1bit 程度の誤差が入ります。
111111111111111100000111111111100000111111000011111100000111110000011111111110000011111100000000
・信号と思われるところ = 5個並んだ1(H) または 10個並んだ1(H)
・区切り = 5個並んだ0(L)
よって
0.5ms の連続する H = データの 0
1.0ms の連続する H = データの 1
0.5ms の連続する L = 区切り
とみなすと、一番最初に書いた 7bit のデータが得られます。
データの先頭は 1ms 程度の H が続きます。
コマンドの長さは
1.0 + 1.5*6 + 1.0 = 11ms
1.0 + 1.0*6 + 1.0 = 8ms
なので、送信に 8~11ms かかります。
連続歩行の場合 170ms 程度の間を空けているようです。
スライダを L→H と移動する場合やターンの開始時などは、間無しにほぼ連続して
コマンドが送られています。
●障害物認識ユニット
障害物認識ユニットは、上記のコマンドとは全く異なるパターンが送られています。
1111110000000000111111000000
最初の H が 0.5ms でデータ区切りが 1ms あるためコマンドと区別可能です。
左右の違いが無かったため、どのように区別しているのかはまだわかりませんでした。
●参考にさせていただきました
下記のページが無かったら調べることが出来ませんでした。
JuJu 様、NMVL 様に感謝します。
・スーの道具箱/分解してみよう/PC-OP-RS1
・プログラミング研究所 KURO-RSをWindows XP x64で使用する
関連エントリ
・タカラトミー ROBO-Q
障害物認識ですが、ロボット側で発光してないでしょうか?左右のLEDっぽいものが、赤外線LEDか、受光素子で、自律で動いているのではないでしょうか。中央が発光で左右が受光か?中央の発光が指向性が低くて拡散して、壁にあったって左右の受光量が違うとか。発光2つ、受光2つだと楽でしょうが。
書き方がわかりにくかったのかもしれないですが、
「障害物認識ユニット」というのが LEDです。名称は取説に
合わせたのでかえって混乱しさせてしまったかもしれません。
そですロボット側が発光しています。
リモコンと同じコマンドフォーマットで自分も発光すれば、
リモコンと共通の受光素子&回路で識別できるので簡単ではないかと
予想したのが昨日の記事でした。
ただ光量が少ないのかそもそも違うのか、ROBO-Q 側はデジカメで
撮影しても写りませんでした。
今日の記事は、実際にロボット側の「障害物認識ユニット」が発光してる
赤外線のパターンを取り出してみたら、リモコンのコマンドとは
全く異なるものだったというところまでです。
あと左右の発光パターンの違いも検出できなかったので昨日の予測は
外れでした。
そうですね、指摘していただいたように発光と受光が
逆の可能性もあるのでもう少し調べないとわからないみたいです。
もう少しやってみます。
部屋を真っ暗にしてみると見えるとか。
自分もやっとデジカメで赤外線発光ダイオードみてみました(先にやれ、俺)。紫色に見えました。
真っ暗でも見えなかったんですよ。
ほんとに真っ黒な写真ができた。
なんかもう普通に 2500円で売ってる。
見えなかったですか。うーむ、発光時間が短いんですかね。