ROS(Robot Operating System)について調べてみよう

　画像認識に関心があったり、機械学習に関心があったりする人は、3次元計測にも関心がある方が多いのではないでしょうか。さらには、何かを制御するということも関連の知識として役立つのではないでしょうか。
そこで、周辺分野の技術を学ぶ目的で、ROSについて調べつつあります。[ROS(Robot Operating System)](http://www.ros.org/)は、その名のとおり、Robotを実現するのに有用な環境です。しかし、この中で述べるように、ロボットを作らなくても、ROSで用いられているライブラリは、画像認識や3次元計測などの分野に役立つものです。
　ROSについて調べながら感じたことは、ロボットや制御の分野でもオープンソースによる標準化が進展しつつあるということです。画像関係がライブラリを全て自社内（あるいは属する組織内）でまかなっていた時代から、OpenCVのデータ構造とライブラリの時代になったような変化が起きているように思えます。BMPファイルを読み書きするライブラリを自作していた時代には、できることが一定以上の水準を超えることはできませんでした。共有されないソースコードやデータ構造は、死に絶えてしまって、なかったと同じものになってしまいました。制御するプログラムも、自分の属する組織の中での流儀をしていると、いずれはなかったと同じライブラリになってしまうと思います。
　とりわけ、データ形式は重要な資産です。（私も含めて）C言語で数値計算のライブラリを書籍を参考にしながら作っていた時代には、それらのライブラリで行列を扱う流儀が一定していませんでした。配列の大きさを事前にマクロ定数で宣言しているコードが多く見られました。C言語では複素数の標準化が遅れたこともあって、線形代数が標準化されない弱みも持っていました。今の時代においては、そのようなコードは品質が保証されないコードであって、しかもマルチコアやGPUの恩恵も受けることのできないコードになってしまいました。
　
　データ形式は重要な資産です。その有益なデータ形式にあわせてライブラリが蓄積してきます。ライブラリがそろってくると互換インタフェースを持つライブラリや、それらのライブラリを活用する高次の機能がそろってくるようになります。
　Pythonでは[numpy](http://www.numpy.org/)がそのようなデータ形式です。[scipy](https://www.scipy.org/)やcv2や[scikit-learn](http://scikit-learn.org/stable/)など多数のライブラリがそのデータ形式の上に育っています。標準的なデータ形式となっているからこそCythonのような言語も作られ、numpyをC/C++から効率的に利用する枠組みが提供されたり、C/C++を用いて効率的な実装をするようになっています。これらは全て有益なデータ形式が標準化されている恩恵によるものです。
　こういった変化が、ROSによって生じているように思えるのです。ROSによって制御の仕組みが標準化されたことと、機械学習の枠組みとが同じ土俵の上にのってきたことで、1人の人間が、制御も機械学習も両方のコードを書くことができて、それによって今までだったら実行が困難だったアイディアを実現できるようになるのです。

　ROSの導入は、個々の機器の固有の話と、ロボットの操作という共通の枠組みで考える制御の問題とを明確に意識するようにしていくことと思えます。あなたの抱える開発がROSの枠組みの中で自然に実現できるものなのかどうか、ROSの例題を調べてみてください。
　ROSでは、C++, Pythonの両方とも使える。
　
2016 年の画像センシングシンポジウムでもチュートリアルセッションで紹介されています。
[SSII2016チュートリアル : ROSによるロボットソフトウェアの開発](http://mprg.jp/tutorials/ssii2016_ros)
SlideShare [ROSによるロボットソフトウェアの開発]（http://www.slideshare.net/yyamauchi/ros-62750941）

tf: 座標変換、フレーム作成
pcl：ポイントクラウドライブラリ
OpenCV:画像認識ライブラリ
usb_cam:USBカメラとの接続
などのライブラリが充実しています。

自律ロボット開発にROSを使うべきいくつかの理由
http://myenigma.hatenablog.com/entry/20130208/1360324464

----
[世界で一番簡単なtfの使い方](http://myenigma.hatenablog.com/entry/20130210/1360491625)
[座標変換パッケージ "tf"のお勉強](http://makemove.hatenablog.com/entry/2014/09/17/000042)
[tf,tf2完全理解](http://www.slideshare.net/kojiterada5/tftf2)



-----------------
[Raspberry Pi + ROSでUSB Cameraを使う](http://karaage.hatenadiary.jp/entry/2015/10/29/073000)


----
[【シリーズ「PCLを触ってみよう!」第一回】3D点群処理ライブラリ「Point Cloud Library」の概要](http://derivecv.tumblr.com/post/10198738207)

[【PCL入門】 Point Cloud Library について](http://predator.hateblo.jp/entry/2014/10/13/192947)

----------------------
###ROSのインストール
[ROS Indigo の Ubuntu へのインストール](http://wiki.ros.org/ja/indigo/Installation/Ubuntu)
[1.ROSのインストール](http://watada.info/rosguide/01.html)

[ROS Indigoのインストール](http://robot.isc.chubu.ac.jp/?p=35)
[ROS (Robot Operating System) のインストール](http://qiita.com/Suna/items/2afb31eb245a36748d06)
[RaspberryPi2のjessieにROSのindigoをインストールする最新版](http://garretcafe.com/blog/3169)


####ROSをJetsonにインストールする方法の説明
http://wiki.ros.org/NvidiaJetsonTK1


####Raspberry Pi 2にROS(Robot Operating System)をインストールしてみる
http://karaage.hatenadiary.jp/entry/2015/09/25/073000


####Raspberry Pi 3 にROSをインストール
http://ishi.main.jp/ros/ros_rpi3.html


####Zynqを利用したボードにROSをインストールする
[Xillybus and ROS on Ubuntu14.04 on Zybo Part 4 : Zybo上における設定~ROSのインストール](http://qiita.com/kazuyamashi/items/4489a84452821746f9a4)

 ROSは、ロボットの制御の分野の標準的な枠組みとして普及するのではないかと私は思っています。そのときに組み込み系のCPUでどれだけROSが快適に動作するのかがポイントです。制御の分野では各種IOが重要になります。その各種IOに対する設計の自由度の高いのがFPGAです。GPUは並列計算を速くすることはできますが、各種IOに対する自由度は高めてくれません。マルチコアのCPUとFPGAが組み合わさって自由度の高い、しかも低消費電力のシステムが作れるの可能性があります。


[FPGAでROSを動かそう](http://qiita.com/kazuyamashi/items/a99e216b780ad4786a99)


BeagleBone Black
[BeagleBone Black (BBB)](http://wiki.ros.org/BeagleBone)

[BeagleBone Blackにubuntuをインストールする](http://cyberworks.cocolog-nifty.com/blog/2014/10/beaglebone-blac.html)




Armadilloボード(Atmark Techno)でのROSのインストールについて調査しよう。


The Armadillo Goes Mapping(これは　Armadilloという名のロボット)
http://www.showusyoursensors.com/2010/11/armadillo-goes-mapping.html

-----------------------
Robots Using ROS
http://www.ros.org/news/robots/mobile-robots/


ROSの開発に関係しているWillow Garageの以下の記事が興味深い。
[ロボットの“PARC”「Willow Garage」が撒いた種 (1/4)](http://monoist.atmarkit.co.jp/mn/articles/1607/22/news008.html)


[「ROSプログラミング」](https://www.amazon.co.jp/ROS%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%8A%AD-%E9%A3%9B/dp/4627853416/ref=sr_1_1?ie=UTF8&qid=1471110172&sr=8-1&keywords=ROS)

[「ROSではじめるロボットプログラミング―フリーのロボット用「フレームワーク」 (I・O BOOKS)」](https://www.amazon.co.jp/ROS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E2%80%95%E3%83%95%E3%83%AA%E3%83%BC%E3%81%AE%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E7%94%A8%E3%80%8C%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%80%8D-I%E3%83%BBO-BOOKS-%E5%B0%8F%E5%80%89-%E5%B4%87/dp/4777519015/ref=sr_1_2?ie=UTF8&qid=1471110172&sr=8-2&keywords=ROS)


[ROSの基本的な開発をしよう](http://qiita.com/kazuyamashi/items/53104e2174d2df751868)


####付記：
じゃあ、ライブラリが標準化されていったとき、「お前のする仕事はあるのか？」という問いかけはあるでしょう。ある種のライブラリは、適切に使うことが簡単ではありません。その分野の開発経験や利用経験は、ライブラリが標準化されても役に立つものです。ライブラリが会社の独自形式のライブラリのである場合には、部署を変わったときには、その個人の経験が活用しきれないことになりがちです。ライブラリが標準化されてきたときには、個人の経験が異なる部署ですぐに活用ができることになります。

適切にライブラリを使う事が、誰にでも容易とはかぎらないことは、3次元計測を、自分でしてみるなり、誰かにさせてみれば、分かります。実際の対象物の状況や照明やカメラの状況によって3次元計測の結果は容易に、誤差の大きすぎる状況となってしまいます。
　ROSを使うシステムは、実空間の様々な要因が影響すると思われます。ですから、それらを適切に使うことは、それなりの勘所(ノウハウ）が必要になり続けるでしょう。
　

ライブラリが標準化されていったとき、「お前のする仕事はあるのか？」という問いかけに「ある」と私は思います。もし、ライブラリが標準化されてしまったことで、仕事がなくなってしまうようなものならば、各種のライブラリを（ソースコードも含めて）公開している企業は、自分の仕事がなくなってしまうことを意味します。しかし、実際には、コードを公開しつつ、それらのコードを効果的に使う実例を開発していくことで、利益を得ています。

　

　初期の開発者が試行錯誤した後に、アルゴリズムやライブラリが進んだオープンソースを使う人は、自分自身による理解をどこまで深めるかによって、初期の開発者が達成した以上の成果を挙げることが出来るはずです。ですから、Asimo相当のロボットを開発する場合、Asimoの開発に要した労力に比べてはるかに短い時間で開発できるはずです。その場合の一番のポイントは、アルゴリズムやライブラリについて、開発者がどれだけ理解しているかということではないかと思っています。1人の技術者が理解できる内容も、このように整理された結果を受け取って、それらのノウハウを理解ていくことで、いいものが作れる時代になっているのです。



[Youtube で　Robot Operating Systemを検索する](https://www.youtube.com/watch?v=nKIOb6lyrlI&list=PL9OuRVzTEw8BX-mx827XY5LwMjMPzHIBa)


-------------------

[画像認識を利用したドローンのコーディング方法](http://qiita.com/nonbiri15/items/1ed21fb75979ed55e158#comment-155c405aa39d1328dcbb)の記事はROSを使用していた。

ROSの開発に関係しているWillow Garageの以下の記事が興味深い。
[ロボットの“PARC”「Willow Garage」が撒いた種 (1/4)](http://monoist.atmarkit.co.jp/mn/articles/1607/22/news008.html)


Robots Using ROS
http://www.ros.org/news/robots/mobile-robots/


[ROS勉強記#9　ステレオカメラとキャリブレーション](http://www.youtalk.jp/post/101884117553/stereo-camera-calibration)
(https://www.e-consystems.com/jp/3D-USB-stereo-camera-jp.asp)

[3D ビジョンおよびロボットビジョン用途向けのステレオカメラ!]

(https://jp.ids-imaging.com/ensenso-stereo-3d-camera.html)


[TurtleReal2を作る](http://forestofazumino.web.fc2.com/turtlereal2/turtlereal2_appendix2.html)

[安曇野の森から > ROS(Robot Operating System)を使う](http://forestofazumino.web.fc2.com/ros/ros_top.html)


以下のように勉強会などがあります。

[ROS勉強会](https://ros-users.doorkeeper.jp/)

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


[FPGA×ROSでFPGAをプラットフォームとしたロボットを実現するプロジェクトOpenReroc](http://qiita.com/kazuyamashi/items/47fc69ac955f110d55bc)