The solution was based on "https://github.com/Skammi/cv_camera", a fork of "https://github.com/OTL/cv_camera"
It is very easy to capture video device if we use cv::VideoCapture of OpenCV.
If you are searching ROS2 driver, check here
This node uses camera_info_manager for dealing with camera_info. If no calibration data is set, it has dummy values except for width and height.
rosrun cv_camera cv_camera_node _image_width:=640 _cv_cap_prop_frame_width:=640 _image_height:=480 _cv_cap_prop_frame_height:=480 _rate:=30 _cv_cap_prop_fps:=30 _rescale_camera_info:=true _camera_info_url:="file:///home/${USER}/640x480.yaml" _undistorted_fov_scale:=1.0 _undistorted_resolution_scale:=1.0 _undistorted_on:=true~image_raw(sensor_msgs/Image)~camera_info(sensor_msgs/CameraInfo)
~set_camera_info(sensor_msgs/SetCameraInfo)
~rate(double, default: 30.0) – publish rate [Hz].~device_id(int, default: 0) – capture device id.~device_path(string, default: "") – path to camera device file, e. g./dev/video0.~frame_id(string, default: "camera") –frame_idof message header.~image_width(int) – try to set capture image width.~image_height(int) – try to set capture image height.~camera_info_url(string) – url of camera info yaml.~file(string, default: "") – if not "" then use movie file instead of device.~capture_delay(double, default: 0) – estimated duration of capturing and receiving the image.~rescale_camera_info(bool, default: false) – rescale camera calibration info automatically.~camera_name(bool, default: same asframe_id) – camera name forcamera_info_manager.~flip_image(bool, default: false) – flip the image according to image_flip_code.~image_flip_code(int, default: -1) – code to flip the image see cv::flip() for description.~undistorted_on(bool, default: false) – if true, then distortion will be removed from the image before publishing to the topics, and the distortion matrices will be corrected according to the new parameters.~undistorted_fov_scale(double, default: 1.0) – coefficient of multiplication of camera angle of view after distortion removal.~undistorted_resolution_scale(double, default: 1.0) – coefficient of change of resolution in relation to the initial one after distortion removal. We recommend choosing undistorted_resolution_scale=undistorted_fov_scale if you want to keep all the details in the image.
Supports CV_CAP_PROP_*, by below params.
~cv_cap_prop_pos_msec(double)~cv_cap_prop_pos_avi_ratio(double)~cv_cap_prop_frame_width(double)~cv_cap_prop_frame_height(double)~cv_cap_prop_fps(double)~cv_cap_prop_fourcc(double)~cv_cap_prop_frame_count(double)~cv_cap_prop_format(double)~cv_cap_prop_mode(double)~cv_cap_prop_brightness(double)~cv_cap_prop_contrast(double)~cv_cap_prop_saturation(double)~cv_cap_prop_hue(double)~cv_cap_prop_gain(double)~cv_cap_prop_exposure(double)~cv_cap_prop_convert_rgb(double)~cv_cap_prop_rectification(double)~cv_cap_prop_iso_speed(double)
And supports any props. Thanks to Hernan Badino!
~property_$(i)_code(int) – set this code property using~property_$(i)_value, $(i) must start from 0.~property_$(i)_value(double) – the value to be set to~property_$(i)_code
If you want to set the property which code is 404 as 1,
rosrun cv_camera cv_camera_node _property_0_code:=404 _property_0_value:=1If you want to set more, use ~property_1_code and ~property_1_value.
This node works as nodelet (cv_camera/CvCameraNodelet).
PR is welcome. I'll review your code to keep consistency, be patient.
- Oleg Kalachev
- Mikael Arguedas
- Maurice Meedendorp
- Max Schettler
- Lukas Bulwahn