Kinect(XBOX360)相机在ROS下标定

相机标定棋盘的制作

主要参考:https://blog.csdn.net/whhit111/article/details/70231887

生成黑白棋盘的代码:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void CalibrationBoard::generateBoard(){ 
    //单位转换
	double dot_per_inch = 92.55912;  //dot per inch
	/* 1080p下,PPI=根号下的1920²与1080²的和≈2202.907
    DPI要参照你屏幕尺寸来计算,DPI=PPI/屏幕尺寸 */
	double cm_to_inch = 0.3937; //1cm=0.3937inch
	double inch_to_cm = 2.54;   //1inch = 2.54cm
	double inch_per_dot = 1.0 / dot_per_inch;
 
    //自定义标定板
	double blockSize_cm = 2.5; //方格尺寸:边长2.5cm的正方形
    int blockNum_width = 10; 
	int blockNum_height = 7; //10*7个方格,9*6个角点
 
 
	int blockSize = (int)(blockSize_cm /inch_to_cm *dot_per_inch);
	cout << blockSize << endl;
	
	int imageSize_height = blockSize * blockNum_height;
	int imageSize_width = blockSize * blockNum_width;
	cout << imageSize_height << endl;
	cout << imageSize_width << endl;
	Mat chessBoard(imageSize_height, imageSize_width, CV_8UC3, Scalar::all(0));
	unsigned char color = 255;
 
	for (int i = 0; i < imageSize_width; i = i + blockSize){
		if(blockNum_height%2 == 0){
			color = ~color;
		}
		for (int j = 0; j < imageSize_height; j = j + blockSize){
			Mat ROI = chessBoard(Rect(i, j, blockSize, blockSize));  //内外循环width和height??
			ROI.setTo(Scalar::all(color));
			color = ~color;
		}
	}
	imshow("Chess board", chessBoard);
    cout << imwrite("chessBoard.jpg",chessBoard); //保存图片在当前项目下
	cv::waitKey(0);
	//销毁所有窗口
	cv::destroyAllWindows();
}

关于图片的打印

我这里主要按A4纸的大小制作棋盘的,大小为10×7格,每个小格为25mm×25mm。因此,整个棋盘格的大小为250mm×175mm。在打印设置中将图像的宽×高设置成250mm×175mm,如下图所示。最终打印出的棋盘格大致上能满足每个小格为25mm×25mm。(实际上由于计算精度、打印精度等问题会存在一定的偏差)
print_setting

Kinect相机在ROS下进行标定

主要参考:http://wiki.ros.org/openni_launch/Tutorials/IntrinsicCalibration

RGBD摄像头的标定

打开一个窗口启动ROS的核心程序

roscore

再打开一个终端启动OpenNI驱动程序

roslaunch openni_launch openni.launch

插上kinect相机的数据线,使用如下指令启动标定程序(棋盘格数量和大小根据自己情况修改)

rosrun camera_calibration cameracalibrator.py image:=/camera/rgb/image_raw camera:=/camera/rgb --size 9x6 --square 0.025

我第一次遇到了No module named load_config_py2问题,参考此处
正常启动后,如下图所示
clibrate_window
然后,将制作好的标定板在相机的视野里移动,直到CALIBRATE按钮变亮,点击进行标定。然后SAVE可以保存数据,COMMIT退出。标定过程和结果如下图所示,可以看出数据保存在了/tmp/calibrationdata.tar.gz。(我标定了两次,结果差的还是有点大的,希望有办法提高标定准确度的可以在评论里发表下,或者私信给我,谢谢~~)

('Waiting for service', '/camera/rgb/set_camera_info', '...')
OK
*** Added sample 1, p_x = 0.358, p_y = 0.544, p_size = 0.136, skew = 0.004
*** Added sample 2, p_x = 0.641, p_y = 0.439, p_size = 0.134, skew = 0.159
*** Added sample 3, p_x = 0.700, p_y = 0.437, p_size = 0.131, skew = 0.306
*** Added sample 4, p_x = 0.811, p_y = 0.403, p_size = 0.138, skew = 0.354
*** Added sample 5, p_x = 0.913, p_y = 0.358, p_size = 0.150, skew = 0.301
*** Added sample 6, p_x = 0.908, p_y = 0.542, p_size = 0.179, skew = 0.266
*** Added sample 7, p_x = 0.771, p_y = 0.562, p_size = 0.171, skew = 0.224
*** Added sample 8, p_x = 0.589, p_y = 0.511, p_size = 0.159, skew = 0.260
*** Added sample 9, p_x = 0.561, p_y = 0.495, p_size = 0.153, skew = 0.429
*** Added sample 10, p_x = 0.468, p_y = 0.478, p_size = 0.142, skew = 0.522
*** Added sample 11, p_x = 0.374, p_y = 0.501, p_size = 0.150, skew = 0.403
*** Added sample 12, p_x = 0.310, p_y = 0.513, p_size = 0.148, skew = 0.856
*** Added sample 13, p_x = 0.285, p_y = 0.540, p_size = 0.156, skew = 0.705
*** Added sample 14, p_x = 0.410, p_y = 0.467, p_size = 0.154, skew = 0.643
*** Added sample 15, p_x = 0.534, p_y = 0.850, p_size = 0.168, skew = 0.177
*** Added sample 16, p_x = 0.512, p_y = 0.977, p_size = 0.196, skew = 0.144
*** Added sample 17, p_x = 0.587, p_y = 0.955, p_size = 0.198, skew = 0.245
*** Added sample 18, p_x = 0.702, p_y = 0.943, p_size = 0.204, skew = 0.373
*** Added sample 19, p_x = 0.334, p_y = 0.876, p_size = 0.198, skew = 0.006
*** Added sample 20, p_x = 0.281, p_y = 0.703, p_size = 0.195, skew = 0.023
*** Added sample 21, p_x = 0.300, p_y = 0.357, p_size = 0.180, skew = 0.150
*** Added sample 22, p_x = 0.309, p_y = 0.110, p_size = 0.172, skew = 0.156
*** Added sample 23, p_x = 0.285, p_y = 0.154, p_size = 0.181, skew = 0.025
*** Added sample 24, p_x = 0.416, p_y = 0.073, p_size = 0.172, skew = 0.005
*** Added sample 25, p_x = 0.534, p_y = 0.037, p_size = 0.169, skew = 0.059
*** Added sample 26, p_x = 0.748, p_y = 0.099, p_size = 0.166, skew = 0.312
*** Added sample 27, p_x = 0.828, p_y = 0.143, p_size = 0.164, skew = 0.499
*** Added sample 28, p_x = 0.495, p_y = 0.450, p_size = 0.185, skew = 0.197
*** Added sample 29, p_x = 0.464, p_y = 0.826, p_size = 0.164, skew = 0.069
*** Added sample 30, p_x = 0.442, p_y = 0.642, p_size = 0.165, skew = 0.101
*** Added sample 31, p_x = 0.454, p_y = 0.522, p_size = 0.163, skew = 0.739
*** Added sample 32, p_x = 0.742, p_y = 0.404, p_size = 0.169, skew = 0.192
*** Added sample 33, p_x = 0.826, p_y = 0.460, p_size = 0.166, skew = 0.123
*** Added sample 34, p_x = 0.736, p_y = 0.622, p_size = 0.160, skew = 0.337
*** Added sample 35, p_x = 0.553, p_y = 0.691, p_size = 0.152, skew = 0.439
*** Added sample 36, p_x = 0.535, p_y = 0.699, p_size = 0.143, skew = 0.653
*** Added sample 37, p_x = 0.455, p_y = 0.589, p_size = 0.149, skew = 0.904
*** Added sample 38, p_x = 0.406, p_y = 0.581, p_size = 0.159, skew = 0.556
*** Added sample 39, p_x = 0.607, p_y = 0.588, p_size = 0.165, skew = 0.070
*** Added sample 40, p_x = 0.756, p_y = 0.570, p_size = 0.168, skew = 0.015
*** Added sample 41, p_x = 0.916, p_y = 0.539, p_size = 0.184, skew = 0.082
*** Added sample 42, p_x = 0.889, p_y = 0.555, p_size = 0.178, skew = 0.517
*** Added sample 43, p_x = 0.412, p_y = 0.631, p_size = 0.160, skew = 0.323
*** Added sample 44, p_x = 0.569, p_y = 0.718, p_size = 0.143, skew = 0.034
('D = ', [0.1546076438826677, -0.02916713925310644, -0.053406977057848096, 0.01714009288928607, 0.0])
('K = ', [558.7554676409164, 0.0, 348.795358345594, 0.0, 558.0406226481063, 182.83157465952186, 0.0, 0.0, 1.0])
('R = ', [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0])
('P = ', [602.3633422851562, 0.0, 355.18948990637364, 0.0, 0.0, 580.1094970703125, 165.0453892857222, 0.0, 0.0, 0.0, 1.0, 0.0])
None
# oST version 5.0 parameters


[image]

width
640

height
480

[narrow_stereo]

camera matrix
558.755468 0.000000 348.795358
0.000000 558.040623 182.831575
0.000000 0.000000 1.000000

distortion
0.154608 -0.029167 -0.053407 0.017140 0.000000

rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000

projection
602.363342 0.000000 355.189490 0.000000
0.000000 580.109497 165.045389 0.000000
0.000000 0.000000 1.000000 0.000000


('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

红外(深度)摄像头的标定

缺少红外光源,待续。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值