NHK学生ロボコン2025技術公開 ソフトウェア(制御構成・ドリブル制御・シュート制御)

ladaと申します。 学ロボ2025では下位レイヤの制御をしていました。この記事では、制御構成およびドリブルと投擲の制御について解説をしていきます。

制御構成

両機体とも、各機体に搭載したノートPCでROS 2 Humbleを使って制御しています。 下位レイヤはNUCLEO-F767ZIを搭載したメイン基板を機構ごとに搭載して制御しており、PCと各メイン基板はmicro-ROSによって繋がっています。 メイン基板の内訳は以下の通りです。 また、遠隔緊急停止用にESP32も使っています。

  • 足回り
  • 投擲
  • ドリブル(R1のみ)

ドリブル制御

ドリブルは、PCからメイン基板にtopicとして指示を送り、メイン基板内でそれに応じたシーケンス制御を行います。 指示とそれぞれの手順は以下の通りです。

  • 機構展開:ローラー部を展開すると同時に弁をボール装填時の角度にセットする。
  • ドリブル:ローラーを回転させ弁を開き、ボールが跳ね上がったら掬うためにハンドを閉じる。 それと同時にローラー部を収納しつつ弁を閉じ、ハンドを開く。
  • パスのための装填:ローラーを回転させつつハンドを閉じ、弁を開く。 その後ローラー部を収納し弁を閉じ、ハンドを開く。

ローラー部の展開・収納

 ローラー部の状態は、収納時に押される位置に取り付けられたリミットスイッチで管理しています。 そのおかげで、走っている最中に勝手に展開される事故を防げます。

また、展開・収納の制御は位置制御ではなく速度制御で行っています。 当初は位置制御を用いるつもりでしたが、試してみたところモータの回転が速すぎて、ベルトが滑ってしまい展開できませんでした(2次ビ直前)。 そこでゆっくり回転させることができる速度制御を用いました。 ちなみに速度制御のPIDゲインは展開時と収納時とで変えています。

細かい制御の話

ドリブル時にハンドを閉じるタイミングは、弁を開いてから決められた時間が経ったら閉じるというふうになっています。 osDelay()だらけのゴリ押し実装です。 当初はToFセンサを使いバウンドしたボールを検出することで、ボールを検出してからの経過時間で制御する予定でしたが、FreeRTOS下でADCをうまく使えず断念しました。

ローラーはDuty制御で動かしています。 本当はエンコーダを付けて速度制御くらいはすべきなのでしょうが、面倒だし十分動いたのでやりませんでした。 去年のR1のローラー(籾と空籾で着弾点を分けるため出力を変える必要があった)もDuty制御で十分だったという経験も踏まえると、まあこれでよかったのかなと思います。

ちなみに、以下のパラメータはROSのservice通信を用いてPCから変更できる実装になっています。

  • 各ローラーの出力
  • ToFセンサを使うか否か
  • ToFセンサを使う場合・使わない場合それぞれにおけるハンドを閉じるタイミング

これは異なるパラメータを用いた検証を容易にするのと、試合中にドリブルがフィールドやボールの都合でうまくいかなかった場合にその場で変更するためです。 実際には試合中に変更する必要のある場面はありませんでしたが、開発中の検証作業には大いに役立ちました。

ハードウェアの記事にも記載がある通り、ローラーの駆動には当初ID659-ZAを用いる予定でした。 この用途なら正転だけできればいいですし、モタドラを積まなくていいのは嬉しいです。 しかしながら、以下の問題を解決できず没にしました。 たぶんソフトの問題なんだろうな。 ID659-ZAを諦める決断が遅れてしまい、ハードウェア担当者に迷惑をかけてしまったことは心残りです。

  • 速度のフィードバックがうまく取得できない
  • 最初に軸を手で回さないと回らない

投擲制御

とても単純で、Robstride04を速度制御で回しています。 Robstride内部のエンコーダを用い、角度と速度がそれぞれ目標値から既定の範囲に収まっているかのチェックを高速で回しています。 これでも上のツイートのような精度が出ます。 自分がFreeRTOSエアプでバグ取りができず、2次ビ以降は他の人にやってもらったのが心残りです。

おわりに

個人的な反省としてFreeRTOSに習熟していなかったことがあげられます。 そもそも1回生夏のキャチロボであまりFreeRTOSを触っておらず、学ロボ24では動確専門だったため一切使いませんでした。 そのため今回が初めてのFreeRTOSともいえる格好だったわけですが、各アクチュエータや機構を動かすことに囚われてFreeRTOSの勉強をしていませんでした。 ですがなんとかロボットを動かすことはできたので、ギリギリ赤点回避はできたと思いたいです。

コメント

人気の投稿