へっぽこエンジニアの雑記帳

組み込み屋です。今後を見越してWebやモバイルを勉強中。

相撲ロボット「KADAM6」のソースと設計図+αを公開します

高校~大学の7年間、全日本ロボット相撲大会に自立型で参戦していました。大学4年生で作成した、集大成とも言えるKADAM6のソースと設計図+αを公開します。

tomoya0x00/sumoupub · GitHub

個人戦績としては残念ながら全国大会には出場できませんでしたが、非公式の地方大会では優勝した事があります。KADAM6自体の最高記録は平成20年の中国大会で9位です。(8位だと全国大会出場だったんですが…)

KADAM6の対戦動画はこちら

なぜ公開するのか

学生の頃、「どうやってつくるのか?」「どのようにつくれば強くなるのか?」と言う情報が少なく、だいぶ苦労した記憶があります。自校は技術継承が途切れた上に弱小校だったので、全国勢と渡り合えるレベルに持って行くだけで精一杯でした。

これからチャレンジする方・すでにチャレンジされてる方の情報探索時間の削減と、自ロボット固有の工夫箇所を考える時間を確保できればと思い、自分が持っている情報を公開することに決めました。

内容説明

ライセンス

NYSLです。煮るなり焼くなり好きにして下さい。

公開するロボットのコンセプト

「高速攪乱型」です。観客が対戦を見て楽しめるロボットを目指しました。単なるブレード勝負はしません。

灯籠のような旗で相手ロボットセンサーの誤反応を狙い、相手の脇から攻撃して土俵外に押し出します。 前後の区別が無いタイプなので旗がロボットのどちらにあるか見分けが付かず、対策プログラムを組みにくくしています。

設計図

ここにロボット本体とホイールの設計図を置いています。

CADソフトはJw_cadを使用しました。

厳密に設計図は書き上げていません。作成する各部品(ギヤボックスなど)の寸法・穴開けの位置を求められればOKとしています。

特にモーターとギヤの軸穴・固定穴は気を遣っています。ここで精度を出さないと、せっかくのモーターのパワーが土俵に上手く伝わらないためです。

あと重要なのはブレード固定板の精度です。足回りとブレード周りの精度が出ていれば、他の金属加工部分は少々適当でも何とかなります。

また、磁石の取付高さは調整可とすることを強く勧めます。コンマ数ミリ単位の調整で、ロボットの速力はかなり変わります。特に高速型ロボットは磁力が強すぎると速度が犠牲になるため、磁石と土俵の隙間調整が重要です。

ロボット本体のソースコード

ここです。

スタートアップルーチンなどはGCC Developer Lite付属のモノを流用しました。

前後関係無しの両面タイプロボットだったので、片方をA面、もう片方をB面と呼んで区別しています。

プログラムの処理は大きく分けると下記の3つです。

  • 初期化処理
  • 立ち会い動作
  • 主動作
  • 床センサ割り込み動作
初期化処理

電源投入時に走る処理です。各ポートの初期設定などをおこないます。

自立型は「はっこよい、のこった!」のかけ声でロボットのスタートボタンを押し、その5秒後に動作するというルールです。(実際は4.8sec以降であればOKという審判ルールあり)

そのため、スタートボタン押下後に約5秒待ってから、その後の処理を実行するようにしています。

一点工夫していることがあり、瞬電対策をほどこしています。 *1

  • 通常は「スタートボタンを押しながら」電源のトグルスイッチをONにする
    • ロボットは再度スタートボタンが押されるのを待つ
  • 瞬電でマイコンリセット
    • ロボットはスタートボタンが押されていないので、すぐさま以降の処理を実行する
立ち会い動作

スタートボタン押下し約5秒後、この処理に飛びます。

相手ロボットへの回り込みなどを狙うため、対物センサーを無視してあらかじめ決めた出力・時間でモータを駆動します。

相手ロボットに応じて「どの立ち会い動作を選ぶか?ロボットはどこに配置するか?」を選択するのが、高速自立型ロボット対戦での醍醐味です。

主動作

立ち会い動作後、この処理に飛びます。

対物センサーの反応に合わせ、相手ロボットに向かっていくモードです。

工夫している点としては「リトライモード」の搭載があげられます。これは、「一定時間ごとに相手ロボットから逃げるモード」です。

なぜそんなモードが必要なのかというと、TMRなどの超低速ロボット対策です。

高速型ロボットは助走を付けてぶつからないと、超低速ロボットを土俵から引っぺがせません。そのため、一定時間経過しても対戦が終了しなければ、一度相手から逃げて再度攻撃を仕掛けます。

もし相手ロボットを倒せなくても、リトライしつつ攻撃する姿勢が評価され、高速型ロボトッとが判定勝ちとなるケースが多いです。

床センサ割り込み動作

その名の通り、床センサが反応した場合は割り込みで即座にモータストップ・反転させて土俵内に復帰します。

ハード的な工夫として対物センサを斜め前方に向けて取り付けることで、通常の床センサよりも早く白線を検知しています。

モータドライバのソース

ここです。

PICでFETのHブリッジを制御していました。

元々は論理回路の組み合わせで実現していたのですが、小型化のために面実装PICのみで制御することにしました。

回転方向変更時の、ショート防止待ち処理も設けています。

+α(ポート表、重量計算とパーツ発注先一覧、推力・速度計算)

ポート表

ここです。

ロボット制作時、このようにマイコンのどのポートに何を接続するか?をあらかじめ決めてから、回路制作に取りかかります。

重量計算とパーツ発注先一覧

ここです。

相撲ロボットのは3kgの重量制限があります。あらかじめ使用する部品を羅列しておき、どれくらいの重量をギヤボックスや外装に使用できるか確認しておきます。

全て組み立て後に計量してからの軽量化は、組み立て直しの手間や意図せぬ強度不足を招くため、お勧めしません。

あらかじめオーバーしそうなことが解れば、「アルミの比重は2.7なので、こことここを削ってこれぐらい軽量化すればOK」と作戦が練れるはずです。

おまけとして、パーツと発注先の一覧があります。

推力・速度計算

ここです。

モータの基本情報と電圧・ギア比などから推力・速度を求めます。これで大体目安を付けて、バッテリーの本数とギア比を決めていました。

以前は公式サイトで公開されていた、「勝てる相撲ロボットの作り方」の計算式を使用しています。

余談として、バッテリーは重要です。いくら良いモータを使っていても、バッテリーの性能が低いとモーターのパワーを引き出せません。

例えば秋月電子のGP電池はロボット相撲に向きません。元々内部抵抗が大きいので電流が流れづらいです。 *2

高校ではこの電池のため、せっかく奮発して購入したマクソンモータの力を100%発揮できませんでした。

お勧めは、ラジコンや電動ガン用の電池です。これらは大電流を流すことを前提にして作られているため、モータのパワーを引き出せます。

終わりに

今の自分が公開できる情報は以上です。相撲ロボットの世界も年々進化してると思いますが、ここで公開した情報はある程度戦えるロボットを作る上で基礎となる内容です。

相撲ロボットの全国大会常連は学校や教員に固定化されており、なかなか弱小校が這い上がるのは難しい状況です。

しかし、強いロボットの観察・情報収集・仮説と検証・原因調査と対策を繰り返すことで全国大会一歩手前まで進む事は出来ました。

強くなる近道は「強いロボットをまねること」です。強いロボットがやっていることには、何か意味があるのです。真似ることでそのうち意味に気付き、また自分の工夫を入れ込むことでより強くすることができます。

無名の学校から、創意工夫を凝らして新たな横綱が誕生することを期待します。

*1:瞬電とは、ロボットが対戦中に衝撃で電源ラインが切断され、マイコンリセットすることを指しています。何らかの対策を取らないと、瞬断後はロボットが停止し、そのまま相手ロボットに土俵外へ押し出されてしまいます。

*2:あくまでロボット相撲のような激しい競技には向かないだけです。