最近 WebRTC Native Client Momo をROS に対応しています。ROS を知ってまだ 1 ヶ月程度なのですが、ROS と WebRTC の相性がとても良さそうに見えるので ROS と WebRTC を使った例を簡単に紹介を書いてみることにしました。

ROS は Robot Operating System の略ですが、別に OS ではありません。主に Linux 上で動作するミドルウェアです。

ROS は様々なツールやライブラリ、パッケージ機能などを提供しますが、一番の魅力は PubSub 型の通信の仕組みを提供していることです。

Image for post
Image for post

ROS Core は PubSub の Topic の Register サーバです。

USB Camera ノードは トピック “camera/image” の Publisher として ROS Core に登録します。

WebRTC ノードは トピック“camera/image” の Subscriber として ROS Core に登録します。

あとは、 WebRTC Node が MotionJPEG で送られてくる映像を VP8 や H.264 に変換して WebRTC としてブラウザに配信します。

この Publisher / Subscriber の仕組みがとても良くできていると感じています。

この通信の仕組みを上手く活用することで、 USB カメラノードとWebRTC ノードの間に FPGA や GPU で映像を解析したり、判定するノードを追加したりもできます。もしくは複数のカメラからの映像を合成するなんて仕組みも実現可能でしょう。

また、WebRTC DataChannel を活用してブラウザからなにかメッセージを送るという仕組みも良さそうです。

現在 WebRTC Native Client Momo は ROS ノードとして、MotionJPEG の映像を受け取って WebRTC として映像を配信するところまで実現できています。DataChannel に関しては公式対応は今の所は予定しておりませんが、どこかで対応したいと考えています。

ROS はロボットだけでなく自動運転の仕組みにも採用されています。ROS はリアルタイムな映像配信技術とはとても相性が良いように感じています。

ロボットを遠隔で映像を見ながら操作したり、車を遠隔で映像を操作したり、映像の解析結果をリアルタイムで配信したりなど色々な場面で使えそうです。

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store