2009/03/25
DirectX SDK March 2009
2009年初の新しい SDK です。
・DirectX SDK (March 2009)
大きなトピックは Direct2D/DirectWrite の Technical Preview が含まれたこと。
Windows7 beta + Windows7 SDK beta でないと試すことが出来なかった
Direct2D / DirectWrite が Vista でも使えるようになりました。
ドキュメント類は以前から MSDN に上がっているのでそちらを参照することになります。
インストールによって d2d1_beta.dll, dwrite_beta.dll が入りました。
これでおそらく D2D/DWrite だけなら Windows7 SDK が無くてもテストできると思います。
ヘッダ類もこちらの方が新しいようです。コメントが増えて新しい定義もあります。
その他 DXGI1.1 も入りました。元々ヘッダは含まれてましたが、dxgi_beta.dll / lib が
追加されてドキュメントも統合されたようです。
Direct3D11 TechPreview の方はあまり大きな変化があったようには見えませんが、
細かく変更が入っています。
たとえばヘッダには CD3D11_RECT, CD3D11_DEPTH_STENCIL_DESC,
CD3D11_BLEND_DESC 等のヘルパークラスが多数追加されているようです。
Direct2D と同じようにデフォルト値による初期化がサポートされています。
デフォルト値を示すオーバーロード用の type は CD3D11_DEFAULT です。
マニュアルでは Shader Model 5 の Attributes に attrib, maxtessfactor,
earlydepthstencil が追加。Intrinsic Functions には
countbits, EvaluateAttributeAtControid, EvaluateAttributeAtSample
が増えています。
またヘッダを見ないと使い方が分からなかった D3DCompiler のマニュアルも入りました。
Shader の項目には Reflection 関連のインターフェースが追加されています。
このあたりヘッダを見てもかなり手が入っていることが分かります。
まだ Effect (fx) はありませんが進展は見られます。
その他マニュアルには載ってませんが D3D11_CREATE_DEVICE_BGRA_SUPPORT
も目新しいところです。
関連エントリ
・Direct2D (7) Tessellate の 2
・Direct2D と Direct3D10.1 の下位互換
・Windows7 リモートデスクトップと Direct3D
・Direct3D11/DirectX11 (18) GPU を使ったアウトラインフォントの描画の(6)
・Direct3D11 Technical Preview D3D11の互換性、WARP Driver
・DirectX SDK (March 2009)
大きなトピックは Direct2D/DirectWrite の Technical Preview が含まれたこと。
Windows7 beta + Windows7 SDK beta でないと試すことが出来なかった
Direct2D / DirectWrite が Vista でも使えるようになりました。
ドキュメント類は以前から MSDN に上がっているのでそちらを参照することになります。
インストールによって d2d1_beta.dll, dwrite_beta.dll が入りました。
これでおそらく D2D/DWrite だけなら Windows7 SDK が無くてもテストできると思います。
ヘッダ類もこちらの方が新しいようです。コメントが増えて新しい定義もあります。
その他 DXGI1.1 も入りました。元々ヘッダは含まれてましたが、dxgi_beta.dll / lib が
追加されてドキュメントも統合されたようです。
Direct3D11 TechPreview の方はあまり大きな変化があったようには見えませんが、
細かく変更が入っています。
たとえばヘッダには CD3D11_RECT, CD3D11_DEPTH_STENCIL_DESC,
CD3D11_BLEND_DESC 等のヘルパークラスが多数追加されているようです。
Direct2D と同じようにデフォルト値による初期化がサポートされています。
デフォルト値を示すオーバーロード用の type は CD3D11_DEFAULT です。
マニュアルでは Shader Model 5 の Attributes に attrib, maxtessfactor,
earlydepthstencil が追加。Intrinsic Functions には
countbits, EvaluateAttributeAtControid, EvaluateAttributeAtSample
が増えています。
またヘッダを見ないと使い方が分からなかった D3DCompiler のマニュアルも入りました。
Shader の項目には Reflection 関連のインターフェースが追加されています。
このあたりヘッダを見てもかなり手が入っていることが分かります。
まだ Effect (fx) はありませんが進展は見られます。
その他マニュアルには載ってませんが D3D11_CREATE_DEVICE_BGRA_SUPPORT
も目新しいところです。
関連エントリ
・Direct2D (7) Tessellate の 2
・Direct2D と Direct3D10.1 の下位互換
・Windows7 リモートデスクトップと Direct3D
・Direct3D11/DirectX11 (18) GPU を使ったアウトラインフォントの描画の(6)
・Direct3D11 Technical Preview D3D11の互換性、WARP Driver
2009/03/21
SSD OCZ Vertex
先週末、運良く店頭で入手できたので OS を入れ替えて一週間ほど使いました。
・OCZSSD2-1VTX60G
60GB の 2.5inch SSD です。22800円
RAM 8GB + Win7 beta x64 なので、ページングファイル無しにして休止状態ファイル
クリーナーで消して OS のみ 10GB くらい。
特に速度を実感できるのはソフトウエアのインストールで、残り時間が正確に
表示されないくらい。Windows の起動や終了も速いし、重いアプリケーションの
立ち上げも違いが分かるほどに短縮しています。
プログラミング作業はどうかというと、元々そんなに編集もコンパイル時間も
困ってなかったのであんまり速い感じはしていません。
その代わり作業中、非常に静かなのが心地よいです。
ファンの一定の音はありますが不定期に鳴り出す音が消えました。
ファイルに書き込んでるな、とか裏で何か動き出したな、とか無いので結構違います。
HDD が寝ていて、いざアクセスしようとしたらスピンアップ待ちで起動まで待たされる
こともないわけです。動作中の配置換えなんかも気にせず出来そう。
プロセッサは年々速くなっていくのでストレージとの速度差は離れる一方でしたが
ここに来て急に差が縮まり出したようです。
OS やアプリケーションも HDD のシークが遅いという前提で作られていますが、
そのうち全く気にしなくても良くなるかもしれません。
ファイルアクセスを速くするためのいくつかの工夫も、きっと古い技術となって
忘れていくのでしょう。
机の奥から古いレシートが出てきました。
1999年7月9日に 13GB の HDD を 21480円で買ってました。
・OCZSSD2-1VTX60G
60GB の 2.5inch SSD です。22800円
RAM 8GB + Win7 beta x64 なので、ページングファイル無しにして休止状態ファイル
クリーナーで消して OS のみ 10GB くらい。
特に速度を実感できるのはソフトウエアのインストールで、残り時間が正確に
表示されないくらい。Windows の起動や終了も速いし、重いアプリケーションの
立ち上げも違いが分かるほどに短縮しています。
プログラミング作業はどうかというと、元々そんなに編集もコンパイル時間も
困ってなかったのであんまり速い感じはしていません。
その代わり作業中、非常に静かなのが心地よいです。
ファンの一定の音はありますが不定期に鳴り出す音が消えました。
ファイルに書き込んでるな、とか裏で何か動き出したな、とか無いので結構違います。
HDD が寝ていて、いざアクセスしようとしたらスピンアップ待ちで起動まで待たされる
こともないわけです。動作中の配置換えなんかも気にせず出来そう。
プロセッサは年々速くなっていくのでストレージとの速度差は離れる一方でしたが
ここに来て急に差が縮まり出したようです。
OS やアプリケーションも HDD のシークが遅いという前提で作られていますが、
そのうち全く気にしなくても良くなるかもしれません。
ファイルアクセスを速くするためのいくつかの工夫も、きっと古い技術となって
忘れていくのでしょう。
机の奥から古いレシートが出てきました。
1999年7月9日に 13GB の HDD を 21480円で買ってました。
2009/03/14
タカラトミー Q-TRAIN 赤外線コマンドの 解析
PC-OP-RS1 (KURO-RS) を使って ROBO-Q と同じように調べてみました。
Q-TRAIN のコントローラの赤外線信号です。
・TAKARA TOMY Q-TRAIN
●コマンドフォーマット
●コマンドエンコード
ヘッダや 1bit 分の波形も長く取られており ROBO-Q とは異なっています。
使用したツールは ROBO-Q 同様「スーの道具箱/分解してみよう/PC-OP-RS1」の
IrReceiver です。
関連エントリ
・タカラトミー ROBO-Q (3) PC から操作する実験
・タカラトミー ROBO-Q (2) 赤外線コマンドの解析
・タカラトミー ROBO-Q
Q-TRAIN のコントローラの赤外線信号です。
・TAKARA TOMY Q-TRAIN
●コマンドフォーマット
コマンドは 8bit 分 下記の順番で送信されています 先頭 C C A 0 R L B F CC = BAND A~D (00,01,10,11) A = 自動移動の指定かどうか (左サイドのスイッチが on なら 1) 0 = 常にゼロ R = 右ボタン (→) L = 左ボタン (←) B = 後退ボタン (↓) F = 前進ボタン (↑) R L B F の各ボタンは同時押しが出来ます。 例えば前進+右旋回だと F + R が同時に ON になります。 コマンド組み合わせの例 BAND A 前進 00000001 BAND B 前進 01000001 BAND C 前進 10000001 BAND D 前進 11000001 BAND A 前進自動 00100001 BAND A 後退 00000010 BAND A 左 00000100 BAND A 右 00001000 BAND A 前進+左 00000101
●コマンドエンコード
ヘッダや 1bit 分の波形も長く取られており ROBO-Q とは異なっています。
ヘッダ常に H 6.3msec bit 0 = L 0.5msec + H 1.7msec 1 = L 1.5msec + H 0.7msec エンコードされた bit データは ROBO-Q と違い、0 でも 1 でも同じ長さになります。 よって 1コマンドはだいたい 23.9msec 例 BAND D 前進 + 左 で受け取った波形 (0.1msec 単位のサンプリング) // ヘッダ 11111111111111111111111111111111111111111111111111111111111111 // 1 000000000000000 1111111 // 1 000000000000000 111111 // 0 00000 11111111111111111 // 0 00000 11111111111111111 // 0 00000 11111111111111111 // 1 (左ボタン) 000000000000000 1111111 // 0 00000 11111111111111111 // 1 (前進ボタン) 0000000000000000 111111
使用したツールは ROBO-Q 同様「スーの道具箱/分解してみよう/PC-OP-RS1」の
IrReceiver です。
関連エントリ
・タカラトミー ROBO-Q (3) PC から操作する実験
・タカラトミー ROBO-Q (2) 赤外線コマンドの解析
・タカラトミー ROBO-Q
2009/03/13
Windows7 とマルチタッチ / HP TouchSmart PC IQ800
Windows7 beta でも下記のハードでタッチ操作を試すことが出来るそうです。
・Windows 7で"マルチタッチ"を楽しむには? MSが利用方法やTIPSを紹介
HP TouchSmart PC IQ827jp に Windows7 beta を入れてみました。
・HP TouchSmart PC IQ800
IQ800 は液晶モニタ一体型のオールインワン PC で光学式のタッチパネルを搭載しています。
パネルに触れるぎりぎりの位置で反応するので、パネルに指を押しつける必要もなく
非常に軽い操作ができます。
iPhone 等の静電容量タイプと違うのは指でなくても反応すること。
つめでもいいしペンでも良いし、画面に近づく物は何でもタッチ扱いです。
付属するキーボードもマウスも最初からワイヤレスタイプで、無線LAN 11b/g/n も
Bluetooth も内蔵しています。ケーブルは電源のみ、AC アダプタは巨大だけど
すっきりとした見た目です。
キーボードも非常に薄く、ちょうど本体下の足の間に入ります。
タッチやマウスを使っていても邪魔になりません。
標準搭載の Vista だと、マルチタッチらしい操作ができたのは TouchSmart
画面のアイコン拡縮だけでした。
Windows7 beta x64 を install し、WindowsUpdate でタッチパネルドライバが
入ることを確認しました。でも予想外のところでトラブルが。
タッチは使えるものの GeForce 9600M GS のドライバが入らず Aero にできません。
Notebook 向け M 系は Windows7 ドライバがまだ無く Vista ドライバ 179.48 も
エラーが出ます。
「NVIDIA Setup プログラムは、現在のハードウエアと互換性のあるドライバを見つけることができませんでした」
アップグレードは出来るはずなので試しに Vista をクリーンインストールしても
Vista 向けドライバなのに同じエラーです。
その後 acryl さんに下記のページを教えてもらいました。
・価格.com 『XPのインストール』のクチコミ掲示板
同じように LaptopVideo2Go から 182.06 Vista 64bit の inf を置き換えてインストール
したところうまくいきました。WDDM 1.0
CPU: 5.9
RAM: 5.9
AERO: 6.2
GAME: 5.2
HDD: 5.9
AC アダプタがついていたりモバイル向け GPU が入っていたりと比較的ノート PC に
近い構造です。画面の明るさ調整ボタンもモニタ側についておらず、ノートのように
キーボードで操作します。
Windows7 ではこれらのショートカットが使えなくなりましたが、
ちょうど type P + Windows7 用に作っていた backlightwin がそのまま動きました。
肝心のタッチは一応 2点まで取れています。
こんなに Windows の ペイント ソフトの稼働率が高いのは初めてです。
関連エントリ
・VAIO type P Windows7 beta とバックライト調整など
・Windows 7で"マルチタッチ"を楽しむには? MSが利用方法やTIPSを紹介
HP TouchSmart PC IQ827jp に Windows7 beta を入れてみました。
・HP TouchSmart PC IQ800
IQ800 は液晶モニタ一体型のオールインワン PC で光学式のタッチパネルを搭載しています。
パネルに触れるぎりぎりの位置で反応するので、パネルに指を押しつける必要もなく
非常に軽い操作ができます。
iPhone 等の静電容量タイプと違うのは指でなくても反応すること。
つめでもいいしペンでも良いし、画面に近づく物は何でもタッチ扱いです。
付属するキーボードもマウスも最初からワイヤレスタイプで、無線LAN 11b/g/n も
Bluetooth も内蔵しています。ケーブルは電源のみ、AC アダプタは巨大だけど
すっきりとした見た目です。
キーボードも非常に薄く、ちょうど本体下の足の間に入ります。
タッチやマウスを使っていても邪魔になりません。
標準搭載の Vista だと、マルチタッチらしい操作ができたのは TouchSmart
画面のアイコン拡縮だけでした。
Windows7 beta x64 を install し、WindowsUpdate でタッチパネルドライバが
入ることを確認しました。でも予想外のところでトラブルが。
タッチは使えるものの GeForce 9600M GS のドライバが入らず Aero にできません。
Notebook 向け M 系は Windows7 ドライバがまだ無く Vista ドライバ 179.48 も
エラーが出ます。
「NVIDIA Setup プログラムは、現在のハードウエアと互換性のあるドライバを見つけることができませんでした」
アップグレードは出来るはずなので試しに Vista をクリーンインストールしても
Vista 向けドライバなのに同じエラーです。
その後 acryl さんに下記のページを教えてもらいました。
・価格.com 『XPのインストール』のクチコミ掲示板
同じように LaptopVideo2Go から 182.06 Vista 64bit の inf を置き換えてインストール
したところうまくいきました。WDDM 1.0
CPU: 5.9
RAM: 5.9
AERO: 6.2
GAME: 5.2
HDD: 5.9
AC アダプタがついていたりモバイル向け GPU が入っていたりと比較的ノート PC に
近い構造です。画面の明るさ調整ボタンもモニタ側についておらず、ノートのように
キーボードで操作します。
Windows7 ではこれらのショートカットが使えなくなりましたが、
ちょうど type P + Windows7 用に作っていた backlightwin がそのまま動きました。
肝心のタッチは一応 2点まで取れています。
こんなに Windows の ペイント ソフトの稼働率が高いのは初めてです。
関連エントリ
・VAIO type P Windows7 beta とバックライト調整など
2009/03/05
タカラトミー ROBO-Q (3) PC から操作する実験
少々時間が無かったので昨日の解析結果が正しいかどうか確認するだけ。
BAND A/D の ROBO-Q も調達できたので 4バンド分の信号を確認できました。
実際にコマンド送信プログラムを作ってみます。
「スーの道具箱/分解してみよう/PC-OP-RS1」
のページを参考にさせていただきました。そのままです。
初期化
送受信は WriteFile()/ReadFile() です。
PC-OP-RS1 用の送信データを組み立てます。
赤外線の On/Off 情報をビット列で指定。あくまで動作確認用なのでべたで。
データ送信
昨日のデータ通りです。すんなり動作しました。
PC で ROBO-Q を操作できます。
SendCommand( 1, 2, 0 ); // BAND B で中速(M)前進
SendCommand( 1, 1, 1 ); // BAND B で低速(L)右回転
でもデータ送信まで思ったより時間がかかるので、細かい制御をリアルタイムに
行うには少々厳しいです。要検討。
修正 2009/3/5 4:27 勘違いでした。十分な速度で操作できます。
きちんと使うなら 192ms 分複数のコマンドをパックして送る必要あります。
関連エントリ
・タカラトミー ROBO-Q (2) 赤外線コマンドの解析
・タカラトミー ROBO-Q
BAND A/D の ROBO-Q も調達できたので 4バンド分の信号を確認できました。
実際にコマンド送信プログラムを作ってみます。
「スーの道具箱/分解してみよう/PC-OP-RS1」
のページを参考にさせていただきました。そのままです。
初期化
hPort= CreateFile( "COM4", GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); if( hPort == INVALID_HANDLE_VALUE ){ // ERROR return; } DCB dcb; dcb.DCBlength= sizeof(DCB); dcb.BaudRate= CBR_115200; dcb.fBinary= TRUE; dcb.fParity= FALSE; dcb.fOutxCtsFlow= FALSE; dcb.fOutxDsrFlow= FALSE; dcb.fDtrControl= DTR_CONTROL_DISABLE; dcb.fDsrSensitivity= FALSE; dcb.fTXContinueOnXoff= FALSE; dcb.fOutX= FALSE; dcb.fInX= FALSE; dcb.fErrorChar= FALSE; dcb.fNull= FALSE; dcb.fRtsControl= RTS_CONTROL_DISABLE; dcb.fAbortOnError= FALSE; dcb.fDummy2= 0; dcb.wReserved= 0; dcb.XonLim= 0; dcb.XoffLim= 0; dcb.ByteSize= 8; dcb.Parity= NOPARITY; dcb.StopBits= ONESTOPBIT; dcb.XonChar= 0; dcb.XoffChar= 0; dcb.ErrorChar= 0; dcb.EofChar= 0; dcb.EvtChar= 0; dcb.wReserved1= 0; SetCommState( hPort, &dcb );
送受信は WriteFile()/ReadFile() です。
PC-OP-RS1 用の送信データを組み立てます。
赤外線の On/Off 情報をビット列で指定。あくまで動作確認用なのでべたで。
int pushbit( char* ptr, int index, int flag, int length ) { if( flag ){ for( int i= 0 ; i< length ; i++ ){ int byteoffset= index >> 3; int bitoffset= index & 7; ptr[byteoffset] |= (1<<bitoffset); index++; } }else{ index+= length; } return index; } // H 1ms + data x7 void SendCommand( int band, int speed, int turn ) { unsigned int bitpattern= ((speed<<5) & 0x60) |(( turn<<3) & 0x18) |(( band<<1) & 0x06); char byte[240]; memset( byte, 0, 240 ); int index= 0; index= pushbit( byte, index, TRUE, 10 ); // H 1ms for( int i= 0 ; i< 7 ; i++ ){ if( bitpattern & (1<<(6-i)) ){ index= pushbit( byte, index, TRUE, 10 ); // H 1ms }else{ index= pushbit( byte, index, TRUE, 5 ); // H 0.5ms } index= pushbit( byte, index, FALSE, 5 ); // L 0.5ms } SendIR( byte, 240 ); }
データ送信
void SendIR( const char* command ) { iPort->Send( "t", 1 ); iPort->Recv( rdata, 1 ); // 'Y' iPort->Send( "1", 1 ); // ch1 iPort->Recv( rdata, 1 ); // 'Y' iPort->Send( command, 240 ); iPort->Recv( rdata, 1 ); // 'E' }
昨日のデータ通りです。すんなり動作しました。
PC で ROBO-Q を操作できます。
SendCommand( 1, 2, 0 ); // BAND B で中速(M)前進
SendCommand( 1, 1, 1 ); // BAND B で低速(L)右回転
行うには少々厳しいです。要検討。
修正 2009/3/5 4:27 勘違いでした。十分な速度で操作できます。
きちんと使うなら 192ms 分複数のコマンドをパックして送る必要あります。
関連エントリ
・タカラトミー ROBO-Q (2) 赤外線コマンドの解析
・タカラトミー ROBO-Q
2009/03/04
タカラトミー ROBO-Q (2) 赤外線コマンドの解析
ROBO-Q のリモコンコマンドを調べてみました。
移動はコマンドを送信し続ける必要があります。
何もコマンドが送られていない状態が停止です。
●解析に使用したもの
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 の対応する項目に追加する行(追加する行だけ記述)
ftdiport.inf の対応する項目に追加する行(追加する行だけ記述)
ドライバインストール時は、上記フォルダを手動で指定します。
ドライバを検索せずにディスク使用まで持って行く。
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 程度の誤差が入ります。
・信号と思われるところ = 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 と移動する場合やターンの開始時などは、間無しにほぼ連続して
コマンドが送られています。
●障害物認識ユニット
障害物認識ユニットは、上記のコマンドとは全く異なるパターンが送られています。
最初の H が 0.5ms でデータ区切りが 1ms あるためコマンドと区別可能です。
左右の違いが無かったため、どのように区別しているのかはまだわかりませんでした。
●参考にさせていただきました
下記のページが無かったら調べることが出来ませんでした。
JuJu 様、NMVL 様に感謝します。
・スーの道具箱/分解してみよう/PC-OP-RS1
・プログラミング研究所 KURO-RSをWindows XP x64で使用する
関連エントリ
・タカラトミー 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
2009/03/03
タカラトミー ROBO-Q
非常に小さいです。
・TAKARA TOMY ROBO-Q

とことこ歩きます。
付属のコントローラを使えば、こんなに小さいのに歩かせたり回転したりと操縦できるんです。
ゆっくり動けるので、EIZO のモニタの上の縁なども端から端まで歩くことが出来ました。
さらにユニークなのは自律モードがあること。
左右に障害物認識ユニット(マニュアルに記載された名称)があって、
障害物をよけたり目の前のものを追跡したりします。
コントローラは TV リモコンのように赤外線を使っています。
ロボット側の赤外線受光部はちょうど顔の位置、正面です。
赤外線なのでおそらくリモコンのようにパルス信号でコマンドを識別しています。
ROBO-Q は A BAND ~ D BAND と 4種類あり、4台までは同時に操作しても混信しません。
前進や回転などの赤外線コマンドも 4セット用意されているのだと考えられます。
ちなみに同じ BAND タイプの ROBO-Q が 2台あると、1つのコントローラで同時に
操作できます。
自律モードではいったいどうやって障害物を見ているんでしょう。
小さいし価格も安いし、あまり複雑な仕組みは使っていないはずです。
障害物認識ユニットはちょうど顔の横についており、それぞれ右側と左側の障害物を
感知できます。
このセンサー赤外線発信部にそっくりです。

おそらく想像ですが、コントローラと同じように左右に赤外線のコマンドを発信して
いるのだと思われます。
赤外線の届く距離をうまく調整すれば、目の前に障害物が来たときだけ反射して
顔の正面の受光部でコマンドを受けることが出来ます。
受光部は共有できるし仕組みも単純にできて非常にうまい方法だと思います。
考えられる赤外線コマンドの種類は下記の通り。
・両足を動かす x3速度
・左足を動かす x3速度
・右足を動かす x3速度
・AI回避モードへ移行
・AI追跡モードへ移行
・右側障害物認識ユニット
・左側障害物認識ユニット
前進は左右のコマンドを同時に送ってるだけかもしれません。
障害物認識ユニットも微弱ながら学習リモコンが反応しました。
まだ障害物の再現は出来ていないので想像の範囲を超えてないです。
・TAKARA TOMY ROBO-Q

とことこ歩きます。
付属のコントローラを使えば、こんなに小さいのに歩かせたり回転したりと操縦できるんです。
ゆっくり動けるので、EIZO のモニタの上の縁なども端から端まで歩くことが出来ました。
さらにユニークなのは自律モードがあること。
左右に障害物認識ユニット(マニュアルに記載された名称)があって、
障害物をよけたり目の前のものを追跡したりします。
コントローラは TV リモコンのように赤外線を使っています。
ロボット側の赤外線受光部はちょうど顔の位置、正面です。
赤外線なのでおそらくリモコンのようにパルス信号でコマンドを識別しています。
ROBO-Q は A BAND ~ D BAND と 4種類あり、4台までは同時に操作しても混信しません。
前進や回転などの赤外線コマンドも 4セット用意されているのだと考えられます。
ちなみに同じ BAND タイプの ROBO-Q が 2台あると、1つのコントローラで同時に
操作できます。
自律モードではいったいどうやって障害物を見ているんでしょう。
小さいし価格も安いし、あまり複雑な仕組みは使っていないはずです。
障害物認識ユニットはちょうど顔の横についており、それぞれ右側と左側の障害物を
感知できます。
このセンサー赤外線発信部にそっくりです。

おそらく想像ですが、コントローラと同じように左右に赤外線のコマンドを発信して
いるのだと思われます。
赤外線の届く距離をうまく調整すれば、目の前に障害物が来たときだけ反射して
顔の正面の受光部でコマンドを受けることが出来ます。
受光部は共有できるし仕組みも単純にできて非常にうまい方法だと思います。
考えられる赤外線コマンドの種類は下記の通り。
・両足を動かす x3速度
・左足を動かす x3速度
・右足を動かす x3速度
・AI回避モードへ移行
・AI追跡モードへ移行
・右側障害物認識ユニット
・左側障害物認識ユニット
前進は左右のコマンドを同時に送ってるだけかもしれません。
障害物認識ユニットも微弱ながら学習リモコンが反応しました。
まだ障害物の再現は出来ていないので想像の範囲を超えてないです。