ロボットの知能の仕組みの勉強や開発におすすめの入門書・サイトまとめ

# はじめに
筆者は学生時代から約１０年ほどロボットの研究開発をしています。
ふと昔を思い返してみると、特にロボットの自律移動（巷ではロボットの知能と呼ばれる部分）に関しては、どこからどう勉強し始めたらよいのか分からず苦労した思い出があります。そこで、今回はこれからロボットの知能分野について学びたいという方に向けて、勉強していく道筋の一例を紹介してみようと思います。

※Amazonのリンクを貼り付けていますが、アフィリエイトリンクではないです。

# １. 全体像を理解するための良書３選
まずは全体像を理解することが先決です。本章ではそのための道筋を示します。全体像を理解することが主目的で選定してはいますが、３種類の本をしっかり理解すれば、各要素技術の中級程度の実力をつけることも可能です。

## STEP１ 【とにかく易しい】概要を理解するのに最適で文系の方でも読める良書
### ビギナーロボティクス 初学者のためのロボットの移動知能入門
本のタイトルの通り、ロボットの移動知能（自律移動分野）の初学者にうってつけの本です。難解な数学的な表現等を一切排除し、感覚的に自律移動の概要を理解することができるような構成になっています。内容は100ページ程度にうまくまとめられており、とても分かりやすいので最初の一歩におススメです。価格も安いので、初学者にとってはもちろんのこと、ロボットの自律移動を専門にするかどうか迷っているような方にとっても非常に手が出しやすいです。文系の方でも無理なく読めるので、教養として読んでみるのもありだと思います。

![ビギナーロボティクス_amazon.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/49762c2e-29a9-199b-467c-d34717b41d23.jpeg)


https://www.amazon.co.jp/dp/B0B6RTPKRY/ref=cm_sw_r_tw_dp_FS88A0YASSREX5W092G8


# STEP２ 【一気に脱初心者】自律移動に必要な要素技術を手を動かしながら学ぶことのできる良書
## 詳解 確率ロボティクス Pythonによる基礎アルゴリズムの実装
2019年に出版されて瞬く間に有名になった本です。数学的な表現がなされている部分もありますが、解説がとても丁寧なので無理なく読み進めることができます。さらに本書は解説した内容をプログラムに落とし込むところまで記述しているのが特徴で、理論から実践までをシームレスに学ぶことができます。本書の学習を終えた頃には、簡易的ではありますがシミュレーション上でロボットの自律移動のプログラムが書けるようになります。また、ロボットの自律移動になぜ“確率”が必要なのか初学者にはなかなか理解できませんが、本書を読めばそのあたりの理解も進むかと思います。

![詳解確率ロボティクス_amazon.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/a42e59a8-fda4-f5d9-10bf-afdf34bdd777.jpeg)


https://www.amazon.co.jp/dp/B082SN3VTD/ref=cm_sw_r_tw_dp_Q0Z5V6THE7KN4H3NBEMN

# STEP３ 【ロボット研究者の登竜門】ロボットの研究者で知らない人はいない超バイブル
## 確率ロボティクス
ロボット系の研究者であれば誰でも一度は読んでいると言っても過言ではないほどの超バイブルです。内容はとても充実していて、読んでかつ内容を他の人に説明できるレベルになれば「ロボット系の研究をしています」と言えるくらいの実力が身に着くと思います。初学者の最初の一冊としては少し難しいのであまりお勧めしませんが、STEP1, 2と段階を踏めばわりとスムーズに読み進めることができるはずです。

![確率ロボティクス_amazon.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/34b171c6-a385-8da8-c2ae-8ae16e2bc725.jpeg)


https://www.amazon.co.jp/dp/B00X99MBY2/ref=cm_sw_r_tw_dp_8W8SE4FSYH76FS1VPWNV


# ２. 専門書や論文を読み進めたりソフトを実装する際にあると役立つ良書やサイト

# 2.1 【数学】
筆者の主観も若干入りますが、ロボットの自律移動の研究をしていて最も重要だと思う数学の分野は最適化数学と確率です。要素技術の殆どには最適化数学または確率もしくはその両方の知識が求められます。一昔前まではこれに加えて、ロボットやセンサデータの座標変換に必要な線形代数の知識が特に実装の観点でとても重要だったのですが、近年はROSやROS2を始めとするオープンなソフトウェアの普及により座標変換は概念さえ分かっていれば何とかなる時代になっています。なので新人やロボットの道に進みたい学生に「基礎力をつけるために何を勉強したら良いか」を問われた際には、迷わず最適化数学と確率の勉強を勧めています。

## 最適化数学

最適化数学はSLAMや自己位置推定のグラフ最適化や経路計画や行動計画におけるパスの最適化、最適制御など、ロボットの自律移動のあらゆる要素技術に使われます。そのため、最適化数学を理解することはとても重要です。ソフト実装の観点で言うとオープンな最適化ソルバが多くあるのでそれらに頼ると良いと思いますが、そもそもの概念を抑えないとソルバもまともに使えません。

まずは最適化数学を学ぶためにお薦めの本を紹介します。

## これなら分かる最適化数学: 基礎原理から計算手法まで
数学はイメージが大切であると思いますが、本書は幾何学的にイメージしやすいように非常に丁寧に書かれているので、数学に苦手意識がある方でも読み進めることができることができると思います。学び初めの最初の一冊としても、持っている知識を固めるための一冊としてもとてもお薦めです。

![最適化数学_amazon.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/fbd08385-60d4-2720-a319-d81649529021.jpeg)

https://amzn.asia/d/dqXfafz

## 統計学

続いては統計確率についてです。近年データ分析（過去のデータを用いて対象の傾向をつかんだり、未来を予測したりすること）の重要性が増しているため、「統計学は最強の学問である」と言われるほど多分野で重要視されています。
　
もちろんロボティクスの分野も例外ではありません。特に移動ロボットは基本的に不確実性を含んだ環境で動作をします。例えば、ロボットが搭載しているカメラやLidarなどの観測データは必ず正しいとは限りませんし、ロボットが１０ｍ北方向に進んだつもりでも、車輪が滑るなどの様々な要因により、厳密に１０ｍかつ北方向に進めていることは極めて稀です。このような不確実性を扱うためにはロボットが置かれている環境を統計確率を駆使してモデル化する必要があります。

また、ロボットの認識（人を始めとした物体認識や会話するための音声認識など）にはディープラーニングを始めとする機械学習と呼ばれる分野が必要不可欠ですが、統計学はそれらを学ぶための基礎知識として必須です。

統計学を学び始めるためのおすすめの本は下記になります。

## 統計学入門 (基礎統計学Ⅰ)

約３０年ほど前に出版された古い本ですが、未だに多くの人に読まれる良書です。古いと言っても４０版ほどアップデートを繰り返しており、内容がメンテナンスされています。初学者にとっても分かりやすく、かつ一定のレベルを保っているので一冊理解すれば力がつきます。近年の統計学の重要性から、統計検定を受験する人が増えているのですが、受験するための参考書の一冊として選ぶ人も多いようです。

![統計学_amazon.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/1dd3e561-2d75-707f-e958-7d198fef7f8e.jpeg)


https://amzn.asia/d/fnKLfDh

# 2.2 【プログラミング】
ロボットのソフトを開発する上でプログラミングは必須です。その中でもC++やpythonはROSというロボットのソフトを開発するためのミドルウェアを使った開発をする上では必須なので、ロボットを研究開発する上ではファーストチョイスの言語になると思います。そこで本節では、筆者がC++とpythonの入門書としてお勧めする本を紹介します。

## ローベルのC++入門講座

C++を学ぶ上で定番の本の一つです。とても分厚くボリューム感に圧倒されますが、読み進めると一章一章丁寧に書いてあるので読みやすく、一冊学び切れば確実に力が付きます。学習し終わっても手元に置いておくと便利で、言うなれば辞書のような感覚でも使えます。

![ローベル.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/2622cb1d-6cad-06cc-4bf0-d3b87a513fac.jpeg)

https://amzn.asia/d/85nTtnu

## みんなのpython

入門書の定番として紹介されていることは少ない気がしますが、個人的におすすめなのがこちらの本。二冊目として本書を選ぶ人もいるようですが、入門書としても十分使えます。環境のセットアップが若干めんどくさいですが、内容はわかりやすく、コスパ重視の方にとてもおすすめです。

![みんなのpython.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/7984bf52-31ba-6ea8-bcc6-41285c47a58b.jpeg)

https://amzn.asia/d/doxqQfN


# 2.3 【ROS】

プログラミングが最低限のレベルに達したら、実際にロボットのソフトウェアを開発してみた方がプログラミングのレベルも上達しますし、ロボットの知識も身に付きます。

そのロボットのソフトウェア開発において、現代では必須だと言っても過言ではないのがROSというミドルウェアです。ROSにはROSとROS2という２つのバージョンがありますが、現段階ではROSの方が世の中に出回っている情報も多く、初心者向けなので特にこだわりや制約がなければROSからスタートして徐々にROS2を学んでいくのがよいと思います。


## ROS

## 詳説 ROSロボットプログラミング

なんとこの本、**無料**です。
にもかかわらず、安かろう悪かろうではなく、とてもわかりやすいです。
数百ページあるので読みごたえもありますし、“ROSとは何か”が一冊で掴めます。手を動かして簡単なアプリケーションを作りながら学べたりもするのでお勧めです。他の本に手を出すとしても、まず一回本書に目を通してみるとよいと思います。

https://github.com/bmagyar/rosbook_jp

## ROS tutorial

ROSについて概要をなんとなく頭に入れたら、実際に手を動かしましょう。
手を動かし始める時点でROSを完璧に理解している必要はないです。繰り返しになりますが、「雰囲気が分かった」くらいのなんとなくの理解で大丈夫です。それよりは手を動かして分からないことを都度調べる方が圧倒的に学習効率が良いのでおすすめです。

手を動かす際にまずおすすめなのが、ROSのチュートリアルです。ROSの基本的な機能を一通り試せるのでとてもおすすめです。

http://wiki.ros.org/ROS/Tutorials

上記は英語版のサイトなのですが、一応日本語訳したサイトも存在ので下記に掲載しておきます。
英語版にしかない情報があるので、英語版を頑張れる人は英語版で学習するとよいと思いますが、学習効率を考えて日本語版をまずやってみるというのも一つの選択肢だと思います。

http://wiki.ros.org/ja/ROS/Tutorials

## Navigation stack tutorials

Navigation stackはロボットの自律移動の枠組みがワンパッケージで入っているソフトウェアです。枠組みについてはあくまで一つの考え方で、これが全てではありませんが、全体像を俯瞰しながら手を動かせるので６章のチュートリアルはおすすめです。

http://wiki.ros.org/navigation

※これも日本語版がありました。が、内容については英語版と比較すると若干歯抜けがあるかもしれません。

http://wiki.ros.org/ja/navigation


## ROS2

まず正直に申し上げますと、筆者はROS2に関しては本書しか読んだことがありません。
ですがお勧めできる一冊です。

今でこそROS2に関する本は増えてきましたが、ROS2が徐々に普及し始めた2, 3年前まではこの本しかありませんでした。本書が切り込み隊長的な役割を果たし、日本におけるROS2ユーザーを増やしたといっても過言ではありません。

本書はROSとROS2の違いがよくまとめられているので、ROSを学んだあとに読むとわかりやすく、学習効果がよく出ると思います。

一方で、ROSについても前半でまとめられているので、ROSを学習せずにROS2から学習し始める人にとっての入門書としても使えるかもしれません（筆者は当時ROSについてはよく知っていたので、前半は読みませんでした）。

![ROS2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/eb276571-99fd-3b98-0ee8-8feffef677d5.jpeg)


https://amzn.asia/d/77o9OOa


また、下記の本は筆者はまだ読んだことがありませんが、[出村公成先生](https://www.amazon.co.jp/%E5%87%BA%E6%9D%91-%E5%85%AC%E6%88%90/e/B0B629GW8Q/ref=dp_byline_cont_book_1)が著者に入っている本なので、きっと分かりやすいと思います。私は学生時代にロボットの挙動解析でODE（Open Dynamics Engin）という動力学シミュレーションを扱ったことがあるのですが、出村先生のODE関連のサイトやODEの本は生徒目線でとても分かりやすく、当時非常に助けられた覚えがあります。

![ROS2プログラミング.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/20562869-2c0c-1ee3-1560-83b78d11ad96.jpeg)

https://amzn.asia/d/iT086D3

# 2.4 【ロボット開発に必須な環境/ツール】

## Linux
多くの方がPCのOSとしてWindowsやMacを使っていると思いますが、ロボットのソフト開発に一番多く使われているOSはLinuxです（次点でMac、Windowsはほぼ使われません）。

理由は色々あるのですが、例えば「組み込みに向いているからです」などと言われてもピンと来ないと思うので、最初は理屈ではなく「ロボット開発に必須のOSなんだ」と思っておけばOKだと思います。徐々に感覚が身につくと思います。


ちなみに前節で紹介したROSもLinuxのubuntuというOS上で動作します。仮想環境を使えばubuntuはwindowsやMac上でも動かせますが、仮想環境にせよLinux自体の知識は必須なので勉強する必要があります。

Linuxの勉強をする上でおすすめの一冊は下記になります。OSなのである程度きちんと理解する必要がありますが、本書はLinuxの導入の仕方から仕組み、扱い方までバランスよくまとまっています。いきなりPCのOSをLinuxにしなくていいように仮想環境での環境についても言及しているのでその点も入門書としては最適だと思います。


![Linux.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/c242054a-fd30-6609-3d58-59d020130464.jpeg)


https://amzn.asia/d/81Xm4iZ



## Git
ソフト開発する上では必須となるソフトウェアです。
ソフトの開発では、ソースコードを頻繁に書き換えます。例えば編集したいソースコードのファイル名が「robot_source.cpp」であったとして、編集するたびに「robot_source_2.cpp」、「robot_source_デモ用.cpp」などファイル名を変えて保存していたら大変なことになります。この問題を解決する概念が「バージョン管理」です。バージョン管理ソフトの中でも最も世界的に使われているのがgitです。なのでgitは必ず習得が必要です。

gitを学ぶために役立つサイトは下記になります。サイトなのでもちろん無料、それでいてとてもよくまとまっています。書籍を購入するとしても、まずはこのサイトでの入門がお勧めです。

https://backlog.com/ja/git-tutorial/



## Docker
近年重要性が日に日に増しているソフトウェアです。コンテナ型の仮想環境を構築し、配布したり実行したりできます。


ロボットのソフト開発は環境構築が面倒で、また、ハード・ソフト双方の要求により実効環境を変更したいニーズが出てきたりもします。そんな時に開発メンバが各々環境構築をし直すのには時間がとてもかかりますし、場合によってはPCを買い足すことにもなりかねません。

そんな悩みを解決するのがDockerで、Dockerの仮想環境一つ作ってメンバに配布すれば、メンバはその仮想環境を起動するだけで環境構築が完了します。

とても便利なので、ロボットのソフトを開発する人には必須となりつつある技術です。筆者もDockerを知らない新人が入ってきた時にはマストで教育するようにしています。


筆者が新人に教えるときはハンズオンで手を動かしながら概念を教えるのですが、書籍のおすすめを聞かれたときは下記をおすすめしています。だいぶ詳しく、“ただ使えればよい”という初級の域を出ている内容も多く含まれますが、仕組みから理解しておくと応用が利くのでお勧めです。


![docker.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456240/6fd7b901-2a90-a09b-fd8b-88a446b504b8.jpeg)


https://amzn.asia/d/ds8xbHa





# 2.5 【知っていると役立つサイト】

## MyEnigmaさんのサイト

ロボットの研究開発をしている若手なら一度はお世話になったことのあるサイトだと思います。ロボティクスについての個人ブログを運営されている方々の中では圧倒的に知名度が高いです。

知名度の高さは、記事を見れば納得すると思います。とにかく読みやすいです。ここでページを閲覧しなくても、いつかロボットの勉強や開発に際しての「困った」を解決するためにネットで色々調べる過程でMyEnigmaさんのなにがしかの記事を見ることになると思うので知っておいて損はないです。

https://myenigma.hatenablog.com/archive/category/Robot


# おわりに

いかがでしたでしょうか。

ロボットの自律移動の仕組みを勉強したり、実際に開発したりするためには多くの知識・スキルが必要で、なかなか全体像が見えないので、「勉強の道筋を立てたい！」という方向けに本記事を執筆してみました。

何かを学び始めるときにはその道の専門家にどう学ぶかの道筋をつけてもらうのが一番早いと思うので、本記事が皆さまのお役に立てれば幸いです。

ここで一旦切り上げ＆公開させていただきます。まだまだ追記していくので、よろしければたまに覗きに来ていただければと思います！