2012年12月15日 (土)

Hello world for Roomba Hack!!

やる気が戻ってきたので、Roomba Hackを始めました。

手始めに、ここを参考にさせてもらいながら通信ケーブルを作りました。材料はすでに揃えてあったのですが、仕事が忙しかったり疲れていたりでやる気が出なかったので今まで放置していました。

続いてプログラムです。まずはシリアル通信のループバックテストをしてから、プログラミング言語を学ぶと最初にやる”Hello world”の表示プログラム的な意味合いで、Roombaにドレミというメロディを演奏させるプログラムを作ってみました。

これがそのプログラムのプロジェクトワークスペースを固めたファイルです。「HelloRoomba.zip」をダウンロード

開発環境はVisual Studio 2010で、シリアル通信をするためにBoostライブラリを使いました。

このプログラムは full mode を使用しているので、一度このプログラムを走らせるとRoombaのボタンをいくら押しても何も変化しなくなります。元に戻したい場合は、

char command[] = { 128, 130, 132, (以下省略)

の部分を

char command[] = { 128, 130, 131, (以下省略)

にしてプログラムを再実行してください。132がFull Modのopcodeで、131がSafe Modeのopcodeです。Safe ModeになってからRoombaを持ち上げてやると、wheel drop (脱輪)を検出してPassive Modeに遷移します。Passive Modeになれば、ボタン操作等を受け付けるようになります。

作ってみてわかったことなのですが、Roomba Open Interface (ROI)にはバージョン情報を取得するコマンドなどがないので、Roombaとの通信が確立したのかどうか確認しずらいのですね。なので、ボーレートが合っているのかどうかわかりにくい。仕方がないのでメロディを鳴らして通信が確立したことを確認するのがよさそうです。

とりあえずこれでメロディがなることまで確認できたので、シリアル通信の無線化を含めていろいろ遊んでみる予定です。

Visual Studio 2010でBoostを使う

久しぶりにBlogを更新しますが、これは完全に自分のためのメモです。

Roomba Hack をするのに、PC上のプログラムからシリアル通信でRoobaにコマンドを送りたい。開発環境はVisual Studio 2010を使うという前提で、シリアル通信するにはWin32 APIを叩くか、.NET FrameworkのSerialPortクラスを使うか、Boostライブラリのserial_portクラスを使うか。迷った結果、移植性を考えてBoostライブラリに決めました。で、これはその作業メモです。

まずBoostをダウンロードして、インストールする。配布もとはここです。バージョンは最新版である1.52.0を選びました。インストール方法は、基本的にインストーラをダブルクリックするだけなのですが、オプションとしてマルチスレッドライブラリにするか、デバッグをサポートするかなどがありました。私はCドライブにOSを、Dドライブにプログラムをインストールするようにしているので、Boostのインストール先はD:\Program Files\boost\にしました。ライブラリのサイズが大きい(私が選んだオプションで1.48GB程度ある)ので、インストールにも多少時間がかかります。

続いてVisual Studio 2010側の設定。とりあえず適当なプロジェクトを作り、Boostのインクルードディレクトリとライブラリのパスを設定します。Visual Studio 2010では「ユーザープロパティシート」なるものでコンパイラやリンカのスイッチ、ユーザマクロ定義を行うようです。プロパティシートは、[表示]メニューの[プロパティマネージャ]から作成します。そうするとプロパティマネージャがソリューションエクスプローラのあった場所に表示されるので、プロパティマネージャで先ほど作成したプロジェクトを右クリックすると、[新しいプロジェクトプロパティシートの追加]が表示されます。これを選んで、[構成プロパティ] → [VC++ディレクトリ]で、インクルードディレクトリに D:\Program Files\boost\boost_1_51; を、ライブラリディレクトリに D:\Program Files\boost\boost_1_51\lib; を追加しました。とりあえずこれでBoostを使う準備が完了しました。

2012年9月12日 (水)

Roomba 770がやってきた

買っちゃいました。Roomba 770。

6月から自動車税、車検、自動車保険、アパートの契約更新、新しいPC購入など出銭が多かったので、しばらく大きい買い物は我慢しようと思っていたのですが、やっぱり買っちゃいました。

Roomba770_1


Roomba770_2


Roomba770_3

Roomba770_4

ラグをひっくり返したり植木鉢にゲシゲシぶつかったりしますが、ゴミはよく取れています。賢いです、こいつは。でも、監視してないと何をしでかすかちょっと心配かな。

Bluetoothモジュールを載せて Hack して遊ぶ予定です。

2009年7月22日 (水)

デバッガ無しのデバッグは辛い

8/1の試走会にギリギリ間に合うか間に合わないかというレベルで今年のロボット開発が進んでいます。まだ諦めてない、オレ偉い!

とりあえずファームが大体できたので、制御回路を台車に積みこんでみました。
Otukai_2009_07_22

この状態で、モータが回ること、エンコーダがカウントしていること、ステアリングが曲がること、センサの値がとれることまで確認済みです。しかし、ホストからのコマンドに対する動作となると全然反応がありません。う~ん、デバッガが使えないときついなぁ。去年動いていたロジックをそのまま使っているのだから問題ないと思うのだけれど、なぜ動かないのでしょう?

試走会でデータ収集ができるようになるための残りのタスクは次の通りです。

  • DCモータの速度制御(PI制御)パラメータチューニング(ファーム)・・・1日あればできる
  • コマンド処理部の動作確認(ファーム) ・・・ 2~3日かかるかも
  • データ収集アプリ開発(PCアプリ) ・・・ 4~5日かかるかも
  • 屋外でノートPCを持ってデータ収集試験 ・・・ 1日

残り10日あるうち、次の土曜日はすでに予定が入っていてロボット開発不可。平日の帰宅後と日曜日、7/31(金)に年休を取ってギリギリかな。

2009年6月13日 (土)

fit-PC2がとどいたのでWindows XPをインストールした

先日は fit-PC2の発売が開始されたと書きましたが、購入を申し込んでお金を振り込んだら2日でfit-PC2がとどきました。これに、2.5インチSSD(32GB)を挿して、OSを入れてみました。

当初は手元にWindows XP Home Editionが余っていると思っていたのですが、会社の寮を出るときに管理人さんに自作PCと一緒に譲ってしまったらしく、XP Homeがありません。Windows 2000なら余っているのがあるのでこれを入れてみようと試みましたが、インストールがうまくいきませんでした。おそらく、Windows 2000の時代にはSATAというものがなかったのでドライバがなくて動かないということなのだろうと思います。(Windows XP SP2以前でSATAのHDDにOSをインストールする場合に発生する問題点と同じことが起きていたので。)

Windows XPでもSP3以降ならSATAドライバが統合されているようなので、近所の電気屋さんでWindows XP Home Edition(SP3)を購入して、ようやくインストールが進むようになりました。ついでに書いておくと、私の手元にUSB接続のキーボードが無く、キーボードがないとインストール作業ができないことがわかったのでキーボードも購入しました。

OSのインストール後、これも新たに購入したMacAfeeインターネットセキュリティをインストールして、いざネットワークにつないでWindows Updateをかけようとすると、ネットワークにつながりません。よく見てみると、ネットワークアダプタ自体が認識されていません。しゃーないので、ここからドライバ類をダウンロードしてセットアップしてネットワークにつながるようになりました。そしてようやくWindows Updateができて、一通りのインストール作業が完了しました。

ここまでで気付いたことを書いておきます。まず何といっても筺体が熱くなります。室温25℃に対してfit-PC2の筺体の温度は45~48℃くらいになります。(非接触温度計で計測。) アルミでできた筺体の温度がそれくらいなのですから、内部のCUPはおそらく50~60℃くらいは行っているだろうと思います。ロボットのコントローラとして使用することを考えると、ヒートシンクや冷却ファンなどなんとかして熱を逃がす方法を考えないとまずい。

もうひとつ特筆すべきことは、接続できるモニタがDVIじゃないと駄目だってこと。D-sub15ピンのアナログRGBじゃダメなんですよ。私はどうしたのかって? えぇ、DVI入力がある液晶ディスプレイも買ってしまいました・・・

2009年3月12日 (木)

今シーズンの滑り収め

3/7, 8 の土日は白樺湖ロイヤルヒルとエコーバレーにスキーに行ってきました。

前日が雨だったのでどうかと思っていたら、ロイヤルヒルに向かう道路が早朝はスケートリンク並みに凍結しており、坂を登れない車が続出していました。ゲレンデのコンディションはアイスバーンがあるもののそれほど悪くなく、特にエコーバレーは十分な積雪がありました。

新しいスキー板の調子は上々で、かなり高速滑走しても板がバタつかず安定しているので安心して滑れるようになりました。

3月末まではスキーシーズンが残っていますが、4月に情報処理技術者試験があるので、これで今シーズンは滑り収めということにしておきます。

2008年4月22日 (火)

H8における浮動小数点演算の速度

先日、母校の研究室に顔を出した際、学生さんがH8マイコンを使って浮動所数点演算をしておきながら「処理速度が遅い」などと言っていて「あたりまえじゃ、ボケェ!」と言いたくなりました。組み込み系のプログラミングでは浮動小数点演算を使わないという定石があるのですが、では使ったらどれだけ遅くなるのか、私自身が知らなかったのでちょっと試してみました。

実験の目的。int同士の掛け算、割り算と、double同士の掛け算、割り算でどれくらい処理速度に差が出るのか感覚を得ること。ザックリと分かればいいので厳密さは求めない。

実験方法。int同士の掛け算、割り算についてはH8プログラミングマニュアルから実行ステート数を求める。double同士の掛け算、割り算についてはHEWのシミュレータデバッガ(のプロファイラ)で$MULD、$DIVDの実行ステート数を取得する。

実験結果。int * int (MULXS)とint / int (DIVXS)はそれぞれ24ステート。double * double ($MULD)は680ステート、double / double ($DIVD)は1016ステートでした。浮動小数点を使うと、整数を使う場合に比べて掛け算なら 28倍、割り算なら42倍くらい計算時間がかかることがわかりました。

考察。int同士の掛算、割り算に使用された MULXS、DIVXSはH8/300HのCPUコアが持っている命令なのでそれなりの速度で実行できますが、浮動小数点の掛け算、割り算で使用された$MULD、$DIVDはアセンブリ言語で組まれた関数で内部にはループ処理が入っています。ですので、値の取り方によってはもう少し計算時間がかかる場合もあります。

やってみた感想です。先ほど出てきた学生さんと話をした時に「軽トラックとダンプカーぐらい重さが違う」という喩えたのは、非常に正確な例えだったなぁと驚きました。

2008年4月 7日 (月)

来シーズンの初めには

スキーの話です。忘れないようにメモ書きしておきます。先日のエコーバレーで2級受験した後の講評で検定員の方がおっしゃっていたアドバイス。

「シーズンが始まる時に講習を受けて自分の滑りを見てもらい、克服すべき課題、克服するためのトレーニング方法を教わりましょう。」

そんな感じ。

2008年3月23日 (日)

バッジテスト2級合格 (^-^)

3/20~22にかけて、白樺湖の近くにあるエコーバレースキー場に行ってきました。目的は今シーズン最後のバッジ検定を受けることです。んで、2級合格を頂いて帰ってきました。

これが証拠写真。

2kyu_goukakushou

宿はパンがおいしいと評判のここ。パンだけではなく、朝食、夕食ともとてもおいしかったですよ。

これを書きながらだいぶ眠くなってきたので、今日はこの辺で。

2008年2月23日 (土)

2008年度キックオフ

2/22(金)に東海大の水野先生と2008年度のつくばチャレンジ参戦キックオフミーティングを行いました。大雑把な構想とスケジュールについて合意を得て、いよいよ本格始動です。

今回は台車をちゃんと作ろうということで、3カ月程度で台車のメカ、回路、ファームを作る予定です。

最近の写真