🤖

かわロボ制御のすすめ -Krakenの制御はこうだ-

2024/10/08に公開

1. はじめに(読み飛ばしてもいいよ)

この記事は、KHK杯2024に出場したロボット「Kraken」の制御に関して説明する記事です。どのようなことをして、どのような成果があったかを記載しました。ここの文を書いているタイミングではどのくらいの長さになるかわからないんですが、ぜひご一読ください。

1.1 かわロボについて

まずは、かわさきロボット競技大会についてです。かわさきロボット競技大会(以下、「かわロボ」と表記)とは、毎年8月末に川崎市で開催されるロボット競技大会です。いわゆるロボコンではありますが、その特徴として、歩行形式のロボットを利用することが挙げられます。すべてのロボットは歩行する機構と攻撃する機構を持ち、1vs1の試合を行います。相手をリングの外に出すか、ひっくり返すなど歩行できない状態とすると勝ちとなります。
KHK杯はその派生大会で、フィールドは本大会より広く設定されていますが、その他のルールはかわロボのルールに準拠しています。2024年大会はその様子が配信されていましたので、以下に記載しておきます。
https://www.youtube.com/watch?v=jIdkFMwL5hw

2. Krakenについて

それでは本題に入ります。KHK杯2024では、「Kraken」は準優勝を飾りました!

その中で私が担当した部分は主に制御周りとなります。かわロボはロボットハードウェアの大会として捉えられていると思いますし、参加者もその認識の方が多いと思いますが、実は回路・ソフトウェアの入り込む余地が大きく残されています。

「Kraken」は操作入力から操縦者の意図を汲み取りながら適切にアーム位置を制御し、ロボットの操作自体を大きくサポートします。本来、横回転方式のロボットは移動機構2chの操作に加えて、アームの上下方向の操作とアームの回転方向の操作が必要となり、合計で4ch分の操作をしなければならず、試合に勝てるようになるまでの操作練習が多く必要になります。

しかし、今年の「Kraken」の操縦者はろくな練習していませんし、横回転機体で試合したのは数回です。本人の名誉のために記載しますが、怠惰とか適当な訳じゃなくて、お仕事が忙しくて時間が取れなかっただけです。では、なぜ勝てたのか。もちろんハードウェア的な機体性能の高さは言わずもがなと思っていますが(身内びいきすみません)、ソフトウェアの介入も大きな要因です。

「Kraken」の操縦イメージは、「それっぽく右のコントローラを動かしたら、意図通り正しくアームを動かしてくれる」という感じです。実際、操縦していた本人は以下のような感想だそうです。

鎌の回転方向の動きを意識するだけで、上下の動作を意識をすることはほぼなかった

それでは、以下の順で「Kraken」の説明を記載していきます。
ハードウェア的な説明は、ハード担当のびりー(Xアカウント: びりー)におまかせします。

  1. 軸名称の説明
  2. Krakenのシステム構成
  3. 実装されている動作モード

2.1 軸名称の説明

実装やコミュニケーションの都合上、軸に名前をつけています。以下の写真の通り、上下方向をBoom軸と、鎌を回す方向をRoll軸と呼んでいます。以下、特に説明なく出てきますので覚えていてください。

2.2 Krakenのシステム構成

Krakenのシステム構成を以下に示します。

1つずつ機能を説明していきます。

  1. Futabaプロポ受信機(RS2004SB)
    言わずとしれた、Futaba製の無線操縦モジュールの受信機です。このシリーズの受信機は、BECなどを制御するための信号としてPWMやS.BUS2とよばれる規格でのデータ通信が可能です。今回、足回りBECはPWMで信号を受信し、メイン制御ボードはS.BUS2で信号を受信しています。

  2. メイン制御ボード(AtomS3)
    M5StackシリーズのAtomS3を使っています。理由としては使ってみたかったという部分が大きいですが、この記事を見て真似する人がいれば真似しやすいかなという思いもあります。このボードでアームの制御をすべて行っています。また、足周りに入力されている操作を含めて操縦デバイスのすべての状態を取ることができるため、後述する動作モードの遷移などにも利用しています。

  3. 各BEC
    モータドライバともいわれますね。今回は自作している暇がなかったので、Castle製のBECを利用しています。Boom軸とRoll軸はモータの数が多いため、耐電流の大きいものを利用しています(それぞれ、型番がわかったら追記します)。足回りのBECは制御が不要なため、プロポ受信機から直接信号を入力しています。Boom軸とRoll軸は制御を行うため、メイン制御ボードからPWM信号を出力してBECに入力しています。

  4. フォトインタラプタ・光エンコーダ(光学式エンコーダ)
    Boom軸の角度情報を取得するためのセンサです。角度情報を取得するセンサとしてポテンションメーターと言われるものもありますが、Krakenを始め、私の関わるシステム(Dragon Lady S.など)では利用していません。ココは好みの部分もあるところと思われますが、基本的にアナログ信号は排除すべきという理念で設計を行っているので、すべてデジタル信号で扱えるフォトインタラプタと光エンコーダの組み合わせで利用しています。
    フォトインタラプタを利用している理由は、光エンコーダがインクリメンタル型と言われるシステム起動時からの差分のみを計測できるセンサだからです。絶対位置を検出するためフォトインタラプタを実装しています。
    それぞれのセンサ写真を記載します。

  5. エンコーダ用制御ボード(STM32C011F4P6)
    光エンコーダとフォトインタラプタの入力を処理し、角度情報に変換するためのマイコンです。本来はAtomS3ですべての処理をしたかったのですが、AtomS3にはエンコーダの入力をハードウェアで処理するための機能がなかったため、これらのセンサ情報を取り扱う機能を別のマイコンとして実装しています。

2.3 実装されている動作モード

「Kraken」は6つの動作モードを実装していて、操作入力により各モードを適切に選択しながら動作します。本節では、各動作モードについて説明していきます。なお、プロポはVテールに設定されていて、右スティックの左右の操作軸は概ねRoll軸の回転速度となり、上下の操作軸はBoom軸の角度値となります。

  1. モード1: NORMALモード
    他のいずれのモードにも該当しない時にこのモードが選択されます。このモードではアームがちょっと上向きに設定されて、右スティックの上下操作に合わせてある程度操作ができます。

  2. モード2: ROLLINGモード
    右スティックを右に大きく倒すといわゆる攻撃中と判定します。このモードは最優先で選択され、Boom軸は概ね水平方向に設定されて、右スティックの上下操作に合わせてある程度操作ができます。

  3. モード3: 移動モード
    移動用の左スティックをある程度の時間だけ倒していると、このモードに徐々に遷移します。このモードではアームがそこそこ上を向きます。

  4. モード4: 転倒復帰モード
    右スティックを上に倒し続けると、転倒復帰モードになります。それなりの速度でアームを上げきって転倒復帰を行います。

  5. モード5: スタート姿勢モード
    プロポの特定のボタンを2.5秒間押しっぱなしにするとこのモードに遷移します。このモードに遷移するとスタート姿勢を取り続けます。プロポの左スティックを動かして移動入力することで、NORMALモードに遷移します。

  6. モード6: スリープモード
    プロポの特定のボタンを5秒間押しっぱなしにするとこのモードに遷移します。このモードに遷移するとBoom軸の制御を無効化します。プロポの左スティックを動かして移動入力することで、NORMALモードに遷移します。

3. 成果とその要因について

最大の成功要因について考えてみると、別に超高尚な制御をしていたとかそういうわけではないです。今回、強いロボットに仕上がった理由は、ひとえに

鎌機の戦術と制御することの相性が良かったから

と言えそうです。正直、作ってみて、初めて理解しました。

また、もう1つの要因を挙げるとすれば、制御担当がここ数ヶ月操縦練習をしていたこともありそうです。我々のチームは分業が進みすぎて最適化されているが故に、ハード担当と制御担当、操縦担当がそれぞれ別の領域をイマイチ理解できていませんでした。とりわけ、操縦領域に対する理解不足は、出来上がったロボットの取れる戦術の幅を狭めていたように思います。今年は、操縦担当が参加できない状況があり、ハード担当や制御担当が操縦することがあったので、この点に気づくことができました。とりわけ「Kraken」は、制御担当が操縦する中で嫌に思ったことをできるだけ自動でやってくれるようにと考えて制御を組んだため、実際のユースケースに即した制御になったように思います。

4. 最後に

ソースコードのURLを記載しておきます。

  1. メイン制御ボード(AtomS3)
    https://github.com/kutei/kawarobo_atoms3
    キーワード: FreeRTOS, PlatformIO

  2. エンコーダ用制御ボード(STM32C011F4P6)
    https://github.com/kutei/enc_transmitter
    キーワード: STM32, STM32CubeIDE, Timer

余力があれば、アドベントカレンダーでユースケースから制御システムを組み上げるまでの過程について書けたらなと思ってはいますが、未定です。

Discussion