Autoware×ロボット開発!―近刊『Autowareではじめる自律移動技術入門』まえがき公開
2021年6月下旬発行予定の新刊書籍、『Autowareではじめる自律移動技術入門』のご紹介です。
同書の「まえがき」を、発行に先駆けて公開します。
***
まえがき
2015年、自動運転用のソフトウェアAutowareが公開された。Autowareは自動運転に必要な、認知、判断、制御に関するすべての機能を実現するソフトウェアであり、オープンソースで公開されている。公開当初は、「大事なところが非公開で特定の自動車にしか使えないのだろう」と予想されたが、実際には異なっていた。Autowareは、何も隠すところなく、特定の自動車どころか、移動ロボットにまで利用できるソフトウェアだったのだ。しかし、Autowareを利用して移動ロボットを動かした、という移動ロボットプレーヤの出現が思ったより少ない。
その理由は、ロボットが購入できない/Autowareを知らなかった、といったようなものだけではないだろう。ロボットを保有していてAutowareを知っていたとしても、ソフトウェアの動作原理を知らないがために、自動運転と移動ロボットが結びつかなかった/自身の環境で動かせなかった、といったこともあるのではないだろうか? あるいは、仕事場や研究室で移動ロボットを開発することになったが、動作原理がわからず困っている移動ロボット専門外の技術者や学生もいるだろう。本書は、移動ロボットの専門家ではないが、移動ロボットを自身の環境で自律移動させたいというソフトウェア系の技術者や学生を対象として執筆した。本書を読むことで、Autowareの動作原理を理解し、自身の想定した環境で「使える」移動ロボットを開発できるようになる。
移動ロボットとAutowareの関係
「Autowareを移動ロボットに利用する」と書くと、技術の流れは「自動運転から移動ロボットへ」のように感じるが、研究歴史的には「移動ロボットから自動運転へ」のほうが正しい。2005年頃、自動運転車が公道を走るような話題はほとんど出ていなかったが、愛知万博などの技術展示で、さまざまな企業が自律移動できるロボット技術をアピールしていた。当時すでに、現在地から目的地へ障害物に衝突せずに移動するという自律移動ロボットの基本機能自体はほぼ完成していた。しかし、各社が自社のロボットに合わせた独自のソフトウェア設計をしていたため、技術伝承が難しく、ロボット技術の進化は遅かった。
日本では自社独自志向が強かったが、海外では同時期にロボットの技術をオープン化・共通化して、技術革新しようという動きがあった。そこで登場したのがROS(robot operating system)である。ROSは、ロボットを構成する各ソフトウェアのデータ通信の規格を決め、ソフトウェアを機能ごとに開発しやすくしたソフトウェアプラットフォームである。ROSは機能を開発しやすくしただけでなく、ロボットを動かすために必要な機能を一通り実装し、ソフトウェア部品として公開した。ROSを使えばロボットを簡単に動かせるということでユーザが増え、ユーザが増えたためROS対応のハードウェアを作ろうという標準化の動きが強まりだした。これまではハードウェア先行の開発であったが、ROSで動くハードウェアを作ろうという流れになったのは、ロボット業界にとって革命であったといえる。
一方、自動運転車の開発においては、以前のロボット開発と同じように技術伝承しにくい状況が続いていた。そこで、当時名古屋大学に所属していた加藤真平先生(現在、東京大学情報理工学系研究科)のチームが、ROSで作成した移動ロボットシステムに、自動運転車特有の機能を追加したAutowareを開発した。Autowareをオープンソースにすることで、自動運転車の要素技術開発者が増え、技術進化につながることになった。
Autowareは自動運転用のソフトウェアとして参照されることが多いが、誕生までの歴史を見てもわかるように、自律移動ロボット技術から生まれたものである。したがって当然、移動ロボットにも使える。日本のロボットの独自開発路線が続いたために「自動運転から移動ロボットへ」になってしまったが、自動運転用のソフトウェアAutowareで移動ロボットを動かすことは難しいことではなく、むしろ自然なことなのである。
本書の構成
原理を知らないとAutowareを使いこなせない。また当然ながら、実装法を知らないとロボットを動かせない。本書では、ソフトウェア系の技術者や学生が原理を理解して実装できるよう、Autowareの動作原理、ROSの基本、Autowareでの実装法という3部構成にした。
Autowareというソフトウェアの動作原理を理解するということは、ソフトウェアの入力に対して、どのような計算が実行されて、どのような出力が得られるかを知ることである。本書は、Autowareで実装されている各手法の原理を、以下の構成で説明している。
1.手法の概要
2.原理となる計算の説明
3.原理からわかる手法の落とし穴
手法の概要では、図などを使用して入出力や手法を定性的に説明する。原理となる計算の説明では、具体的に扱う入出力の数値と計算法を示す。最後に、読者自身の環境でAutowareを動作させるにあたり、原理を知ったからこそわかる、各手法の欠点や使えない環境などを落とし穴として説明する。原理と落とし穴を理解できれば、自身の環境でその手法が使えない原因を特定できるようになり、環境の調整やソフトウェアの設定変更・改良を行うことができる。
しかし、原理だけ知っていても移動ロボットに使うすべてのソフトウェアを新規に実装するのは難しい。そこで本書の第3部では、Autowareをベースにした移動ロボット開発法を説明している。Autowareはバージョンアップを続けているので、本書では、特定のバージョンにしか使えない説明をすることは避けた。バージョンが変わっても対応できるよう、操作やパラメータ設定の意図を、原理と結び付けて説明している。ハードウェアを必要とするロボットへの応用法だけでなく、ソフトウェアだけでロボットの自律移動の動作確認ができるシミュレーション実行法も説明しているので、ロボットをもっていなくても楽しめる内容になっている。
第2部は、Autowareでの実装を行ううえで必要となるROSのプログラミング法やツールの使い方について説明している。ROSを知らない技術者や学生にはぜひ読んでもらいたい。
ロボット開発の初心者は第1部から順番に読めばよいが、とにかくAutowareを使ってみたいという場合は第3部から読んでみるのもよいだろう。理解できない設定やツールがあれば、第1部や第2部に戻ればよい。
本書の特長
移動ロボットのソフトウェアの動作原理を知るための良書はたくさん存在する。そのなかでも本書を執筆した理由は、Autowareというソフトウェアの指針ができたために、これまで網羅的に説明されていた移動ロボットのソフトウェアに関する手法を、コンパクトに説明できるようになったからである。本書では、Autowareを使用した移動ロボット開発を行ううえで必要になる原理に説明を絞っているので、原理の理解や実装に必要な時間を短縮できると考えている。
必要な予備知識
いままでの書籍よりもコンパクトに原理を説明することに注力したが、大学1年生程度の数学の知識があれば理解できるように計算過程は丁寧に示した。また、移動ロボットを購入して使う立場の技術者や学生が、ソフトウェアの動作原理を理解できるようになることに注力しているため、一般的なロボットの書籍を読むために必要な物理の知識は必要ない。ただし、実装法の説明は、LinuxにおいてC言語やC++言語でプログラミングできることを前提としている。AutowareではROSを使用するが、第2部でAutowareを使ううえでのROSのプログラミング法やツールの使い方は説明しているので、ROSでのロボット開発経験は不要である。
本書が、移動ロボットを活用する技術者誕生の一助になることを心から望んでいる。*1
*1 第3部で作成するソースコードは、著者の GitHub (https://github.com/Meijo-TasakiLab/autoware-book)でも公開しているの で参考にしてほしい。
***
『Autowareではじめる自律移動技術入門』
https://www.morikita.co.jp/books/book/3626
著:田崎豪
●人気のオープンソースソフトウェア「Autoware」で実践!
移動ロボットを開発するためには、ハードに関する知識はもちろん、自己位置推定、障害物検出、経路生成、経路追従といった自律移動技術に関する知識が欠かせません。本書は、これらの技術の原理から実装までを、自動運転用オープンソースソフトウェア「Autoware」を使って最短で習得する実践的入門書です。
●本書の特長
・基礎理論については、一般論よりも具体的な計算や定性的な理解に重点を置いて解説。
・ROSについては、Autowareを動かすうえで知っておくべき内容に精選してゼロから解説。
・シミュレーション環境だけでなく、実ロボットへの適用例も紹介。
これからロボットプログラミングを始める方はもちろん、ROSですでにロボット開発を行っている研究者・エンジニア、ロボット系の研究室の学生にもお勧めの一冊です。
●Autoware開発者・加藤真平氏(東京大学准教授)推薦!
「Autowareは自動運転車だけではなく、移動ロボットにも使えるが、これまで移動ロボット応用に焦点をあてて解説していた書籍はなかった。Autowareを使用して移動ロボットを動かしたい場合には、ぜひ読んでもらいたい。」
【目次】
第1章 移動ロボットのハードウェアとソフトウェアの構成
1.1 移動ロボットのハードウェア構成
1.2 移動ロボットのソフトウェア構成
PartⅠ Autowareの動作原理
第2章 原理を理解するために必要な数学
2.1 本書で用いる数式表現と注意事項
2.2 多次元正規分布
2.3 偏微分とベクトルの微分
2.4 ニュートン法
2.5 座標変換
第3章 3次元地図作成と自己位置推定
3.1 3次元地図作成処理(SLAM)の概要
3.2 SLAMで実行される計算
3.3 SLAMの具体的な計算例
3.4 原理からわかる落とし穴
第4章 障害物検出
4.1 障害物検出とコストマップの概要
4.2 障害物検出で実行される計算
4.3 コストマップ作成の具体的な計算例
4.4 原理からわかる落とし穴
第5章 経路生成
5.1 経路生成の概要
5.2 経路生成で実行される計算
5.3 経路生成の具体的な計算例
5.4 原理からわかる落とし穴
第6章 経路追従
6.1 経路追従の概要
6.2 経路追従で実行される計算
6.3 経路追従の具体的な計算例
6.4 原理からわかる落とし穴
PartⅡ Autowareの実装プラットフォームROS
第7章 ROSの基本
7.1 ROS の概要
7.2 ROS のインストール
第8章 ROSによるロボット開発
8.1 ROSノードの開発
8.2 典型的なメッセージ型と独自のメッセージ型
8.3 座標変換を扱うtf
第9章 ROSツール
9.1 ノードの接続関係を確認するrqt_graph
9.2 トピック通信の内容を表示するrostopic
9.3 通信されているデータを可視化するrviz
9.4 通信されたデータを時系列で保存するrosbag
9.5 ノード起動の手間を省くroslaunch
PartⅢ Autowareによる実装
第10章 Dockerの紹介とAutowareのインストール
10.1 Dockerの概要とAutowareとの関係
10.2 Dockerのインストール
10.3 DockerによるAutowareのインストール
10.4 Autoware開発時に利用できるDockerの機能
第11章 Autowareによる自律移動の実施
11.1 Autoware起動練習用のデータの取得
11.2 メイン操作画面ランタイムマネージャーの起動
11.3 自己位置推定の起動
11.4 障害物検出の起動
11.5 経路生成の起動
11.6 経路追従の起動
第12章 Autowareによる移動ロボットの開発
12.1 Autowareとハードウェアの接続
12.2 Autowareと3次元距離センサとの接続
12.3 Autowareとロボットコントローラとの接続
12.4 3次元地図の作成
12.5 参照経路の作成
12.6 静的環境での自律移動の実施
12.7 Autowareの詳細設定
12.8 障害物回避を含む自律移動の実施
第13章 実ロボットへの応用
13.1 ロボットのハードウェア構成
13.2 Autowareとハードウェアの接続
13.3 3次元地図の作成
13.4 参照経路の作成
13.5 障害物回避を含む自律移動の実施
あとがき
索引