ロボワン、ロボカップ研究所 ROBO-ONE virtual
| Home | About | Staff | Report | Diary | BBS | Album | Link |
 

2足歩行型ヒューマノイドの開発を行っています。

Let's Groove! マジンガア計画(by じゅうぞう)

0. あー、なんかやる気おきねー。

もう11月だというのに、まったくモチベーションがあがってこない。まずいなー。動作の改善とか新しいCPUボードとか、やることはいろいろあるんだけどな。ゆみ博士はなんだかバーチャルマジンガアとか着々とすすめてるのに。うーん。

「モチベーションがあがらないときはわき道にそれてみる」というのはロボットやってる人のページを見ると見習うべきところでしょう。ということでゆみ博士の、「ダンスダンスレボリューション(以下DDR)のコントローラを使って、腕のマスタースレーブだけでなく足でマジンガアの動きを操作しよう!」のアイデアを実現することにしました。名づけて、「Let's Groove! マジンガア計画」

しかし、あくまでわき道だし、順調にいけば難しいことじゃないはずなので、あまり時間かけないようにしたいなあ。

1. 用意したもの。

じつはゆみ博士のアイデア聞いたときに、yahooオークションでプレイステーション用のDDRコントローラゲットしちゃったんだよねー。2800円+送料なり。

これをWindowsのノートPCで操作するわけだから、当然変換しなきゃならない。で、買ったのがロアスのJOX-U302というPS2-USB変換ケーブル。1800円+送料でした。ついでにPS2用のコントローラ(DualShock2)も購入。プレステも持ってないのにコントローラばっかりふえてきました。なんかコントローラだけあっても寂しいので、PC用のゲーム(バイオハザード3)も買ってしまいました。万一失敗してもこれで遊んでお茶を濁そう。

2. DirectInput

しかし私、いままでDirectXはおろか、Windowsのプログラムも書いたことないんですけど。まあ、一般的知識として、DirectInputっていうAPIを使えばいいってことは知ってますけどねー。いままでの操作系を継承するので、WideStudioから操作できるようにしないといけない。WideStudioのコンパイラはMinGWなので、そこからDirectInputを使えればOKなわけです。しらべてみると、以下のような情報をみつけました。

Routine-Workさんのページ
http://cefiro.homelinux.org/topics/SDL/printable/setup-win32-mingw-2.0-20030908.html

さっそくこのSDLのページからdirectx-devel.tar.gzをダウンロードして、widestudioのディレクトリのgccの下に展開しました。あとはDirectInputのサンプルかなんかがのっているページを探して、っと…これがよさそうかな。

アットルネスさんのページ(http://www3.omn.ne.jp/~renas/DirectX/)

うーん、しかしこのコードのAPIと、SDLのページから落としてきたdinput.hのAPIが微妙に違うような…あ、SDLのファイルはDirectXのバージョンが5だ。ということでDirectX5でDirectInputを解説しているページも。

Studio ftnさんのページhttp://ftn.hp.infoseek.co.jp/small_game_dxJoy.htm)

ちがうのは、Pollというメソッドを使うために、LPDIRECTINPUTDEVICEというオブジェクトを作ったあとに、LPDIRECTINPUTDEVICE2というオブジェクトに変換するようになっていることのようだ。新しいバージョンのDirectXではそんなことしなくてもいいらしいが。あと、DirectXにわたすウィンドウなどの資源をとってくる方法は、

WideStudio ML(http://www.zoi.to/~zoi/widestudio/ml/200205-/msg00151.html)

にやり方が答えられていました。やっぱ綺麗にできてるわ、WideStudioは。

3. あっさり完成

とりあえずテストコードを書いてと。ライブラリの設定に-ldinput -ldxguidを追加してと。よっしゃ、実行! うわ、落ちた。あ、いかんいかん、ジョイスティックつながないと初期化で失敗するのか。ということでジョイスティックをつないでちょっと書き直してと。

おお、うごくうごく。ちゃんと踏んだところのボタンの色が変わる。いまはロボットが手元にないけど、これにマジンガアの歩行コマンドをバインドすれば、まったく問題ないぞ。わーい。思い立ってからの所要時間、2時間30分。


華麗なステップを踏む筆者。


踏んだところが赤くなってる。

widestudioテストコード(とりあえず書いたものなので汚いのは勘弁ね)

4. 課題

しばらく遊んでいると、一つ問題があることが判明。左右、または上下を同時に踏んだとき、どちらかしかONしない。これは左右と上下がジョイスティックの左右上下に対応しているので、当然といえば当然なのだが、イマイチかなー。同時押しに対応するのもできそうな気がするんだが、DirectInputをもうちょっとしらべないといかんかも。

あと、ちょっとDDRのコントローラではボタンが少ないかなあ…僕は踏むところが9個ぐらいマス目状にあるのかと思っていたのだが、6つ+セレクトボタン+スタートボタンしかないのか。まあ実際ロボット動かしてみないとわからんかなー。

む、なんだかモチベーションがちょっとあがった気がする。がんばるでー。