ロボットで使われるコンピュータの概要についてまとめていきます。
コンピュータの機能と定義
ロボットのコンピュータは、ロボットの4つの機能要素「知覚」「認識」「判断」「動作」のうち「認識」と「判断」を担います。
認識と判断には複雑な計算が伴います。また、ロボットの種類やロボットがおかれた状況によって機能の内容を柔軟に変化させる必要があります。これらの要件を満たしてくれるのがコンピュータなのです。
ロボット向けに限らず一般的なコンピュータは、入力と出力を持ちプログラム(ソフトウェア)によって機能を変えることができる計算装置と定義されます。
パソコンももちろんコンピュータの一種で、この定義に従います。パソコンの構成図の例は下図の通りです。
コンピュータ本体だけでなく、マウスやディスプレイなどの入出力装置まで含めてパソコンと呼ぶこともあり、実際のコンピュータの定義は曖昧です。ノートパソコンでは、入出力装置とコンピュータ本体が一体化して1つの筐体(箱や塊)になっていて、境が明確ではありません。「コンピュータ=CPU」とするアイディアもありえますが、コンピュータの機能を満たすためには少なくともメモリとストレージが必要で、CPUだけをコンピュータとするには無理があります。そこで、当サイトでは、コンピュータに含める範囲をその時々によって柔軟に変えるものとします。
ロボットシステムの構成例
ロボットのコンピュータの具体的な役割や求められる性能は、システムの構成によって変わってきます。システムの構成の仕方は「スタンドアローン方式」と「エッジ・サーバー方式」に大きく分かれます。スタンドアローン方式は、システムが知覚・認識・判断・動作という一連のロボットの機能を1つの筐体やコンピュータで完結していることを指します。エッジ・サーバー方式は、ロボットを2つ以上の筐体やコンピュータに分離し、有線通信や無線通信によってそれらを接続して動かすシステムになっていることを指します。知覚と動作の機能を含む部分を「エッジ」と呼び、エッジに含めることが難しい機能(主に認識と判断)を担当してエッジに提供する部分を「サーバー」と呼びます。認識と判断はエッジとサーバーで分担して実行します。
システムとしてはスタンドアローン方式の方がシンプルで開発しやすくなります。一方で、認識や判断のために複雑な処理を行う場合には高性能なコンピュータが必要になります。そして高性能なコンピュータはサイズ、重量、消費電力が大きくなり、スタンドアローンのロボットシステムの中に含めることが難しくなることもあります。そういった場合には、高性能なコンピュータをサーバー側に設置することで、エッジの筐体のサイズ、重量、消費電力を小さくすることができます。
また、別の位置から対象物や環境を知覚したり、動作範囲全体の地図情報を取得したりすることで飛躍的に機能や性能を向上させることができることもあります。例えば、倉庫の中で自律走行するロボットを開発する場合、倉庫のあちこちに設置されている定点カメラの画像を使ったり、倉庫内の走行可能ルートの情報を使ったりすることで、自律走行機能の開発が各段に楽になったりします。このようなケースでも、スタンドアローン方式ではなくエッジ・サーバー方式が選ばれます。システム構成のイメージとしては上図のエッジ・サーバー方式(例2)を参考にしてください。
エッジ・サーバー方式では、認識や判断を全てサーバー側に任せるのではなく、たいていの場合はエッジ側でも認識や判断の一部を担います。例えばカメラで画像データを取得する時、画像データを全て通信でサーバー側に送信すると通信時間がボトルネックになってシステム全体の機能が遅くなってしまうことがあります。そういった場合には、画像認識のアルゴリズムをエッジ側のコンピュータで実行してデータ量を減らしてから、サーバー側に送信するという分担にします。
また、自律走行していて障害物にぶつかりそうになった時、サーバー側に判断を求めていては間に合わない可能性があります。この場合は、この走行をストップするという判断をエッジ側で行うという分担にします。
以上のように、エッジ・サーバー方式では、計算量、通信量、遅延時間といった要素を総合的に考えてコンピュータの役割分担を決めていきます。
ロボット向けのコンピュータの要件
エッジとサーバーでは、それぞれコンピュータに求められる要件が異なります。エッジには小型、軽量、低消費電力が求められることが多く、サーバーには基本的に高い演算性能が求められます。(最近は、電気料金や環境負荷という観点で電力効率も求められるようになってきていますが。)
さらに、どのようなロボットを稼働するかによっても求められる要件は大きく異なります。エッジであっても、移動体(移動系ロボット)に搭載するものか、地面に設置して動かす必要がないものかによって変わってきます。移動体であれば、小型、軽量、低消費電力の全てに高い性能が求められます。例えば産業用ロボット向けのコントローラなどの設置型では、ロボットを駆動するドライバの消費電力が大きいため、コントローラ内のコンピュータには低消費電力の性能は強く求められない可能性が高いです。
コンピュータによって実現する機能の大よその性能は、プロセッサー(CPU)、メモリ、ストレージ、通信の速度や容量によって決まります。例えば、機能の最終的な実行速度は、これらの要素のボトルネックで律速されます。これらの要素の中で、特に重要なのはプロセッサー(CPU)です。ロボットの開発者がプロセッサーを開発することは滅多にありませんので、既存のプロセッサーから選ぶことになります。プロセッサーには CPU、GPU、FPGA、DSP、AI 専用 LSI などがありますが、基本的に CPU は必須で、他はアクセラレータなどの補助的な使い方をします。CPU が必須なのは、汎用的なプログラムを搭載できるのは CPU のみで、他は制約が強くて一般的なソフトウェアを開発しづらいからです。
CPU には様々な種類のものがありますが、OS を搭載することを前提とすると CPU の選択肢はそれほど多くありません。エッジ向けであれば ARM シリーズ、サーバー向けであれば Intel の Xeon(ジーオン)シリーズを使ったりします。Intel の Core i シリーズや AMD の Ryzen シリーズはその中間に位置し、状況によってエッジ側で使ったりサーバー側で使ったりします。その他、エッジ側では RISC-V という命令セットをベースに作られたものや、ルネサスなどのマイコンメーカーが独自開発した CPU(ルネサス製の RX シリーズ等)といったものもあります。
サーバーのコンピュータ
まずはサーバー向けのコンピュータから、どのような選択肢があるかをもう少し詳しく見ていきます。サーバー向けのコンピュータは、クラウドサービスを利用するか、自前で用意するかを選択します。自前でコンピュータを購入して自分達が管轄する拠点や工場内などに設置することを「オンプレミス(オンプレ)」と呼びます。
サーバー向けでは、例えば、先にも挙げた Intel の Xeon シリーズの CPU が搭載されたマシンが使われます。クラウドサービスを使う場合には、サービス事業者が用意しているマシンから選択することになり、クラウドサービスの代表格の AWS(Amazon Web Service) では、Xeon の他に AMD の Ryzen EPYC といった CPUのマシンが選択できます。これらのCPUを搭載したコンピュータは、演算性能が高く、複数のタスクを並列に高速に処理することが出来るように設計されていて、ロボットシステムのサーバーに適しています。
ところで、ここではエッジ側に何らかのサービスを提供するという意味でサーバーと呼びますが、コンピュータに求める機能によっては Web サーバーやデータベースサーバー向けのコンピュータではなくワークステーション向けのコンピュータの方が向いているケースもあります。より一般的なサーバーはたくさんのユーザーからの比較的軽い大量の処理に対応するイメージですが、ロボット向けのでは少数のエッジからの重い処理に対応します。そのため、ワークステーション向けを謳っているコンピュータにサーバー機能を設けるということもありえます。
オンプレで用意する場合は選択肢が広くなります。もちろん Xeon 等のハイスペックなマシンも候補になりますが、処理がそれほど重くなければ少しハイスペックなパソコンでも十分な場合もあります。そういったパソコンの CPU としては、Intel の core i7 や AMD の Ryzen 7 が例として挙げられます。さらに言うと、Xeon は複数の処理が並列に走る場合に能力を発揮しますが、単一の重い処理を実行する場合には core i シリーズの方が速いこともあります。実行するプログラムやアルゴリズムとコンピュータの仕様の関係性から事前に机上で最適な構成を予測するのは難しく、実機で試しながら適したマシンを選んでいくのが一般的です。
また、これに GPU 等のアクセレータを付加するかどうかという選択肢が加わり、さらに複雑になります。サーバーでディープラーニングのような重いけれども並列性が高い演算を行う場合には、CPU だけで処理するのではなく、GPU や TPU(Google のアクセラレータ)を利用した方が有利になることがあります。高速で処理できるようになるのに加えて、電力効率を高め、コストを削減することに寄与します。
エッジのコンピュータ
エッジ側はもっと選択肢が多いです。そもそも OS(オペレーティングシステム)をコンピュータに載せるかどうかで分岐します。OS を搭載するにしても、Linux や Windows といった高機能な OS にするか、リアルタイム OS にするかでも選択するコンピュータが変わります。Linux を載せるなら MMU (メモリ管理ユニット) の回路を含む CPU が必要です。リアルタイム OS なら、MMU か MPU (メモリ保護ユニット) のいずれかの回路が含まれていればOKです。メモリの管理や保護の機能が十分に入っていない軽量な CPU を使う場合には、OS を搭載せずに実行したいプログラムを直接書き込みます。こういう使い方を「ベアメタル」と呼びます。
どのパターンを選ぶにしても、エッジ向けとして広く採用されているのは ARM の CPU コアを採用したコンピュータです。Linux などの高機能な OS を載せるなら ARM の Cortex-Aシリーズ、リアルタイム OS なら Cortex-R シリーズ、OS を載せないなら Cortex-M シリーズを選びます。高機能版以外では、他にも様々な選択肢があります。マイコンメーカーが独自に開発しているものも多くあります。どういった種類のものがあるかは、また別のページに記載しています。
ARM の CPU コアの各シリーズの演算性能は、Cortex-A、Cortex-R、Cortex-M の順番です。一方、この順番はそのまま消費電力の大きい順にもなります。消費電力が大きいと発熱も大きくなり、高い冷却能力を備えた冷却機構が必要になります。発熱が小さければ、CPUチップのパッケージを空気に触れる状態にした自然の空冷や、金属製の筐体に接した状態にした金属の熱伝導による冷却で十分です。発熱が少し大きくなれば、パッケージの上に放熱板を取り付けます。発熱が大きいほど、大きな放熱板が必要になります。さらに発熱が大きくなったら、ファンを取り付けます。ファンは特にサイズが大きくなりがちなので、ロボットシステムをコンパクトにしたい場合には極力避けます。
なお、Xeonシリーズは消費電力や発熱が大きいため、コンパクトなエッジには適しません。ただし据え置き型のロボットアームの近くに設置するようなかたちであれば、候補としてありえます。
インターフェース
コンピュータの要件としてはインターフェースも重要です。コンピュータ本体の計算装置を入力装置や出力装置と接続するためにはインターフェースを用意する必要があります。ここで、話を進めやすくするためにコンピュータシステムの現実的な構成図を示します。
基本的には、センサーは入力装置に対応し、アクチュエータは出力装置に対応します。ただし、例えばアクチュエータのモジュールの中にセンサーが含まれていて、モジュール全体では出力装置と入力装置が同居しているというケースもありますので、厳密には対応しないケースもあります。無線通信はたいてい送信と受信の双方向で成り立ちますので、通信装置は入力装置と出力装置を兼ねる形になります。
ところで、ロボットシステムが完全に自律で動作することは滅多になく、人間が何らかの設定や分析をすることになるでしょう。少なくとも開発段階では開発者が頻繁にシステムに接続します。そういった人間を「ユーザー」と呼びます。図では、ユーザーが操作する入力装置としてマウスとキーボードを、ユーザーが情報を得る出力装置としてディスプレイを例として挙げました。
上図の構成をベースに簡易的な自律走行ロボットシステムの構成例を下図に示します。センサーやアクチュエータなどの各種のデバイスとコンピュータを接続するインターフェースまで表記しています。
この図に登場する HDMI、SPI、USB、GPIO、WiFi がインターフェースに相当します。GPIO 以外は国際規格が決まっていて、デバイスとコンピュータをメーカーに依存せずに自由に接続することができます。GPIO は General Purpose Input Output の略で、独自の通信ルールを決めて使うインターフェースです。上図の例では、コンピュータからモータードライバーに PWM 信号を送信するために GPIO を利用することを想定しています。
コンピュータを選定する際には、使用予定のセンサーやアクチュエータのインターフェースの回路と端子が含まれているものを探します。もしくは、使用予定のコンピュータが対応するインターフェースに合ったセンサーとアクチュエータを探します。
なお、インターフェースの回路は、CPU チップの中に含まれるケースもありますし、CPU チップから別の規格で接続してボード(基板)上に変換用の回路(半導体チップ)を実装するケースもあります。端子は、チップの中に内蔵するわけにはいきませんので、必ずボード上に実装します。無線通信の場合は物理的な端子がありませんので、代わりにアンテナを実装します。アンテナはボードと一体になっていることもありますし、ボード上にアンテナの端子だけを実装しておいて、アンテナを後で取り付けることもあります。(感度を高めたい場合は後者を選択。)
インターフェースの種類については、また別のページに記載します。