全体設計(System-wide Design)
ロボットに限らず、システムを設計する際は以下の流れになるはずです。
- 要件定義(Requirements)
- 全体設計(System-wide Design)
- 分割統治(Divide and Conquer)
前回の記事に書いたように、要件定義が出そろったら、システムを設計していきます。
全体から細部へ
ここで一番大事なのは、全体から細部へ(Coarse to Fine)の原則です。つまり、まず大きな枠組みを決めてから、細部に入るということです。あたりまえのように思えますが、ついつい、自分がやりたい分野、たとえばハードウェアとか、アームの制御とか、画像処理とか… そこだけをやたら詳細に考えてしまって、全体として何が必要でどのように協調して動くかを考えることを置き去りにしていませんか。まずは全体を考えましょう。せっかく要件定義をしたのだから、一部だけが実現できてもダメで、すべての要求をどのように実現するかを説明していくのが設計なのです。
要件を満たすための設計も、また一通りではありません。ロボット特有の難しさがここにもあります。
ハードウェアとソフトウェア
なにせ、ソフトウェアもハードウェアも両方やらなきゃいけない。ハードウェアが変わるとソフトウェアも変わります。要件を満たすためのパラメーターは非常に多くて複雑です。
要件を満たすためにどのようなハードウェアを選択すべきなのか、もしくは作るべきなのか。どんな機構でどれだけの自由度を持たせるのか。それらの機械はどのような制御用のハードウェア、例えばマイコンやドライバで駆動されるのか。それらを制御するソフトウェアはどの計算機で動かし、どのように分散されるのか、役割分担はどのようになっているのか。これらを最適な形で構成するにはどうすればいいか。
以前のエッセイに書いたように、ここにエンジニアの資質が問われます。要件のためのいろんな事例や製品を知っておき、その中から一番良い(と言える)ものを選んで全体を構成していかないと、より良い設計ができません。
階層構造
ロボットのシステムにはほとんどの場合、階層構造があります。ハードウェアとソフトウェアの組み合わせにおいてハードウェアに近い方を「低い」レイヤ、ハードウェアから遠い方を「高い」レイヤーとする階層構造になります。
完全にきれいな階層構造になることはまれですが、ロボットの場合、低いレイヤからだいたい以下のような三層の階層構造になると思います。
- ハードウェア層
- 制御層
- ふるまい層
階層構造
全体設計を行うとき、ハードウェア層はすでにあるものを使ったりすることは良くあります。モジュール化されたセンサやアクチュエータは便利ですし、開発期間を短縮してくれるでしょう。
ただし、それらが本当に全体の中で過不足なく働くのかは、ちゃんと確認しないといけないです。たとえば、ロボット用のサーボモータは現在は簡単に手に入りますが、その機能も様々あります。1ms 周期でトルク制御するモータを選べば制御層にはリアルタイム性が必要になりますが、経由点を与えて追従制御させるモータでは、特に必要ないことも多いでしょう。ハードウェアで何を想定するかによって、他の層の構成も変わってしまいます。
抽象と具象の往復
ロボットの全体設計を行うときは、抽象的な構成の話と、具象的な実現方法の話を行ったり来たりすることが求められます。これができる人が少ない… 本当に少ないです。
全体のざっくりした構成をある程度議論して、どういう実現方法かを具体的に考えてみる。少し考えたら全体に戻って、周辺と整合しているか、破綻が無いか、要件を満たしているかをチェック。あまり良くなかったらちょっと立ち戻って、全体の構成や配置を変えてみる。でまた具体的に考える…
絵を描くのに似ていると思います。木を描くときに、1枚の葉っぱから丹念に描きこむ人はほぼいないでしょう。まずは構図を決め、薄い色でラフに描きつつ、全体のバランスを見ながら修正し、少しずつ詳細化していくと思います。システムの設計も同じです。
最初から1つの方法しか頭に無かったりすると、詳細化、具体化の道へと突っ走ってしまい、引き戻すのが大変です。また、いつまでたっても抽象的な話でとどまって、具体化ができない場合もあります。設計って難しい。
ロボットの全体設計で出来上がるもの
ロボットの全体設計のプロセスを通して出来上がるものは、以下のようなものになるはずです。
- ハードウェアの構成図
- 通信や配線など、全体のブロック図
- ソフトウェア階層と大まかな構成図
- 主要なユースケースの説明
- ふるまいを説明するざっくりとしたシーケンス図
全体の設計ができれば、システムの最上層のふるまいがどのように最下層に伝搬されるかを説明できるはずです。私は、ロボットが実際にどのように動くかを示すパラパラ漫画を描いて説明することが多いです。そんなに凝ったものは必要なく、スライド1枚ずつにシーケンスの1状態を描くぐらいで十分です。それを見せながら、機構、電気、ソフトウェアがどういうことをするのかを説明すると分かりやすいのでお勧めです。
これらが説明できるようになったら、ようやく詳細な設計に入れます。
初出:note