1.概要
動画をROSメッセージとして送信したいと思い、方法を調べたところvideo_stream_opencvというパッケージでそのようなことができることが分かりました。
ここでは、このパッケージを使って動画をROSメッセージで送信する方法を説明します。
2.パッケージのインストール
sudo apt install ros-noetic-video-stream-opencv
3.使い方
このパッケージには,mp4 fileを送信するためのlaunchが用意されていてその中身は次のようになります。
これを見ると,camera.launch
の引数のvideo_stream_provider
にファイル名を入れることで動画が出力できることが分かる。
他にも
visualize=true
: gui上に動画出力
loop_videofile
: videoを繰り返し再生
等の設定ができます。
<?xml version="1.0"?>
<launch>
<!-- launch video stream -->
<include file="$(find video_stream_opencv)/launch/camera.launch" >
<!-- node name and ros graph name -->
<arg name="camera_name" value="videofile" />
<!-- full path to the video file -->
<!-- wget http://techslides.com/demos/sample-videos/small.mp4 -O /tmp/small.mp4 -->
<arg name="video_stream_provider" value="/tmp/small.mp4" />
<!-- set camera fps to (video files not affected) -->
<!-- <arg name="set_camera_fps" value="30"/> -->
<!-- set buffer queue size of frame capturing to -->
<arg name="buffer_queue_size" value="1000" />
<!-- throttling the querying of frames to -->
<arg name="fps" value="30" />
<!-- setting frame_id -->
<arg name="frame_id" value="videofile_frame" />
<!-- camera info loading, take care as it needs the "file:///" at the start , e.g.:
"file:///$(find your_camera_package)/config/your_camera.yaml" -->
<arg name="camera_info_url" value="" />
<!-- flip the image horizontally (mirror it) -->
<arg name="flip_horizontal" value="false" />
<!-- flip the image vertically -->
<arg name="flip_vertical" value="false" />
<!-- enable looping playback -->
<arg name="loop_videofile" value="true" />
<!-- start frame of video -->
<arg name="start_frame" default="0"/>
<!-- stop frame of video, -1 means the end of video -->
<arg name="stop_frame" default="-1"/>
<!-- visualize on an image_view window the stream generated -->
<arg name="visualize" value="true" />
</include>
</launch>
4.実行
4.1サンプルの動画を再生
サンプル動画を再生します。
まず動画をダウンロードします。
wget http://techslides.com/demos/sample-videos/small.mp4 -O /tmp/small.mp4
そして実行します。
roslaunch video_stream_opencv video_file.launch
するとサンプルの動画が再生されます。
4.2オリジナルの動画を送信
次にオリジナルファイルを再生する場合です。
この場合はcamera.launchを使用します。
video_stream_providerのファイル名はご自身のものに合わせていただき、次のように実行します。(※ファイル名は絶対パスを入れることに注意が必要です)
# GUI表示あり
roslaunch video_stream_opencv camera.launch video_stream_provider:=/home/hoshina/Downloads/sample-5s.mp4 visualize:=true loop_videofile:=true
# GUI表示なし
roslaunch video_stream_opencv camera.launch video_stream_provider:=/home/hoshina/Downloads/sample-5s.mp4 loop_videofile:=true
すると次のようにGUI上に動画が再生され、ros imageとしても出力されました。