2009/12/07

Hibikino-Musashiのプログラム(7)

みなさん、こんにちは。

今回はHibikino-Musashiのプログラムを支えるソフトウェアを紹介します。

私たちのプログラムは約10,000行ものコードで構成されています。この数字は他のプロジェクトと比較してそれほど多いものはありません。2009年の世界大会優勝チームは10万行あると言っていましたので、むしろ少ない方でしょう。

プログラムは全部フルスクラッチ、というわけではありません。コードの量を減らすために画像処理や通信といったものを全て外部ライブラリに任せています。

・OpenCV
 Intelの画像処理ライブラリです。Intel製CPU環境で高速に動作します。
・CMU 1394 Digital Camera
 カーネギーメロン大学が作った1394カメラのドライバ&ライブラリです。
・Open Dynamics Engine (ODE)
 オープンソースの物理エンジンです。シミュレータに使われています。
・DrawStuff2(自作)
 ODE付属の描画ライブラリを高機能化した上位互換ライブラリです。
・Musashi Framework(自作)
 Hibikino-Musashiオリジナルライブラリです。基本的な数学関数や、タイマー、
 シリアル通信、UDP、Wiiリモコン等プログラムの中核となるライブラリです。

Musashi Frameworkには、主にロボットを動かす際に必要となる関数が入っていますが、前回紹介したスプラッシュスクリーンや、Wiiリモコンなど、ロボカップとは関係ないものもたくさん実装されています。プログラマの遊び心がうかがえますね。

このように、私たちのプログラムは、いろいろなソフトウェアによって成り立っています。

1週間にわたってお送りしてきました「Hibikino-Musashiのプログラム」はいかがでしたか?

ロボットに興味がある、ロボカップをやってみたい、という方はいつでも大歓迎です。


一緒に世界を目指しましょう!

2009/12/06

Hibikino-Musashiのプログラム(6)

こんにちは。

今回はプログラムの「デザイン」についてお話しします。

見た目の良さは重要ですね。

Hibikino-Musashiプログラムのソースコードも見やすさ、わかりやすさを重視した設計になっており、コメントも丁寧に書かれてあります。

アイコンの話は以前、出てきましたね。


実行ファイルにはバージョン情報や著作権情報がこっそり組み込まれてあります(メンバー内でもこれを知っている人は少数です)。

デバッグ中の画面もウィンドウを整列させるなどして、見やすさを向上させています。



こちらはプログラム起動時のスプラッシュ画面。


※画面は開発中のものです(ここの素材を使用しています)。

ロボカップらしくないオシャレなデザイン。

これがフェードしながら表示されます。

こうしたムダ機能もHibikino-Musashiプログラムの特徴の一つです。

2009/12/05

Hibikino-Musashiのプログラム(5)

こんにちは。

今回は「シミュレータ」についてお話しします。


もともとシミュレータは実機プログラムとは別のプロジェクトとして進められていましたが、'09年の大阪大会から統合されました。

今では行動プログラムのデバッグに欠かせないツールとなっています。

シミュレータの動力学計算には、オープンソースの物理エンジンであるOpen Dynamics Engineを使っています。

ODEはきわめて高速に動作するので、多数の物体を動作させるのに向いています。

さらに、ODE付属の3D描画ライブラリを新しく書き直し、全画面表示や、サウンド再生、ジョイスティックのサポートなど、ムダに高機能化しています。詳細はこちら

カメラの挙動も凝っており、ちょっとしたゲームの様な作りになっています。

いつか公開できれば、と思います。

2009/12/04

Hibikino-Musashiのプログラム(4)

こんにちは。

今回はロボットの「通信」についてお話しします。

ロボカップでは、無線LANによるロボット間通信を行うことが出来ます。

主にIEEE802.11aと11bが使われています。11nを使ってるチームはまだ見たことがありません。

Hibikino-Musashiは電波干渉の少ない11aを使っています。

Bluetoothも時々使いますね。Wiiリモコンで動かすデモを行う時とかに。試合中は使ってはいけないことになっていますので、エキシビションマッチの時にこっそりやっています(笑)

さて、ロボット間通信のプロトコルには、よく耳にするTCPではなく、UDP(User Datagram Protocol)を使っています。


TCPが通信の信頼性を重視しているのに対し、UDPは通信速度を重視しています。

ロボット達は、お互いに自己位置やボール情報を共有し、「誰が一番ボールに近いのか」や「誰がディフェンスに回るか」といった事を自分で考えます。

UDP通信の実装はWinSock2で行っていますが、コードを簡略化するために、一連の処理をまとめたオリジナルライブラリを今回新たに作成しました。

このライブラリについては、また今度紹介します。

次回は「シミュレータ」についてお送りします。

2009/12/03

Hibikino-Musashiのプログラム(3)

こんにちは。

今回は「画像処理」についてお話しします。

ロボットの頭には全方位カメラが取り付けられています。


カメラはSONY製のDFW-VL500です。

また、カメラの性能を最大限に引き出すため、ドライバはCMU 1394 Digital Camera Driverを使っています。

画像処理にはOpenCVというライブラリを使っています。

画像処理は「画像取得スレッド」と「画像処理スレッド」に分かれています。

最近流行のマルチスレッドで動いているんですね~。

画像取得スレッドでは、
 ・データの読み出し
 ・240×240にトリミング
 ・色変換(YUVとHSV)& 色抽出

画像処理スレッドでは、
 ・ボール検出
 ・自己位置推定
 ・障害物検出

といった処理を行っています。

中型リーグでは自己位置推定が大きな課題となっており、多くのチームが「パーティクルフィルタ」を用いた手法を採用しています。

OpenCVではパーティクルフィルタは「Condensation」という形で実装されています。パーティクルフィルタって何?という方はこちらをどうぞ(英語サイトです)。

検出した白線情報を元に、パーティクルフィルタによって自己位置を求めます。

↓こんな感じ


画像処理は行動に比べて専門性が高いです。

ですが、わかるようになれば、これほど面白いものはありません。「あれをやってみよう!」「こういうのはどうか?」など、考えを巡らせるのが楽しくなっていきます。

次回は「通信」についてお送りします。

2009/12/02

Hibikino-Musashiのプログラム(2)

こんにちは。

今回は行動プログラムについてお話しします。

ロボットの「行動」とは、ボールを取りに行ったり、シュートしたりすることを指します。

Hibikino-Musashiのプログラムでは、
 1.行動選択
 2.行動実行
 3.下位制御
といった流れでロボットを動かしています。

1.行動選択では、「キックオフ」の信号が来たら何をする や、フォワードやディフェンダーといったロール(役割)を決める といった処理を行います。

2.行動実行では、具体的にどういう動きをすればよいかを計算して、目標速度や進行方向などを算出します。

3.下位制御では、モーターを回したり、方位センサやエンコーダからのデータを読み出します。

行動プログラムで重要なのが、「ボールを取る動作」と「ボールを運ぶ動作」です。これらに関しては、ポテンシャル関数を使って軌道生成をしたり、他チームの論文を参考にしてファジー制御を取り入れたりしています。

ちなみに、前回の動画ではポテンシャル法で動きを作っています。

ボールの相対距離・角度と、ゴールの相対角度を用いて、


↓このような式を作ります(aは正の定数、Vminはロボットの最低速度)。

Omegaが角速度、Angleが進行方向、Velocityが速度ですので、ロボットはゴールの方向を向きつつボールとゴールが一直線に並ぶような位置に緩やかに減速しながら移動します。

いかがでしたでしょうか?

行動プログラムでは、この他にも回転行列を使ったロボットのポジショニングなど、面白いコードを見ることが出来ます。

基本的に使われているのは高校レベルの数学ですので、そこまで難しくはありませんよ。

次回は「画像処理」についてお送りします。

2009/12/01

Hibikino-Musashiのプログラム(1)

みなさん、こんにちは。

先月の「ひびきの祭」デモは大盛況のうちに終了しました。

ご来場いただいた皆さま、本当にありがとうございました。

さて、当ブログでは、これまでHibikino-Musashiのロボットの活躍やデモの様子などをお送りしてきましたが、

「ロボットって どうやって動いているの?」
「プログラムってなに?」

と、興味を持ってくださった方もきっと多いことと思います。

そこで今回はロボットのプログラムについてご紹介します。

まずはこちらの動画をご覧下さい。



ロボットの中心にはノートPCが入っています。

私たちは、このノートPCにプログラムを入れてロボットを動かしています。

プログラムは大体10,000行ぐらいですね。言語はC++です。

内容は大きく分けると、
 ・行動
 ・画像処理
 ・通信
 ・シミュレータ
の4つです。ソフト班メンバーが分担して作っています。

今日から1週間にわたって、Hibikino-Musashiのプログラムを紹介していきます。

次回は「行動」プログラムについてお送りします。