1 说明
在Ubuntu系统上,安装AVT Mako相机的Vimba SDK,能够获取图像和保存图像。
安装ROS SDK,能够发布相机的话题,然后录制这个话题的bag,最后从bag中提取出图片。
2 开发环境
2.1 硬件
- AVT Mako相机;电源(12VDC,1.25A);电源线;网线
- 惠普笔记本电脑
2.2 系统
Ubuntu 14.04
2.3 SDK
Vimba
3 开发步骤
3.1 组装相机
将相机、电源、电源线、网线连接起来,如图1所示。
3.2 修改以太网适配器IP地址
在笔记本电脑上编辑网络连接,添加以太网,选择IPv4设置,地址为169.254.1.2,子网掩码为255.255.0.0,网关为空,如图2所示。
图2 编辑以太网连接
3.3 安装SDK
(1)下载SDK
在https://www.alliedvision.com/en/products/software.html上下载Vimba v2.1.3 Linux到"~"
目录下。
(2)解压
tar -xf ./Vimba_V2.1.3_Linux.tgz
(3)设置权限
cd ~/Vimba_2_1/VimbaGigETL
sudo ./Install.sh
3.4 使用SDK
(1)给相机供电,将网线另一端插入笔记本电脑以太网接口。
(2)打开VimbaViewer
sudo -E ~/Vimba_2_1/Tools/Viewer/Bin/x86_64bit/VimbaViewer
VimbaViewer界面如图3所示。
图3 VimbaViewer
点击图3中的“Mako G-192C”,打开图4所示界面。
图4 Mako G-192C(FULL ACCESS)
点击图4工具栏的“Freerun”按钮,窗口左侧会显示相机采集的图像,如图5所示。窗口右侧可以调节相机的参数,如亮度、白平衡、曝光时间、色调等,详细内容可参考文档。
图5 获取图像并调节参数
此时,再查看图3的窗口,会显示一些调试信息,相机的型号,IP地址,S/N,ID等,如图6所示,这些信息在多相机应用时很重要。
图6 调试信息和相机信息
4 保存图像
Vimba SDK中提供了Vimba C API和Vimba C++ API,而且有使用手册参考。
4.1 方式1
在图5所示的窗口中,点击File-->Save Image As
,然后选择保存路径,最后保存即可。
4.2 方式2
可通过~/Vimba_2_1/VimbaC/Examples/Bin/x86_64bit
目录下的可执行文件SynchronousGrab
保存单个图像。
4.3 方式3
可通过~/Vimba_2_1/VimbaCPP/Examples/Bin/x86_64bit
目录下的可执行文件
AsynchronousOpenCVRecorder
保存视频。
注意:此API依赖OpenCV 3.0,需要提前安装。
在实际使用中,还要根据需求在以上方法的基础上进行二次开发。
5 安装ROS驱动
创建ROS工作空间,下载avt_vimba_camera驱动,编译工作空间。
mkdir -p ~/avt_catkin_ws/src
cd ~/avt_catkin_ws/src
git clone https://github.com/srv/avt_vimba_camera
cd ..
catkin_make
6 启动launch,发布相机话题
打开~/avt_catkin_ws/src/avt_vimba_camera/launch/mono_camera.launch
,将参数“guid”、“ip”、“camera_info_url”改为自己相机的。
<param name="guid" value="50-0503343290"/>
<param name="ip" value=""/>
<param name="camera_info_url" value="file://$(find avt_vimba_camera)/calibrations/calibration_50-0503343290.yaml"/>
启动launch,发布相机话题:
source ~/avt_catkin_ws/devel/setup.bash
roslaunch avt_vimba_camera mono_camera.launch
查看发布的话题:
rostopic list
7 录制bag
rosbag recore -O avt /camera/image_raw
按ctrl+c结束录制,以下命令可查询bag信息。
rosbag info avt.bag
8 从bag中提取图片
参考https://www.cnblogs.com/arkenstone/p/6676203.html,此方法实测可行。
打开一个终端
rosrun image_view extract_images _sec_per_frame:=0.01 ima:=/camera/image_raw
打开另一个终端
rosbag play avt.bag
其他方法参考:
[1] https://blog.csdn.net/corfox_liu/article/details/50920332?locationNum=15
[2] https://blog.csdn.net/Draonly/article/details/74642747https://blog.csdn.net/Draonly/article/details/74642747
9 总结
这个开发过程,没有中文资料可以参考,全是啃官网的英文文档,给我的感觉是杂、细,对初学者不友好。
虽然过程很艰难,但是最后实现后感觉一切都值得。
这种工业相机必须配备镜头才能用,我的这个镜头焦距35mm, 属于远视,也就是远景看得清楚而且视野窄,近景基本看不到,所以要根据需求选择合适的镜头。
突然想到,目前图像目标检测领域使用深度学习处理小目标检测的问题,如果使用这种带远视镜头的工业相机,就不用大费周折了。
在实际的自动驾驶中,配备两种相机,一种近视,一种远视,还是觉得,能在硬件上或者输入上解决的问题,就没必要在算法上煞费苦心,还不一定能得到较好的效果。