使用OpenCV2和ROS的英特尔实感d435摄像机校准

大家好!


我想分享一下我使用d435 英特尔实感摄像头的经验。 如您所知,许多机器视觉算法都需要对相机进行初步校准 。 碰巧的是,在我们的项目中,我们使用ROS来构建自动化智能系统的各个组件。 但是,在研究了俄语语言的互联网之后,我没有找到关于该主题的任何明智的教程。 本出版物旨在填补这一空白。


软件先决条件


由于ROS在Unix系统上工作,因此我假设我们有Ubuntu 16.04系统可用。 我将不描述详细的安装细节,仅提供相应教程的链接。


  • OpenCV2。 如何安装
  • OpenCV-Python。 这里的一切都很简单:

sudo apt-get install python-opencv 


安装RealSense驱动程序


  1. 首先,您需要安装相机的驱动程序
  2. 相机的ROS套件在这里 。 在发布时,最新版本为2.0.3。 要安装该软件包,您需要下载源代码并将其解压缩到ROS主目录中。 接下来,我们将需要安装它:

 catkin_make clean catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release catkin_make install echo "source path_to_workspace/devel/setup.bash" >> ~/.bashrc source ~/.bashrc 

测试相机


安装摄像机之后,我们需要确保驱动程序能够正常工作。 为此,我们通过USB连接相机并运行演示:


 roslaunch realsense2_camera demo_pointcloud.launch 

此命令将打开ROS可视化效果,您可以在其中看到在主题/camera/depth/color/points注册的点云


尔维兹


相机校准


下面是OpenCV教程的改编版本。


 import numpy as np import cv2 import glob #    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) #     8x6 objp = np.zeros((6*8,3), np.float32) objp[:,:2] = np.mgrid[0:8,0:6].T.reshape(-1,2) #         objpoints = [] # 3d     imgpoints = [] # 2d     images = glob.glob('/__/*.png') for fname in images: img = cv2.imread(fname) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #     ret, corners = cv2.findChessboardCorners(gray, (8,6),None) #    ,         if ret == True: objpoints.append(objp) corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) imgpoints.append(corners2) #       img = cv2.drawChessboardCorners(img, (8,6), corners2,ret) cv2.imshow('img',img) cv2.waitKey(500) cv2.destroyAllWindows() #     ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None) np.save('/path_to_images/calibration', [mtx, dist, rvecs, tvecs]) 

为了使此脚本正常工作,我们至少需要从相机接收10张棋chess图像。 为此,我们可以使用例如image_view ROS程序包或任何其他可以从USB摄像机获取屏幕截图的程序。 捕获的图像应放置在任何文件夹中。 图片示例:


象棋桌


执行脚本后,校准结果将保存到文件中
calibration.npy 。 然后可以将这些数据与以下脚本一起使用:


 calibration_data = np.load('path_to_images/calibration.npy') mtx = calibration_data[0] dist = calibration_data[1] rvecs = calibration_data[2] tvecs = calibration_data[3] 

结论


我们能够使用OpenCV2和ROS成功校准RealSense d435摄像机。 校准结果可用于跟踪对象,ruco标记,增强现实算法等许多应用中。 在下一篇文章中,我将详细介绍如何跟踪aruco标记。

Source: https://habr.com/ru/post/zh-CN412953/


All Articles