名前 | Aegis 2021 (2021年 RT出場機) |
マイコン | STM32F103 C8T6 with Arduino IDE (RAM 20KB, ROM 128KB) |
モータ | Maxon DCX10L x2 |
エンコーダ | COPAL RE12D 100pls x2 |
IMU | Invensense MPU9250 |
モータドライバ | Toshiba TB6641FG |
バッテリー | LiHv 3S 350mAh (45C/75C) |
ファンユニット | 1103 ブラシレスDCモータ with 汎用BLDC ドライバ |
ラインセンサバー | 自作。 汎用フォトトランジスタ SCM-014TB x16 赤外線LED OSI3120641E x17 |
重量 | 160g |
●概要
2020年度機「Aegis2020」のアルゴリズム大幅改良版。シリコンシートタイヤで全面ショートカット走行を実現した。大会では結果を残せなかったが、来年につながる重要な開発テーマを達成できた。
●動画
●特徴
① 全面ショートカット走行(詳細は後述)
本年度の最大の成果。うねうねラインをまっすぐ走ったり、R10クランクをおおまわりに走ったり、タコつぼをクイックターンで駆け抜ける。平滑経路生成技術、経路追従制御、座標補正技術、経路計画補正技術と、様々な新規技術開発をした。といっても、座標補正の開発に2年以上かけており、めちゃくちゃ大変であった。経路生成と経路追従、計画補正は割と簡単である。あと、ショートカット中の加減速は従来の加減速技術をまんま流用しており、というかまったく同じ関数を使っている。実際にショートカット走行を実現してみてわかったことは、マーカーカウントずれして距離がくるって急カーブでふっとぶ、ことがなくなって、走行速度をガン上げしてもきちんと減速してからカーブしてくれるようになった。快適。ショートカット走行のおかげで最高速度があがった。一方で、オドメトリズレしないために加速度を抑える羽目になったため、一長一短。
② プリント基板のラインセンサ
100mm
四方を超える基板はお値段が大変なことになるが、覚悟を決めて発注。中国のメーカーに投げて、1枚当たり1000円した。センサーレイアウトは直線になっており、これはショートカット走行時の計算負荷を軽減するためのレイアウトである。先端に8chのAD変換IC(MCP3008)が2個のせてあるため、中間ケーブルは電源とSPI通信線のみにできる。小型でめっちゃ軽い。
③ 白すぎる3Dプリントパーツ
モータマウンター、BLDCモジュール、ラインセンサーマウントを3Dプリンターで印刷して制作した。ラインセンサーマウントは、軽量化のためシェル抜き構造にした。そのせいで走行中にラインセンサーがゆーらゆら揺れ、「めっちゃゆれてるやん」という観客からの突っ込みが後を絶たない。飽きずに白いフィラメントばかり使う上に基板も白いので写真映えしないことが最大の欠点。
④ Maxon DCX10L 3V版
去年に引き続き、Maxonモータを利用している。
⑤ モータドライバ TB6641FG
同じく去年に引き続き。ただ、欠品が見受けられたため、基板パターンを改善し、TB6642FGも使えるようにした。
⑥ 型落ちIMU
もはや骨董品と化しそうなMPU9250を使っている。ストロベリーリナックス製のモジュールを購入し変換基板を自作していトレーサーに搭載している。ショートカット走行のために、方位角計算の精度がめちゃめちゃ必要になったため、ダウングレードしてでもはんだ付けが完ぺきな市販品を使うことにこだわった。衝撃が加わるとリニア特性が変わってしまう致命的欠点がある。また、購入直後の状態であたりはずれがあり、あたりを引くとリニア特性がとてもよく、なんの工夫もなくただ積分するだけでとても正確に方位角が求まる。というわけで、このロボトレーサーでは、ジャイロセンサーを選別して搭載している。
⑥ FRAM
マップデータを保存している。富士通製MB85RS2MT。安心と信頼の日本製でマニュアルも日本語。マイコンのRAMが広ければ積まなくてよかったのに...。
⑦ シリアルフラッシュメモリ
制御データを保存している。32Mbitと大容量なので、惜しみなくデータを保存できる。搭載しているのはMicrochipのSST26VF032B。去年に引き続きである。ロボトレース3走の全リアルタイム制御データが保存できるため、大会に出れば出るほどデータ蓄積ができて得しかない。
⑧BLDCユニット
汎用の4in1ドライバーを使っている。BLDC配線からのノイズがひどいせいなのかどうかはわからないが、BLDC回転中はジャイロがとんでもない値をはくことが発覚したため、配線をジャイロからなるべく遠ざけるため、汎用のBLDCドライバを採用した。
● ショートカット走行
FRAMに記録したコースのXY座標データをもとに、何となーくで引いたライン上を走るようにした。仮想経路の生成方法は、コースマップの移動平均を可変窓大きさにしてとるだけ。仮想ライントレースの方法は、よくあるKanayamaの方法ではなく、幾何情報を計算し、実際のライントレースを再現している。というのも、Kanayamaの方法だとロボットの角速度制御が完ぺきにできていないといけないが、シリコンシートタイヤにファンモータだと制御チューニングが大変だからである。ライントレースの制御をそのまま引き継げるメリットがある。
ショートカット走行のその最大のモチベーションは、ずばりうねうねラインのショートカットにある。昨年度マシンにてよくわかったのだが、ストレートやカーブはマシンスペックでどうにでも速く走れるが、左右に振られるうねうねラインでは、モータにかける電圧が飽和してしまうほどに、ライントレース制御にパワーが要求されてしまう。すなわち、マシン改良を重ねた最後に残る課題が、うねうねラインでどうしようもなく速度が出ないことである。そしてその解決方法は、もうショートカット走行にしかないため、だったらさっさと開発しちまえと思いショートカット走行開発を本格的に進めることにした。その過程にて、うねうねラインのみを抽出することがおもいの他難しかったため、全面ショートカットとオドメトリ補正で何とかする方針に固まった。
● オドメトリ補正アルゴリズム
先行研究が2つある。一つは粒子フィルタをライントレースに適用する方法、もう一つは勾配法による最適修正値を求める方法である。前者は「インターフェース
2018年7月号 &
8月号」に、粒子フィルターによる位置姿勢補正をライントレースカーに適用した例がProcessingシミュレーションコードつきのわかりやすい解説で載っており、現在も電子版が購入できる。私もまずこのテキストで勉強し、オドメトリ補正の勘所をつかんだ。ただ粒子フィルタをマイコンに実装するには計算量が多すぎる点で採用できなかった。後者はロボトレースにて実績があり、初めてオドメトリ補正する人はこれでいいと思うので、ググって当該サイトを探すべし。後者の先行研究は2021年12月発表であったため、自分の研究時点では参考にすることができなかった。そのため、前者のみを参考に自分はまた別の方法を思いつきそちらを採用した。
自分の場合のオドメトリ補正は、ロボットの横ズレを補正している。キモは、ロボットの位置姿勢xyθのうち、姿勢θは真値が得られていると仮定して変数を減らし、さらに補正の方向まで限定することで、とても簡略な式で補正している点である。その補正とは別に、ロボットの姿勢θを補正している。
このアルゴリズムは、前述の粒子フィルターによる位置補正の挙動を見たおかげでオドメトリ補正アルゴリズムを思いついた。というのも、粒子フィルターを使ってもオドメトリ誤差を吸収できないときがけっこうあり、とくに姿勢と走行距離については吸収しきれないパターンが多くあった。そんな時でもラインからのずれというのは小さかったため「じゃあいっそ姿勢補正と走行距離の補正をやめてラインからのずれだけ補正すればいいんじゃね?」と思いつき、現在のオドメトリ補正アルゴリズムに至る。
●2022年にやりたいこと
① マイコンの変更
最適化をガンガンかけないと計算が間に合わないのと、RAM空間が足りないため、より高スペックなマイコンに乗り換えたい。