エヌがのロボット製作日記

どうも「エヌがの」です。主にマイクロマウスのことばかり書いているぶろぐです。とあるuniqueでexcitingな大学に在学中です。

迷路最短経路

こんにちは。エヌがのです。

 

とうとう今年度もマウスシーズンが始まりましたね。自分はというと、大学院試験に合格し、とりあえず一息しているところです。マウスの方は、ハーフのほうがそろそろ動くかなといったところです。現役時代とは違って手元に迷路が無いので調整をどうしようかと考えています

 

今回は、そろそろ本格的に最短経路について、距離ベースのものから離れようと考えまして、最短経路導出プログラムの改良を行いました

改良した結果がこちらです

f:id:megato:20150724182137p:plain

これは去年の全日本のエキスパート決勝です

速度は、

直進:3500mm/s, 加速度12000mm/ss, Turn90: 1200mm/s, Turn180: 1200mm/s, Turn45: 1200mm/s, Turn135: 1200mm/s, Turn90V:1200mm/s

となってます

去年の迷路は右回りの経路が距離的に長く、右回りを選択している人はいなかった覚えがあるのですが、このシミュレータでも速度パラメータをどう変えても右回りに行くことはありませんでした。ルート的にはとてもおもしろいので少しもったいないと思いました

 

アルゴリズム自体ですが、ダイクストラ法を参考にして組んでみました。正直言いますと、ダイクストラ法自体理解できていないので、参考になっているのかどうか怪しいです。ただ、ノードとエッジとコストで色々管理するという手法をとっているだけです

最短経路導出の手法については、特にこれといって特別なことはしておらず、ただ、初期座標からゴール座標までエッジをつなげていって、最もコストが低いルートが最短であるとしているだけです

 

このアルゴリズム、ルートを作成する時点でかなりの計算量になるのですが、面白いことに、総計算時間はおよそ1秒程度となりました。

さらに、PCで1秒かかるのだからRXマイコンなら10秒ほどかかるのではないかと危惧していましたが、実際に実装して同じ迷路で最短導出の計算をさせるとPCと同じ1秒ほどで終わりました。PCの内部処理には疎いため理由はわかりませんが、PCのほうがきっと本気を出していなかったからではないかと(適当)。

ということで、実装には十分なアルゴリズムと分かったので、今シーズンはこれを使っていこうと思います

 

色々な迷路の最短経路を導出してみました

f:id:megato:20150724184212p:plain

2013年度全日本大会クラシックエキスパート決勝

f:id:megato:20150724184225p:plain

2012年度全日本大会クラシックエキスパート決勝

f:id:megato:20150724184346p:plain

2011年度全日本大会クラシックエキスパート決勝

f:id:megato:20150724184425p:plain

2014年度東日本大会クラシック

f:id:megato:20150724184501p:plain

2013年度東日本大会クラシック

 

これを見ると、個人的には全日本の迷路より東日本の方がアルゴリズム的には面白いと思ってます。難易度は全日本のほうが高いのですが、東日本は距離が同程度のルートが多く、さらに斜めのルートが隠されていることが多いためシミュレートしがいがあって楽しい。

 

現在は各ターン等のコストが固定なので、これを実際の走行と同じようにコストもシミュレートしながら経路導出が出来ればと考えています。

 

FF制御パラメータの調整

こんにちは。エヌがのです。

 

 やっと院試が一段落しまして、とりあえず今は結果待ちです。受験はいつも緊張しすぎて前日寝れませんね。あと、6月28日(日)に理科大でプチ大会が開かれるので、現在クラシックの方を調整中です。ハーフの新機体はあと組み立てだけなのですがなかなか進んでおりません。

 

 今回はクラシックの調整でFF制御パラメータについて書こうと思います。

 FF制御は去年、機体重量から慣性モーメントを計算して逆起電圧定数を・・・・なんてやってたんですが、パラメータが割りとあるし、上手くいかないし、直線で苦戦してるのに旋回方向もなんてとてもやってられず、適当&放置だったんですが、少し先輩に聞いた方法から試行錯誤した結果、簡単に、短時間で、そこそこ精度良く調整できました。

結果がこちらになります。

f:id:megato:20150622152745p:plain

これは、直進時の結果で、上が速度、下が角速度、黄色が実値で青が目標値となっております。

さらに、スラローム時のものが下の図です。

f:id:megato:20150622152957p:plain

これらは、FF制御のみの結果です。驚くことに、角速度については、台形加減速ではないにも関わらず、そこそこ追従してます。

 

調整方法については、少し長くなりますが、説明したいと思います。

 

まず始めに、マウスとモータのモデルから説明します。

(数式等面倒なのでwordで書いて画像を貼り付けました)

f:id:megato:20150622155241p:plain

f:id:megato:20150622155303p:plain

f:id:megato:20150622160407p:plain

 このようにして、誤差が少ないと思われる解を簡単に求めることができます。同様にして、旋回方向のパラメータも調整することが可能です。

 擬似逆行列等の計算はすべてmatlabにやってもらいました。擬似逆行列自体そんなに難しいわけではないので、matlabを使わなくても実装可能です。やりたくありませんが。 

 

 やっと大学生っぽいことができて勝手に満足してますが、アイデア自体は先輩から教えてもらったもので自分は擬似逆行列使ってやってみただけですので大したことはできていない。基本的なところも含めて情報処理の勉強はもう少し進める必要があると考えています。

  数式や手法など、気になる点がありましたらご連絡ください。

C#でソフトウェア作成

こんにちは。エヌがのです。

 

 GWがとうとう終ってしまいました。私はというと、艦これの春イベントが始まり、提督業に勤しんでしまってマウスの方は進んでいません。ただ、基板や各種部品、加工物は揃ったのでここから徐々に進めたいと思います。

 

 私は今まで、processingという言語(?)を使ってマウスに使うソフトを作ってました。例えば、

・迷路情報の可視化

・マイクロマウスのターン軌道の描写

・シリアル通信で取得したデータのグラフ化

などです。

 自分はこれらのソフトウェアを結構重視しています。現在私のマウスはパラメータが数十にも及ぶため、効率的にかつ簡易的に調整することが必要不可欠です。

 

 2,3日前にツイッターでVisualStudioのC#を使ってこのようなソフトを作っている方がいて、聞く限りなんだか面白そうなので、「シリアル通信でデータ取得」と「データのグラフ化」をやってみました。

 作ったものが以下になります。

f:id:megato:20150510230254p:plain

機能としては、

・シリアル通信(ボーレート変更可)

複数のデータから複数のグラフ表示

CSVファイルへ書き出し

となります。

 

 感想としては、とても作りやすく、今後他のソフトウェアもこちらで作りたくなったほどです。processingと比べると、少し手こずりましたが、実用性はこちらのほうが上だと思います。

 

 自分なりにprocessingとこのC#を比較してみましたが、

○processing

C言語に近いので、とっつきやすい

・関数がそれほど多くない(C#よりは少ない)ので初めは使いやすい。が、かゆいところに手が届かない。

IDEがそれほど洗練されてないため、コーディングはしずらい。

C#

・クラスなどがあり、比較的難しい。

・関数が多いので初めは大変だが、慣れれば色々できる。

Visual Studio IDEなため、コーディングしやすい。

 と、このような印象です。ちょっとしたことをやるならばProcessing。長く色々やりたいならば、C#を使うのがいいのではないでしょうか。あくまで私見ですので、参考程度に。マイクロマウスで使う分ならどちらでも対応可能だと思います。

 

2015年クラシックマウス案

こんにちは。エヌがのです。

 

 今年のクラシックマウスのコンセプトを少し考えた結果、今年も吸引は諦めて吸引なしの変則4輪で行こうと思います。まだまだ吸引マウスを扱える自信がないので。

 

 とりあえずCADで形にしてみましたが、描くのにかなり時間がかかりました。

f:id:megato:20150428020716p:plain

 これが今年のマウス(仮)

 コンセプトはずばり「低重心」です。

 

 昨年の機体では、奇妙な変則4輪マウスを作成しましたが、以下の様な欠点がありました。

・電圧が足りない。

 トルクは有り余っていたのですが、電源電圧が足りなく回転数が稼げなかったようで、速度の頭打ちが早かった。ギア比も2.8:1とかなり下げていてもこの結果。モータの定格電圧が6Vだったので仕方ない?

・重心が高い

 おそらく電池を縦置きにしていた事が影響していた模様。通常のモータ同軸の変則4輪機構であれば、後部の余剰空間が広く、電池を平置きにすることができるが、昨年の機構だと後部の余剰空間が狭く電池を縦置きにするしかなかった。試しに無理やりテープで固定して平置きにしたものと縦置きにしたもので比較してみた結果、走行性能に大きな差が見られた。

 

 ということで、今年はこの二つを改善するべく、

・電池を何が何でも平置きにできるスペースを確保する。

・定格電圧が低いモータを選定する。机上の計算による安全率をもっととる。

・真鍮の底板を採用

という案を盛り込んだマウスにしようと思っております。

 

 実はもう1,2つなにかしらを試みるつもりなので、目処が付き次第ブログにまとめようと思います。

 今年もまたハードウェアの年になりそう・・・(嫌な予感)

 

2015年やっと始動!

 こんにちは。エヌがのです。お久しぶりです。

 

 去年11月に更新したっきり音沙汰なしでしたが、実は1月から艦これにドはまりしてしまいまして、提督業に勤しんでおりました。やっと艦これの熱が冷めてきたこともあり、ついに今年もマイクロマウス製作を始動しました。

 

 今年の目標も全日本大会エキスパートクラスの決勝出場です。ただし、ハーフとクラシックでです。

というわけで、まずハーフマウス製作から始めてみました。

f:id:megato:20150423231126p:plain

 

 機構自体は去年のクラシックマウスで使用したもので、両刃歯車を用いた変則4輪です。モータはMK07を使用予定。MK06でもトルク不足にはならないかもしれませんが、ここらへんは私の趣味です。パワー is ジャスティス!!

 去年のことを思い出すだけで加工のおぞましさで身体が震えてきますが、なんとかなるでしょう・・・またハード作るだけで時間がかかりそう。

 

 とりあえず、研究室のほうが本格始動するGW後までには目処がたてばと考えています。クラシックのほうもいろいろ考えてますので、少しづつブログにもまとめたいと思います。

 

 

全日本マイクロマウス大会クラシックエキスパート予選

こんにちは。エヌがのです。

ついに全日本マイクロマウス大会が終わりました。

大会運営関係者、ボランティアの方々お疲れ様でした。今年もテンポ良く大会が進行し、競技者としてもボランティアに参加していた側からしてもとても気持ちのいい大会となりました。

全部終わっての書き込みなのですが、1日づつ記事を分けて書こうと思います。

 

 私はクラシック競技エキスパートクラスに出場しました。結果は以下になります。

最高タイム:00:12:259(決勝進出)

f:id:megato:20141125074857j:plain

 全日本大会でのエキスパートクラスは初で、とりあえず目標は決勝進出でしたので目標は達成されました。やったね!!

 

 しかし今回の走行、じつは探索走行しか成功しておりません。最短走行は全くダメでした。おそらく、迷路が難しすぎたせいかと・・・・。

 今回の迷路は、ほとんど袋小路なし、直線なし、足立方だと連続スラローム地獄・・・となっており、探索するにも最短するにもとても難しい迷路でした。なので、探索だけはやけに速い私のマウスが偶然にも決勝へ行けてしまったということです。まあ運が良かったというべきですね。来年はちゃんと最短走行もできるよう精進したいと思います。

 

 ひとつ気になるのが、私本番はかなり上がっていてさらにどんな判断だといわんばかりのことをやっていました。この判断が少しでもマシだともう少しタイム伸びたと思う。

第1走行:普通に全面探索。しかし割と早めにこけてしまう。このままマップ情報が残っていてもたいして最短に影響しなかっただろう。

第2走行:なぜか第1走行のマップを全部消去。そしてただの足立法の重ね探索を行った。アナウンスでは消えてしまったと言っていたがこれは自分で消した・・・。実は全面探索のコケた後の処理をやっていないので誤った壁情報が書き込まれるというのを恐れての消去。だが今回にかぎってはあまり全面探索していないのでどのみち影響はないはず。

第3走行:時間も走行回数もなかったので第2走行で得られたマップ情報のみで最短走行を決行。みごと壁に激突。ここで明らかにマッピングしてない区画へ行っていることに気が付かなかった。

第4走行:第3走行は実はちょっとした仕様で機体を置く場所を間違えてしまったのでそれの影響で第3走行はこけたのかと思い、第4走行も同じパラメータで走行。しかしこのときにやっとマッピングしてない区画を機体が通っていることを確認。しかし時すでに遅し。

第5走行:再現性がないバグだと信じて同じパラメータで走行。この時もっと速い探索走行で行けばよかった。そもそも2回も再現性が出てるんだから再現性が出ないわけがない。

 

 とまあすごく後から思い返せば公開と反省ばかりで、去年インターフェイスあたりはもっと見直そうと思ったのに全然生かされていませんでした。本番の上がり症はどうしようもないので、普段から本番を想定した走行を考えておくべきでした。

 後から気付いたのですが、実は迷路の最短走行経路導出プログラムにバグがあり、普通は未探索壁は壁ありとして考えるところを、西方向は壁なしとなっていました。普段から全面探索ばかりしているツケがきました。やはり本番を想定して色々試行錯誤が必要なことを実感しました。

 

 

全日本大会直前

こんにちは。エヌがのです。

 とうとう全日本マイクロマウス大会まで3日となりました。そろそろできる事も限られソフトの最後の調整へと望む時期となってしまったのですが、私はといいますと絶賛メカの改善中です。

f:id:megato:20141119074440j:plain

 この4号機作成当初から足回りのメカの出来が非常に悪く、

・4点接地しない。ガタガタ上下に振動してる。

・ホイールが偏心している。ギアがうまく咬み合わない。

・モータマウントと基板の固定が甘い

となっている状況で早急に作り直しが必要でした。

 

 モータマウントの固定については接着なりで後でどうとでもなるためホイールの作り直しにとりかかりましたが、これが1ヶ月かかりました。

左:改善後 右:改善前

f:id:megato:20141119074406j:plainf:id:megato:20141119075034j:plain

 見ての通り内歯車と外歯車の両刃歯車となっており、もちろん既成品などないので自分で加工。大学の施設の放電加工機と汎用旋盤、汎用フライスを使い、大学の加工場の職員さん達とあれやこれやと相談し、作っては工程を変え、作っては工程を変え・・・とようやく満足のいくものができました。

 一応重量も各ホイール1gの軽量化となっていて、合計4gほどの軽量化に成功。ホイールの偏心については0.02mmほどに抑えられました。ただ、ギアのバックラッシがきつくなったのでモータマウントを再び切り出し。こちらは1日で終了。そして現在に至ります。

 幸い、全日本大会と大学の学祭が重なっており、準備期間として明日明後日が休日になっているので持てる力をふりしぼってソフトの調整にとりかかります。

 全日本大会、決勝いけたらいいなあ・・・・。