matlabによるマイクロマウス迷路シミュレータの作成と実装
こんにちは、おかやんです。
前回のブログからほぼ一年が立とうとしていました。
裏では一応ほそぼそマウスやっていたんですがね、、、なかなかブログに手が伸びず・・・。
進捗を出しながらそれを文章化してというのを習慣化するというのは、思ったよりずいぶんと大変なことなんだなと実感するばかりです。
今回重い腰があがったのは、2020全日本(オンライン)大会に向けて、マウスのほうがひと段落つきそうになったからです。このブログも一区切りつかせとこうと。 マウスはこんな感じ。
ほそぼそ進捗
— おかやん (@okayannnnnnnnnn) January 8, 2021
全日本どっちのルート走る気かバレちゃう pic.twitter.com/vXsjtXDIJw
初めに
前回投稿した予告(詐欺)にて、以下内容を書くと宣言していました。
- 迷路画像から迷路情報を抽出
- 迷路探索シミュレータの作成
- 迷路探索ロジックのC言語化
ひとつづつ書いていこうと思います。詳細需要ない気もするので、概要まで。
迷路画像から迷路情報を抽出
先駆者が多数いるであろう"迷路の画像からの壁のデータ抽出をmatlabでやってみてた”です。 私が作成したスクリプトもとあるマウサーの手段を大いに参考にしています。
動作としては、図左のような画像から、壁の位置を取得し、図右のように出力させます。
主な流れとしては、画像を取り込んで、二値化(imbinarize)し、 黒色のピクセルの数のピーク(findpeaks)から、迷路が記載されている範囲、柱の数(迷路のサイズ)の情報を抽出します。
得られた柱の位置から、各柱の間の黒色ピクセルの数を取得し、 壁の有無を判定します。画像サイズが一定でないと、有無を判定するための閾値調整が必要になってしまいますが、画像サイズに対する割り合いを閾値とすると結構うまく動いてくれています。
動作には以下ツールボックスのライセンスが必要になります。
Signal Processing Toolbox,Image Processing Toolbox
迷路探索シミュレータの作成
作成した迷路シミュレータの動作はこんな感じ
このシミュレータは
- 足立法でゴールし帰ってくるor全面探索or歩数最短経路上のみ探索
- 探索結果からの最短ルート選定(斜めor直進)
といった動作をシミュレーションできます。基本的には世に転がってるシミュレータと大差ないと思いますので、ロジックについては書きませんが、以下の本や多数の競技者のブログが参考になりました。
今回あえてmatlabでシミュレータをつくったのは、この後紹介するC言語化が簡単にできそうだったのがメインの理由ですが、 可視化もしやすそうだなと思ったのも理由の一つです。 可視化する際に詰まったところを少し紹介します。
matlabをつかったアニメーション作成
matlabは簡単にいい感じのグラフを書いてくれます。 例えば、plotやsurfといった関数がよく使われるかと思いますが、 今回のアニメーションもこれらを用いています。
具体的には、 plot、surfで出力されたオブジェクトをマウスの探索状況等から都度更新することでアニメーションにしています。
このオブジェクトという概念の理解が私にはハードルとなっていました。
コードのイメージとしては
%マウス本体を示すオブジェクト作成 h = hgtransform('Parent',gca);%現在の軸(axes)にtransformオブジェクトを作成 b = plot(x,y),'ob','MarkerFaceColor','b','Parent',h);%transformオブジェクトを親としてplotでラインオブジェクト(青●)を生成 %迷路探索処理 %探索経過に応じた変換行列の作成 m = makehgtform(~~~); %変換行列をtransformオブジェクトに適用 h.Matrix = m; %描画を更新 drawnow
であったり、
%探索状況に応じたsurfオブジェクトを作成 search_surf = surf(x,y,z,'EdgeColor','none','FaceColor','flat','FaceAlpha',0.4); %迷路探索処理 %探索経過に応じてsurfオブジェクトを変換 z = 探索状況; search_surf.ZData = z; %描画を更新 drawnow
といった感じです。基本的にはオブジェクトを生成、探索、変換、描画更新の流れです。ここらへんはmatlabマニュアルが充実しているので、 hgtransformやsurfあたりから検索してみるといいかもしれません。
C言語化と実装
さて、本題、な気がする。
マイクロマウスを始めたきっかけであるマイクロマウス競技者へのmatlabのライセンス配布。このライセンス普通に購入するhomeライセンスと比較し、つよつよな点がある。
MATLABCORDER が入っているのである。
これはつまりmatlabで作成した迷路探索ロジックをそのままC言語化し、マウスに突っ込めるのである。強い。
ということでつかってみた。 使い方というより突っかかった点のほうが需要ありそうなのでそちらを紹介する。
型定義
matlabでは普通型定義をしない。特に指定なければdouble型となる。
これはCと比較するととても楽で便利だが、C言語化するとそのままdouble型で実装される。 容量や処理時間が許容できるものであれば無視してもいい気がするが、 そこらのフラグがdoubleでのさばっているのは精神衛生上善くない。そこで、以下のように都度指定する。
%ローカル変数宣言 wall_write = uint8(zeros(1,4));%壁情報書き込み用バッファ(N,E,S,W) serch_write = uint8(zeros(1,4));%探索情報書き込み用バッファ(N,E,S,W) %壁センサAD値格納変数 wall_sensor_front = int16(0); wall_sensor_right = int16(0); wall_sensor_left = int16(0);
めんどくさかった、とても。。。 もはやCで書いている気分になった。何のためにmatlabで書いているんだと。これ対策あったら教えてほしいです。またやるかどうかは抜きとして。 Simlinkでも同じような処理するし、ここは仕方ない気もする。
シミュレータ、実装時の動作切り分け
シミュレーション(matlab)とC言語(実装時)の動作を切り分けたいシーンがでてくる。たとえば壁の有無の判断の際、シミュレーションは既存データを参照するのみだが、実装時は壁センサの値から判断する。
そういったとき、以下のようにcordertargetを使用することで切り分けることができる。
%右壁判定 if coder.target('MATLAB') %for matlab %既知の迷路情報をもとに、壁の有無を判定 if bitand(maze_serial(current_y,current_x),bitshift(uint8(1),rem(current_dir+1,4)) ) wall_write(uint8(1),rem(current_dir+1,4)+uint8(1)) = wall.wall; end else %for Cgen %センサ値取得 wall_sensor_right = coder.ceval('m_get_right_sensor'); %センサ値をもとに、壁の有無を判定 if int16(wall_sensor_right) > int16(wall_sensor_right_th) %壁情報取得 wall_write(uint8(1),rem(current_dir+1,4)+uint8(1)) = wall.wall; %壁フラグセット wall_flg = bitor(wall_flg,2,'uint8'); end end
これでシミュレータの動作とは別に実装時のコードを記述できる。注意点としては実装時のみ適用される部分のコードは、matlab上でデバックできない。使用は最低限の範囲としたほうがいいと思われる。
C言語との連結
ほかの人がどうやっているのか知りたいテーマ。
どこまでをシミュレータ側で記述して実装側でどこまで書くか。
私はフラグ等の管理はシミュレータ側で実施し、Cで記述したマウスを動かす関数を適宜呼び出す形をとっています。
if ~coder.target('MATLAB') coder.ceval('m_move_front',start_flg,wall_flg,uint8(move_dir_property.straight)); end
ここで m_move_front は固定の距離だけまっすぐ進むという関数です。中身は以下のようになっていて、C側で記述している関数を呼び出すのみとなっています。
//前進 void m_move_front(unsigned char start_flg,unsigned char wall_flg,unsigned char move_dir_property){ // c側で記述した動作関数を記述すること move_front (start_flg,wall_flg,move_dir_property); }
この形の問題点としては、シミュレータ動作には特に関係のない動作関数用のフラグをシミュレータで管理することで、各フラグのデバッグが不便になってしまっているという点です。おすすめの手段あれば教えていただきたいです。
関数の特殊化について
これはそんなに気にする必要もない気がするのですが、コード生成するとたまに
hogehoge1() hogehoge2() hogehoge3()
といったように、作った覚えのない連番の関数が生成されています。 これは、関数の特殊化によるもので、入力引数のパターンが固定であったりすると、入力引数が固定化された関数をいくつか用意してくれる見たいです。動作はおよそ問題ない気がしますが、生成コードの可読性が悪くなる(そもそも読むのが間違い?)ので、ちょっと対策する。
search_adachi(current_x,current_y,current_dir,maze_row_size,maze_col_size,maze_wall,maze_wall_search,coder.ignoreConst(new_goal),coder.ignoreConst(new_goal_size),... start_flg,stop_flg,goal_after_flg,adachi_search_mode.goal);
上のコードのようにcoder.ignoreConst(入力引数)とすればよい。 これはこれでmatlabがわの可読性が落ちるのだが…。
おわりに
つらつらと書いてしまいました。
内容としても薄くなってしまったような・・・・。正直一年ぐらい前の内容もあってどこでどう躓いたかわすれているものがほとんどなんですよね。都度書くのが大事。今年は頑張りましょう。
あそこもうちょっと丁寧に書いてとか、間違っているとかもしあればコメントいただけると幸いです。
それでは。
matlabによる迷路探索アルゴリズムのシミュレーション、実装まで(予告)
こんにちは、おかやんです。
先日、mathworks様からマウサー向けにmatlabライセンスが発行されました。
マイクロマウス関係者の皆さま!
— MATLAB Japan (@MATLAB_jp) February 21, 2020
2020年大会に向けて新しいMATLAB・Simluinkライセンスが発行可能になりました!
MathWorksのマイクロマウスページにある[ソフトウェアの利用を申し込む]からお申し込みください。https://t.co/VLqkiFhD63#マイクロマウス #MATLAB pic.twitter.com/C82fJJA8xN
私は昨年からこのライセンスをいただいているのですが、未だマウスの大会に参加できていません。申し訳ございません。今年は出ます。
昨年のライセンスは、
といったことに活かさせていただきました。次回から数回に分けて下の三つについて、紹介していこうと思います。
ちなみに、作成したシミュレータは以下のような動作をします。
ブログ埋め込み用
— おかやん (@okayannnnnnnnnn) March 10, 2020
こんな感じの迷路探索シミュレータを作成しました。
現状ではシンプルな足立法のみ実装してあります。 pic.twitter.com/In8LWBHVar
githubにてソースは公開します。 ただ、現状でREADMEすら整備していませんので、使い方はわからないかと思います。 細々と更新していきますので、しばらくお待ちください。 githubはこちら
光造形3Dプリンタでマイクロマウスの部品を作ってみた。
こんにちは、おかやんです。
先日、自宅に光造形の3Dプリンタを導入しました。
ここ最近はだいぶ手が出しやすい値段になってきた光造形で、
マイクロマウスの部品がつくれたらQOLが上がるでは、という勢いが動機です。
結果からいうと、マイクロマウスの機械部品製作に光造形は向かない(主観)です。 今回はその結論に至った経緯をつらつらと書き残しておこうかなと思います。 実際のところ光造形どうなの、という方に届けば幸いです。
導入した光造形プリンタ
私が今回導入したのはElegoo marsです。
本日(20/3/9)時点で約3万円で購入することができます。実際には印刷に必要なレジンや、IPAなどを追加購入する必要がありますが、それでも合計4万円に届かないと思います。
スペックは以下のようになっています。 数字だけ見ると、とても素晴らしいものだと感じます。
出力サイズ | 120 x 68 x 155 mm | |
積層ピッチ | 0.01mm ~ | |
xy解像度 | 0.047mm | |
Z軸精度 | 0.00125mm |
テストプリントしてみる。
marsの付属USBにはテストプリント用のデータが入っています。 下の写真はその出力結果です。とてもきれいに出力できています。 エッジもしっかりと出ていて、細部も再現されています。このテストプリント出力の瞬間が、光造形への期待値が最も高くなる瞬間となるのは、きっとあるある。
マウスの部品を作ってみる。
マウスの機械部品を出力してみます。 3DCADからSTLファイルを作成し、elegoo専用のスライス"CHITUBOX"でサポートを生成、スライスします。この灰色の木の枝のようなものがサポートです。これが結構曲者で…後述します。
出力し、サポートをぶちぶちと取り除いた結果がこちら。(上の画像の出力結果とは異なります。) ・・・きたないですね。とくにサポートがついていた面が汚いです。 寸法精度もよろしくないです。例えば右の穴はΦ6のモータを圧入するための穴なのですが、 設計Φ6→出力Φ5.6となっており、だいぶ小さく出力されています。 真円度も目視で楕円状になっているため高そうです。(高いほうが真円から遠いです。)
サポートが付かなかった面はきれいに出力されています。
なぜサポートがついていた面は汚くなるのか。なぜ寸法より縮んで出力されてしまうのか。簡単に考察していきます。
光造形の仕組み
考察に入る前に、簡単に光造形の仕組みを紹介します。
光造形の仕組みは以下の画像のようになっています。
UVライトから発せられる紫外線を、液晶によって硬化させたい部分だけ透過さえ、
レジンを硬化させます。硬化後、プラットフォームを上昇させ、次の層を作ります。
この手順の性質から、プラットフォームに固着していない箇所から造形を始めるのは不可能です。
そのため、造形箇所までのサポートが必要になります。
なぜサポート面はきたなくなるのか
限定的な形状を除き、サポートは必須です。そのサポートが付いていた面はなぜ汚くなるのか。 一番の大きな理由は下図のような造形不可領域の存在だと考えています。 光造形は先の仕組みから、硬化する面積が急に増えることには対応できません。 硬化する面積が急に増えると、硬化している点の部分にぶら下がるような形になり、 だれる原因となってしまいます。一般的に、プラットフォームに対し水平であればあるほどサポートの周りがだれてしまいます。そのため、造形箇所はだんだんと広がるように構造物、サポートを設置するとよいのですが、形状によってはそれが難しい箇所がでてきます。サポートを工夫するより、造形しやすい形状を考えるほうが簡単かもしれません。
プラットフォームと平行に設置したけっか、大きくだれてしまった天面
なぜ縮むのか
こちらは簡単です。レジンは硬化する際、縮む特性を持っています。 そのため、液晶で透過させる範囲から、少しだけ縮みながら硬化します。 縮み方はおそらくその時々の条件で変化するため、設計でフォローしようというのはなかなか難しそうです…
光造形はなしなのか
ここまで、光造形の悪い点が目立つ書き方をしてきましたが、いい点ももちろんあります。
研磨性の良さ
これはつまり削りによるリワークが可能ということです。余り厳密な精度がいらない箇所では、少し設計にゆとりを持たせ、削りながら調整、ということが可能です。表面の滑らかさ
光造形の一番の強みはここではないでしょうか。熱溶解積層と比較すればその滑らかさは圧倒的です。
まとめ
ここまでつらつらと書きましたが、いかがでしたでしょうか。
端的にまとめると、光造形3Dプリンタは
- 精度が必要ない。
- ディティール形状を再現したい。
- 表面の滑らかさを重視したい。
といった目的だと素晴らしい結果を残してくれそうです。
あくまで"mars"を使ってみたうえでの主観ですが。もっと高い機種だとと違うのかな。
であればマイクロマウスの部品は何で作るのがいいのか。というと現状はDMM.makeのアクリル一択な気がします。ただ残念なことに20年度で一度なくなってしまうみたいです。 復活はいつになるのか・・・。マウサーにとっては死活問題なのではとおもいますが、皆さんが考えている代替案を知りたいです。
最後にサンプル出力の形状をみてみますと、土台から先細りの形状で、サポートが必要なく、一番きれいな面がでる最上部にエッジが特徴的な形状を配置しており、出力品がきれいに見える工夫があるなあと感じました。商売がうまいなぁ。
実際に光造形で精度が必要な部品を作られている方がいましたら、 そのノウハウを教えていただきたいです…。
記事内容にご意見ご批判等ありましたら遠慮なくお願いします。 それではまた。
VScodeでブログを書く、投稿する
こんにちは、おかやんです。
先日、マイクロマウスの開発環境をvscodeに移行させ(またブログに書きます)
なんでもかんでもvscodeで書きたがるお年頃になってしまいました。
そこで手始めに、markdawnで記述しているこのブログをvscodeで書いてみよう、
投稿してみようと。
今回はその準備と簡単な紹介です。
環境構築
今回はVscodeの導入が終わっている前提で話を進めます。
拡張機能の導入
今回は以下の拡張機能を導入します。
hatebablogger
:はてなブログへの投稿
導入の方法は、
Ctrl+Shift+x
でExtensonsを開き、拡張機能の名前を入力。
以下の画面から緑色のあるinstallボタンをクリックすると導入できます。
環境構築は以上です。簡単!
ブログを書く
Markdawnの書き方や、便利ショートカットなどの紹介はほかのブログに任せるとして、
今回はvscodeでブログをかくにあたり、便利と感じた機能の紹介をしていきます。
プレビュー機能を使う。
vscodeには標準でmarkdownの出力をプレビューできる機能が実装されています。
非常に便利そうなのでつかってみます。
まず初めに、markdownの標準拡張子となる'mdファイル'を作成、開きます。
次に、vscodeの右上にある以下のマークを押して編集画面をに分割します。
そして、Ctrl+k,v
をおすとプレビュー画面が表示されます。
この状態で画面左側のエディタを編集していくと、プレビューが都度対応します。
intellisenseを使う。
vscodeではintellisenseという自動補完支援システムが搭載されています。
markdawn編集の際も便利なのでしっかり使っていきたいところです。
編集画面にてCtrl+space
をおすと、
こんな感じで編集時につかうであろうコマンドの候補が出てきます。
例えばunorderd list
を選択すると、以下のようなリストが出力されます。便利!
- first
- second
- third
スニペットを使う。
スニペットとはwindowsでいう辞書機能のようなものです。
とても便利なのでこれも使っていきましょう。
スニペットに単語を登録していきます。
まずはFile -> preference -> user snippet
を選択します。
すると適応させる言語のリストが表示されます。
今回はmarkdown
を選択します。
すると、markdown.json
の編集画面に移ります。
ここに辞書登録したい文字を書いていきます。
以下はその例です。
"content": { //適当なラベル
"prefix": "content", //入力するワード
"body": [
"[:contents]"//出力するワード
],
"description": "For HatenaBlog" //説明
},
これにより、conte・・・あたりまで入力して、Ctrl+space
を入力し、
contentを選択すると、登録した文字が出力されます。
よく入力する文字は登録しておくと便利ですね。
ブログを投稿する
Vscodeでブログを編集したら、次はVscodeで投稿しましょう。
ここで事前に導入したhatebablogger
が活躍します。
hatebablogger
の使い方は作者のページ
作者のページ
が大変わかりやすいので、そちらを参照してください。
注意:VScodeの日本語化をしていると上手く機能しませんでしたので、使用の際は日本語化をやめるとよいです。
hatebablogger
では以下のことができます。
- 下書きの投稿、更新
- 記事の投稿、更新
- 画像の投稿
私としては特に3つ目の画像の投稿ができるのが素晴らしいと感じています。
これで私も快適はてなブロガーです。
まとめ
簡単ですが、以上です。
vscodeを導入してからまだ1週間ほどですが、
vscodeの可能性にわくわくがとまらないこの頃です。
やはり使用人口が多いのは正義。
ブログの内容に誤り等ございましたら、ご指摘ください。 それでは、また。
2019年の振り返り、2020年の目標
はじめに
こんにちは、おかやんです。 前回はなぜブログを始めたか、についてでした。
今回はブログを始めた大きな理由でもあった、目標設定と反省をしようと思います。 最初に謝らせてください。長くなりすぎました。
2019年の振り返り
範囲が広すぎて具体的な反省ができる気がしていないので、反省というより振り返りにしましょう。そうしましょう。反省は定期的に短スパンでやるべきです。
以下振り返りです。長くなります、ご容赦ください。
マイクロマウスについて
マイクロマウスを始めたきっかけ
マイクロマウスに初めて触れたのはちょうど一年前の2019年1月、社会人としては2年目の頃です。当初は何となくmatlabを触るにあたってハード的な題材が欲しいなぁという思っていたところ、マイクロマウスとmatlabを関連付けられたスライド*1を紹介され、なにこれちっちゃくて速い!楽しそう!となったのがきっかけです。
導入期
当初、マイコンとは?レジスタとは?であった私は、マウスを自作することに相当高いハードルを感じていたため、キットを購入しました。 *2
このキットはマウス本体に加え、サンプルプログラムがついており、ハード層(マイコンのレジスタを直接たたく層)の整備は済んでいるため、購入者はいきなりアプリ層を触れる状態になっています。そのため、比較的容易に、簡単な迷路であれば探索することができます。私は、ある程度このキットを触った段階で、何故か自作マウスを作りたい欲がでてきてしまい、matlabに触れるという目的を忘れ、自作に走り始めました。
ハード製作期
自作するとはいえ、PCBとは?である私は、ジルコニア*3を軸に製作をはじめました。王者が選定した部品であれば安心(怠惰)ということで、部品選定のステップを飛ばし、マシンの設計を行いました。 実際に手を汚したのは、
- マウスの機体設計、および3Dプリントでの部品製作
- 回路設計(ほぼジルコニア)、アートワーク設計、PCB発注
- 基板実装
です。その過程で3DCADのfusion360、回路設計環境のKiCADの使い方をおおよそ理解することができたのが、あえて自作することで得た利益だと思います。次のマウスを作る時にもここは大きな障壁になることはないでしょう。 基板実装は素人ではなかったのですが、QFNのマイコンはなかなか...位置が決められず、しんどかったです。あとから人に聞いた話で確かに!と思ったのは、養生テープで位置を固定するといい感じにできる、ということです。なぜに気付かなかったのだろうか。
そうして出来上がったのがアイコンにもなっているこの機体
実はこれを作るまでに致命的な欠陥を回路、3dプリント部品の部分で出しており、各々take2の代物です。がっつり手戻りしてしまいました。 反省点としては、
- 回路図:他人にみてもらう、できなければ一度しっかり寝かして精査する。
- 3dプリント部品 : 一度寝かす。その後、重要となる寸法が適格に指定できているかをしっかり確認する。
ということで、しっかり寝かしてもう一回疑いの目で見直す。ということの大事さを学びました。疑いたくない気持ちも出ちゃうんですけど、ほぼ素人な僕がミスしないはずがないんですよね。次はしっかり見直そうと思います。
ソフト製作期
ようやくソフトです。ハードに3か月かけてしまい、いつmatlabに触れるんだ?という感じになってきましたが、まだ触れません。
ソフトでは機体に盛り込んだモジュールの動作確認から行います。具体的には
- PWMによるモータ駆動
- エンコーダによるタイヤ回転角度算出
- ジャイロによる角速度抽出
- IRセンサ値取得
を行っていきます。一つ一つに苦労はしましたが、先人たちの神ブログに助けられ、何とか動作確認を完了しました。 特に助けられた神ブログを一つ紹介させてください。
そらさんのSora's Activity Record です。
STM32の各機能の使用方法を懇切丁寧に記事化されており、特にDMAやADCの記事は何回も読んで参考にさせていただきました。ありがとうございます。 僕もこんなふうに、自分の気づきが誰かの助けとなるような記事をかけていけたらと思います。
各モジュールの動作が確認出来たら次は、各々をどう使っていくかを考え始めます。ジャイロやエンコーダを使った速度、位置制御などがその例です。 ここで初めて、各モジュールの嫌な特性に気付き始めます。例えば左右のモータの特性のばらつき、摩擦による非線形性、エンコーダーのブレ、壁センサの非線形性…など。各々ソフトでなんとか対策できる気もしますが、やはり制御しやすいハードに越したことはない。なので、すでに次の機体を作りたいという欲が若干わいてきています。まだ走ってないのに。
matlabについて
私はmatlabで何をしたかったのか、matlabとは何なのか。という感じになってしまいましたが、ようやくmatlabに触れていきます。
実際に私が今年実施したのは、
- 迷路画像から迷路情報を自動的に取得するソフト作成
- 迷路探索ロジックの検証、実装
- 速度制御におけるゲイン調整
などなどです。丁度今年は仕事でもmatlabに触れる機会が増え、matlab経験値が稼げた年だったなぁと感じています。
あくまで”matlabでマイクロマウス”、としている理由は、mathworks様がマイクロマウスの競技者に向けて提供している*4 フルライセンスを使用しているからです。
フルライセンスを強調しましたが、ホームライセンスとの違いはmatlabをC言語に変換するCorder系のライセンスの有無です。これを活かさない手はないと考え、僕は迷路探索ロジックの検討、検証、実装をmatlabにて実施しました。もう少し精査したら、いつか別の記事に乗せる予定です。
matlabによるマウス探索ロジックの検証。このロジックをC言語化し、マウスに実装している。探索プログラムひとまずmatlabでかけたー!
— おかやん (@okayannnnnnnnnn) 2019年11月2日
ゴールを足立法で探索→スタートを足立法で探索→最短経路となっています。
見た目的にもう少し色々したいけど、
それはまた今度にしよう、マウスに実装するぞするぞ pic.twitter.com/uH6UF2Zm9j
2020年の目標
ここまで4000文字、別記事にしようかと思いましたが、書いちゃいます。
マイクロマウスについて
ずばり目標は"全日本大会出場"です。そのためには、地区予選で完走する必要があります。
スケジュール
例年通りにいけば以下のようなスケジュールになるはずです。 大会に合わせた目標を列挙しておきます。こういうのは言ったもん勝ちです。多分。
開催月 | 大会名 | 目標 |
---|---|---|
3月 | デンソー杯 | 横壁追従、壁切れ補正、スラローム探索、最短走行、フェイルセーフの実装 |
9月 | 中部地区初心者大会 | 新機体製作、旧機体レベルまで引き上げ、全面探索ロジックの実装 |
11月 | 中部地区大会 | 斜め走行、既知区間加速実装 |
12月 | 全日本大会 | 完走 |
後半程目標が曖昧なのは、イメージがないのとどうせ修正するだろうという安直な考えによるものです。適宜直近の大会に向けた目標設定をしていこうと思います。
新機体は、現状の機体の問題点を洗いざらい吐き出し、すべて解決されたものにするつもりです。詳細は別の記事としますが、とにかくユーザーにやさしく、制御しやすい機体を作る予定です。
デンソー杯について
少し宣伝です。2020/3/6~7(金・土)に刈谷にあるデンソーにてマイクロマウスの大会が開催されます。ぜひマウサーの皆様、マウスを見てみたい方、どうぞ刈谷にお越しくださいませ。私も出場予定なのですが、何分つよつよの宇宙人方のホームカンパニーでして、震えが止まりません()
https://www.facebook.com/robot.d.team/
デンソー杯の公式フェイスブックページ、随時情報が更新されていく予定です。
matlabについて
主に趣味の観点では、以下の二つに使用していきたいと思います。マウスから逸脱した用途では、別で使用しているホームライセンスを使用する予定です。
マイクロマウスでやりたいこと
- App Designerを使用した探索ロジック検証アプリの作成
- コストを考慮した探索ロジック作成
- より厳密なシステム同定
- 壁追従制御のMBD(先駆者の後追いですが…)
制御工学的にやりたいこと
- カルマンフィルタを用いた倒立振子の姿勢、位置制御
- センサレスFOCでBLモータを回す
制御工学について
2019年は業務で制御工学に触れさしてもらった年でした。今まで制御工学は大学で触れたのみで、特に使うことがなかった私でしたが、"不安定なものを思い通りに動かす"ということに、好奇心が芽生え、自分なりに積極的に勉強した年でした。
主にPIDなどの古典制御の勉強をしてきたので、2020年は現代制御でものを安定させる、ということに挑戦しようと思います。
私事ですが、来年、会社内の予算を使いながら制御の勉強をさせてもらえそうです。制御よわよわマンなのにお金をもらっていいのか、という気持ちもありますが、精いっぱいやってみようと思います。さて、何を安定させようかな。
さいごに
長くなりましたが、以上です。もし読んでくださった方がいらっしゃれば、本当にありがとうございます。これからもよろしくお願いいたします。
今回立てた目標は適宜更新、反省を繰り返していきます。なので、もし大会で今回の目標を達成できていない姿をみても煽らないでください、泣きます。
短スパンでの更新となりましたが、今回限りで、次からは隔週ないし月一になるでしょう。そろそろマウスの開発に戻らねば。
最後になりますが、年越しのご挨拶を。
今年もお世話になりました。来年もよろしくお願いいたします。
*1:matlabからマイクロマウスとなったきっかけの資料を貼っておきます。とてもキャッチーで、matlab初心者の私にもハードルを感じさせない、素晴らしいスライドです。
マイクロマウスのための MATLAB/Simulink 講座 第1回 - MATLAB入門
*2:購入したキット。RT社製
HM-StarterKit 手のひらサイズのマイクロマウス学習キット | アールティオリジナルロボット | 株式会社ア-ルティ
*3:第40回マイクロマウス ハーフサイズの優勝者であるまついさんが製作した、オープンソースのマウス。使用している部品や回路図、ガーバーデータ、各モジュールのテスト用コードが公開されています。 matsui-mouse.blogspot.com
*4:mathworks様のマイクロマウス競技者向けライセンス提供ページ。社会人かつ個人であっても、提供可だそうです(2019/12/29時点) Micromouse Contest - MATLAB & Simulink
ブログ開設、なぜ今ブログなのか
ご挨拶
本日よりブログをはじめます、おかやんと申します。 よろしくお願いいたします。
自己紹介
- 年齢 : 26
- 職業 : 某自動車部品メーカー、よわよわ回路屋、よわよわ制御屋
- 趣味 : マイクロマウス、matlab、テニス
本ブログは上記で強調したマイクロマウス、matlabについての記事を書いていく予定です。 あともしかしたら制御工学の勉強記録なんかも書いていくかもしれません。
なぜ今、ブログなのか
ブログを始めた理由は大きく2つあります。
日々の活動を永続的な形で記録したい
マイクロマウスの開発を始めて、8か月ほど経ちました。開発過程の記録、共有にはTwitterのTLに残すという手法をとっています。 この手法には以下のようなメリット、デメリットがあると感じています。
Twitterのメリット
- 140文字+数枚の画像、動画という制約のおかげで、手軽に投稿できる
- "つぶやき" なので情報の質が問われない
- タイムラインという形式により、情報が拡散されやすい
Twitterのデメリット
- 情報を詳細に残しづらい(情報の質の低下)
- 情報が断片的になる。
- 情報を遡り辛い
私は、いままでTwitterの手軽に投稿できるというメリットにより、日々の進捗を細々とですが記録していくことができました。 しかし、これらの記録は遡り辛く、断片的であり、質も低いものになってしまっています。
情報の質が悪い例、どんな課題があり、どうやって改善したのか全く分からない。思い出せない。 なにがほれほれなのかほれほれ pic.twitter.com/Z6fozOm87t
— おかやん (@okayannnnnnnnnn) 2019年9月22日
これでは記録を永続化しているとはいえません。一方、ブログであれば、記録を体系的に残すことを意識できますし、 簡単に遡ることができます。
目標や反省を文字化し、振り返れるようにしたい
今まではマウス開発において、具体的な目標やスケジュールをたてることなく、漠然とやりたいことに挑戦してきました。 その結果、なんとか迷路を走るようになりました。
マウスの現状、なんとか探索はできそう前壁補正?を、入れてみました
— おかやん (@okayannnnnnnnnn) 2019年12月19日
前よりはテキパキ動いてる!
長い直線はやっぱり横壁見ないときつそうだな🤔 pic.twitter.com/5P3SnaXfcZ
しかし、ここからは今までのような漠然としたタスク管理では成果を出していけないと感じています。 なぜならば、
やること(やれること)の世界が広がる
- 迷路を走れるようになれば、壁やジャイロによる姿勢補正、スラローム走行、迷路ロジックの工夫など、挑戦できる項目が急激に増えます。時間は有限であるため、取捨選択、優先順位付けが重要です。
オリジナリティが強くなる
- 例えば、"STM32を使ったモータの回し方", "DMAの使い方"など共通性が強い話題は、探せば八百万の神様が神ブログに書いてくれており、アウトプットまでの道筋が明確になっています。ですがここからは、各々独自の工夫を取り入れた領域となるため、自身で開発ステップを細分化し、目標、反省のサイクルを回していくことがより重要になります。
以上の点から、ブログを利用して都度PDCAを回していこう、と考え、ブログを始めるに至りました。
加えて、文字化することで誰かの助けになれば、という思いもあります。神ブログに助けられた恩返しは、ブログでということで…
まとめ
長くなりましたが、まとめると、
マイクロマウス開発のタスク管理には、ブログがよさそう。始めます、ブログ。
でした。
ブログにせよTwitterにせよ、一番大事なのは続けることだと考えているので、月1、2ぐらいの更新頻度でなにかしら更新できればなと思っています、頑張ります。 もし、記事の中で間違い等あればどんどんご指摘いただきたいです。これからよろしくお願いします。