2019年10月21日月曜日

【備忘録】ハードウェアエンコードで映像をH.264にするカメラ(BRSD038)をROSで使おうとしたら難航した話

結論: 現状存在するROSパッケージではカメラから取得したH.264の映像をsenser_msgs/imageとして公開するものはない.

usb_camパッケージではmjpegとyuyvに対応できるが,今回使うカメラ(BRSD038 Panasonic)はH.264をデコードする機能が必要である.

H.264を変換するパッケージは存在するが,メッセージの型が独自なためそのままは使えない.利用するとしたら自力でOpenCVを使うかして任意のメッセージの型にしなければならないだろう.

調査したところ,Gstreamerの画像をROSのtopicとして公開するノードを利用して,,H.264のカメラ画像を取得ができるようにしている人もいるようだ.参考

使ってみたがどうもBRSD038には使えないみたいだった・・・
logicool C930ではGstreamerを使うところまでできたが,肝心のBRSD038にはGstreamerが使用不可のようで諦めた.

このBRSD038はカメラと取扱説明書,ジンバルを制御するための基板付属で手に入れたのだが,簡単には行かなかった...
もしかしたら今は開発キットにSDKがついているらしいのでその資料があればいいかもしれない.

Ubuntu16.04で開発していた時のメモを残す.


  • /dev/video*から30or60fpsで画像が取得できる.ただ単純にH.264をデコードすれば画像を取得可能なのかちょっと怪しい.
  • 取説にはH.264をデコードできるアプリを用意してくださいとあったが,Windows10標準カメラでは表示できなかった.
  • カメラの電池ボックスにはバッテリー式を入れないとすぐ切れる.
  • ビューワーで動作確認できたのはGuvcviewerのみだった.
  • vlc-ctlで調べた結果も貼っておく.

mechatoyo@ubuntu:~$ v4l2-ctl -d /dev/video1 --all
Driver Info (not using libv4l2):
Driver name   : uvcvideo
Card type     : BRSD038
Bus info      : usb-0000:00:1d.7-7
Driver version: 4.15.18
Capabilities  : 0x84200001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps   : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height      : 640/480
Pixel Format      : 'H264'
Field             : None
Bytes per Line    : 1280
Size Image        : 614400
Colorspace        : Default
Transfer Function : Default
YCbCr Encoding    : Default
Quantization      : Default
Flags             : 
Crop Capability Video Capture:
Bounds      : Left 0, Top 0, Width 640, Height 480
Default     : Left 0, Top 0, Width 640, Height 480
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 640, Height 480
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480
Streaming Parameters Video Capture:
Capabilities     : timeperframe
Frames per second: 30.000 (30/1)
Read buffers     : 0

mechatoyo@ubuntu:~$ v4l2-ctl -d /dev/video1 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index       : 0
Type        : Video Capture
Pixel Format: 'H264' (compressed)
Name        : H.264
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)

  • /devの差分(映像取得は/dev/video*ではないのか??)

【BRSD038電源OFF時】
/dev/sdb
/dev/sg3
【BRSD038電源ON時】
/dev/media0
/dev/v4l
【カメラ側の操作】
  • 開発中のメモ
【カメラ側の操作】
cameraの側面にあるmicroUSBコネクタとPCのUSBを別売りのケーブルでつなぐ.この時,ケーブルが短く,電力供給が多いものを使うといい.
また,カメラのバッテリーには使い捨ての一般的な電池を使うべきではない.充電式の電池もしくは安定化電源で4.8V相当の電源を確保すること.消費電力が大きいため,開発中はバッテリーパックを開けて,安定化電源の使用を推奨する.
接続後,電源ボタンを一回だけ押す.ランプが赤色になり,一定周期で点滅する.この時がカメラとして動作している状態.もう一度電源ボタンを押すと,カメラのストレージを開き,二つのフォルダを開く.一つはカメラでこれまで録画したファイル,もう一つはカメラの設定を変えるexeファイルが入っている.カメラの設定を変えるexeファイルはwindows10で動作を確認できた.MacとUbuntuでは動作しなかった.この設定ソフトから,カメラの解像度,露出度など,重要な情報が決められるので必ず利用すること.

【Ubuntu編】
映像圧縮形式はH.264のみ対応
まずはUbuntu16.04で動作するか確認する.
利用したソフトは”GTK UVC Video Viewer”
動作確認できた設定は以下の通り.
デバイスからBRSD038を選択する.
フレームレートは30/1 fps
解像度は640x480
カメラ出力はYUYV・・・??

もっとじっくり取り組めればよかったのだが,時間がなかったため,現状使用しているusbカメラのままでいこうと思う.

0 件のコメント:

コメントを投稿

人気の投稿