日別アーカイブ: 2009年3月4日

タカラトミー ROBO-Q (2) 赤外線コマンドの解析

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 を使用しています。

スーの道具箱/分解してみよう/PC-OP-RS1

● 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