Kalibrasi Kamera Intel RealSense d435 Menggunakan OpenCV2 dan ROS

Halo semuanya!


Saya ingin berbagi pengalaman saya dengan kamera Intel RealSense, model d435 . Seperti yang Anda ketahui, banyak algoritma penglihatan mesin membutuhkan kalibrasi awal kamera . Kebetulan pada proyek kami, kami menggunakan ROS untuk membangun komponen individual dari sistem cerdas otomatis. Namun, setelah mempelajari Internet berbahasa Rusia, saya tidak menemukan tutorial yang masuk akal tentang topik ini. Publikasi ini dimaksudkan untuk mengisi kesenjangan ini.


Prasyarat perangkat lunak


Karena ROS bekerja pada sistem Unix, saya akan berasumsi bahwa kami memiliki sistem Ubuntu 16.04 tersedia. Saya tidak akan menjelaskan detail pemasangan terperinci, saya hanya akan memberikan tautan ke tutorial yang sesuai.



sudo apt-get install python-opencv 


Menginstal Driver RealSense


  1. Pertama-tama, Anda perlu menginstal driver untuk kamera.
  2. Paket ROS untuk kamera ada di sini . Pada saat publikasi, versi terbaru adalah 2.0.3. Untuk menginstal paket, Anda perlu mengunduh kode sumber dan unzip di direktori home ROS. Selanjutnya, kita perlu menginstalnya:

 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 

Menguji kamera


Setelah kami memasang kamera, kami perlu memastikan bahwa driver berfungsi sebagaimana mestinya. Untuk melakukan ini, kami menghubungkan kamera melalui USB dan menjalankan demo:


 roslaunch realsense2_camera demo_pointcloud.launch 

Perintah ini akan membuka visualisasi ROS, di mana Anda dapat melihat awan poin yang terdaftar dalam topik /camera/depth/color/points :


rviz


Kalibrasi kamera


Di bawah ini adalah versi tutorial yang diadaptasi dari 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]) 

Agar skrip ini berfungsi, kita membutuhkan setidaknya 10 gambar papan catur yang diterima dari kamera kita. Untuk ini, kita dapat menggunakan, misalnya, paket ROS image_view atau program lain yang dapat mengambil tangkapan layar dari kamera USB. Gambar yang diambil harus ditempatkan di folder apa pun. Contoh gambar:


Meja catur


Setelah kami menjalankan skrip, hasil kalibrasi akan disimpan ke file
calibration.npy . Data ini kemudian dapat digunakan dengan skrip berikut:


 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] 

Kesimpulan


Kami berhasil mengkalibrasi kamera RealSense d435 menggunakan OpenCV2 dan ROS. Hasil kalibrasi dapat digunakan dalam aplikasi seperti objek pelacakan, penanda aruco, algoritma augmented reality, dan banyak lainnya. Pada artikel selanjutnya, saya ingin menguraikan pelacakan penanda aruco.

Source: https://habr.com/ru/post/id412953/


All Articles