大鯰 機体解説

この記事は先週名古屋市で行われた全国大会で優勝した、私たちのチーム「たのロボ!」の機体のプレゼンテーションです。
概要・コンセプト
機体名: 大鯰(おおなまず)
この機体は安定してスコアを出すことを最優先に設計されました。レスキューでいう安定してスコアを出すとは、
- 全試合ちゃんと動く
- 壊れない
- 不安定な挙動をしない
です。壊れないとか、安定して動くとかまたかよって感じでしょうが、全国大会では走行が3回しかなく、うち1回でもミスをすると世界大会へ行けなくなることを考えれば妥当なコンセプトだと思います。今年でレスキュー競技2年目ですが、サッカーをやっていた頃と比べると、安定して動かすノウハウはかなり身についたと実感しています。
実際にこの機体は大会・練習を含めてハードウェア故障を起こさなかった非常に信頼性の高い機体でした。全国大会で競技進行停止(≈リスタート)0回だったのがその裏付けでしょう。
もう一つ意識したのは前機体との互換性です。レスキュー競技はほぼソフトウェア勝負みたいなところがあり、どれだけ正確性や安定性が高いかを問われます。上位圏に入るロボットは最低でも「条件が揃えば満点を狙えるロボット」を用意してきています。その中で確実に1位をとりにいくためには、「全試合で満点を狙えるロボット」にする必要があります。枠が少なく、2位だと世界大会には行けないので。
そのために、前機体の「いぬわし」と回路等の構成をできるだけ同じにし、大鯰の完成を待たずともソフトウェアの調整を始められるようにしました。実際、基礎となるプログラムは1月末の時点で完了しており、2, 3月はほとんどの時間をバグ取りに費やしました。いぬわしから大鯰へのプログラムの移行は、ハードウェア依存関数をちょいちょいって書き換えるだけで終わりました。
余談ですが、大鯰という名前の理由は特にないです。バンパーが髭みたいに見えるからですかね?別に意味を込めたところでロボットが動くようになるわけでもないので割と適当に決めました。たのロボ!の慣習でロボットの名前には生き物の名前をつけています。(前機体がいぬわしだったように。)
上下分離
メンテナンス性を高めるために、底部のねじを4本外すと上下に分離できる構造になっています。上下の配線は、真ん中にある8端子のフラットケーブル1本で完結させました。
細かなことですが、上下を締結するスペーサの上側(メンテナンスの時に取り外さない方)はネジロックで固定して外れないようになっています。スペーサでよくある、ねじを外そうと思ったら反対側が外れていたという、地味なイライラを防ぐためです。
上段
まずは上段から解説していきます。
上段には
- メイン基板
- LiDAR・距離センサ基板
- 被災者認識用カメラ
が搭載されています。
LiDAR・距離センサ基板は、上のアルミ部の四隅のねじを外せば分離できるようになっています。
LiDAR・距離センサ基板
役割 | 部品名 | 個数 |
---|---|---|
LiDAR用マイコン | STM32F446RE | 1 |
LiDAR | LD06 | 1 |
距離センサ用マイコン | RP2040 (XIAO) | 1 |
距離センサ | VL53L0X | 9 |
フルカラーLED | WS2812B | 19 |
OLED | SSD1306 | 1 |
大鯰の自己位置推定系のセンシングはほぼ全てこの基板で行っています。LiDARとToF両方載せている理由は
LiDAR: 非常に情報量が多いが、距離情報はあまり正確ではない。
ToF: 点でしか距離を計測できないが、距離情報は非常に正確。
というそれぞれの長所と短所がうまく合致したためです。LiDARの搭載はかなり実験的でしたが、情報量の暴力で自己位置推定以外の用途にも用いることができたので非常に便利でした。LiDARはあくまで移動の尤度推定に用いているだけで、SLAMみたいなかっこいいことはしていません。(自己位置推定については後日別の記事を出す予定です。)
LEDのカバーと、距離センサのカバーはうまく噛み合うようになっています。LEDのカバーなんて装飾でしかないので、わざわざねじ止めしなくていいようにしました。LEDのカバーはPOMの切削です。距離センサのカバーはJLC3DPで光造形していただきました。
カバーを外した基板の姿です。LiDARが結構大きかったので、かなりギリギリな配置になってしまいました。
メインマイコンとの接続は、左下にちらっと写っている5端子のコネクタのみです。メインマイコンとの通信は1MbpsのUART(チェックデジット有)で行っています。RP2040でToFセンサを読み込み、それをLiDAR用のF446にUARTで転送、集約して演算した結果をLiDAR用のF446からメインマイコンへUARTで転送というデータの流れをしています。
LiDAR・距離センサ基板に限らず、このロボットの全ての自作基板はJLCPCBに発注しています。(チームのスポンサーになっていただいています。)
カメラ
被災者の発見に欠かせないカメラ部です。昨年の反省を踏まえて、若干上からのぞきこむ配置にし、壁の向こうの景色が映らないようにしました。また、ロボット自身が影となってしまうことがあったため、LEDをつけて影ができないようにしました。
カメラをメインフレームから外したところです。メインフレームとの固定はA5052製の板金部品で作っています。どうやって曲げたかをよく聞かれるのですが、万力に挟んで手と机でおりゃってしてるだけです。
レンズ部を分離してみました。デフォルトだと視野が狭く、見逃しを防ぐためにゆっくりと走行しなければいけなかったので、100均に売っているスマホ用の広角レンズを取り付けています。
カメラはM5Stack社のUnitV AI Cameraを使用しています。デフォルトのファームウェアだと、かなり動作が重くK210マイコンのスペックを活かしきれていなかったため、必要な機能だけを抽出してビルドした軽量ファームウェアが焼き込まれています。
広角レンズ+軽量ファームウェアの組み合わせにより、最高速で走らせても被災者を見逃さなくなりました。カメラ処理の詳細についてはこちらのリポジトリをご覧ください。(全国大会のフィールドはそんなに広くないので、念の為90%の速度で走行していました。)
メイン基板
役割 | 部品名 | 個数 |
---|---|---|
メインマイコン | STM32F446RE | 1 |
UART-R485変換 | MAX485 | 1 |
無線デバッガ | M5Stamp C3 | 1 |
ジャイロセンサ | BNO085 | 1 |
フルカラーLED | WS2812C | 14 |
メイン基板です。このロボットの全てのセンサやアクチュエータはここに接続されています。開発はVSCode+PlatformIOの組み合わせでArduino Frameworkで行なっています。Arduino Frameworkの標準入出力をインスタンスで管理できない問題は、自前でIO-Kitというライブラリを作って解決しました。
メインマイコンはUARTのポートが6つあり、処理が高速なのが理由でSTM32F446REを採用しました。内部のシステムにRTOSを用いる都合上、ある程度の計算能力が必要だったためです。書き込みはST-Linkを用意するのが面倒だったのでUART書き込みを採用しています。
ジャイロセンサは大会一週間ほど前に、さらなる精度の向上を狙ってBNO055からBNO085に急遽換装しました。ちょっと不恰好ですが、無理な配線をしているわけではないので問題なく動作しました。
バッテリーの蓋
いぬわしのバッテリーの蓋が開けづらいと他のメンバーから大変不評だった(号泣)ので、マグネットでパチっとするだけの仕様に変更しました。後ろの指を引っ掛けて持ち上げるだけで外れます。簡単に着脱できる反面、動く爆弾祭りのサッカーでこれが許可されるかは怪しいです。
前側を引っ掛けて、後ろでパチっとするだけの仕様です。これで開けづらいって言われたらどうしようって思ってたので、怒られなくて良かったです。
蓋はA2017の切削部品と、アクリルのレーザー加工部品の組み合わせです。ネオジム磁石は単純に圧入しているだけです。レーザー加工機を持っていなかったのでクラスメイトのごっちゃんに加工してもらいました。ありがとうございます。
ハンドル
まぁ…切削しただけです。LiDARを遮らないように低くなったくらいで、特筆する点はないかと思います。
フレーム
POMをCNCで削り出して作ったフレームです。重心を下げるために可能な限り肉抜きをしています。眼もここにつけられています。
前後にはA2012の部品をつけて横方向にたわまないようにしました。この樹脂+アルミの組み合わせは自分らしい設計の一つかなと思います。
これで上段の分解は完了です。かなりシンプルに仕上げることができたと思います。メンテナンス製も非常に良いです。
下段
アクチュエータ系統はここに集約されています。絶対に壊れないがポリシーなので、かなり頑丈に作られています。
駆動輪
ねじ2本で着脱できる構造になっています。サーボモーターのツメをフレームに埋め込める構造にすることで、強度を保ちつつ部品点数を削減することができました。
日本大会ではそんなにルールギリギリを攻めたバンプは来ないので、サスペンションとかは搭載していません。来るとしても20mm丸バンプ程度だろうなと思って設計した(←予想的中!)ので、世界大会だとちょっと厳しいかもれません。
サーボモーターにはトルクがあり、かつ制御しやすい連続回転サーボのSTS3032を使用しています。メインマイコンとはRS485のパチモンみたいなやつ(差動2本のうちの+側の相だけを使っている、正式名称がわからない。)で通信しています。
モーター部と車輪を分離しました。モーター部のギヤはJLC3DPで金属造形したものを使っています。車輪側のギヤは真鍮を切削して作ったものを使用しています。この真鍮のギヤはいぬわしから流用したものです。1年間走らせまくったので摩耗もしていますし、そろそろ交換時ですね。
モーター部です。軸はクランプするような構造で摩擦固定しています。それを、さらに黒い樹脂部でガチッと押さえつけるように固定しています。イモネジ等と違って緩む心配がないので、この辺は基本的にメンテナンスフリーです。
厚み5mmのアルミ部品の側面にM3タップを作り固定する方式は、製造が簡単なわりに非常に強度を出せるのでお勧めです。
車輪は相方のsetuka設計のものを使っています。直径は75mmで中央のTPUがクッション、外周のシリコーンがグリップとなる仕様です。どんなバンプにも食いついてしっかりとトルクを伝達できるとても優秀な車輪です。これについての詳細は、たのロボ!のブログの方で本人が解説をしてくれる予定です。
バンパー
ロードセル(キッチンスケールとかに使われるやつ)を左右に搭載したバンパーです。モーメントの釣り合いを計算してあげることで、左右のどこに障害物がふれたかを検知することができます。
マイクロスイッチ等と異なりロードセル方式は可動部がないので、走行中にフィールド外周の任意のものに引っかかる心配がありません。回路も利得が50dB程度の差動増幅回路を組んであげるだけなので、とても扱いやすいと思います。
レスキューメイズを距離センサだけでやろうとすると、位置情報がずれた時や障害物があったときにLoPする確率が高くなるので、ロードセルに限らずに障害を検知できるセンサは積極的につけるべきだと思います。
レスキューキット排出機構
11mm角の真鍮製レスキューキットを排出する機構です。前機体は車輪の内側に排出する方式だったので、走行時に自分で踏みつけて弾いてしまうことがありました。大鯰では車輪の外側に投げるように投下することで、排出ミスが起きないようにしました。全国大会でもハードウェア起因の排出ミスは1度もありませんでした。
レスキューキットは試合前に後ろから装填します。レスキューキットの保持は100均のマジックテープを用いています。もっとスマートな方法があったような気がしてなりませんが…ギミック性よりも安定性をとった結果このようになりました。
排出はサーボモーターではまぐり状の部品を引いたり押したりするだけの単純な機構です。レスキューキット1つ当たり0.5秒足らずで投下できます。サーボモーターにはMG92を使用しています。サブマイコンからPWMを生成して駆動しています。
この構造のデメリットは、左右に6つずつしか格納できないため、片方が先に枯渇する可能性があることです。とはいえ、片方の在庫がなくなったら、半回転して投下するだけのことなのであまり問題ではないように感じます。左右にそれぞれ何個投下したかは単純に変数をデクリメントすることで管理しています。
バッテリー収納
3Dプリンタで箱を印刷しました!!おわり!!
下段基板
役割 | 部品名 | 個数 |
---|---|---|
サブマイコン | STM32F446RE | 1 |
距離センサ | VL53L0X | 2 |
床面センサ | TCS34725 | 2 |
電圧計やヒューズ、電源スイッチ等もこの基板に集約されています。
わざわざサブマイコンを載せているのは、距離センサと床面センサがI2Cで通信する方式だからです。I2Cを空中配線するとノイズ拾ったりフリーズしたりとろくな事がないので、一旦サブマイコンで読み取ってUARTでメインマイコンに送信しています。通信速度は安牌な115200bpsです。
床面センサの照度調節用の可変抵抗は底面から簡単に回せるようになっています。このセンサは黒・青・白の判別がとてもしやすかったので採用して良かったです。ただし銀の判別はかなり渋いので、次は別のセンサを追加で搭載しようかなと思います。
VL53L0XとTCS34725がタチの悪いことに同じI2Cアドレスですが、VL53L0XのI2Cアドレスを起動時に書き換えることで、同一バス内で通信をさせています。床面センサの積分時間もあるので、大体20msごとにメインマイコンへ情報を送信しています。
スタートスイッチにはNKKスイッチズのピッカリサインレバーを使用しています。既にNRNDですが、かっこよすぎてどうしても使いたかったので無理やり取り寄せました。一個800円くらいします。(高い)
フルカラーに光るロータリーエンコーダは飾りです。サッカーだとモード切り替えのためにこういうのをつけたりしていたのですが、よくよく考えたらレスキューは試合中にパラメータをいじったりできないので無駄でした。(←作ってから気づいた)400円もする高級LEDランプとして使っています。
フレーム
厚み3mmのジュラルミンを切削して製造しました。昨年の世界大会で金属製の木ねじを撒かれたのがトラウマで、肉抜きはほとんどしていません。140gほどありますが、重心をかなり下げられるのでレスキュー・メイズにはちょうどいい質量なのかなと思います。
ねじの頭は板に埋め込めるようにポケット加工してあります。これは階段やバンプなどの障害にねじが引っかからないようにするためです。
最後に大鯰の部品を全て並べてみました。かなりシンプルに仕上がったのではないでしょうか?光のあたり具合が均一じゃなくてごめんなさい。
この機体のプレゼンシートはこちらで見る事ができます。
優秀プレゼンテーション賞もいただきました!!! pic.twitter.com/QulkthiP8U
— たのロボ!🇯🇵✈️🇳🇱 (@TanoRoboRCJ) March 24, 2024
何か質問等あればTwitterかこの記事の下のコメント欄で受け付けます。些細なことでも大歓迎ですので是非お寄せください。
謝辞
この機体を作るにあたって支援してくださった
- 基板を製造してくださったスポンサーのJLCPCBさん
- UnitVカメラを提供してくださったM5Stackさん
- 夜遅くまで電子科棟に籠城させてくれた某K先生
- 応援してサポートしてくれたメンバーの親・親戚の皆さん
- 大会を運営してくださったスタッフのみなさん
に感謝申し上げます。
Comments