これからの組込みシステムとは。組込みシステム工学を解説!
◆先生の研究分野について教えてください。
人工知能の急速な発展に伴って、ロボットの進化が期待されています。いままでにない、スゴイ機能を持つ知的なロボットを実際に開発するためには、機械・電子回路・ソフトウェアといった幅広い分野の総合的な技術が必要です。こうしたロボット等のシステムに「組み込まれ」、機械や電子回路等を直接駆動するためのソフトウェアのことを、一般的には「組込みソフトウェア」と呼びます。さらに、ソフトウェアが駆動する対象の機械や電子回路等を含んだシステムのことを、「組込みシステム」と呼びます。
こうした組込みシステムをどのように作ったらよいかを体系的に整理するのが「組込みシステム工学」です。組込みシステム・組込みソフトウェアを作る際には、通常のパソコン(PC)上でのソフトウェア開発では遭遇しない問題に直面します。まず、(1)動作環境の違いがあります。組込みシステムの中で動く組込みソフトウェアは、いわゆるパソコン(PC)上で動けばよいわけではなく、小型・低消費電力のCPUの上で動かさなければなりません。これは限られたサイズ・バッテリーを用いる制約があるためです。また、(2)時間制約(リアルタイム制約)があります。組込みシステムの制御のためのソフトウェアは、数ミリ秒といった時間制約の中で、(例えばロボットはモータ等を用いて物理的に動くため)確実に処理が終わるように設計・実装する必要があります。さらに、(3)高い信頼性の要求があります。組込みシステムには通常のPCと比較して圧倒的に信頼性が高い必要がある(例えば自動車用のソフトウェア)ため、時間制約を含めてソフトウェアに不具合がないように、よくテストをする必要があります。
ここまでは従来の組込みシステム工学なのですが、最近ロボット向けのソフトウェアは急激に複雑化しています。カメラ画像から物体認識をするようなソフトウェアは、通常PC上で開発されています。しかし、組込みシステムにどのように組み込んだらよいのか、ということが課題です。すなわち、小型・低消費電力のCPUでは、画像認識をするには処理性能が不足するという問題がありますので、工夫が必要です。また、そもそも全ての処理をロボット本体に実装する必要があるわけではありません。IoT(Internet of Things)の考え方で、画像等のデータはネットワークで接続した外部のコンピュータ(サーバ・PC) で処理をして結果だけ受け取るという構成も考えられます。すなわち、単なる組込みシステムだけではなく、インターネットクラウド上のサーバ・データベース等との連携することも視野に入れて、システム全体の設計をする必要があるのです。
ロボットソフトウェアに高性能な回路を簡単に組み込む
◆先生の研究を具体的に教えてください。
私は、FPGA(Field Programmable Gate Array)をロボットシステムに組み込む手法を研究しています。FPGAは、任意のディジタル論理回路をプログラムして実現可能なLSI(集積回路)であり、ハードウェア処理で並列化することで、CPU上で動作するソフトウェアと比較して、低消費電力で高速に処理を行うことができます。ただし、ハードウェアによる並列処理を回路設計する必要があるので、通常のソフトウェア設計・実装と比べると難易度が高く、開発に時間がかかることが課題です。そのため、現在はロボットにFPGAを導入することが困難です。
私のアプローチは、FPGAのエキスパートが作った高性能な回路を部品化(コンポーネント化)して、ロボットソフトウェアに簡単に組み込むことを可能にする、ということです。
そのために、知的なロボットソフトウェアの開発において広く使われつつある、ROS(Robot Operating System)という開発環境をつかうことを考えました。ROSにおいては、ソフトウェアの部品は「ノード」と呼ばれます。ロボットソフトウェアを開発する際には、カメラ、画像認識、モータといったソフトウェア部品(ノード)を組み合わせて、ロボットソフトウェアを構成します。この中に、FPGAをノードとして参加できるようにすれば、ロボットソフトウェア開発者がFPGAを使えるようになるのではないか、という挑戦をしています。
ロボットのシステムにFPGAを入れる研究はまだまだ珍しいテーマ
◆先生は研究テーマをどのように見つけたのでしょうか。
FPGA上の高性能なハードウェア(回路)を、ソフトウェアから部品として簡単に使えるようにするというのが、現在の研究テーマですが、学生(大学院)の時のテーマは、FPGAチップ(半導体LSI)の回路そのものをどのように作るかということでした。
その時、作ったFPGAチップ上に回路を書き込んで動かす際には、期待通りの動作をするかどうか確かめるために、ソフトウェアからデータを入力しては出力を観測するわけで、大変手間のかかる作業でした(これを動作検証といいます)。その時から、ソフトウェアのような手軽さで、ハードウェア(回路)が使えたらよいのにと思っていました。
Androidというスマートフォン用のOSがあります。大学院を修了したてのころ取り組んだテーマは、当時オープンソースになったばかりのAndroidのソフトウェアを、FPGAを使ってハードウェア処理で加速できないか、ということでした。しかし、AndroidはLinuxカーネルの上でJava仮想マシンが動作する複雑なシステムですので、なかなかFPGAを直接操作するプログラムを書くのは困難です。そこで、FPGAとAndroidソフトウェアの間は通信でつないで、Androidのソフトウェアの遅い部分をFPGAで早く処理することに成功しました。こうすると、FPGAを直接操作する難しいプログラムを書く必要がなくなります。こうした作り方のシステムを「分散システム」と言います。
ロボットのシステムにFPGAを入れるというのは、まだまだ珍しいケースです。しかし、私が研究しているやり方でFPGAを部品化すると、既存のロボットのソフトウェアと協調動作することが容易になり、FPGA上の高性能なハードウェアを有効に活用できるようになると考えています。
◆この分野に関心を持った高校生がより深く知るための、具体的なアドバイスをお願いします。
自由に使えるPC(パソコン)があれば、情報技術に関する情報はインターネット検索をすればいくらでも見つかると思います(自由に使えるPCがない人は、是非おうちの人におねだりしましょう)。「~をやってみたい」と思うのであれば、やってみればよい、そういう時代です。プログラミング言語も一つと言わず、何個でも勉強して習得し、どんどん自分の作品を作ってみましょう。
組込みシステムに関しても、マイコンや小型PCの入門環境は、ArduinoやRaspberry Piがありますし、FPGAの入門環境も、かなり整ってきていると思います。PC上のソフトウェアプログラミングの世界も十分楽しいですが、例えばArduinoで動作するC言語のプログラムは、PCにUSB接続して開発することができます。そして、変数に値を代入するとピンの電圧を直接操作できます。電子部品・電子回路を直接駆動する組込みシステムのプログラミングはさらに奥深いですよ。
◆学生時代は、何に熱中していましたか。
子供のころからPC(パソコン)を使って、自分でBASICという言語でプログラムを書いて、オリジナルのゲームを作って遊んでいました。今は亡き父が新しいもの好きで、電子工作キットやPCをいろいろと与えてくれたことが幸いしたと思います。小学生の時点では「コンピュータはプログラムをどうやって動かすんだろう?なんで画面に絵が出るのだろう?」という疑問を持っていました。
その後、中学生のころにアセンブラ(機械語)でのプログラムを始めて、「メモリにデータを書くと画面に点が出る」ということがわかり解決しました。そして、論理回路(AND/OR/NOT)を組み合わせて自分で好きなコンピュータが作れるということがわかりました。実際に電子回路としてどう動くかというのは、大学の授業で学んでも、良くわかりませんでした。しかし、大学4年生になって半導体の研究室に入り、LSIの作り方(半導体プロセス)を学んだ時に、それまでに経験したことが「全てつながった」のです。
高校時代は、1年生の間は剣道部に所属していましたが、レストランのキッチンでアルバイトを始めると楽しくなってしまって、部活を辞めてバイトばかりしていました。学校も休みがちで留年の危機だったのですが、3年生になるころからは心を入れ替えて受験勉強しました。(大学に入ったら、また留年の危機がやってきましたが。)
◆指導に関わってきた研究室の卒業生は、どのような仕事をされていますか。
研究室の学生は、一般的には情報システム・ソフトウェアを開発する企業に行くことが多いです。学生の好みによっては、組込みシステムを開発する会社や、半導体LSIチップを開発する会社に就職することもありました。ある卒業生(修士卒)は日立製作所のロボットの部署でFPGAを活用する研究開発に取り組んでいると聞いています。修士論文のテーマを活かした仕事ができているようで、私としてはうれしいです。(本人がどう思っているかはわかりませんが(笑))
◆研究室では、どのように学生指導をされていますか。
研究室に配属された4年生には教員・先輩のサポートを受けて卒業論文を書くための、教育プログラム(導入教育→卒論テーマ決定→卒業研究→論文執筆)を用意しています。4月からの導入教育では、C言語の復習から簡単な並列プログラミング、GPUやFPGAの基本的な開発に取り組みます。その後、英語のコンピュータの教科書を読む輪講(ゼミ)を行い、最新の研究情報を英語で入手する訓練をします。卒論テーマは、本人の希望と私が興味あることをマッチさせて決めていきます。とりかかってみて、ちょっと難しそうであれば修正することもあります。10月くらいから卒業研究に一心不乱にとりかかってもらって、12月中には卒業論文を書き始めてもらいます。1か月ぐらい、やはり一心不乱に書いてもらって完成したら、何度か添削して最終稿とし、プレゼンの練習等をして卒論発表会に臨み、卒業してもらいます。
4年生の指導は、最初は訓練メニューに沿って行い、段々と自主的に自分がやるべきことは何かを考えてもらうようにしています。これは、大学生というのは、卒業後に何らかの組織において「リーダー」になるべき人だと思うからです。リーダーとは、物事を自分の頭で考え、状況判断して目標を定め、周りの人の理解を得ながら目標に向かって進める人です。一昔前の日本社会は「これを達成すれば良い」という目標が明確でした。しかし、現代は技術の進歩が激しく、例えば人工知能の発達で、将来なりたいと目指している職業自体がなくなってしまうかもしれないという状況です。そのため、これからの時代のリーダーは、明確ではない目標に向かって(自分の頭で考え抜いた)信念を持って進んでいく必要があります。
大学院に進学すると、学生が自分ですべきことを自主的に考えてもらうスタイルになります。教員指導としては、学会で発表できるような研究成果がなるべく早く出るように、いろいろと提案します。週に1回のミーティングで、学生が目標に着実に向かっているかどうかの確認を行い、困っているようであれば、やっている事ややり方を一緒に見直します。そして、成果が出たらなるべく国際会議等で発表(英語)してもらいます。これは、これからの時代は日本の中だけで考えるわけにはいかず、世界規模で何を目標とすべきかを考える必要があるからです。英語で話す訓練もします。日常会話よりは学会発表の方が簡単ですよ(質疑応答は難しいですが)。その後は、学生の希望に合わせて研究テーマを深めたり、実用化・社会実装を目指す方向での研究開発をしたり、一緒に進めていきます。
◆こちらのサイトもみてみよう
◇大川先生のプロフィールのページ
◇大川先生のブログより ・「覚醒」
・「研究テーマに関して、初めて勉強する際の効率の良い学習法」
・「1対1でのプログラミングの教育」
ハルロック
西餅(講談社 モーニングKC)
電子工作x女子大生。「小さい頃、ドライバーで何でも分解していた少女は、高校時代、ひょんなことから電子工作に目覚めた(第1巻裏表紙より)」という大学生はるちゃんが、大学生活を送りながらいろいろな変なものを作っていく、というマンガです。
例えば、大学に入って知り合った、ぼっち(独りぼっち)な友人を励ますために作った「ぼっち・ザ・LED」は、小型コンピュータ基板(RaspberryPiやArduino)を使って、全世界の「ぼっちTweet」を数えて、ぼっちの人が何処にいるかを地図模型上にLED(Light Emitting Diode:光る半導体デバイス)で表示する・・・そんな工作です。ここにはインターネット連携による組込みシステムの喜びが溢れています。
伝わる・揺さぶる!文章を書く
山田ズーニー(PHP新書)
高校生向けの小論文指導のエキスパートが「書くために、何をどう考えていくか」について多くのノウハウを教えてくれます。しかし単なる技術集ではありません。文章を書くことは、考えることであると気づかせてくれます。さらに「お願いをする」「志望理由を書く」といった実践例も多くあり、文章を書くことが苦手だと思っている人におすすめです。
作文が苦手と思っている人は多いと思いますが、「何を書いたらよいかわからない」という悩みが一番多いのだと思います。そういう人は、プロローグだけでも読んでほしいです。大学受験の小論文の書き方を指導してもらう高校生女子が、著者による2時間だけの指導を受けて、どのように変わるのでしょうか。「考える方法がわかれば、文章は生まれ変わる」という実例だと思います。「意見とは何か」「なぜ、意見が出ないのだろう?」という根本的なところから読者と一緒に考えたうえで、「論点」「相手の視点に立つこと」「視野を広げること」など具体的な考え方を身につけることができます。文章の書き方は、一生役立つスキルですよ!
ソフィーの世界
ヨースタイン・ゴルデル 須田朗:監修、池田香代子:訳(NHK出版)
主人公は14歳のソフィー。「あなたはだれ?」「人間はどこからきたのか?」という哲学の問いに、昔の哲学者たちがどのように答えてきたのか、ソフィーはどう考えるのか。哲学にちょっと興味がある人への入門書として、とてもお勧めです。