Root41 2020-2021機
Note 2022/04/04:
これは前ブログからの移行記事です。一部表現や文体の調整を行った箇所がありますがご了承ください。
どうもこんにちは。しろくま@胡瓜です。
とりあえずRoot41は現在ロボカップのシーズンが終わり落ち着いた状態にあります。しかし、時間のロスはできるだけ避けたいので新学期が始まる前にハードウェア担当の僕は猛スピードで設計をやれるところまで進めておかないといけません。MacBookを触らない日はありません。Eagle、VS Code、Fusion360と睨めっこする日々が続いています。
概要
ここから本題に入ります。
こちらが本日の主役のRoot41 2020-2021機です。
Root41 2020#Root41_RCJJ #RCJJ2020_wakayama pic.twitter.com/VzbC7k0Jdx
— しろくま🥒胡瓜 Root41 (@robokichi41) April 25, 2020
本来あるはずだった2020年の和歌山の全国大会に向けて開発しました。ブロック大会が終わってからの光速並みの開発だったので、色々と煮詰め切れてないところが若干あります。
Root41のロボットは二台とも完全に統一されています。完全に統一することで、Gitなどを利用し「二人で一つのプログラムを作る」ということができるためです。部活動などでやっているチームは回路班やプログラム班、機械班などと分けることができますが、僕たちは2人だけのチームなので究極まで効率化する必要がありました。また、2台ともハードウェアが同じということは試合の途中だとしても作戦変更が容易にできます。片方を守りにしたり、両方攻めさせたりなど戦況に応じて様々な作戦を実行できるというメリットがあります。
そして、これは初めての4輪駆動や初めての実用的なキッカーの搭載、初めてのLi-Poバッテリーなど挑戦でいっぱいのロボットです。当時の僕のロマンが詰まっています。
構成
主なスペックはこちらです。
役割 | 部品名 | 個数 |
---|---|---|
CPU | ATmega2560 | 1 |
ラインセンサ | NJL7502L | 20(円形) |
ボールセンサ | IRM-3638N3 | 16(円形) |
ボール検知 | NJL7502L | 1 |
ジャイロセンサ | MPU-6050 | 1 |
モーター | Pololu 25D 20.4:1 HP 6V | 4 |
モータードライバ | VNH2SP30 | 4 |
ソレノイド | CB1037 10Ω | 1 |
昇圧回路 | XL6009 | 1 |
バッテリー | Fullymax Li-Po 2S 1300mAh | 1 |
書き込み端子 | USB Mini-B | 1 |
操作 | タクトスイッチ | 3 |
表示 | WS2813B | 16 |
一般的なものしか本当に載っておらず、必殺技的なものもないです。よく言えば安定した構成のロボット、悪く言えば普遍的なロボットという感じです。
また、そんなに高額なものも使っていないと思います。
CPU
これがCPUユニットです。フラットケーブル一束のみで下部と接続されているので、コネクタとネジを外すだけで簡単に分離できます。このユニットの中に、
- ボールセンサ
- CPU
- NeoPixel互換LED
など中枢的な機能が詰め込まれています。裏返すとこんな感じです。
CPUは裏に搭載されています。大事なところなので内側に隠しておきたかったのと、丸見えだと見た目的に美しくないのでこの位置に配置されてます。
そうするとUSBポートに直接ケーブルを挿すことができなくなってしまうので、100均でUSBケーブルを買ってきて分解し、コネクタ部分だけを取り出して外側から挿せる位置に延長しています。これはUSBの規格的にあんまり良い方法ではないらしいですが問題なく動いているので、こんな感じになっています。
このマイコンボードを取り外すとジャイロセンサが取り付けられています。ジャイロセンサの地磁気の影響を受けない性質のおかげで、I2C通信がもっとも安定するマイコンに一番近い位置に配置することができました。
この隣には本来1Fの大容量のコンデンサが載っていたのですが、コネクタの信用性が高くあんまり効果がなかった割に重量を結構食っていたのでやめました。
eneloopとかの電池だと突発的に電池が電池ボックスの端子から離れたりすることもあると思うのであったほうがいいと思います。
はんだづけが汚いのはごめんなさい。このユニット自体が実は前々年度からの使い回しなので(=コスパ重視)そのころはフラックスクリーナーとか色々持っていなかったからです。
スイッチとUSBポートです。
さっきの100均USBケーブルの残骸がここにつながっています。また、スイッチは左から
- Commandキー
- Aキー
- Bキー
というふうにプログラムで割り当てられてます。Aキーを押すとオフェンス、Bキーを押すとディフェンスになります。プログラムを書き換える必要がないので、試合中に作戦変更が容易にできます。
プログラム動作中にCommandキーを押すとロボットが停止します。Commandキーは修飾キーとしても使えるので、Command+AとかCommand+Bとかの組み合わせで色々な調整モードに入れたりします。
キャリブレーションやキッカーテストもこのボタンの操作だけで全て行えます。
ボールセンサ
共立電子で買ったIRM3638-N3を円形に16個配置しています。高いので、4年ぐらい前からずっと基板につけたり外したりで再利用しています。すごくエコです。
回路はRCフィルターを通してアナログで読み込んでいます。トランジスタでセンサの電源を高速でON/OFFして常にAGCをリセットした状態で受光できるようにしています。
NeoPixel
白いカバーの下にはNeoPixel(WS2813B)が隠れています。NeoPixelは、たったい1ピンで明るさや色、彩度を全てのLEDに対して個別で指定できるという優れものです。
試合中は角度などの情報を常にLEDで表示しておくことで、試合動画を見返したときにロボットがどのような処理をしていたのかがすぐにわかりデバッグに大きく貢献しています。もはやこれなしでのプログラミングは考えられないほどリアルタイムで多くの情報を得られるのでおすすめです。
下部
CPUユニットを取り外すと残りはこんな感じになってます。
これを裏返すと、
こうなってます。2枚の写真で示した12箇所のねじ(上の写真4箇所、下の写真8箇所)を外すと、簡単に分離することができます。しかし、12本もネジを外さなければならないのと、また外すねじの頭の種類が2種類混在していてドライバーのビットを途中で付け替える必要があったことは反省点です。
そして、こうなります。
シンプルな構造ですね。
ソレノイド
ソレノイドは、ロボカップのロボットでは比較的珍しい上側の板に固定されています。これは円形ラインセンサを搭載するにあたってソレノイドを数ミリ浮かせる必要があったためです。
スペーサなどを使って下側の板に固定してもよかったのですが、こちらの方が部品数を減らせるためこのような構造となりました。分離する際にソレノイドの導線が邪魔をするのを防ぐためにピンヘッダで簡単に分離できるようにしています。
また樹脂スペーサを板につけて、ソレノイドに取り付けられた板が回転しないようにしました。
カバー・保護パーツ
側面に取り付けられたカバーです。ヒューズとかが入った一番大事な回路や昇圧回路、モータードライバ等に異物が入るのを防ぎます。近くのホームセンターで1mmの硬質塩ビ板を買ってきてカッターと電動ドリルで加工し、100均の結束バンドで固定しています。
ここに書いてある「1」という数字は1号機の1です。2号機はもちろん「2」になってます。よく「どうやって描いたんですか?」と聞かれますが、ただのビニールテープです。
ホイールの外側に取り付けられた保護パーツです。巻き込みの他、ロボット同士でぶつかった時などにモーターに他ロボットの部品が引っかかり、ストールするのも防いでくれます。出力の強いモーターやバッテリーを使うのであれば、安全のためにもこれらの対策はした方がいいと思います。
3Dプリンタで造形したので強度はあまりないですが、予備部品を大量に用意してすぐに交換できるようにすることで運用しています。
モーター・ホイール
モーターはPololuさんの25D 20.4:1 HPを使っています。スピード・パワー共に優秀ですが20%位より下の出力での制御がし辛いのと、立ち上がりに時間がかかるので「おすすめ!」って感じのモーターではないです。モーターマウントは、同社から販売されているものを金鋸で頑張って短く切断したものを使っています。
また、ラインセンサと干渉しないようにするために、2.5mm厚のMDF板でモーターを浮かせる構造になっています。モーターは裏から4本のねじどめで固定しています。
ホイールは今1号機には耐久試験中ということでアクリル製のものが載っていますが、その前は3Dプリンタ製のPLAのやつが載っていました。3Dプリンタ造形の部品は細かい部分の強度が著しく劣るので複雑かつ強度が必要とされる部品には向かないことがわかりました。
昇圧回路
Amazonをはじめとする色々なサイトで売られているXL6009のモジュールを搭載したものです。このモジュールは本来30Vまでの昇圧なのですが、素子自体のデータシートを読むともっと電圧を上げることができるらしいです。
素子が出力する電圧は電圧調整ピンにかかる電圧の大きさで変わるので、可変抵抗の隣にあるチップ抵抗にチップ抵抗をお寿司みたいに乗っけて並列に半田付けし、電圧調整ピンにかかる電圧を変えて46Vまで昇圧できるようにしました。
46Vという絶妙な値なのは、耐圧が50Vより大きいコンデンサはガタイが良すぎるからです。定格ギリギリで本当は良くないですが…。
僕は過去に昇圧回路の実験でArduino本家を2機+互換機1機を壊したのがトラウマだったので、安全対策はかなり入念にしています。
まず、昇圧回路のモジュール自体に異常な電圧が発生したとしても、ダイオードによって遮断され外に異常電圧が漏れ出ないようにしています。また、マイコンからの信号線もフォトカプラで電気的に絶縁しマイコンが逝くのを防いでいます。
さらに、キッカーを放つときはFETでコンデンサとソレノイドだけを残して回路を遮断するので、プログラムのミスでずっとHIGHのままになっていたとしてもコンデンサの放電が終わると自動的にキッカーが引っ込み、昇圧回路自体に大電流が流れ込んで焼けるのを防いでいます。ちょっと過保護だったかもしれません。
昇圧回路の実装に当たっては、kossanさんにDMで色々教えていただきましtた。本当にありがとうございました。
保護回路
保護回路はロボットを安全に動かすためにとても重要なものです。このロボットは僕達がLi-Poバッテリーで動かす初めてのロボットだったので、一番シンプルなヒューズ+目視での電圧確認という方法を取りました。
この回路が逝くと、コート上でリアル花火ショーが始まってしまうので絶縁はしっかりやっています。基板自体を3Dプリンタ造形のケースで覆い(上の写真は撮影用に外しています)、外から異物が侵入しないようにしています。
このケースが結構重いんですが…でも燃えるよりマシなのでここは妥協すべきでないです。
裏側です。大電流が流せるようにパターンは広くとり、また上からはんだモリモリにしています。
バッテリーケース
こちらも3Dプリンタ造形です。衝撃を緩和するためにふわふわクッションを入れています。また、車検の時に3cm以上の突起があるロボットはそもそも出場できないようになるはずなので、3cmよりさらに奥の部分は肉抜きしています。このWARNING!というシールはかっこいいのでなんとなく印刷してつけました。
バッテリーの出し入れはこの10mmの六角スペーサを外すことで、ぱかっと扉みたいに開き、そこからバッテリーを入れてコネクタを接続する方式です。とっても簡単な構造になっています。
モータードライバ
昇圧回路と保護回路の下に配置されています。流用しているCPUユニットが設計された当時は3輪オムニのロボットだったので、モーターを
3ピン×モーター3個=9ピン
で制御していたのですが、4輪にするにあたって
2ピン×モーター4個=8ピン
で制御しないといけなくなりました。これではピンが足りないのでモータードライバのPWMピンを5Vに接続し常にHIGHに固定し、モーターの回転方向を調整するピンに直接PWMをかますことで駆動しています。これは本来の駆動方法から外れているのであまり良い方法ではないようです。
推奨されないモータードライバの使い方なのでPWM周波数を下げないとモータードライバが応答してくれなくなりました。あまり良い対策ではないですがマイコンのタイマーをいじってPWM周波数を下げて無理矢理動かしています。
こんな無理矢理駆動ですがそもそもモーター自体の応答性が良くないので目立った問題はありませんでした。Maxonみたいなコアレスモーターで同じことをやったら確実に燃えると思います。
素子はVNH2SP30というものを使っています。あたりの率がものすごく低いので、今思えば素直にSwitch Scienceさんとかで買った方が安かったです。悲しい…。
モータードライバ4個中3個はずれでした。。。(´;ω;`) pic.twitter.com/VVwiPl4IWN
— しろくま🥒胡瓜 Root41 (@robokichi41) April 8, 2020
ラインセンサ
こんな感じで、モーターとかモータードライバの下にある構造です。
交換しろって言われたら多分泣き出すと思います。それくらいメンテナンス製が悪いので反省点です。
こんな感じです。一個一個に可変抵抗を取り付けて調整できるようにすることで、マイコンのデジタルピンで読み込んでいます。デジタルにするとA/D変換の時間のロスがなくなるのと、ポート制御とポインタで一気に配列に格納できるというメリットがあります。
ライン対策でどんなプログラムを書いているかは、昨日誕生日だったハジメ君が良く知っています。僕はよくわかりませんがベクトルとか色々使ってやってるらしいです。
LEDの明るさはマイコンで調節できます。待機時は明るさを落として電力を節約したり(といっても微々たるものですが)できます。
ボール検知
正確なタイミングでキックするために、ラインセンサと同じ回路を利用してボールを検知できるセンサを作りました。片方から光が出て、もう片方に受光素子があります。ボールが入って光が遮られるとキックするようにプログラムされています。ここのX字の肉抜きは個人的に気に入っているデザインです。
バッテリー
Fullymaxさんの2S 1300mAhのものをつかっています。バッテリーを安全に管理するために、一つ一つにQRコードを貼り付けてすぐに情報が見られるサイトを作って管理してます。
フレーム
ロボットのフレームは「パターンがない基板」として発注しました。つまり素材はGFRPです。強度はすこぶるいいです。JLC PCBさんに発注したのでロボット二台分+予備でも5000円ほどで作ることができたのでコスパも良くておすすめです。
最後に
こちらがこのロボットを組み立てる前の部品の写真です。
(モータードライバーが一個足りませんが)只今より二号機製作開始します!٩( 'ω' )و pic.twitter.com/MMVmkVUKUB
— しろくま🥒胡瓜 Root41 (@robokichi41) April 9, 2020
結構シンプルに組み上がったと思います。ちょっと煮詰めきれずにメンテナンス性の悪さが浮き出てしまったのが反省点ですね。
最後に3Dデータを載せておきます。
こんなよわよわのロボットでもよければ質問にできる限り答えさせていただきますので、もし何かあればTwitterのDMまたは、記事が埋め込まれたツイートにリプしてください。
それではまた。
Comments