Monthly Archives: August 2013

マイクロマウス製作六十九日目

こんにちは♪

今日はちょっと暑いようですが、ひところに比べたらとても過ごしやすい朝でしたね。
猛暑のなごりで毛布しか出していないのですが、そろそろ布団の出番かなあと思っています。

と、すがすがしいお天気に快さを感じながら通勤中、
「今日はマウス研修何やろうかな~」と考えているわけですw

課題が明確なときは解決の手段がわからなくてもわくわくするのですが、
課題を見失っているときは悩ましいです。

今日は課題が明確な、マイクロマウス研修です。
※昨日のブログのおさらい

昨日ただただ成り立つように書いてみたプログラムのどこに問題があって走りが上手くいかないのかを確認して修整します。
プログラムをよくよく確認してみたら、問題点が判明しました。

右(もしくは左)に壁が「ない」場合にどう走るべきかをGenieちゃんにきちんと指示してませんでしたw
ですから、そこを書き足したら、とりあえず上手く走った~^^!

と、珍しく自力で問題点を発見・修整して上手く走ったので、
松崎はすっかり浮かれてのり先生に自慢しに行きました♪

すると、のり先生はおもむろにあるページを見せてきました…。

写真 2013-08-28 10 25 26

それは、マイクロマウス関西支部のページの下部。

———-

マイクロマウス大会で泣かないために.加藤さんのマウス十則を知っておきましょう.

  1. 練習で1割の確率で発現するトラブルは、本番では9割の確率で発現する
  2. 練習で動かないマウスが、本番で急に動けるようになることはない
  3. 設計時に「これくらい、大丈夫だろう」と思ったことの9割は大丈夫でない
  4. 理論的には効果的であるはずのことの3割程度が実際に有効である
  5. 理論的に問題となることの10割が実際に問題となる
  6. ある欠陥は、その欠陥の全体に占める割合に関係なく全体を駄目にする
  7. ハードウェアの欠陥をソフトウェアでカバーすることはできない
  8. ソフトウェアの欠陥をハードウェアでカバーすることはできない
  9. 探索の安定性>最短の安定性>最短の速度>探索の速度 の順で優先される
  10. これらの法則を知らないと負けるが、知っていても別に勝てるわけではない

———-

ぐあーーー!

きびしい!!!

ですが、今まで大会や各種イベントに参加させていただいたり、みなさんとお話ししたりして、
上記の十則のようなことを何度もいろいろな形で伺ったので、説得力が半端ないです。
(先日頂いたアドバイスもまさにこれですね><)
これ印刷して部屋に貼ろうかな…。

ということで、慢心を振り払い、
思いつきうるいろいろな場面を想定してテストテストテスト!!

うりゃー
写真 2013-08-28 10 28 07

これはどうだ!?
写真 2013-08-28 10 28 39

とうっ!
写真 2013-08-28 10 31 04

これはいけるか!?
写真 2013-08-28 10 51 26

むむ、大丈夫そうだ!!!
やりました^^

さて、ひとつ課題が解決したらもうちょっと冒険したくなってみるのがマイクロマウスの妙味(ですよね?)w

以前佐倉さんが
壁切れを読んだ瞬間にブザーやLEDでデバックをするといいですよ
と教えてくださったのを思い出して、
いたずら心の延長で作ってみました。

以前ブザーでいろいろ遊んで試していたときを思い出しながら、
こんな風にプログラムに組み込みました。

※ちなみにどうでもいいことですが「straight_for_fast_right」という名前を「straight_right」に修整しました。すっきり。

では、走らせてみます!

ちなみに動画で走っているコースはこちら。

行きではこのようになるはず。
行き

帰りはこのようになるはず。
帰り

どうでしょう?

おおっ!成功!!!!

思わずのり先生に自慢してしまいましたw

上位陣みた~い!!!
と小学生並みの感想を述べつつ大興奮して喜んだのち、
さきほどの厳しい十則を思い出して、いろいろ試行することにしました。

すると…

スタート時若干中心よりも前のめりな位置にGenieちゃんを置いてスタートさせたとき、
こんな走りをポロリしましたよ…?

出た!!牛歩バグ!!
※牛歩バグとは、減速後無駄に走り続けさせるような指示を誤って書いてしまうために、減速終了後最低速度で走行を続けてしまうというバグです。(松崎命名)

しかも、ブザーによるデバックの情報を加味するに(早速大活躍!)、
どうも壁がないのに壁を読んでいるようだ。

ぐぬぬ。

どうなる壁切れ実装大作戦…。

続きを読む ›

Posted in Pi:Co Classic製作記


マイクロマウス製作六十八日目

こんにちは♪

今朝はとてもきれいに晴れた空が綺麗ですね♪
気候も涼しくなり、秋の気配を感じます。
まさに「秋来ぬと目にはさやかに見えねども 風の音にぞおどろかれぬる」という歌を思い出してしまうようなさわやかな心地です。

このまま素直に季節が進んでくれるといいが…

さて、マイクロマウス研修です。

実は今週末に中部初級者大会を控えております。
それまでに壁切れをきちんと実装せねば、完走すらままならない可能性もあります。

昨日のようにPCを前に唖然としていては間に合わないw

そうそう。
私のブログにはコメント機能がないので、これをご覧になっている皆様からのアドバイスやツッコミは、いつもお会いするときくらいしか頂けないのですが、
九州地区大会に参加される方と怒涛の九州→中部地区大会計画メールをしていたら、ありがたいことにアドバイスを頂きました^^

それはこちらの2つ。
①もっと簡略化して書ける部分がある(同じ処理を複数書いている)
②実際には壁があるのに、何らかの原因で壁がないと判断されることもありえるが、どう回避する?

①については、書きながら「見る人が見たらムキーッってなってるのかなあ」と思っていました。
②については、盲点です。
マイクロマウスは、壁や床や照明がいつも完全に均一な状況だとは限りません。
また、そのイレギュラーな環境下においても正確で素早い走りを追求するというのが、マイクロマウスの技術進歩の要とも言えるかなあと思っています。

これは、私にとっては難しいけれど、考慮しなければならない問題ですね。

アドバイスありがとうございます。
中部初級者大会での完走が危ぶまれる(というか現段階では無理です…壁切れのバグがあるので)今すぐには取り組めませんが、
いずれのり先生に詳しく教えてもらおっと♪

—–

さて、昨日途方に暮れた部分。
もうちょっとのり先生にアドバイスを求めてみます。

昨日この部分に目をつけたのはいい判断だったようです。

この部分は、探索で把握した「曲がるべき位置と方向」の指示をぱっぱっとスイッチングしている部分です。
ですから、ここの指示を利用すれば探索に基づいた走行と壁切れ補正を両立できるそう。

それには、右折時と左折時の部分をそれぞれいじる必要があるそうです。

なるほど!
今は、右に曲がるときも左に曲がるときも「straight_for_fast」を呼び出してますが、
右に曲がるときと左に曲がるときで違う関数を呼び出せば、あらかじめ探索した迷路情報によって走ってくれるので、
混乱を回避できそうです。

さっそく変えてみました。
straight_for_fast_right
straight_for_fast_left
という二つの関数を分けて作り、それぞれ右折時と左折時に振り分けました。

straight_for_fast_rightだけお見せするとこんな感じです。
これと対称なものとしてstraight_for_fast_leftもあります。

紆余曲折のエラーたちバグたちを乗り越えて…

走らせてみました♪

迷路を変えてもう一度!!

むむむーーー!

曲がる直前にお尻を振っているぞ!!!
これはどうしてだ?

というところで時間切れになってしまいました。
今日は、のり先生にもらったヒントを元にプログラムの構造を変えるのに必死で時間を使ってしまいましたね。
あまりそれぞれがどういう働きをしているかということをじっくり見なかったので、
明日きちんと一行ずつ追えばわかる…のではないでしょうか…。
今している謎の走りもきちんと検証する必要がありますが、お腹がすいたのでご飯を食べようとおもいます^^!!!

驚異的な進歩wでのり先生を驚かそうと思いましたがそうは甘くない…(;_;)

続きを読む ›

Posted in Pi:Co Classic製作記


マイクロマウス製作六十七日目

こんにちは。

金曜の夜にたっぷり遊んで疲れた体を元に戻すために土曜日を浪費した松崎です。

土曜はそんな感じでぐったりまったり過ごしましたが、
日曜日はマイクロマウスの迷路の補修に行ってきました♪

カビを防ぐために、ステイン材を塗りました。
(…わたしはちょっと遅めにお邪魔したのでほとんど仕事していないのですが…)

写真 2013-08-25 11 05 15

↑なかなか見る機会のない(?)コースの裏側です。

しっかり乾かします。

写真 2013-08-25 14 33 44

見慣れた光景。
写真 2013-08-25 16 49 27

写真 2013-08-25 16 57 27

こんな風に収納されていたのですね!(こちらはハーフサイズのコースです)
写真 2013-08-25 16 56 54

みなさんにもお会いできてとても楽しかったです!
あと、マッピーについていろいろ教えていただけたのも大変嬉しかったです♪

はい、マイクロマウス研修です。
壁切れ補正をやっています。

前回のブログはこちら

以下のようなコースの場合に、壁があるほうを見て壁が切れるまで走ると、
コーナーなので無限に走ってしまうという問題が生じました。

写真 2013-08-22 12 01 37

これをどうやって解決したらいいんだろう??

ちょっと忙しそうなのり先生に「ヒントください!」と言ったら、
fast.cを見てみて。そこをちょっと書き換えたら問題は解決するはず…」
とのこと。

早速見てみました。

う~ん、う~ん。

個人的にはここが怪しいかなあと思いました。

でた!Switch文!!!

新キャラ!

Switch文はたくさんの選択肢を持つ分岐処理をよりすっきり書く方法のようです。

…で??

これをどうしたら昨日の問題を解決できるんだろう??

悔しいけど、のり先生のアドバイスなしで新しいことがまだできないぞ…><
というか、やはりプログラミングが難しい!!
わかれば楽しいけどわかるまでが遠いなあというイメージ。

今日はSwitch文という新キャラに悩まされました。

何かいい本はないものでしょうか?

おすすめがありましたらお教えいただけますと幸いです(;_;)

続きを読む ›

Posted in Pi:Co Classic製作記


マイクロマウス製作六十六日目

こんにちは♪

おかげさまでちょっとのどの調子が治ってきました。
きっと昨晩おいしくお酒を飲んだからだな、うんうん^^

さーてさて、今日も今日とて壁切れ補正。

昨日は、「実は壁切れ補正じゃなかった!」というプログラムを直したものの、「停止位置手前から不測の動きをする」というエラーが出ました。
今日はそれを直したいと思います。

はじめから正しい動きをするよう書くことはとても無理ですが、
いろいろ試行錯誤します。

壁切れを見る位置で両側に壁がある場合以外のとき、
昨日こう書いたものを、

(よく見たらこれ間違ってましたね…。len – STEP2LENは、走るべき残りの距離なのでそれが1区間とイコールになったらwhile文を抜けるというのはまずい)

今日こう変えてみたわけです。

これで走ってみます。

まずは昨日と同じコース。
写真 2013-08-21 11 08 46

最短走行の行きで変な走りをしてしまう部分は解決しましたね!!やったー!
ただ、帰りで今度は以前見た「最低速度でぶるぶると走る」現象が起きています。

違うコースでも試してみます。

写真 2013-08-22 11 04 19

やはり帰り道でぶるぶるしてしまいます。

どうしてもなぜこうなるのかわからなかったので、のり先生に相談してみたところ、
原因が判明しました!

画像のような部分(片側に壁がなく、もう片側の壁がコーナーになっている)を走る場合、
写真 2013-08-22 12 01 37

壁がある方を見てwhile文に入るので、コーナーが続く限りwhile文を抜け出せないというわけです!!!!

写真 2013-08-22 12 01 43

なるほどおおおお!

いろいろと試行するのはいいのですが、「帰り道で」エラーがでると形容してしまったがために、
本質を見失っていたかもしれないですw
上記の条件にすれば、行きでも帰りでもこうなりました。

…で?

これはどうやって回避したらいいんだろう??

わからないことがあるとわくわくしますねw
自力でちゃんと動くプログラムを書いてのり先生を驚かせたいですw

時間切れなので続きは来週~♪

続きを読む ›

Posted in Pi:Co Classic製作記


マイクロマウス製作六十五日目

こんにちは!

なんだかまだ今日ものどが痛い松崎です。
結構周りでも夏の終わりかけのこの時期に風邪を引いている人が多いので、
みなさんもお気をつけください。
マスク暑い…(´□` )

さて、壁切れ補正の実装に取り組んだ結果難しくなってきたマイクロマウス研修です。

今日の目標は、昨日の研修を踏まえて、

  1. うまく実装できていなかった壁切れ補正をちゃんと書き直す
  2. 以下の図のようなコース、両側に壁がない場合も壁の切れ目をきちんと読めるようにする

の2つです。

写真 2013-08-21 11 08 46

ではまずひとつめ。
うまく実装できていなかった壁切れ補正をちゃんと書き直す

昨日、いろいろと試行錯誤しながら書いたプログラムがうまく動いたにも関わらず、
実は肝心の壁切れ補正をしていなかったという事実が判明してショックでしたが、
今日は壁切れ補正をするようにプログラムを書き換えてみました。
※昨日のブログは→こちら

以下の通りに、
if文の中にwhile文を入れて書き直しました。

これで、壁を見て走行を補正するプログラムにはなりました。
プログラム上では本日の目標1は達成のようです♪イエイ!

これで一度走ってみます。

ムム、やはり両側に壁がない場合に変な動きをしてしまっていますね。。
斜めに走っています。
ちなみにこれは何度もやると、うまくちゃんと曲がってくれるときもありますし、斜めに曲がる方向が右だったり左だったりもします。

本日の目標2ですね。

これに対してのり先生に相談して立てた原因の仮説が、
写真 2013-08-21 11 08 46

この図の場合に、AやBの壁を見て姿勢を補正してしまっているのではないか?というもの。

でも、プログラムに問題があるようには思えません。
こういう場合、よく実際にコースにマウスを置いて順にプログラムを確認するとイメージが湧きます。
今回もそのように実際にプログラムを追ってみます。

まず、2区画以上走る場合というif文に入り、停止する地点の一区画前まで走ります。

写真 2013-08-21 11 29 23

停止する地点の一区画前まで来た時点で、左右の壁の状態によってその後の処理を振り分けます。

まず、右壁がある場合→壁がきれるまで走って、壁が切れたと認識した地点からあらかじめ指定したパラメータ分進み、止まります。

写真 2013-08-21 11 28 32

左壁がある場合→壁がきれるまで走って、壁が切れたと認識した地点からあらかじめ指定したパラメータ分進み、止まります。

写真 2013-08-21 11 28 44

それ以外の場合→壁の切れ目は一切気にせずとにかくまたもう一区画走り、止まります。

写真 2013-08-21 11 28 55

つまり、どんな状況でも、わたしの思う場所で止まって、次の処理である超信地旋回に移るはず!!!だよ!!!
Genieちゃん!!!

写真 2013-08-21 11 29 32

ちなみに、今回壁切れ補正を実装しようと書き足した部分をコメントアウトして走らせると、同じコースを何度でも問題なく走ります。
つまり、どこか書き足した部分に問題があるということなのです。

ひええ、、まったくアイディアが湧きません…。

このブログを見ているお詳しい方は「ここが違うんだよ~~!」とかピンと来ているものなのでしょうか…
(プログラム一部しか公開してないですが…)

ちょっといろいろ考えて見ます^^

-余談-

物理の知識もちょこちょこと必要になることがわかったので、
履修していない物理を勉強しようかな~と思い買ってみました。
写真 2013-08-21 12 10 35
こちらも難しいですw

続きを読む ›

Posted in Pi:Co Classic製作記


マイクロマウス製作六十四日目

こんにちは~

一晩中扇風機を付けっぱなしにして寝ていたら、ちょっと喉を痛めてしまったようです…。
クーラーか、扇風機か…どちらが快適なんでしょう~。

今日も昨日に引き続き、壁切れ補正のプログラムを書いて試していきます。
※Straight_for_fast全文→こちら
 昨日のブログ→こちら

昨日と違うところ…それは、のり先生の手を離れたところです!!
だんだんPi:Co Classicが走る仕組み(モータの特性などはまだわからないことが多いのですが、ステップ数=距離といったイメージはつかめている感じ!)は理解してきたので、
基本的にひとりで目標に向かって試行錯誤して、本を読んでもわからないところをのり先生に聞く、というステップに入りました~!
ちょっと独り立ちですw

前回のブログで、最短走行の「行き」はうまく壁切れを補正をして走ったのに、
帰り道の「2区画以上左折時」に、「最低速度で律儀に走る」モードに入ってしまいました…。

それを克服するために、以下のようなプログラムを書いてみました。

「else if」を使って、左壁がある場合の処理も足してあげてみた次第です。

すると、こうなりました。

大成功!!
松崎は「else if」を覚えたw

そこでのり先生に自慢しに行ったところ…
のり先生「壁があればこれでいいけど、もし柱しかなかったら…?」といわれてしまいました!

いろいろな場合を考えていかなる状況でも確実に動作するプログラムを作らなければならない。。。ということで、
こんな風に修整してみました。

このプログラムで試走したらこんな感じになりました。

まだうまく走らないな~~う~~んなどなどとやっておりましたら、
さきほど、今日のブログの今までの展開を覆す事実が発覚!!!!!!!!!!

のり先生の手を離れたとたんに、松崎はいそいそとプログラムを書き換え、
昨日の変な動きをプログラムで回避したものの、
なんと!

壁切れさえもなくしてしまっていたのでしたw

最初にコピペしたプログラムをご覧ください…。
昨日まではwhile文で一定位置まで走って、壁切れを読んでからさらに一定区間走るという方法で壁切れ補正をしました。
(右に壁があるうちは走って、なくなったところをきっかけに…という感じ。まさに壁切れ。)
今日はそのwhile文をif文にしてしまったので、壁切れ補正ではなくなっちゃったのです…(;_;)
(もし右壁があったら…なので、壁の切れ目は見ていない!)

独り立ち一日目にしてミスorz
のり先生に爆笑された…orz

うーん…。
なかなか満足のいくプログラムを書くことは難しいですね。
一見うまくいっているように見えても、実は意図の通り制御できていないということもあるのね、、と勉強になりますw
ありとあらゆる場合を想定して、
また、目に見えるマウスの動きだけではなく、
実際にどのようにプログラムが走ってそのような動きをしているのかをちゃんと理解してあげることが大切ですね。

しかし、書いたプログラムが「走り」としてすぐに確認できるのはとても楽しいw
書き換えて、ビルドしてエラー0のたびにニヤリ、走らせて思惑通り走るたびにニヤリw

9月にはマウスハッカソンが行われますが、
みなさんどのようにソフトを変えて、それでPi:Co Classicがどういう走りになるのか、とても楽しみです♪

続きを読む ›

Posted in Pi:Co Classic製作記


マイクロマウス製作六十三日目

こんにちは~!

みなさんはお盆休み何をしてすごされましたか?
私は結構だらだらと過ごしてしまいましたw
月曜の朝起きられるか不安だったので、妖しげな快眠&目覚ましアプリをiPhoneに入れたりしていたら眠れなくなったのは昨夜のいい思い出ですw
いろいろなアプリがあるものですね~

さて、マイクロマウス研修ですが、 本日も壁切れのプログラムを書いては試し、書いては試していきます。

※おさらい
松崎は、最短走行時に2区画以上走って右折する場合のみ壁切れ補正をするプログラムを書きたいと思っています。
前回までに、「停止する一区間前までは通常走行し、壁の切れ目がなくなったら、モーターのカウントをリセットして任意の距離を走り超信地旋回する」という意図でプログラムを書きました。
(残念ながら”意図”に終わっています;_;)

本日も、のり先生とプログラムをじっくり見ながらトライアンドエラーです。
※前回書いてみたstraight_for_fastの全体のプログラムはこちらのブログをご覧ください。

今日最初に試したのはこれ。

前回は、2区画以上走る場合のif文の中で最後にモータの回転をストップさせるよう書いていたのですが、 モータのカウントをストップさせた状態で

というwhile文のループを抜けるわけもなく(左右のモータのステップ数が永遠に目標ステップ数に届かないw)、
止まるに決まっているのでありましたw

と、いうことで、if 文の中でモータのカウントをストップさせる2行をコメントアウトしてみたのです。

するとこんな風に。

ぶるぶるぶるぶるぶる…。

停止地点までは行ったけど、壁に向かってぶるぶるとゆっくり前進しだした!!!汗

モータに不具合でも出たかと即座に電源を消し(すぐ消すクセが…!)、のり先生と反省会。
上に挙げたプログラムをよく見てみてください。
壁が切れた瞬間にモータのステップ数をリセットし、 任意のステップ数走らせて補正しようとしているのですが、 それだと、if文を抜け出したのち、

の行に入ったときに、リセットしたあとにカウントしたステップ数からスタートしてしまうので、
減速後の最低速度で律儀~に律儀~に目標ステップ数まで牛歩しているのですw

説明がちょっと難しいですが、図にするとこんな感じかなあ…。

20130819

ですから、Genieちゃんの頭の中で目標ステップ数が満たされれば、走り出しますw

こんな感じに、非常に律儀ですw

ということで、このエラーを踏まえて改変!!

やっぱり

が肝ですね。

このwhile文から抜けたらモータの回転を停止するので、大切な一行なのですが、
私が書いてみた2区画以上走るif文はその中ですでに停止すべき位置にマウスを持ってきているので、
(壁の切れ目から一定距離走ったところがぴったり停止位置になるようにしているから)
この一行はif 文が適用される場合は無効でいいのです。

]
だからelseで「それ以外のとき(2区画以上走らないとき)」のみ適用されるようにしました。

結果はこちら。

おおおお^^ 成功です!!

ですが、帰り道で不審な動きをしています… ね…?

松崎「たぶん電池切れですね!電圧監視用LEDも色が違うし。あー走ってよかった~!!」
のり先生「…本当にそうかな?ニヤリ

まだまだ穴があるみたいです(;_;)

続きを読む ›

Posted in Pi:Co Classic製作記


マイクロマウス製作六十二日目

こんにちは。

先日、従兄弟におすすめしてもらった「パンズラビリンス」という映画を観ました。
ファンタスティックなパッケージにわくわくして観てみたら…
鬱屈としました。。 夢と恐怖と絶望感が詰まっていましたw

ですが、とても素敵な映画なので、みなさんも是非観てみてください^^
PG-12指定の理由がよーくわかります。

さて、そんなこんなで、マイクロマウス研修。

実は4月からマイクロマウスについてブログを書かせていただいていて、
一番書きづらいなあと思うのがプログラムを勉強しているときのブログです。

手を動かして何か作ったり作業するのは、写真も用意しやすいですし、説明も簡単です。
それがいざプログラムとなると、写真は画面キャプチャくらいになってしまいますし、 全体像を把握していないため説明も苦しいですw

それでも、実はわたしが一番心から興味深いと思っているのはプログラムのお勉強です。

最近のり先生は絶妙なタイミングで放置プレイに走るので、 私がひとりで考えて書いてみるという試練に立ち向かう機会が多いですw

でも、うーんうーんと悩みながらそれらしいものが書けて、ビルドが成功すると嬉しいですw

前置きが長くなりましたが、 今日も昨日に引き続き「壁切れ補正」を実際に書いていきます。

昨日も確認しましたが、わたしが実装する壁切れ補正は以下の条件化で発動するようにしたいと考えています。

・最短走行時のみ
・停止~停止まで2区画以上走る場合のみ
・超信地旋回のため停止する直前に壁の切れ目を見て走行距離を補正 写真 2013-08-13 12 00 03

今日は昨日よりずっと踏み込んでプログラムを書いてみました。

とはいえ、様々な条件を考慮しつつ正常に走行できるプログラムをはじめから書くのは至難の業なので、
練習として、下図のような 「2区画以上(昨日すでに書いた条件)走った後に右折する場合」 のみの壁切れを見るプログラムを書くことにしました。

20130813

実際に書いてみた者ものがこちらです。

「//最短走行時の超信地旋回前壁切れ補正」 以降から、「//おしまい」までが松崎が書いてみたプログラムです。
len_remainsは、壁切れを読んでから停止するまでの距離をパラメータにしたものです。

 

これでビルドはきちんとエラーなく完了したので(歓喜!!)、 実際に走らせてみます。

うまくいけば、早速はじめのコーナーで右折の壁切れ補正が適用されるはずです。

 

松崎の予想ではGenieちゃんは、
特に走行時の見た目は変わらない(小さなコースでの試走なので修正されるような誤差はないのでは?)けど、 Genieちゃんの頭の中では処理がされている、 という様子で走行する予定です。

で、す、が…!

結果は、、、

右折する前に止まる!!!!!!

なぜ? 非常に勢いよくとまってしまいます、、、

きっとプログラムが何かGenieちゃんにとって間違っているのでしょう。
ショックですが、実際こうやって止まってしまう、という結果とプログラムをちゃんと照らし合わせて、 原因を把握し次はちゃんと動くプログラムを書きたいです。

くうう><
今日のブログ、お詳しいみなさんには、ツッコミたいけどツッコメないもどかしさを感じさせるブログかもしれないですねw

続きを読む ›

Posted in Pi:Co Classic製作記


マイクロマウス製作六十一日目

こんにちは。

そういえば先日のマイクロマウスブログで、飼いはじめた魚の名前を”ないしょ”とか言いながら、
直後に暴露するというドジをしてしまい、あまりの恥ずかしさに修正しようにもできず悶々として土日を過ごした松崎です。

アモンくんは今日も元気です♪

本日のマイクロマウス研修、ついにプログラムを書いていきます。

Straight関数を流用して作り出したので、基本的な走行のプログラムに
壁を読んで切れ目を認識する部分を付け足す感じになります。
まず、
最短走行時、左折または右折をする直前の壁を読んで、超信地旋回までのマウスの走行距離補正を行う
ことを目標とする今回の壁切れ補正ですので、
2区画以上先に壁切れがあった場合にのみ壁切れ補正を行うこととします。

2区画以上走ると、おのずと減速地点の先で壁の切れ目を見るポイントが来ます。
(どのポイントでGenieちゃんが壁の切れ目を見ているかは実際にコースにGenieちゃんを置いて確認しましたね)
※よくわからなかったので、点をマウスの中心として2区画走る場合の図を書いてみました
(切れ目を読むところが実際より奥まっている気がしないでもない…)。 20130812_2

グラフにするとこんな感じでしょうか。
※これまた大雑把に書いたものなので、傾きや速度、時間についてはまったく正確に表していません。 20130812_1
ですから、まず
1、しかるべきタイミングで壁の切れ目を読むプログラムを入れる
2、冒頭でも書いたように、限定された条件化でのみ壁の切れ目を読むので、条件付けしてあげる
というふたつをやってみます。

1について。
マウスが走行しているところをイメージしてみると、スタートして、加速し一定距離間最高速度で走行した後(走るべき距離が短い場合は最高速度に至る前に)減速し、
減速中に、止まるべきポイントの1区画手前から壁を読み始めるようにします。
その直後あたりで壁の切れ目がやってくるはずなので、そのタイミングで各処理を入れます。
これは、コピペしたStraight関数を一行ずつ見たら大体イメージがつかめました。
ただ、難しかったのは2です…orz(←最近これあまり見なくなりましたね!) まずはif文で「2区画以上走るときのみ壁切れを発動!!」とします。

停止する1区画前から壁を読むので、

と、while文を書いて(これサンプルプログラム参考にしながらも自力で思いついたときすごく嬉しかったw)、
そののちに「壁を読む」というプログラムを書…

き…

… 書けない

…。

sen_r.is_wall = true;   //とかそういう感じのを使う気がする

本日の研修ではここまで書きました。

次回研修時に前回の研修の内容をすぐ思い出せるように、 コメントアウトには正直な気持ちを入れます…。
(もちろん後でわかりづらいようにはならないよう注意してます!!)
でも、なんだか楽しいですね!!

次の課題は、いよいよサンプルプログラムがやってくれてるからとあまり知らないまますごしてきた、
どういう風にプログラムを書けばマウスは「壁を読む」のか!?
とか、
センサの値がどう変化した状態を「壁切れ位置」とするのか!?!?
(壁があったのがなくなる、壁がなかったのが現れる、壁がなくて柱だけがある…などなどいろいろな壁切れがある、、、)
などなど、おそらくマイクロマウスの醍醐味に相当踏み込んだ愉快なものです♪

マイクロマウス研修は難しく、
「どういうことですか?」「どうやってやったらいいですか?」
と聞きたいことばかりですが、
一方、はんだづけにはじまり、プログラムや探索アルゴリズムまで、未知の世界を奥へ奥へ案内してくれるようで楽しいので、
「どうやってブログにしたらわかったことを伝えられるだろう~」「楽しいって伝わるだろう~」
ともよく思います。

最近お休みということもあり学生さんたちがよくアールティショップを訪れてくださいます。
二足歩行ロボットに取り組んでいらっしゃる方が多いようです。
お話しさせていただくと、マイクロマウスは初耳という方もいらっしゃいました。

みなさんも是非マイクロマウスの世界にいらっしゃってくださいw

※余談 そういえば本日いらっしゃったお客様(学生の方ではないです)が、
コミケの技術ブースで手に入れたマイクロマウス本(!)をお土産にくださいました!!!
世の中って不思議だなあw

続きを読む ›

Posted in Pi:Co Classic製作記


マイクロマウス製作六十日目

こんにちは。
魚の名前が決まった松崎です。(ないしょ)

水槽に筒抜けているツボのようなオブジェを配置しているのですが、
アモンくんを見ているとノリノリでくぐってくれるので嬉しいですw
(魚に限らずペットって人間が意図して与えたものを意図したとおりに利用してくれないのでw)

はい、
さてもさてもマイクロマウス!
魚じゃなくてねずみ!

しつこいくらいに壁切れ実装に向けてがんばりますよ^^

これから具体的にプログラムを書いていきます。
それにあたり、「どんなイメージか」をもっと詳細に見ていきます。

そうそう。
昨日「探索走行では壁切れ補正はしない」と決めたように、またひとつ前提条件ができました。
長い距離を走った後のみ壁切れを見る
=短い距離走ったあとの誤差は少ないため
直後に曲がる必要のない壁切れは見ない
=曲がる必要のない場所での壁の切れ目は無視するということですね。
あまり欲張っていろいろやるとごちゃごちゃしてわからなくなりそうだなと思ったので、
シンプルなプログラムをまず書いて、必要が出てきたら直したり足したりしようと思います。

今日はどこで壁を見るのかについてのり先生と勉強しました。

まず、実際にアールティ店頭のコースにGenieちゃんを置いてみて、どこでGenieちゃんのLEDの光が壁の切れ目に丁度当たるかを確認します。
壁の切れ目が見えるはずの位置」をGenieちゃんが知らないと、「実際に壁の切れ目が見えた位置」を考えて是正できないからです。

このあたりですね。

見ていただくとわかるように、区画の中心よりすこーしすすんだところになります。

R0012103

今日はホワイトボードに図を書いて教えてもらいました。

(よくこういうスピードと時間の図を描いてもらうんですが、いつも
「で、ここの面積が距離になるよね」
という段になると「実感ないけど、そういうもんか、すごい…」と思うw)

20130808

走り出し(スタートもしくは超信地旋回後)てから、止まるまで(次の超信地旋回またはゴールまで)の図です。
図のピンクと水色の部分が、走りだしてから目標地点にたどり着くまでの距離です。

壁切れを見る位置を確認するためにGenieちゃんをさっき迷路に置いた感じからすると、カーブのすぐ手前くらいでした。
つまり、減速後に壁切れを見ているようなので、赤い線を壁切れを見るタイミングとして減速後に示します。

この図により、
Genieちゃんの走行がイメージできました。

で…?
具体的に最後に静止するタイミング(区画の中央にいるはず)からどれくらい手前に壁がある、としなくてはいけないんだろう…
それはプログラムではどんな表現になるんだろう。

前回の金沢草の根大会で、最近難しいことを勉強しているので何をどうやって書いたらいいかわからないのです、とみなさんにご相談したところ、
「これがわからないー!」って書いてもいいんじゃない?とアドバイスを頂いたので、本日のブログはわからないことを書いてしめるとします。
のり先生、来週よろしくお願いしますm(_ _)m

・短い距離では誤差が少ない、とのことですが、何区画くらい走ったら修整の必要のある誤差が生じるとしますか?
・壁切れのタイミングはどうやって書いて表すのでしょう??
・曲線が多い場合は壁を見なかったり、直線が続いた後は壁を見たり…どういうつくり(構成?)のプログラムになるんですか??

続きを読む ›

Posted in Pi:Co Classic製作記