• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

基于ROS搭建简易软件框架实现ROV水下目标跟踪(十一)–USB摄像头使用

人工智能 cabinx 1904次浏览 0个评论

  在目标跟踪时,摄像头提供实时的图片信息,我们需要识别出图片目标,且输出目标在图片中的位置,为后续的控制提供条件。在demo中,我是借助darknet_ros实现这一目标。当然,这一模块可以替换成性能更优秀的识别算法。 darknet_ros为yolov3在ros下的一个工具包(https://github.com/leggedrobotics/darknet_ros)。需要对yolov3的使用有所了解(https://pjreddie.com/darknet/yolo/)。例程我就不介绍了,可以在网上搜索。在此主要基于demo测试介绍我个人的使用情况,主要包括摄像头驱动、数据集制作、模型训练、模型部署。 本文主要介绍ROS下USB摄像头的使用。 ros下usb摄像头驱动支持非常丰富,工具包有usb-cam、uvc-camera、cv-camera等等。在此,我选择usb-cam(http://wiki.ros.org/usb_cam)。 在使用时,我遇到摄像头的分辨率调整时会报错的情况。在github找到一个暂时的解决方法,需要编译前需要对代码略微修改。将usb_cam.cpp中的AV_PIX_FMT_YUV422P改为AV_PIX_FMT_YUV420P。 我们来看cabin_cam.launch文件。  

<launch>
  <arg name="properties_file_" value="$(find usb_cam)/cfg/camera.yaml" />
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video0" />
    <!--param name="image_width" value="800" /-->
    <!--param name="image_height" value="600" /-->
    <param name="pixel_format" value="mjpeg" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
    <param name="properties_file" type="string" value="$(arg properties_file_)" />
  </node>
</launch>

  其中: video_device为摄像头的端口号; pixel_format选择mjpeg即可; io_method选择mmap即可; image_width与image_height可以修改分辨率,但是鉴于后续视觉处理模块计算图片中心时亦需要分辨率数据,故我将分辨率配置于usb_cam/cfg/camera.yaml中; properties_file即为camera.yaml的路径,程序会根据该路径读取分辨率的配置。 因此,程序中添加了分辨率配置模块的代码,位于usb_cam_node.cpp中。  

// added by cabin for loading paraments from .yaml files
string properties_file;
node_.param("properties_file", properties_file, std::string(""));
if(properties_file.size() != 0){
    if(access(properties_file.c_str(),F_OK) == -1){
        std::cout<<""<<std::endl;
        std::cout<<RED<<"\""<<properties_file<<"\""<<" does not exist!!!!"<<std::endl;
        std::cout<<""<<std::endl;
        ros::shutdown();
    }
    else{
        YAML::Node properties;
        properties = YAML::LoadFile(properties_file);
        image_width_ = properties["image_width"].as<int>();
        image_height_ = properties["image_height"].as<int>();
    }
}

  在设定分辨率时,我们应该确定摄像头支持的分辨率:  

v4l2-ctl --device=0 --list-formats-ext

  device即为上文提及的摄像头端口号。 得到如下图所示,摄像头支持的分别率很容易看出:  
基于ROS搭建简易软件框架实现ROV水下目标跟踪(十一)--USB摄像头使用   我们执行cabin_cam.launch,启动摄像头,图片数据随topic:usb_cam/image_raw发布。 我们可以通过rqt的image_view工具(http://wiki.ros.org/image_view)查看:  

rosrun rqt_image_view rqt_image_view


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明基于ROS搭建简易软件框架实现ROV水下目标跟踪(十一)–USB摄像头使用
喜欢 (0)

您必须 登录 才能发表评论!

加载中……