迷路のバックアップの方法を変える
これまでは探索のフェーズ(ゴールとか前面探索完了とか)と起動からの累積時間毎(4分、5分、6分)で迷路を保存していたが、その保存の間にクラッシュすると前の保存以降に探索した迷路の情報をすべて破棄するようになっていた
今回は、クラッシュした場合にクラッシュしたと判定した座標の周囲の2区間(25マス)分のデータのみを破棄して、その他の区間の迷路情報は更新するように変更してみた
マイクロマウス
こつこつ
マイクロマウスタックチャンの開発を進める
・壁情報の保存と、液晶に壁情報の表示ができるようになった
・割り込み動作がわからない
割り込み禁止と解除の
noInterrupts()/interrupts()とportENTER_CRITICAL(&timerMux)/portEXIT_CRITICAL(&timerMux)は動きが異なるように見える。
少なくとも割り込み内で値が書き換わる変数に対して、普通のところからアクセスするにはnoInterrupts()/interrupts()が必要そう
・壁センサの角度
筐体のサイズの制約から前壁センサを真っすぐに向けたが、これが良くない。左右の前壁センサが平行なために、前壁との角度が見えにくい
・モータ駆動電圧
ステッパーモータのトルク不足を補うために、M5stack内蔵の5Vを利用しようとしたが過電流でM5ごとリセットしてしまう。内臓昇圧回路の前段にPMCが入っていてそちらの制約が大きい模様。
昇圧を使いたい場合にはリチウムイオン電池の出力に別の昇圧回路をのせて対応するしかなさそう
追記(情報提供ありがとうございます)
noInterrupts()はArduinoで用意されている関数で、ESP32の場合なら内部的にはportDISABLE_INTERRUPTS()を呼び出す
タイマー割り込み内の排他制御を行うのがtimerMux変数で、割り込み自体を止めるだけのがnoInterrupts()ではないか
探索時間を削れ
昨年の全日本大会では5走目が時間切れになってしまった。あと10秒あれば時間内に走りきれた可能性もあるため、今年は探索時間の削減に取り組む。まず導入した探索走行の時間削減の内訳は以下のとおり
①不要なバック走行の削除
その場回転時に壁切れを確実に行いたいため回転後にバックする処理を入れていたのを見直す。左右の壁が確実に見えた場合にはバック走行をせずに、その場から次の走行に移る。バック走行は1秒未満だけれど32×32の迷路になると、その回数が多いので効くはず
②最短経路上の未探索区間の導出のタイミング変更
壁の反対に未探索区間がある場合に、袋小路に入らない場合は、未探索区間まで走りにいってしまうことを修正する。
現在いる区間に隣接している未探索区間までの歩数が長い場合には、いったん止まって未探索区間の再計算を行う
③オートスタートまでの待ち時間
探索ではないけれど、探索走行完了からのオートスタート開始までの待ち時間を7秒から5秒に短縮する。7秒は感覚的にも長かった
マイクロマウスタックチャン
マイクロマウスタックチャンはスタックチャンとマイクロマウスが合体したスーパーカワイイロボットです。
こんな感じで迷路を走り回ります
マイクロマウスタックチャンはM5Mouseをリスペクトしたロボットですが、M5Mouseと違い駆動系を含めてM5Stackのみで制御しています。また、電源もM5Stackに搭載されているリチウムイオン電池1セルで動きます。
M5StackのIO数でやりくりするために、モータはステッピングモータを利用してモータ制御に使うIOを4ポートに抑えています。また、前後左右の壁センサは[右前&左横]と[左前&右横]の2組のセンサをマルチプレクサで切り替えて使用することで、ADCポート2個と切換え信号、赤外線LEDのON/OFF用の合計4ポートに抑えています。
マイクロマウス2023
大会を運営してくださった皆様ありがとうございました
探索と目標にしていたパラメータでのゴールに成功しました。そして運よく3位入賞とベストマウサーを頂きました
この2週間前の大阪電気通信大学自由工房での試走で課題を出しきったおかげでもあります
本番では久々に壁の少ない迷路の登場になり、探索走行ではほとんど全面探索になるほど振り回されました
2走目はベストマウサーの評価基準の「1回目のスタートから最初に操作者がロボットに触れた時までの最短完走時間を記録したマイクロマウスを評価する」の「ロボットに触れる」は物理的に機体に接触せずに例えば赤外線センサで操作するのは基準に適合するのではないか?などと思いながら(自立賞のノータッチにも同様の疑問)、探索完了後の7秒間に機体に外力(たとえば速度や回転)がなければ次の走行に移るロジックを実装したものが功を奏しました
3走目のパラメータは以下の値で予定していた最大パラメータです。九州地区大会よりも遅くしています
直線の最大速度は4.5m/s、加速度は25m/ss
斜めの最大速度は4.3m/s、加速度は22m/ss
ターン速度は1.4m/s
素晴らしい大会を運営してくださった皆様、ありがとうございました。
ダイソーのタッパー
ハーフサイズマウスの収納にちょうどいいサイズのタッパーを見つけたので紹介
このミニパック角4P100mlx4は内寸法が75mm x 55mm x 25mmくらいでハーフサイズマウスより一回り大きいちょうど良いサイズだった
一番上の写真の中央(黄色の機体)では、ケースにマウスの外形と同じ型の固定具を作り、両面テープで固定して、マウスがタッパーの中で暴れないようにしている
メタルマスク版エンコーダの手触りとエンコーダディスクの追記
しばらく使った感覚では、先の基板版のエンコーダに劣る部分はなさそう。
さらに、もしかしたらLEDの電流をもっと小さくできるかもしれない。これは来年度試す
さて、このメタルマスク版エンコーダディスク。メタルマスクで作成したのは前の記事で触れていたのだけど、そのオプションについては書きそびれていた
このメタルマスクはJLCPCBで作成していて、作成時にElectropolishingのオプションを選択している。日本語で電解研磨というもので表面の凸凹を溶かして平滑で光沢のある仕上げにする処理だそう。
本来は狭ピッチ部品の実装品質をあげるためのオプションだけれど、今回はその処理がエンコーダディスクにうまく合致したようだ。
次に、話は変わって、このエンコーダディスクをメタルマスクの板から切り出すときの方法。今回はエンコーダディスクから延びる4つのタブ部分をカッターで切ってみたら、カッターの刃先と切断部の伸び?のせいでエンコーダディスクに応力がかかって、薄板なエンコーダディスクが曲がってしまった。
少しまがったエンコーダディスクでもセンサの読み取りには問題は見られなかったけれど、たぶん、リューターをつかって応力を少なくする切り出し方を試したほうがよさそうだった
メタルマスク版エンコーダ付きホイールの組み立て
光学式エンコーダNJL5820Rの続報で、エンコーダホイールをメタルマスクで作ってみた。その組み立て編
3Dプリンタで作ったホイールにPOM製の平ギヤと、ステンレスのエンコーダ孔を組付けたもの。ホイールは回転軸中央が凸形状になっいて、その凸部に平ギヤの中心の孔と、エンコーダ板の中心の孔とをはめ込み、接着して組み立てる
ホイールと平ギヤの接着にはセメダインPPXを使う(作業時間的に瞬間接着剤は使いたくないけれど)。接着剤はホイールの凸部から少し離れた周辺に塗布する(図の黄色箇所)。凸部のエッジにも塗布するとホイールと平ギヤとの間に隙間ができてしまう。これは平ギヤをはめ込んだ際に接着剤の逃げる場所がなくなるためなのか?
平ギヤとエンコーダ板の接着は時間余裕的に瞬間接着剤ではないものを使用したほうがよさそう。