実行
ではさっそくカメラ映像をブラウザで見てみましょう。まずは、カメラノードを起動するところまで行います。
まずは、いつものようにROSマスターを起動します。
$ roscore
次に、カメラ画像を取得するためにカメラノードを起動します。
$ rosrun libuvc_camera camera_node
前回解説したように、コマンドラインでノード名の一覧を表示しましょう。カメラノード名を確認します。
$ rosnode list /libuvc_camera /rosout
カメラノード名は/libuvc_cameraだと分かりました。次に、/libuvc_cameraノードに関する情報を確認します。
$ rosnode info /libuvc_camera -------------------------------------------------------------------------------- Node [/libuvc_camera] Publications: * /libuvc_camera/parameter_updates [dynamic_reconfigure/Config] * /camera_info [sensor_msgs/CameraInfo] * /image_raw [sensor_msgs/Image] * /rosout [rosgraph_msgs/Log] * /libuvc_camera/parameter_descriptions [dynamic_reconfigure/ConfigDescription] Subscriptions: None ~以下略~
上記のPublicationsを見ると、/image_rawという名前のトピックをsensor_msgs/Imageというメッセージ型で発行していることが分かります。Imageというメッセージ型の名前からも分かる通り、これはROSで画像を扱う際に標準的に用いられる型です。
では、/image_rawトピックをスマホなどのブラウザに表示させるにはどうしたらよいでしょうか。ここで、web_video_serverパッケージを利用します。このパッケージは、ROSの画像トピックを、Webで扱うことができるmjpegなどの形式にエンコードして配信する、HTTPストリーミングサーバの役割を持ちます。
データの流れのイメージは下図になります。まずカメラノードによって/image_rawトピックが発行されます。ブラウザ上でHTTPリクエストが発行されるとストリーミングサーバを経由してブラウザ側に動画が配信されます。
では、ストリーミングサーバを実行してみましょう。このサーバは、デフォルトで8080番ポートをクライアント接続用に解放します。
$ rosrun web_video_server web_video_server [ INFO] [1490083960.186788634]: Waiting For connections on 0.0.0.0:8080
最後に、カメラ映像を確認しましょう。下記にブラウザ(パソコンやスマホ)でアクセスしてみましょう。?topic=以下に表示したい画像のトピック名を入力します。今回は、/image_rawです。
http://GoPiGoのIPアドレス:8080/stream_viewer?topic=/image_raw
下図のようにカメラ映像が見えましたか?
これで、USBカメラから画像を取得して、その画像をストリームとしてブラウザで表示できるようになりました。
