ロボカップジュニア2015の世界大会へ出場したロボットのプレゼンテーションです。

全ての画像は、クリックしてフルサイズで見ることが出来ます。
(これのためだけにブログを移行しました)

チームBlogの方にも情報が載ってます。
ロボット紹介 - Gcraud
世界大会へ出場した2台のロボット、通称「関東の赤いルンバ」。
製作期間は、日本大会(2015年5月)が終了してから7月の世界大会までの2ヶ月間です。
間にテストもあったため、スケジュールはとてもハードでしたが、当時の開発メンバー(自分と相方のKp)と一緒に頑張って、2ヶ月間という限られた時間でロボットを完成させました。

ロボット1台をクローズアップして紹介します。2台のロボットはハードウェアは完全に統一されており、同じプログラムを搭載すれば同じ動きをするように調整してあります。

マシンの特徴的としては、赤い天板と黒のカーボン製フレームとのコントラスト、上面のリング状のフルカラーLED、レーシングカーをイメージしたハンドル(赤天板の後ろ側に配置)、周辺磁場の影響を回避するために高い位置に設置されたコンパスセンサーなどです。
他にも、あまりメカニカルな外観を有していないため注目されないですが、ボール補足エリアにキッカー(ボールを蹴る装置)を搭載しています。

コンパスセンサーモジュールです。
センサには"HMC5883L"が搭載されたボード"GY-271"を使用しています。モジュール内部には、2軸コンパスセンサから逆三角関数を使用して方位(角度)を計算する処理や、ロボットの向いている方向をEEPROMに記録したり、周囲の磁場環境に合わせて角度情報を最適化するためのキャリブレーション計算を行うためのArduinoマイコンが搭載されています。
計算された角度情報は、115200bpsのUARTシリアルにて、メインマイコンへ送信しています。この際に送信周期を一定(75Hz)にすることで、メインマイコン側で「前回の値とのエラー値」を角度の微分値として扱えるよう工夫しました。これによって、ロボットに正面を向かせるために使用しているPID制御を、より簡単に実装できるようになりました。
センサーボード”GY-271”は単体で取り外すことが可能です。
これによって、万が一強力な磁場の影響でチップにトラブルが起きても、ボード交換だけで瞬時に対応できます。調整中にMacBook(ディスプレイ上部に磁石が入っている)に近づけてしまってHMC5883Lが正しい値を返さなくなった事がありましたが、モジュールを交換してすぐに調整に復帰する事ができました。

Neo Pixel RingをArduinoで制御しているところです。
公式のライブラリがとても優秀で、きちんとクラスで定義された関数で制御することが出来ます。今のところ目立ったバグも無く、それ以前に、海外で大きく普及しているので情報が豊富です。
電源とGNDとシリアルの3芯接続で制御する事ができます。

上下の分離は、六角穴付きボルトを6本外せば簡単に分離する事ができます。 配線は20pinのフラットケーブル1本だけです。日本大会のマシンに比べ、大幅にメンテナンス性が向上しました。

天板の裏にメイン基板を配置し、ボールを視認するための赤外線センサは基板の裏面に直接固定しました。 分離する際のフレーム配置を工夫する事で、1つ上の写真のように、机に直接置いてもパターン面が傷つかないようになっています。
赤外線センサの一部にジャンパが飛んでいるのは、相方に分解した状態で(梱包なしで)リュックの中に放り込まれた時に一部パターンが剥がれた時の傷跡です(一生恨むw)

赤外線センサはM2のアルミスペーサ2本と20pinの表面実装ピンソケット2本で、基板に直接固定されています。 前後2本のスペーサーのねじを外すことで取り外しが可能です。 センサ遮蔽の内側に、ボトムユニットと接続されるフラットケーブルのコネクタが取り付けられています。
赤外線センサーをはめ込むとこんな感じになります。 フラットケーブルの交換自体は、この状態でも行えます。 マシンの重心を下げるために極限まで上ユニットを薄くするために工夫した結果、こうなりました。 メンテナンス性も悪く無いですし、なかなか上手くいった設計の1つではないかと思います。
ボールを検知するための赤外線センサーの遮蔽部分です。 ライトウェイトリーグは重量制限が厳しいため、Φ2x10のエンドミルとCNCを活用して、POMから削り出しで作りました。 エンドミル:”RSE230 2x10”MonotaRoのURL 材料:両面フライス済POM板 オリジナルマインドさんのURL
オリジナルマインドさんの両面フライスされたPOMは厚さ精度が保証されていてとても使いやすいです。 今回ばかりは自分でフライスする時間も無かったため、今回はふんだんに使っています(笑)
メイン基板です。

搭載パーツ一覧 CPU
  • STM32F401(Nucleo Board) x 1
  • ATmega32U4(A-Star 32U4 Mini) x 1
UI
ロボットにはフィールドの壁を検知して自分の位置を判断するための超音波距離測定センサが搭載されています。 このマシンに使っているのはAmazonで激安購入できるHC-SR04です。 当たりハズレが大きいですが、ちゃんと使えるものはちゃんと使えます。 PalalaxのPingと違ってTrigピンとEchoピンが別になっていますが、2kΩほどの抵抗を挟んでTrigピンを使えば3ピンで使うことができ、このマシンでも実際そのようにして使っています。

メイン基板は、壁面に超音波センサを埋め込んでボックス化しました。 超音波センサを垂直に立てるパーツと、スペーサーとしての機能を両立させた工夫です。 非常にコンパクトにまとめられていると思います。

ロボットには全部で3つのマイコンが搭載してあります。 メインマイコンにはSTmicro社のSTM32F401CRを搭載したマイコンボード"Nucleo"を使用しています。 秋月電子通商さん(URL) 非常に安価に入手する事ができ、接続してすぐ使える「お手軽さ」も兼ね備えたマイコンです。
小型化・軽量化するため、ST-Link部分とマイコン部分を切り離しています。
ロボットにプログラムを書き込む際には、正面の通信ポートにコネクタを接続すれば”相方の開発したXcodeライブラリ”を使って快適にプログラミングが行えます。 通信コネクタの逆接続は出来ないように工夫してあります(逆に繋ぐと基板エッジにコネクタが引っかかる)。
サブマイコンには2つのATmega32U4を搭載しています。 1つは紹介した”コンパスモジュール”用のマイコン、もうひとつはラインセンサ監視とユーザーインターフェイスを管理しており、照光式トグルスイッチやロータリエンコーダの読み取りやブザー音の出力や16連シリアルLEDの制御は全てこのマイコンで行っています。
STM32以外のマイコンはArduinoとして機能していますが、内部のdigitalRead()関数などは全て相方のKpによって改造されたものが使われています。 改造後のArduinoは、デジタルピン等をmbedと同様にクラスで扱うことが出来ます。 コード上のマジックナンバーを減らすことが出来る以外にも、処理時間そのものを大幅に短縮し、パフォーマンスを向上させました。
5V電源には村田製作所のDCDCコンバータ(秋月電子リンク)を使っています。 元々は表面実装用に設計されたモジュールですので、このような無理矢理な付け方はあまり推奨されませんが、いまのところ問題なく動いています(残る心配はハンダ割れ)。 固定は裏返しにしてピンで空中配線で固定しています。パターンにはリップル除去用のチップコンデンサが入力/出力に載ってます。

コイル系の電源モジュールは、物理的に圧力を加える事で電圧がブレる事があるので注意です。 逆さ付けにする際には、基板との間に隙間を作っておきました。

電圧は青い半固定抵抗で決定しています。
最初に調整してから1/100[V]単位でのズレはほとんど無く、安定して動いています。
続いてボトムユニット側の紹介です。
移動の効率を上げるためには可能な限りロボット重心を低くする必要がありました。 以前まで地上から少し高い位置に配置していたバッテリーも、今回はマシンの一番低い位置に配置することにしました。

電源スイッチの基板です。 裏にヒューズがはんだ付けされているため、万が一切れた際の交換はこの基板ごと行います(スイッチも一緒に破棄w)

スイッチはパフォーマンスの面からすれば重いし効率下げるだけのパーツですが、そもそもの安全対策として無くてはならない機能です。 万が一内部で回路が短絡した場合でも、すぐにスイッチを切ることができるか、保護回路でバッテリーの過放電を防止する必要があります(Li-Po使うなら必須!)
左半分はほとんどキッカー用の昇圧回路とスイッチング回路です。
金色のコンデンサは昇圧電源のチャージ用、中に昇圧された60[V]の電源がチャージされます。 コンデンサは63V1000μFのオーディオ用アルミ電解コンデンサを2個並列です(電圧ギリギリなのはお勧めしない…)

昇圧部分は2段に分けています。 昇圧回路のデータシートに「入出力比が3を超えてはならない」とあったので、先輩が実装しているのを真似してこのような形にしました。
1段目で12[V]→20[V]まで昇圧し、2段目で60[V]まで昇圧しています。
ボールを蹴るための装置”キッカー”です。
ソレノイドはタカハ機構さんの"CB1037"の端子間抵抗10Ωのタイプ無改造です。
ほとんどのマシンが固定面を上下に向けて使っているのに対し、板金曲げパーツを駆使してリニアガイドと抜け止めストッパー機能を追加しながら、シンプルに実装しました。
ソレノイド除く周辺パーツで、計30[g]に抑えることができています。
モーター(maxon RE16 + GP16A)はA7075削り出しの固定ブロックにねじ止めです。 厚5mmの側面にM3のタップで固定穴を作っています。 とても頑丈で、壊れる気配は全くありません。
maxon GP16A(ギアヘッド)には、M2の固定穴が2本しかありません。 これだけでは強度に不安があったため、ギアヘッドの先端3mmほどを固定ブロック(ポケット加工)に埋め込み、ラジアル方向の負荷をフレームで受け止める構造にしました。 これにより、ねじにかかる負荷はスラスト方向に限定されたため、今まで多かったギアヘッド固定ネジのトラブルは発生しなくなりました。
オリジナルのオムニホイールです。
外径は58[mm]と大きめの部類に入ると思います。 サイドホイールの数は20輪です。 グリップにはシリコンのOリングを使ってみましたが、コストが高いしあまり長持ちしないしOリングすぐ外れるし、あまり上手くいった設計ではありません。

グリップはスパイクの半分以下です。 外れないように溝を深くしていくと、どんどんグリップが弱くなっていきます。 ブレーキが効かなくてアウトオブバウンズするため、世界大会では最高速度の50%も出せませんでした。 北九州オープンの時の床はきちんとしたカーペットだったので、一番良くグリップしたのを覚えています。
今回(いつも?)お世話になっているツール。
CNCでCFRPを加工する方法については、僕の書いた以前の記事で詳しく紹介しています。

使っているツールは、オリジナルマインドさんのKitMill SR420です。 上で紹介した全てのパーツを、このCNCと卓上ボール盤のみで仕上げています。 コンピュータ制御のフライス盤を家に置ける時代になったのですね。 オリジナルマインドさんのCNCを無くして、このマシンは生まれませんでした。

今回製作したロボットには、2足歩行ロボット時代からお世話になっている浅井製作所さんの”低頭ネジ”を使っています。 低頭ねじを使うと、メカ設計の際に頭の高さをあまり気にする必要がなくなる上に、母材の金属の体積そのものが減るので重量削減にも大きく貢献します。 何よりも、精度の高いねじはロボットにとって重要です。 ねじなめんなよ!

浅井製作所
個人でも数百本単位から買えます。

関東圏の人はぜひ一度、工場見学に行ってみてください!(埼玉県草加市にあるよ〜)

世界大会での試合の様子

YunitのYouTubeチャンネルから試合の模様を見ることが出来ます。

その他の写真

紹介しきれなかった写真を載せておきます。