第22回ロボットグランプリのロボットランサー競技に参加したときの話
第22回ロボットグランプリ ロボットランサー競技のスタンダードクラスに参加しました。
ロボットランサー競技とは、槍を装備した自立型ロボットで、白線で示されたコースラインを 60 秒の間周回し,コースラインの左右に設置した複数の標的をどれだけ正確にしかも数多く突くことが出来るかを競う競技です。
詳しくは公式サイトを↓
RobotGrandPrix Official Site ( Lancer Page )
※「ランサー競技参加者への注意事項」から結果を見ることができます。
僕は結果としては4位で、奨励賞を頂くことができました。
大会から半年以上たっておりすごく今更感がありますが、せっかくなのでブログで残しておきます。
主な内容は、参加機体製作でやったことと反省です(あと雑談?)。
技術的にはかなり未熟で、あまりよろしくない部分も多いのですが、少しでも参考になれば幸いです。
あとブログを書くのは初めてなので、タイポや改善点があればコメントででも指摘していただけたら助かります。
機体紹介
機体名:for( ; ; )
読みは”ふぉあなきがお”。止まらずに、周り続けてほしいという願いを込めました!
特徴としては、4輪駆動、自作サーボ、自作基板とかです。
重量はバッテリーなしで846gです。バッテリー積むと1kg弱あるので割と重めです。
マイコンはSTM32F446RE、電源は2セルリポバッテリー(7.4V)です。
ラップタイムは最速でおよそ5.2秒です。60秒の場合、10周目で円柱標的に突撃します。
機体詳細
機体には主にMDF、3Dプリンター(PLA)、POM板を使用ました。
主な寸法は表のとおりです。
寸法(mm) | |
全長 | 441 |
車幅 | 228 |
タイヤ径 | 40 |
タイヤ幅 | 40 |
ホイールベース | 199 |
トレッド | 188 |
設計はだいぶ適当なので、結構半端な感じになってます。
ステアリング
駆動にはRC260×2、減速比は41.25(8:110=20:60)。
軸はS45C生地の平行ピンの片側10mmほどを、大学の技術職員の方に段付き加工してもらいました(ミスミに発注したほうが楽だと聞いた)。
足回り
あまりよろしくない部分
減速比6.75(8:54)
モーターマウントは軸とRC260を挟み込んでネジで締め付ける形になってます。
RC260はM2.6のねじで固定できるっぽいのですが、設計時には知りませんでした。
放熱がほぼできないうえ、熱に弱い樹脂で作っているのでよろしくないです。
回路
KiCadで設計し、Elecrowに発注しました。よろしくない部分多々あるんですけど、基板設計2回目なので大目に見てほしいです。一点アース?知らない子ですね。
2layers 150mm×100mm 厚さ1.6mm 5枚で基板2500円、送料1500円ぐらいでした。
センサー部分も一緒に設計したので横幅が100mmを超えちゃってます。
※Elecrowは100mm×100mm以下なら10枚まで基板代は5ドルなので結構損。その癖に右端は余りまくってるので無駄多い。使う予定のないf303k8の変換基板を作ってキーホルダーにした
メイン基板
サイズ:120mm×81mm
つけた機能(アクチュエーター、ラインセンサー関係以外)
- トグルスイッチ2個(マイコン給電用と駆動系給電用)
- 電源ライン確認用LED(リポ、3.3V、5V)
- バッテリーチェッカーLED(ADCで電源電圧見て、一定以下なら点灯)
- スピーカー
- スライドスイッチ2個(プログラム切替用)
- TWELITE接続口(無線デバッグ用)
- 9軸センサー(時間なくて使ってない)
- 電流センサー(ステアリング駆動モーターのみ、使ってない)
無線マイコンモジュールのTWILITEの使って、無線でデバッグができるようにしています(先輩のアイデア)。
TWELITEの透過モードではUARTを無線で飛ばしてくれるので、変換ケーブルとターミナルアプリを使うことで、スマホからデバッグや停止命令を送ることができます。
センサー
サイズ:150mm×17mm
LBR-127HLDを9個使いました。基板の形や配置に意味はありません。
床面から約4mm離した場合、抵抗値はこれぐらいがいい感じでした。
MD
サイズ:12mm×11mm以下
DRV8835を並列接続で8ピンにする基板に実装しました。
フラックスぺたぺた塗って、はんだジュっとしてシュっとしました。
制御
開発環境はCubeMXとSW4STM32で、HALライブラリを使用しました。
クロックはとりあえずMAXの180MHz。制御周期は1ms、センサーのサンプリング周期は0.1msで10個のデータから移動平均を算出して利用しました。
ライン位置推定
ライン位置推定には、僕の所属している団体では”重心法”と呼ばれている方法を用いました。やってることは単純で、センサーの値を重みとし、係数をかけて平均を出す、つまり重み付き重心を計算しているだけです。
係数に中央からセンサーまでの距離を入れることで、そこそこの精度でラインの位置を求められます。
僕はそのままPID制御に突っ込むつもりだったのと、センサーの配置が面倒なことになってるので、適当に-300 ~ 300を掛けました(位置推定とは?)。
自作サーボ
2通りの制御をためしました。
- 重心法で求めた数値を現在値、中央(0)を目標値としてPID制御
- 重心法から目標角度算出、ポテンショメーターで得られる角度を現在値としてPID制御
メインで使ったのは前者です。後者はどうもうまく制御できず、走行前のラインセンサーの校正でのみ使用しました。
ライントレースするだけなら前者のみで十分ですが、ショートカットするなら後者が必須なので、来年も出場するなら頑張りたいです。
周回処理
一般にイベントドリブンと呼ばれる方法を用いました。イベントの発生をトリガーとして処理を始めるやつです。
エンコーダーの値から算出した距離をトリガーとし、コース上のマーカーによるエンコーダーの誤差補正、加減速、やり制御、PIDゲイン変更等を行いました。
反省
重い
重量がかさんだ主な原因は、モーター6個とステアリングの金属製歯車、あと車体のMDF。
モーターは小型高出力のものを買えば解決する。
ステアリングの歯車は、市販品よりも自作するべき。分厚いPOM板とかをレーザー加工すればいい感じ?
車体MDFは肉抜きするか、3Dプリンターで出力するか、CFRP板を使うか。
遅い
PWMのduty比MAXでもあの速度。原因は電源電圧。早い人はrc260に3セル突っ込んでる。
無駄な機能・使いこなせてない部品が多い
ロマンは大事。モチベにも影響出るので妥協。
正直ハードウェアでの妥協はソフトで取り返せないので、多少はいいと思ってる。
作るのが遅い
10月あたりからずっと考えてて、CAD完成が1月、基板発注が旧正月明け、機体完成してちゃんとプログラム書いて動かし始めたのが大会1・2週間前。
改善したいが、、、
雑談?
初めてブログを書きました。もっと書くことあった気がするんですが、いざ書こうとすると全然かけないし、やってることしょぼいしでつらみ
今年のコースはすこし滑りやすかったみたいで、速度を上げ周回数でポイントを稼ごうとしてる人にはかなり辛そうでした。実際、直進速度では僕よりも速い人が何人もいたんですが、スタンダードクラス上位3名は全員ショートカットをしていました。速度上げるなら吸引機構があったほうがよさそうですね。あとは的の揺れ対策も
結果は4位だったので、さっさと帰る準備をして、とりあえず表彰式ぐらいは見ておこうと顔を出したら、ちょうど奨励賞として自分の名前を呼ばれて、かなりテンパりました。こういう時しっかり話せたらかっこいいなと思いマイクを持ったんですが、想像以上に低レベルな感想になって死にたくなった。
来年出場するならスタンダードクラスかマイスタークラス、どっちに出るべきなのでしょうか?
正直4位って微妙で、マイスタークラスに出るほどの実力は持ってないし、かといってせっかくの権利を放棄するのももったいないなーって、、、
大学にマイスタークラス用のコースがないので練習・調整ができないっていう大きな問題もあり、、、
とりあえずマイスタークラスに出るつもりで設計して、厳しそうならスタンダードクラスに出場する形にしようと思います。