ROS+Opencv+QRCode测姿态

​基于的demo和所需工具https://pan.baidu.com/s/1ZgROxGq9dG4x24rBOVjrbQ?pwd=t78h 提取码: t78h

  • ubuntu16.04
  • opencv3.3.1
  • g++ 5.4.0

环境配置

ROS安装

参考博客ubuntu16.04安装ROS(总结最实用的)-CSDN博客,整个安装过程顺利进行

Opencv环境安装

opencv环境安装的难点在于:demo下需要用到aruco.hpp库,仅编译安装opencv是不行的,另外需要和opencv_contrib-3.x,opencv安装仅包含通用的库文件,而opencv_contrib-3.x这个文件是许多的扩展库组成,这些扩展库可能是一些新算法库、过于具体而非通用的功能库、额外的计算机视觉库、社区贡献的库文件等。两个文件联合编译是难点所在。有必要说明一下笔者在编译过程中遇到的阻碍。编译流程参考博客Ubuntu 16.04 安装opencv 3.4.7-CSDN博客,编译过程中遇到的问题如下
参考流程选择的opencv版本3.4.7,笔者结合下载了opencv_contri-3.4,两者联合编译的过程会出现一些错误,最后也都可以解决,但是最后的编译结果在于aruco.hpp始终找不到(默认安装在/usr/local/include/opencv2 中)。于是笔者选择了opencv-3.3.1以及opencv_contrib-3.3.1(工具包内包含)
执行到第三步camke前的文件结构如下(此处只列出新建或改动过的文件)

/home/××
├── opencv-3.3.1 
│   ├── 3rdparty
              └── ippicv/ #编译报错时将ippicv_2019***.tgz放进去并将ippicv.cmake47行进行修改
│   ├── build               
└── opencv_contrib-3.3.1 

进入build目录执行(只要文件结构一致,直接复制执行即可,都是使用的相对路径)

cmake ../ -DWITH_CUDA=OFF  -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_EXAMPLES=ON  -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_XIMGPROC=ON -DTRAINCASCADE=ON -DOPENCV_GENERATE_PKGCONFIG=ON -DGEN_OPENCV_PYTHON2=ON -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.3.1/modules 

最后在/usr/local/include/opencv2能够找到我们想要的库即可。

摄像头测试

此过程要保证摄像头在ubuntu下能够正常的运行,才有后文的标定、二维码检测、姿态测量的后文。这一步骤我经历了如下挫折

  1. 使用C++写一个demo编译运行(工具包cameratest.cpp),此时需要注意的是相机已经连到ubuntu且ubuntu能够正确的识别、相机的数据格式、帧率需要明确,代码编译g++ -o cameratest cameratest​​​​​​​.cpp `pkg-config --cflags --libs opencv`
  • 虚拟机界面->虚拟机->可移动设备->摄像头确实连接到虚拟机(我的摄像头没驱动,很容易连上,如果连上未识别很可能就是需要驱动)
  • 安装v4l2工具并运行v4l2-ctl --device=/dev/video0 --list-formats-ext查看相机的Index、像素类别、Size、分辨率等,程序里面需要用到,特别是Index需要按照自己的要求进行修稿
  1. 另一种方法是使用ubuntu里边的相机测试工具cheese进行相机测试,用之前先安装,直接运行cheese即可,这种方法更简单粗暴,如果cheese检测不到摄像头,十有八九是摄像头未连接到虚拟机或者虚拟机未识别出摄像头(驱动有问题),仔细排查
  2. 上述两个步骤能运行但是均显示不出图像,显示窗口一片黑,这就不是摄像头的问题,经过仔细的排查发现是虚拟机usb设备管理的问题,在虚拟机设置中进行设置如下。“显示所有USB输入设备最好也勾选(开机状态看不到,得先关机)”
    在这里插入图片描述
    最后cheese能够正常识别,测试摄像头的C++程序也就正常跑通了。

标定、运行

摄像头标定

  1. ROS环境启动,新建一个终端运行roscore
  2. ROS下安装标定工具sudo apt-get install ros-kinetic-usb-cam(其中kinetic参数根据所装的ros版本而定),可以用rospack find usb_cam测试是否安装完成,有返回值说明安装完成,/opt/ros/kinetic/share/usb_cam
  3. 棋盘格准备,https://calib.io/pages/camera-calibration-pattern-generator是一个在线生成棋盘格的链接界面如下
    在这里插入图片描述
  4. 开始标定,两段程序在两个终端运行,第一个运行完毕后运行第二个
#此代码运行/opt/ros/kinetic/share/usb_cam/launch/usb_cam-test.launch脚本,可自行按需修改
roslaunch usb_cam usb_cam-test.launch 
#上述脚本运行后运行下面的标定工具
rosrun camera_calibration cameracalibrator.py --size 10x7 --square 0.012 image:=/usb_cam/image_raw

上述两个脚本是基于ROS的消息订阅机制运行的,第一段代码的作用是捕获摄像头的视频流,并通过主题iamge_raw进行发布,运行第一行代码后可以新开一个终端运行rostopic list查看主题名,用rostopic info /usb_cam/image_raw查看此主题的发布者和订阅者

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值