💭

学ロボでの分散アーキテクチャについて

2022/12/16に公開

本記事は学ロボアドベントカレンダー(https://adventar.org/calendars/7461)の十六日目の記事となります。
初めまして、東北大学のT-semiというサークルで学ロボやっております溜雑(https://twitter.com/Ryuzot1112)です。
本当は16日目のアドカレはCAN通信に関してにするつもりやったけど、まだ書けてないので別内容でお送りします。
落としたわけじゃないよ!うん!
なお公開するの16日の二十三時頃な模様
この記事では、学ロボでの回路・ソフトウェアアーキテクチャについてと、弊サークルが採用している分散型アーキテクチャの紹介を行っていきます。
基本的にポエミーな内容になると思いますがどうぞお付き合いください

はじめに

NHK学生ロボコン、通称学ロボは毎年9月あたりにルールが発表され、12月の書類審査(さっき提出しました!)、2月頃の第1次ビデオ審査、4月ごとの第2次ビデオ審査(弊サークルは去年ここで敗退した)をへて、6月に本番の大会があります。
このようにかなり忙しい日程の中、開発において最優先されるのは基本的には機構です。
目的を達成できる機構を作るため、ロボコ二ストたちは昼夜CADをいじくり回したりアルミと戯れたりしなければいけません。
無論、回路及び制御がなければロボットは動きません。しかしながら、基本的に開発全体は機構メインで動き、回路や制御はそれに振り回されることになります。
また、弊部ではマイコンを使った制御と、パソコンを使ったプログラムは独立して開発しています。前者にはロボットのアクチュエーター制御やセンサの制御など、後者にはLRF及び各種センサを用いた自己位置推定や操縦プログラムなどが含まれます。(本記事において、「制御」と呼称するのは前者を指します)
ここでも、回路及び制御はパソコン側のプログラムによって振り回されます。自己位置推定用のimuが欲しいとなれば追加し、床の色みたいとなればカラーセンサーを追加しなければなりません。
一方、ロボットとそれを作る我々は常に進化し続けます(ロボコ二ストは日々進化中![1])。特に機構においては次々に新しい者が設計され、製作され、実装されます。

回路・制御アーキテクチャ

このとき、どのように回路・制御を実装するかという課題があります。特に我々のような弱小チームでは、ロボコンでは機構の仕様が決まらない・頻繁に変更されるため、柔軟に対応できる構成が必須となります。
このとき、まず初めに考えられるのは、以下の図にあるような「単一のマイコンがほとんどの機能を持ち、その補助として他のマイコンやパソコンを利用する」構成です。

一方で、以下のように、「単一の機能を持つマイコンを複数搭載し、協調動作させる」構成も考えられます。このとき、通信ではマスタ・スレーブを考慮しなくて良く、また配線が容易なバス型の通信を使用します。(CAN通信やEthernetなど)

以降では、前者の構成を「モノリシックアーキテクチャ」、後者を「分散型アーキテクチャ」と呼称します。
弊部では、様々な理由により後者の「分散型アーキテクチャ」を採用しています。

学ロボにおいての分散型アーキテクチャ

利点

仕様変更に柔軟に対応できる

まず一番のメリットとして、仕様変更に柔軟に対応できる点があります。理論上は基板を増やしたくなれば通信バスに基板をつっこみさえすればいいので、非常に柔軟に対応できます。
また、マイコンのプログラムをや回路変更したい場合、単一の機能のみを持つため考えることが少なく変更が容易です。

複数人で製作しやすい

回路にしろプログラムにしろ、単一の機能の実装のみを考えれば良いのため、複数人がそれぞれ担当するマイコンのプログラムを書くといったことが容易です。また、インターフェイスさえ決めれば後は基本的には自由なプログラムを作成できるため、複数人で作業するときは非常に楽です。

制御工学は強いがプログラミング経験が少ない人を効率的に使える

マイコンのプログラミングには、アクチュエーターの制御といった制御工学的な部分の他に、メモリ管理、通信の管理、割り込みの管理、CPUの内部構造についての知識などが必要になってきます。特に単一のマイコンで複数の機能を持たせる場合には任意のRTOSを使うことも多く、この場合にはより多くの知識や経験が必要となります。
一方、アクチュエーターの制御を行うには制御工学の専門的な知識が必要です。
ここで、双方の知識と経験を持ち合わせているスーパーマンがいれば別ですが、学生ロボコンというどうしても人的リソースが限られる現場でそれを求めるのは難しいです。
実際、弊チームではメインにプログラムを書いているのは僕ですが、制御工学はナンモワカンナイ(ガチ)な人です(なんならそれ系の科目落単してます)。また、制御工学めちゃくちゃ強いチームメイト某K君が存在しますが、彼はプログラミング全般に精通しているかといえばそうではないです(とはいいすごい強いけど)。
ここでの分散型アーキテクチャの強みとして、自信の機能の制御以外のことをほとんど気にしなくていい点があります(実際には通信関連の処理は必要ですが、周辺機器を適切に扱っていればプログラムのメインループへの影響はほぼ無視できます)。モノリシックアーキテクチャの場合、単一のマイコンで複数の機能を持たせ無ければ行けないためそうはいきません。

欠点

複数の基板が必要

あたりまえですが、複数の基板及びマイコンが必要です。
特に近年の半導体不足下において、特にマイコンが多数必要である点は欠点になります。後お金ほちい。

じゃま

機構に乗せるとき、数多くてじゃま

通信バスが飽和する可能性

実装如何ですが、複数のマイコンがお互いの都合を考えずに通信しまくる必要があるため、通信バスが飽和してしまう可能性があります。これは、場合によっては致命的な結果をもたらすことガ考えられます。通信周りの綿密な調査、設計は必須です。

書き込みめんどい

機体のあちこちにマイコンが位置してるため、書き込むのが地味に大変になったりする。(それは機構側の問題では??)

分散型アーキテクチャの実例

去年度の実例を簡単に紹介します。
今年も基本的にほぼ同じ構成でいくつもりです。(場合によってはCAN通信をCAN-FD通信に変更します)

マイコン

マイコンには、stm32g431を採用しました。また、デバッグや回路設計の簡便化のため、nucleoマイコンボード(https://www.st.com/en/evaluation-tools/nucleo-g431kb.html)を使用し、それに欲しい機能を持った基板をarduinoのシールドのような形でつけていく形にしました。
学ロボ交流会用のスライドの流用、手抜きですはい

CAN通信

通信方法には、CAN通信(HS-CAN)を用いました。CAN通信に関しては23日のアドカレで詳細に書こうと思っているため、そちらを参照してください。(多分ちゃんと書きます、落としません)
基板は非常にシンプルな構成になっています。
また、通信ケーブルには対ノイズ性を考慮しツイストペアなLANケーブルを利用しています。

あとがき

なんか最後の方めちゃくちゃ適当になったけどごめん、これ書いてる時点で本日中の課題2こ残ってる上に16日終わるまで二時間切りました。
計画性が欲しい人生だった、おわり

脚注
  1. 「少女☆歌劇 レヴュースタァライト」はいいぞ!(https://revuestarlight.com)(コンテクストを無視した布教を唐突にしてくる厄介オタクの振る舞い、よい子はまねしないでね) ↩︎

Discussion