Emileの備忘録

色々な事をだらだらと

キャチロボ23まとめ(新規開発物とその知見など)

この記事はポエムです。アレルギーのある方は閉じてください。


この記事は学ロボアドベントカレンダー18日目の記事です。
adventar.org

キャチロボ2023で新規開発した物・知見やその他もろもろについてまとめた記事です。


==============目次==============

===============================


1. チームについて

キャチロボ2023では、
「調べてみたけど分かりませんでした!いかがでしたか?」チームとして参加させて頂きました。


メンバー構成は
・ソフト1 (私)
・ハード2 (@m11_Flexxia, @qzrobo_92)
・回路1 (twitter等に居ない)
といった構成で、学ロボ2021・22とデスマにデスマを重ねてきたメンバーです。


当日大事故を起こし、散々な結果ではありましたが楽しめました。
はいちゅーんずさん強かったです! 準優勝おめでとうございます!!




1.1. ハードウェア

詳細は以下のツイートをご覧ください。


結果はともあれ、高い制御性とメンテナンス性を誇る非常に良い機体でした。
(制御の無茶な注文に完璧に応えた機体です。ハードの二人に頭が上がりません....)

開発当初からM3508の強力なトルクを存分に活かせる様に設計されています。
十二分な剛性の確保やバックラッシの低減など細部まで考え抜かれています。
好き放題遊ばせてもらいました。本当に良い機体です!!


対して、まだまだ制御は詰めれたと思います。
ソフトウェアについては2.にまとめました。




2. 新規開発/導入した物まとめ

今回新規開発/導入した物は以下になります。
・ROS2
・micro-ROS
・KONDOサーボ
・ロボマスモーター導入(C620、M3508)
 ・部内向けCANライブラリ作成
・データ駆動型制御(FRIT)
・リアルタイム経路生成

ソフトが自分一人というのもあって好き放題動けました。




2-1. 知見

・ROS2
ROS1を知っていれば、2~3日で使える様になると思います。
分からない時は実装読むのが早いかも知れません。

Serial通信には以下のpackageを使いました。
github.com

callbackのデッドロックに注意!
Using Callback Groups — ROS 2 Documentation: Humble documentation





・micro-ROS
hexagon-emile.hatenablog.com

意外と情報が少ないです。環境構築で沼に嵌りました。
FreeRTOSと合わせた時のビルドがなかなか通らず苦戦しました。(特にFPU周り)

F767zi + FreeRTOSで動かしている感覚では、Topicは40Hzが限界という感じでしたが果たして...?
メモリの多いH7を使った方が無難かもしれません。

一度環境構築を突破すれば、簡単にROS<->マイコン間通信が出来る便利なミドルウェアです。





・KONDOサーボ
高トルクで感動!! Amazon謎サーボと大違い!!!
配線を間違えて1つ破壊しました。ごめんなさい....

コマンド送信用packageも作りましたが自前で実装した方が早いと思います。
github.com

Hardware Interfaceで実装し、ROS2 controlで実装するという選択肢もありますが、
ROS2 controlでシステムを実装するのが面倒だったので自前のinterfaceを用意しました。

アクチュエーター制御を全てマイコン側にまとめるのが一番綺麗なシステム構成になると思います。





・ロボマスモーター
C620にトルク指令入れると良い感じに制御してくれます。
ブラシレスのMDを保持/開発していないチームにとっては現状最良の選択肢だと考えています。

トルク制御が掛かるので、位置制御をしたい時は2段階でPIDをかけると手っ取り早く動きます。
(位置制御(PID)で目標速度を出力、目標速度から速度制御(PID)で目標トルクを決定)
次元を考えると位置->速度->トルクで上手く行くのは直感的だと思います。


アンチワインドアップかけるのも良いかもです。
↓分かりやすく、参考になる記事です。
hamachannel.hatenablog.com





・データ駆動型制御(FRIT)
hexagon-emile.hatenablog.com

最近流行っているデータ駆動型制御です。

閉ループ系を安定化できるPIDパラメータを見つけて、
それで制御したデータを1組回収すれば、データを取り直す事無くパラメータの自動調整が出来ます。

分かりやすいデータは準備出来ていないのですが、
割と簡単に実装できて、それなりに良いPIDパラメータが得られます。


FRITと対になってよく使われるVRFTについては、naokichiさんが記事を書いて下さっています。
zenn.dev

FRITは閉ループ系で調整できますが、
系を安定化する初期パラを見つける必要があり、その上非線形最適化となります。(大域最適性が保証されない)


VRFTは二次計画で解ける上に事前調整も要らないですが、
開ループ系なので不安定系には使いづらいという特徴もあります。
(入力に周波数帯の広い信号を入れた方が良い事からも系を選ぶ手法だとは思います)

対象と目的に合わせて適宜使い分ける事で私達をパラチュン地獄から解放してくれるはずです。






・リアルタイム経路生成
hexagon-emile.hatenablog.com

以前に垂直多関節を扱った事があったので、それと比べると遥かに楽でした。
簡単な実装の組み合わせで手っ取り早くそれなりに良い経路が作れます。

ompl自体もモジュールとして扱いやすく、学ロボの経路生成でも使えるかも知れません。





3. チーム内の情報共有について

メンバーの一部がキャンパスが異なる・院試の時期がバラバラと言った背景もあり、
今回のプロジェクトでは特に情報共有のコスト削減に注力していました。

そういった事情もあり、今回は1つのサービスに情報を集約できるNotionというサービスを導入しました。
タスクやスケジュールからドキュメントまで一元管理出来ます。
※ 微妙に使いにくい部分もあります
※ 無料で使えます (一番大事)



議事録等もこれまではGoogle Documentを使う事が多かったのですが、
今回からはNotion内のDocumentとして記録していました。

実際のドキュメント


お互いの進捗状況やハードとソフトの間のパラメータ共有、認識の擦り合わせに使った図等、
slack/discord/Google Documentに散逸してしまいがちですが、
Notionで一つのアプリケーションにまとめられ、効率的に開発が進められたと思います。


「取り敢えずNotion見れば分かるか。取り敢えずNotionにメモっとくか。」と出来るのは非常に大きいです。

ただしスケジュール機能のUIが非常に見づらい、スプリントの機能が使いにくいなど、
微妙に手が届かないむず痒さもあります。

どうせ無料なので暇な時に試してみて下さい。



4. 最後に

ロボマスやデータ駆動型PIDなどはこれからの学ロボでも流行っていくのではと考えています。
少しでも何か参考になれば嬉しいです。

実はまだまだ試したいネタが沢山あったのですが、全ては無理でした。
欲張りすぎるのは良くないですね。