ros驱动insta360 oneR运动相机遇到的坑

问题1:

直接使用ros下usb_cam工具,

roslaunch usb_cam-test.launch
图像看起来模糊如下:

查了一下说将摄像头的默认像素格式由原来的yuyv改为mjpeg格式:
进入功能包:

roscd uvc_camera

进入lanch文件夹,改:


  
    
    
    
    
    
    
  
  
    
    
  

问题2:

像素格式由原来的yuyv改为mjpeg格式后,
运行报错outbuf size mismatch. pic_size: 345600 bufsize: 614400

然后看一下报错内容,大致意思就是,outbuf 大小不匹配。pic_size:3110400 bufsize:4147200
并且得到的是一个黑屏,rostopic 输出全为零

参考https://github.com/ros-drivers/usb_cam/issues/35,说
通过更改 usb_cam_node 的 pixel_format 参数的值来修复错误:

From:

arrive:

那么我回到第一个问题了吗?
啊啊啊啊啊啊!

opencv读取视频正常

试了一下直接用opencv读取视频:正常

最终解决方案:

既然opencv能读到,
那我就先使用opencv读取图像

 mkdir -p cvImage2ros/src
 cd cvImage2ros/src
 catkin_create_pkg rosopencv sensor_msgs cv_bridge roscpp std_msgs image_transport
 cd ..
 catkin_make
 source ./devel/setup.bash

然后在src文件下新建文件cvImage2ros.cpp

#include 
#include 
#include    
#include   
#include   

#include 
#include 
#include 
#include 

int main(int argc, char** argv)
{
    ros::init(argc, argv, "imageGet_node");   
    ros::NodeHandle nh;                       
    image_transport::ImageTransport it(nh);   
    image_transport::Publisher image_pub = it.advertise("/cameraImage", 1);    

    ros::Rate loop_rate(200);    

    cv::Mat imageRaw;   
    cv::VideoCapture capture(0);    

    if(capture.isOpened() == 0)       
    {
        std::cout << "Read camera failed!" << std::endl;
        return -1;
    }

    while(nh.ok())
    {
        capture.read(imageRaw);           
        cv::imshow("veiwer", imageRaw);   
        sensor_msgs::ImagePtr  msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", imageRaw).toImageMsg();   
        image_pub.publish(msg);          
        ros::spinOnce();                 
        loop_rate.sleep();               
        if(cv::waitKey(2) >= 0)          
            break;        
    }
}

最后在CMakeLists.txt最下面添加:

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(cvImage2ros src/cvImage2ros.cpp)
target_link_libraries(cvImage2ros ${catkin_LIBRARIES} ${OpenCV_LIBS})

然后编译,运行

rosrun cvImage2ros cvImage2ros 

发布/cameraImage话题,

其他说明:

参考linux系统下 USB 摄像头1080分辨率采集帧率低问题的解决方法
安装一个 v4l2-ctrl工具:

sudo apt install v4l-utils

查看摄像机支持的视频参数:

sudo v4l2-ctl --all --list-formats-ext


Pixel Format 是视频的格式,Size是视频分辨率,Interval是支持帧率。
通常的USB摄像头,对高清视频,如1080P,在YUYV格式下,都支持不到25-30帧,一般在3-5帧,原因可能是考虑USB的传输速度;
同时,摄像头一般会提供MJPEG的压缩视频格式,因此在使用USB摄像头进行1080分辨率的采集时,需要指定视频格式为MJPEG

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(1)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年4月26日
下一篇 2022年4月26日

相关推荐