项目链接:https://github.com/cabinx/cabin_auv_ws
在目标跟踪时,摄像头提供实时的图片信息,我们需要识别出图片目标,且输出目标在图片中的位置,为后续的控制提供条件。在demo中,我是借助darknet_ros实现这一目标。当然,这一模块可以替换成性能更优秀的识别算法。
darknet_ros为yolov3在ros下的一个工具包(https://github.com/leggedrobotics/darknet_ros)。需要对yolov3的使用有所了解(https://pjreddie.com/darknet/yolo/)。例程我就不介绍了,可以在 上搜索。在此主要基于demo测试介绍我个人的使用情况,主要包括摄像头驱动、数据集制作、模型训练、模型部署。
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文件。
其中:
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中。
在设定分辨率时,我们应该确定摄像头支持的分辨率:
device即为上文提及的摄像头端口 。
得到如下图所示,摄像头支持的分别率很容易看出:
我们执行cabin_cam.launch,启动摄像头,图片数据随topic:usb_cam/image_raw发布。
我们可以通过rqt的image_view工具(http://wiki.ros.org/image_view)查看:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!