Rosrun usb_cam usb_cam_node [ERROR] [1538658769.608520191]:Webcam:期待される画像ですが、取得できませんでした



Rosrun Usb_cam Usb_cam_node 1538658769



参考に usb_camを使用して画像、opencv画像、ROSでのカメラキャリブレーションを読み取る このブログ投稿で問題が発生し、個別に実行されています

rosrun usb_cam usb_cam_node

[エラー] [1538658769.608520191]:ウェブカメラ:画像が必要ですが、取得できませんでした...



以下は解決プロセスです。
usb_camパッケージにはテストファイルusb_cam-test.launchがあり、直接実行されます。

roslaunch usb_cam usb_cam-test.launch

全く問題ありません。このファイルを開くと、usb_camとimage_viewという名前の/ usb_cam / usb_cam_nodeと/ image_view / image_viewの2種類のノードを作成できます。前者は、カメラの画像に「アクセス」して公開するために使用されます。/usb_cam/image_rawトピックでは、後者はこのトピックにサブスクライブし、画像を画面に出力します。



ただし、使用する場合

ruscore rosrun usb_cam usb_cam_node rosrun image_view image_view image:=/usb_cam/image_raw

組み合わせにエラーが発生します([エラー] [1538658769.608520191]:Webカメラ:画像が必要ですが、取得できませんでした...)。分析後、これはusb_cam_nodeのソースファイルが次のように記述されているためです。

// possible values: yuyv, uyvy, mjpeg, yuvmono10, rgb24 node_.param('pixel_format', pixel_format_name_, std::string('mjpeg'))

私はyuyv、mjpegを本当に理解していません。これらはおそらくいくつかの画像化方法、画像形式などです。usb_cam-test.launchファイルには、次のような文があります。



rosrun package-name executable-name __name:=node-name

この文を推測し、usb_cam_nodeソースファイルのmjpegの設定を変更し、使用した外部USBカメラと一致させることが重要です。これにより、rosrunコマンドを使用してノードの名前を明示的に設定できます。

rosrun usb_cam usb_cam_node __pixel_format:=yuyv

このメソッドは、ノードのデフォルト名をnode-name引数で指定された名前でオーバーライドします。この場合は

rosrun usb_cam usb_cam_node

の代わりに

node_.param('video_device', video_device_name_, std::string('/dev/video0'))

pixel_formatの前に2つのアンダースコアがあることに注意してください(アンダースコアを使用してみましたが、機能します)
さらに、usb_cam-test.launchファイルにはそのような文が1つあります。

|_+_|

したがって、カメラがvideo0でない場合は、rosrunを使用して上記と同じ方法でパラメーターを設定します。明るさ、コントラスト、サイズなどの同様のパラメーターは、usb_cam-test.launchファイルに表示されます。