BROKEN's Advanced Vehicle Laboratory

開発日報 2003年 11月

2003年 11月 23日 日曜日 真の原因

昨日は帰ってから荷物も片付けずホットカーペットの上で爆眠。今朝は10時前には起きて、ToDoListなんぞ作ってみた。もちろん、昨日の大会でマウスが上手く走らなかったことの原因究明も含んでいる。

で、さっそく原因追求をしてみると、その真の原因たるや、ごく些細なことだった。ゴールまでの距離を書き込んである距離マップ(歩数マップ?)のカウンタの変数が、unsigned char で宣言してあったことが原因だった。16×16の迷路では最大歩数は16×16=256になるのだが、unsigned char に256を入れるとオーバーフローしてしまい、距離が正しく数えられなくなるという現象が起きていた。

このバグが入り込んだ背景には、ROM領域の枯渇をなんとか避けるために安易なプログラムサイズのダイエットを行ったことがある。シミュレータではこの変数は int で宣言されており、移植後にこのバグが入り込んだと考えている。

今後のために、このようなバグを未然に防ぐための方法をいくつか挙げて置く。

  1. ROM領域が十分にあるCPUを使う。
  2. マウスに実装するプログラムのソースをそのままシミュレータでも実行できるようにしておき、シミュレータで動作を検証する。
  3. エラー処理をこまめにいれて、不正な処理が発生した場所を特定しやすくする。

大会会場では検討違いな対策をしていたわけで、会場でもちゃんとPCにマップを表示させてデバッグしていたら、完走まではいかなくても、迷路の半分くらいは探索してくれたんだろうな。

2003年 11月 22日 土曜日 大会当日・・・結果はリタイア

仮眠を取ったら出発する予定、といいつつ、もうちょっとだけ、もうちょっとだけ、とプログラムをいじっているうちに午前6:00を過ぎてしまい、持ち物を揃えて三島を出発したのは7:15。私の(Bグループ)の受付は11:00〜ということなので、余裕といえば余裕。たいした渋滞も無く東名から首都高に入り、レインボーブリッジを渡り、お台場の出口を降りたまでは良かったが、その後の駐車場探しで同じ場所を何度もぐるぐると走り回ってしまった。大会会場であるパナソニックセンターの駐車場にとめさせてもらえたので助かった。

会場内は混雑していて出場者が作業するためのテーブルもほとんど埋まっており、荷物があるけど人はいない、というところに無理やり入り込んで作業することになった。そこでたまたま隣の席にすわった能登屋さんや、澤さんにいろいろ教えていただいた。森永さんをはじめ、みなさまにお世話になっております。

寮の部屋で、6×4の迷路ではそこそこ走れていたのに、大会会場の16×16の調整用迷路では、なぜか角を曲がってくれなかった。シミュレータでは同じアルゴリズムで第1回〜第20回までの全ての迷路を完走できているのに。そこでセンサの値がを表示させてみたら、出鱈目な位ばらついていることがわかった。これは会場の水銀灯が外乱光となっているのだと思い、対策を試みた。しかし、改善はみられなかった。

改善策が無いまま私の番を迎えたが、先の問題がそのまま本番の迷路でも再現したため、2回目でリタイアを宣言して参加賞をもらって終わった。

センサの調整に手間取る中、会場で森永さんから「土壇場技術でがんばれ!」という言葉をもらったが、まさに土壇場で諦める人と乗り越えようと努力する人の差が、先に進める人と進めない人との差なのだと思った。

そういうわけで、成績はリタイアで終わり。来年もフレッシュマンクラス出場になりそうだ。

2003年 11月 21日 金曜日 一山越えれば

シミュレータで確認したアルゴリズムをコピペして細かいところを修正。それだけでマウスが走ればこれほど楽なことは無い。コンパイルすれば「セグメントXXXXは定義サイズを192バイトオーバーしました」とか、「ROMのアドレスを越えています」とか。プログラムサイズなど気にもしていなかったのが、いつのまにか32KBをこえていたらしい。YCH8の組み込み関数を外せばなんとか収まるのだが、そうするとprintfによるデバッグができなくなるので困る。

プログラムのダイエットを終えたかと思えば、こんどは動きがおかしい。どうも、ポテンシャルマップが正しく生成できていない様子。シミュレータデバッガでも同様の結果。VC++で動くマイクロマウスシミュレータでも同じ結果だった。お昼から日が暮れるまでその問題点と格闘して、配列の行と列が1箇所だけ逆になっているところがあったことが判明。これでようやっと、ごく単純な迷路であれば、ゴールまで辿り着けるようになった(18:00現在)。もう少しブラッシュアップすれば、16×16の迷路でもゴールまでは知れそうな気がする。

まだ、旋回が何度かあると壁にぶつかってしまうことがある。マウスの全長がもう1割短かったらと思うが、そんなことを今ごろ言っても仕方が無いので、これから何とかずれを吸収する仕組みを実装してみよう。

(続き)ようやく一山こえました。

背後が壁になっている場合はちょっとだけバックして距離の誤差を吸収する動きを実装。旋回時にバッテリのケーブルが壁に触れて旋回をしくじるのが目に付いたので、バッテリパックのケーブルの出し方を変更。その他いろいろいじって、いい感じになってきた。

6x4区画の調整用迷路で、直線距離が長かろうが、ジグザグのシケインがあろうが、かなり安定してゴールまで辿り着けるようになった。とくに、旋回をしくじって姿勢が崩れているのを強引に制御で戻してしまうところなんかがすばらしい。ま、1区画ずつしか動かないし、自動で戻ることも、第2走行(タイムトライアル)もやってないんだけど。なんとかゴールすれば、カッコだけはつくでしょ(笑)

てことで、現在朝の4:15。荷物まとめて仮眠を取ったら出発する予定。

2003年 11月 20日 木曜日 追い込み

今日は休みを入れたかったのにミーティングを入れられてしまったおかげで、出社せざるを得なかった。だから、ミーティングが終わったら簡単なデータ取りだけ済ませてさっさと帰ってきた。(今期中に使わなきゃいけない年休が残り13日あるけど、いつつかおう?)

夕飯を済ませて仮眠を取って、大会の受付時間と会場までのルートを確認。スケジュールを立ててマウスのプログラミングに突入。追い込みモードON。姿勢制御と探索走行の状態管理まで実装・テスト完了。いよいよ本題の探索アルゴリズムの実装に入る。基本的にシミュレータで作ったアルゴリズムを移植するだけなんで、夜が明けるまでにはなんとかなるんじゃかなろうか。

2003年 11月 19日 水曜日 90°旋回、180°旋回まで完了

会社から帰ってきたら、大会事務局から大会の案内が届いていた。

走行コマンドテストも、N区画前進と角度旋回まで実装して動作を確認した。姿勢制御はまだ。いままでセンサはシステム制御タスクから呼び出して使っていたものを別タスクに変更。

日付が変わる前にプログラムのバックアップをとって、探索走行の状態管理の実装を開始。明日は休めないが、金曜日は年休を取る。なんとか、ゴールにたどり着くところまで、ギリギリできそうな感じ。(そう思わないとやっていけない。できないと思ったら、その時点でできなくなる。)

2003年 11月 18日 火曜日 どんぴしゃ

8:30出社、17:00退社なんて、3年ぶりくらいなきがする。今月は出張と連休のおかげで残業時間が少ない。

昨日のオーバーランの原因は、走行速度を設定するための演算の誤差にあることが判明。修正したら、5mmと狂わずN区画前進ができるようになった。しめしめ。

2003年 11月 17日 月曜日 オーバーラン

20日(木)に年休を入れようと思ったら、その日にミーティングを入れられてしまった。

今日は昨日に引き続き、走行コマンドと走行コマンドテストの実装。とりあえずは、ボタン操作でN区画前進のテストができることを確認した。とりあえず、といったのは、1区画 18cm を走行したときに、1.2cmくらいオーバーランしているのが気に入らないから。原因はいろいろと考えられるが、明日は8:30出勤なので今日はもう寝る。

2003年 11月 16日 日曜日 スケジュール厳しい

昨日の土曜日はセンサのAD値を距離に換算するための計算をしたり、実測したり、それを実装したりして、夜は寮の忘年会。

今日は、昨日センサ値を実測したときにセンサの値の変化が気に入らなかったので、ホットボンドで固めてあるLEDとフォトトランジスタをそれぞれ調整。それから、壁検知部を実装。ここまでで、ユースケースで言えば基本機能テストまで実装完了。センサの調整に手間取った。

そしてようやく、走行コマンドの実装に着手。Nブロック前進コマンドは実装したが、それが正しく動くかどうかは未確認。確認する意味もこめて、走行コマンドテストも実装開始。

プログラムに使える日数は、残り4日間。21日(金)はすでに年休を取る予定を入れた。スケジュール的にかなり厳しいから、20日(木)も年休取っちゃおうかな?

2003年 11月 14日 金曜日 一歩前進

仕事のほうは(社内向けの)展示会前なので、ちょっとばかり忙しい・・・はずなのに、ここのところ22時前には確実に帰っている。展示会がマイクロマウス大会の直前にあるというのがやなかんじ。

会社から帰ってきたら、マイクロマウス調整用迷路が届いていたので、早速組み立てた。でかい。迷路を置いたら、もう私の部屋には布団を敷けるスペースは無い。迷路を壁に立てかけようにも、もう壁際は全部モノで埋め尽くされている。どこに片付けようかな?

マウスのプログラムは、基本機能テストのうち、モータテスト(ボタン操作で走行速度を変えるテスト)まで完了。センサテストは、AD値を距離に換算するところ(とそれに必要な実験)ができれば完了。土日で走行コマンドテストまで実装できれば、探索ロジックはシミュレータで確認してあるから、なんとか迷路を走るところまでもっていけそう。

2003年 11月 13日 木曜日 1-2相励磁

昨日の日報では「計算の仕方が分からない」とか言っておきながら、あっさり解決。会社から帰ってきてプログラムを見直したら、割り込みステータスの判別方法が間違っていたことに気が付いた。それから、モータ制御系の回路図を見直して、あ、1-2相励磁を使ってるんだ、と思い出して、ステッピングモータのステップ角を1.8°から0.9°にして走行速度に対する単位時間あたりのパルス数やカウンタの設定値を計算しなおして、プログラムを修正したら、ほぼ狙いどおりの走行速度になってくれた。

それにしても、走行速度で言えば、60cm/s程度ならスローアップ無しでモータが回っちゃうのには驚いた。計算間違えたかな?

2003年 11月 12日 水曜日 いまさら

マイクロマウスの大会まですでに2週間を切っているが、いまだ迷路を試走するに至っていない。基本機能テストのうち、LCD表示、ボタンSWによるメニュー切替え、センサ値読み込みまでは実装済みだが、まだ、ステッピングモータが狙いどおりの速度で回ってくれていない。

今日の問題点。走行速度で言えば、5cm/sで走るように設定したのに、18秒で17cm程度しか走っていない。言い換えれば、およそ1cm/s程度の走行速度しか出ていない、ということになる。 これは、TimerWのGRA、GRBの2つのレジスタの設定値を計算し間違えているとしか言いようが無い。 で、気づいたのは、ステッピングモータを回すのに、モータドライバを2段組にしてあるということ。私はそれに気づかず、パルス数の計算を間違えていたのではないだろうか。だけど、計算の仕方がよくわからない。う〜ん。

モータを回す実験をしているとバッテリの消耗が激しい。先日入手したタブ付きニッカド電池を充電したら、ずっとつかわれていなかったせいか、すぐに満充電状態になって、でもモータを回したらあっという間にバッテリが空になってしまった。ということで、1100mAhの電池を120mA程度でトリクル充電中。

2003年 11月 9日 日曜日 選挙

午前中はマウスのステッピングモータの加減速制御をどうするか頭を悩ませて、午後は選挙に行ったり、買い物に行ったり。夜はTVで選挙の開票速報を見たり。

TVで静岡5区の速報がでるたびに、外では「うぉ〜!」(パチパチパチ)と歓声や拍手が聞こえてきている。なぜなら、会社の寮のすぐとなりが、潰れたガソリンスタンドを利用した選挙事務所になっているからだ。当然TVの中継車もきてるし、外もうるさい。

ここは個人の運営するサイトなので思いっきり個人的な意見を書く。比例代表制って、選挙になってないと思う。今、国会議員は衆参あわせて700人くらいいるのかな?適正な人数が何人なのかは議論の余地あり。選挙と一緒に行う、最高裁判所の裁判官に対する信任投票、これが機能しているとは思えない。

年金問題、消費税増税、構造改革、北朝鮮問題、イラク支援、その他目の前に山積している問題が選挙の論点になっているが、50年後、100年後の日本を見据えたグランドデザインを論じられる立候補者がいないのは非常に残念だ。

それにしても、外がうるさい。<選挙事務所

2003年 11月 6日 木曜日 個人情報

今日も、いつもと大して変わらない、ふつーの日。仕事もいつもどおり。帰ってきてからマイクロマウスのプログラミングをしたのもいつもどおり。何もありませんでした、では日報として面白みに欠けるので、気づいたことをひとつ。

今日、会社から帰ってきたら、某党の何某とかいう衆議院議員立候補者からダイレクトメールが届いていた。なんで住所知ってるのかな、とおもったら、「私も推薦します。***労働組合」と、私の勤め先の労働組合の名前が入っているのに気が付いた。これ、私の予想では、労働組合の名簿が立候補者の事務所に流れているということだと思うのだけれど、実際のところどうなのだろう? 直接その立候補者に聞いてみようかな、なんて思った。

2003年 11月 5日 水曜日 ガス抜き

水曜日は定時退社日で、剣道の日。調子は上々。最近、剣道をやるときしかコンタクトレンズを着けていないような?

剣道から帰ってお風呂に入り、それからマウスのプログラミング。プログラムの挙動がどうもおかしいなと思っていたら、バッテリがほとんど空っぽになっていた、というのはよくある話。バッテリが空ではプログラムの動作確認もできないので、TVを見ながらバッテリを充電。

ニッケル水素電池で1800mAhの容量に対して1900mAhで充電していたら、もうちょっとしたら満充電かな、というあたりで、バッテリから、プス、プス、という微かな音。バッテリを充電するときに内部で発生するガスが抜ける音だと思う。 なんか、しばらく前にニッケル水素電池を破裂させたいや〜な記憶がよみがえって、こりゃまずいな、ってことで充電器のスイッチを切ってバッテリを冷ましたら、プス、プス、という音は聞こえなくなってくれた。 あとは電池が死んでないことを祈るのみ。

2003年 11月 3日 月曜日 秘密の部屋DVD

秘密の部屋、というのはハリポタのChamber of Secret のこと。今日、やっとその映画(DVD)を見た。感想。原作と全然ちゃうやんけ!

手元にPrisoner of Azkaban と Goblet of Fire がまだ読んでないまま。昨日秋葉で買ってきた本を含めて、買ったけど読んでない本、何冊あるだろ?

2003年 11月 2日 日曜日 秋葉散策

昨日は大学時代の友人が結婚するってことで土浦でお祝い。土浦に泊まったので、今日は帰りついでに秋葉を散歩。ロボコンマガジン館には立ち寄ったけど、秋月、千石には行く気がしなかった。マウスが仕上がるまでは手を広げられないという心理がどこかに働いていたからだろうか。

電子部品を買わなかった代わりに、アソビットシティとかLaOXザ・コンピュータBOOK館とかによってきた。ヤマギワ電気だったかな、新しいシェーバーを買ったのは。昨日の午前中には財布に7〜8万円入ってたはずなのに、三島まで帰り着くと財布から諭吉さんがいなくなっていた。