标定工具
Go to file
2025-02-20 10:45:17 +08:00
camera_driver init 2025-02-20 10:45:17 +08:00
lidar_driver init 2025-02-20 10:45:17 +08:00
.gitignore init 2025-02-20 10:45:17 +08:00
aurco_3d_detect.py init 2025-02-20 10:45:17 +08:00
calibration_mian.py init 2025-02-20 10:45:17 +08:00
capture.py init 2025-02-20 10:45:17 +08:00
cloud_3d_detect.py init 2025-02-20 10:45:17 +08:00
config.py init 2025-02-20 10:45:17 +08:00
dialog-analysis.log init 2025-02-20 10:45:17 +08:00
it.py init 2025-02-20 10:45:17 +08:00
logging.conf init 2025-02-20 10:45:17 +08:00
params.json init 2025-02-20 10:45:17 +08:00
readme.md init 2025-02-20 10:45:17 +08:00
search.py init 2025-02-20 10:45:17 +08:00
svd.py init 2025-02-20 10:45:17 +08:00
test_ss928.py init 2025-02-20 10:45:17 +08:00
test.py init 2025-02-20 10:45:17 +08:00
utils copy.py init 2025-02-20 10:45:17 +08:00
utils.py init 2025-02-20 10:45:17 +08:00

拍照流程

1 执行 capture.py 2 执行完成后 \ssh_tmp 目录下会生成 outpu.png 和 output.ply 3 执行 calibration_mian.py 4 查看执行的消息

问题

def detect_marks_roi(im_project, show=False): masks = [] # ??? offset = 40

camera_driver

相机驱动代码

编译

拷贝到虚拟机编译环境 cmake .. make -j8

执行

将可执行文件 camera_driver 拷贝到目标机器 /root/calibration chmod 777 ./camera_driver ./camera_driver 执行完成后在当前目录下生成 output.png 文件

lidar_driver

雷达驱动代码

编译

拷贝到虚拟机编译环境 cmake .. make -j8

执行

将可执行文件 lidar_driver 拷贝到目标机器 /root/calibration chmod 777 ./lidar_driver ./lidar_driver 执行完成后在当前目录下生成 output.ply 文件

sh 脚本

安装

安装前需关闭代理 pip install paramiko scp -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

capture.py def cameraCap(): def lidarCap():

samples

数据目录

error record

1

ypr ==> rpy

2

if point_3d[0] > 0: point_3d[0] = point_3d[0] + point_3d[0] / _r * kk else: point_3d[0] = point_3d[0] - point_3d[0] / _r * kk ==> if point_3d[0] > 0: point_3d[0] = point_3d[0] + point_3d[0] / _r * kk else: point_3d[0] = point_3d[0] + point_3d[0] / _r * kk

3

if cv2.pointPolygonTest(np.asarray(mark_rois[i]), (x,y), False) > 0: ==> if cv2.pointPolygonTest(np.asarray(mark_rois[i]), (x,y), False) >= 0:

执行条件

num 4

z < 3.5 该值设置过大,会增加误差

conf_max_exclude_num = 4 svd.scipy_svd samples_size = 15 times_per_one_sample = 5 box3 kk = 0.0

distance_threshold=0.01 ransac_n=100

def correct_mark_cloud(mark_pcd): plane_model, inliers = mark_pcd.segment_plane(distance_threshold=0.01, ransac_n=100, num_iterations=1500) inlier_cloud = mark_pcd.select_by_index(inliers) inlier_cloud = inlier_cloud.paint_uniform_color([1.0, 0, 0]) outlier_cloud = mark_pcd.select_by_index(inliers, invert=True) cv2.findHomography(np.array(pts_3d), np.array(pts_hom), cv2.RANSAC, ransacReprojThreshold) ransacReprojThreshold = 0.5

num 5

z < 3.5 该值设置过大,会增加误差

conf_max_exclude_num = 4 svd.scipy_svd samples_size = 10 times_per_one_sample = 4 box3 kk = 0.0 def correct_mark_cloud(mark_pcd):

distance_threshold=0.015 ransac_n=2000

plane_model, inliers = mark_pcd.segment_plane(distance_threshold=0.015,
                                        ransac_n=2000,
                                        num_iterations=1500)
inlier_cloud = mark_pcd.select_by_index(inliers)
inlier_cloud = inlier_cloud.paint_uniform_color([1.0, 0, 0])
outlier_cloud = mark_pcd.select_by_index(inliers, invert=True)

num 6

z < 3.5 该值设置过大,会增加误差

conf_max_exclude_num = 4 svd.scipy_svd

samples_size = 10

times_per_one_sample = 4

box3 kk = 0.0 def correct_mark_cloud(mark_pcd):

distance_threshold=0.01 ransac_n=2000

plane_model, inliers = mark_pcd.segment_plane(distance_threshold=0.015,
                                        ransac_n=2000,
                                        num_iterations=1500)

num 7

z < 3.5 该值设置过大,会增加误差

conf_max_exclude_num = 4 svd.scipy_svd

samples_size = 10

times_per_one_sample = 4

box3 kk = 0.0 def correct_mark_cloud(mark_pcd):

distance_threshold=0.015 ransac_n=100

plane_model, inliers = mark_pcd.segment_plane(distance_threshold=0.015,
                                        ransac_n=2000,
                                        num_iterations=1500)

num 8

ransacReprojThreshold = 3.0

point.json

main calibration_by_all_samples_points 遍历子文件夹 遍历循环次数 step1_get_aruco_and_lidar_marks_and_conners重写 aurco3d.cal_camera_marks_3d_conners cloud3d.cal_marks_3d_conners_simple return aurco_marks_conners, pcd_marks_conners_new step2_exclude_bad_conners 去除坏点 step3_cal_aruco_and_lidar_marks_rt _R, t, _ , = svd.scipy_svd(array_pcd_marks_conners, array_aurco_marks_conners) # _r, _p, _y = utils.rotation_matrix_to_euler_angles(_R) _r, _p, _y = utils.rotation_matrix_to_rpy(_R) calibration_result.append([subdir, str(times), __mean, _t, _rpy, _new_rpy])