正確にはNAOqi Frameworkと狭義のROSの比較になります。
ライブラリや生態系では圧倒的にROSが巨大だと思います。
多言語化
PythonとC++をベースとするところが似ています。
NAOqi | ROS | |
---|---|---|
メイン言語 | Python/C++ | C++/Python/Lisp |
Server (呼び出される側) | △ C++のみ | ◯ C++/Python/Lisp/Java/matlab/... |
Client (呼び出し側) | ◯ 上記 + .NET/Java/matlab/... | ◯ 上記 + Javascript/.. |
NAOqiでは関数を外部から呼び出す側(クライアント)は豊富に用意されていますが、呼び出される側(サーバー)はC++のみのサポートとなっています。
分散環境
NAOqi | ROS | |
---|---|---|
呼び出し方式 | RPC | PubSub(Topic) / RPC(Service) |
ローカル呼び出し | ◯ | △ (Nodelet) |
遠隔通信方式 | △ (SOAP) | ◯ (TCP) |
ROSは接続だけXMLRPCで遅いですが、その後の通信は生TCPなので、
結構早いです。
一方でNAOqiは遠隔呼び出しがすべてSOAPなので、基本的に遅いです。
非同期呼び出し
NAOqi | ROS | |
---|---|---|
◯ (post) | △ (Actionlib) |
ROSではPubSubをうまく組み合わせたActionlibという仕組みを使って非同期呼び出しを行います。結構面倒です。
それに比べてNAOqiはmodule.doSomething()をmodule.post.doSomething()とするだけで非同期呼び出しになるので、非常に簡単です。
総括
NAOqiフレームワークはシナリオ記述のために非常に便利であると思います。ROSはPubSubを基本とするので、シーケンスで何かを書くのが非常にやりづらいです。(そのため、部品としての独立性が高まると思います。)
ROSは汎用的な部品のためのミドルウェア、NAOqiはロボットを動かすためのSDKという側面が強いですね。
間違いとかあると思いますので、twitterやコメントでご指摘いただけるとうれしいです。