2017年1月27日金曜日

[備忘録][ROS] video-stream_opencvを使って、mp4ファイルを読んでpublishしてみた(kinetic)

こんにちは


携帯で撮った動画(mp4)をROSでカメラのデータ読み込む代わりに
どうやって使うんだろう、と調べてやってみたのでメモ。


参考にしたのは以下。
http://wiki.ros.org/video_stream_opencv


手順


とりあえずkinetic対応してなかったので、ソースコードをもってきて、ビルド。

$ git clone https://github.com/ros-drivers/video_stream_opencv.git
$ cd ../catkin_ws
$ catkin_make


よっし、動かすかーと使ってみたところ、なぜかファイルのopenに失敗、とでて実行できず。。
(追記:後で調べたらlaunchファイルのパスの指定がよくわからない感じで絶対パスで指定したらあうまくいきました。)

ファイルを置く場所かなーとか色々調べてみたんですが、結局原因がわからなかったので、
深追いをしないで諦めようとしたところ、scripts以下にtest_video_resource.pyを発見。

test_video_resource.pyは指定したファイルを再生して、OpenCVのcv2.imshowで動画を表示していたので、以下のように修正。

#cv2.imshow("Stream; " + resource_name, frame)
pub.publish(bridge.cv2_to_imgmsg(frame), "bgr8")


そしてこのままだと再生スピードが速すぎたので、while文の中でrate.sleep()を使って表示速度を修正。

rate = rospy.Rate(54)

while rval:
  (中略)
  rate.sleep()


これでやりたいことができました。わーい。
なぜか元のやつは使えなかったけど、やりたいことはできたのでよしとする。


全然関係ないけど最近更新もしてなくて、自分用のメモだしこのままフェードアウトかなーって思ってたら、外国語のブログでusb-camの使い方参考にしてるのを見つけてしまってうわ、個人用のメモが誰かの役に立ったかも!とちょっとうれしかったので自分がやったことはメモ残しとこうと思いました。よかったよかった。

【追記】

使えなかった理由を少しみてみたらちゃんと動いたので動かし方追加。

launchディレクトリ内にあるvideo_file.launchファイルの、video_stream_providerというパラメータのvalueを絶対パスに書き換えたら再生画面が立ち上がりました。

ここで指定したファイル名をsrcディレクトリの中のvideo_stream.cpp内でopenしていて、最初はそこでパスが間違っててopenが失敗してました。

ということで、kineticでもちゃんとvideo_stream_opencvは使えそうです。(publish部分はテスト用ファイルで事足りたので見てませんが)


0 件のコメント:

コメントを投稿