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では、(基本上の逆)

  • 複数ロボットのチームを想定
  • 小さな組環境下のプラットフォームもサポート
  • リアルタイムシステム
  • 低品質なネットワークも想定
  • 商用での活用も視野
  • 自由度を残しながらパターンを提供できるように.

を目指しますよー

ってことで何となくは理解できた気がする.