書評『UnityではじめるROS人工知能ロボットプログラミング実践入門』

皆さんはじめまして。東京国際工科専門職大学(IPUT)/専門学校HAL東京で教員をしている、山口 直彦と申します。普段はロボットに関わる学科(IPUT 情報工学科 ロボット開発コース/HAL東京 先端ロボット開発学科)で、プログラミングや電子回路、制作実習などの指導を行っています。

新たに担当することになった授業で本格的に「ROS」を教える必要に迫られ、既存書籍を読みながら勉強していたところ、最新のROS解説書である『UnityではじめるROS人工知能ロボットプログラミング実践入門』を知りました。さらに本書の書評を依頼いただくという幸運に恵まれましたので、僭越ながら私からの書評を以下にまとめたいと思います。(なお学内で本書を持ち歩いていたところ、「その本、私も気になって注目していたんです!」という教え子からの熱いコメントを複数もらった事も書き添えておきます。)

ロボットを動かすためには、各種センサやアクチュエータ(モータなど)をリアルタイムかつ並列に制御する必要があります。また時には複数のコンピュータ(マイコン)が連携して1つのロボットを制御することもあります。たとえば最近流行のロボット掃除機の構造を考えてみると、基本的な要素だけでも下図のようなセンサやアクチュエータが連携して動作します。

その際、それぞれを動かす制御プログラムやマイコン(以下、両者を合わせてモジュールと書きます)同士を通信によって連携するのはなかなか大変な作業になります。本書の主題であるROS(Robot Operating System)は、各種ロボットを制御するために便利なツールが集まったライブラリ集です(Operating Systemと名前がついてはいますが、実際にはLinux(Ubuntu)の上で動作するミドルウェアに相当します)。

ROSのコアとなる機能はモジュール同士が通信・連携する仕組みを標準化して提供する事です。その結果、開発者は面倒な通信部分を気にすることなく制御プログラムの開発ができる他、通信部分が標準化されたことで、他の人が作ったプログラムを組み込んで使用することが容易になります。本書は「トピック」「サービス」「アクション」というROSで使用される3つの通信手法について、サンプルプログラムを作りながら理解できるように構成されています。またROSには現在ROS1/ROS2という2系統のバージョンが存在しますが、通信部分の解説はその両方に対応しています。

本書のプログラムは主にPythonとC#で書かれているため、理解するための前提知識として、両プログラミング言語の知識が必要です。また必須とまでは言いませんが、演習内容をしっかり理解するためにはLinuxのCUI操作(シェルコマンド)とXMLの知識もある程度あった方がよいでしょう。Unityそのものに関する説明も必要最小限に抑えられているので、Unityの知識や経験がない人は注意が必要です。

タイトルではROSと並んで人工知能もキーワードに挙げられていますが、全体の構成を見るとROSの解説に大きなウエイトが置かれています。前半半分が「ROS」の使い方や通信手法の説明、後半3割がUnityを物理シミュレーション環境としてROSと連携させる説明、2割で人工知能(機械学習)によるロボット制御と、現実のロボットとの連携について説明しているというイメージになります。

人工知能の実装部分については基本的にUnityの機械学習モジュール(ML-Agents)を使用しているため、ゴリゴリとコーティングしながら人工知能の原理を学ぶことを期待する人には物足りないと思います。また本書の構成上、前半はひたすら地味な通信プログラムの練習になってしまうため、Unityというキーワードから連想して、視覚的に3Dをグリグリアニメーションしながら制作することを期待してしまうとモチベーションを維持するのが大変かもしれません。

しかしながら、ROSを使ったシステム開発の基礎知識を学びたい人や、Unityの提供するリッチな3D環境とROSを連携させたい人には、とても丁寧にハンズオンの手順が説明されている良書です。また既存のロボットモデルを流用するのではなく、シンプルなものではありますが自作のロボットモデルを作る方法を説明している所も注目すべきポイントです。この知識があれば、本書を一通り学んだ後、オリジナルのロボットを作ってUnity上でシミュレーションすることもできるようになるでしょう。

ROSが提供する通信システムとライブラリ、Unityが提供する豊富な3Dグラフィクス環境を掛け合わせた新しいロボットシミュレーションの世界が、この本から広がる事を期待します。

山口 直彦