ROSとROS2の違いを基本英語サイト,ROSのFAQを中心に情報収集して調べたのでまとめ.
参考サイト:
https://answers.ros.org/question/287470/what-is-the-difference-between-ros-and-ros2/
http://design.ros2.org/articles/changes.html
https://index.ros.org/doc/ros2/
http://design.ros2.org/articles/ros_on_dds.html
http://design.ros2.org/articles/why_ros2.html
違い①: rosmaster / Masterの有無
ROS1の方ではrosmasterが必要だった.nodeはrosmasterに他のnodeのありかを聞く.
ROS2の方ではrosmasterが必要なくなり、node同士が自分達を見つける.
同じネットワークセグメントにあれば相手を見つけられる.

違い②:Pub/Sub通信のための仕組み
違い①にも影響を及ぼしているが、
ROS1 : 独自のシリアライゼーション、独自のプロトコル、独自の通信相手検出
ROS2 : End-to-Endで通信周りを面倒見てくれるpeer-to-peer外部ミドルウェアDDSの採用
DDSは広く既に普及しているもので実績もあるため.
違い③ : サポートOS
ROS1 : UbuntuのみCI対応
ROS2 : Windows 10, OS X EL Capitan, Ubuntu Xenial のCI対応
違い④ : メインプログラミング言語バージョン
ROS1 : C++03のみ
Python2
ROS2 : C++11 とか C++14、 C++17に対応するかも
Python3.5
違い⑤ : ビルドシステム
ROS1 : CMakeのみ
ROS2 : CMake以外のも簡単に導入することができる. Python飲みのツールもある.
ここの違いは、ビルドの方針がワークスペース全体ではなく、それぞれにビルドするという方針の違いからも来ているのかな?
http://design.ros2.org/articles/changes.html
他個人的に感じた些細な違い
launchファイルがpythonになる.(https://index.ros.org/doc/ros2/Launch-system/)
ビルドシステムはcatkinからcolconになる( ROS Bouncyから. https://answers.ros.org/question/294532/what-is-colcon-build/)
余談: なぜROS1を拡張しなかったのかに関しての言及
ROS1に変更を入れて拡張することもできたが、既に多くのユーザが使用しているROS1に入れるのはリスクが高すぎた.そこでROS2の開発中にROS1への影響が出ないようにする必要があったため、別物としてROS2を用意した.
(http://design.ros2.org/articles/why_ros2.html の Why not just enhance ROS 1より.
さらに他余談
ROS2は上記のようにROS1とは全く別に作っており、ほぼスクラッチから実装.一部のみポーティングしている。
http://design.ros2.org/articles/why_ros2.html
からいろいろ訳すと
ROS1では主にPR2(というロボットの種類)に対応するように作られていたため、
設計思想において、
- 単体のロボット
- ワークステーション並みの計算資源;
- リアルタイム性の要求はなく、あってもそれっぽい形で提供
- 有線などの十分な帯域環境を想定
- 学術的な目的のために作成
- 自由度を最大限残す
を重要視していたが、時代がかわり多くの種類のロボットが出てきた.ホイールのついたロボットに限らず産業用ロボットから足のあるヒューマノイドロボットなどまで使用されるようになってきた.
そこでROS2では、(基本上の逆)
- 複数ロボットのチームを想定
- 小さな組環境下のプラットフォームもサポート
- リアルタイムシステム
- 低品質なネットワークも想定
- 商用での活用も視野
- 自由度を残しながらパターンを提供できるように.
を目指しますよー
ってことで何となくは理解できた気がする.