手眼标定:相机坐标系转换代码

在我们机器人与相机的联动使用时,必须进行的操作为手眼标定,将相机的坐标系与机器人的末端坐标系进行转换。

首先第1步为拍摄相机照片,并进行标定得到内参:如何matlab进行单目相机标定(全流程)_matlab camere calibrator-CSDN博客

如何未直接获得外参,还需进行相机的外参求解:matlab进行相机标定求得外参_matlab求解外参函数-CSDN博客

求解相机内参外参后,还需将相机拍摄的照片进行求解,将相机的坐标系转换为世界坐标系,便于后续与机器人的末端坐标系进行转换进而完成机器人的手眼标定。

以下为相机坐标系转换代码,将坐标系进行转换后保存为csv文件

# 相机坐标转化代码
import numpy as np
import pandas as pd

# 读取 Excel 文件中的数据
input_file = 'waicai.csv'  # 你的文件路径
df = pd.read_csv(input_file, header=None)  # 假设文件中没有列标题

# 用于存储相机变换矩阵的列表
transformation_matrices = []

# 遍历每一行,构建 4x4 的齐次变换矩阵
for i in range(df.shape[0]):
    # 提取旋转矩阵和平移向量
    R = df.iloc[i, :9].values.reshape(3, 3)  # 提取前三列作为旋转矩阵
    t = df.iloc[i, 9:].values.reshape(3, 1)  # 提取后3列作为平移向量

    # 创建 3x4 的矩阵: [R | t]
    transformation_matrix = np.hstack((R, t))

    # 扩展为 4x4 的齐次变换矩阵
    homogeneous_matrix = np.vstack((transformation_matrix, np.array([0, 0, 0, 1])))

    # 将变换矩阵添加到列表中(展平为一维数组)
    transformation_matrices.append(homogeneous_matrix.flatten())

# 将所有的变换矩阵合并成一个矩阵
transformation_matrices = np.array(transformation_matrices)

# 保存为 CSV 文件
output_file = 'camera_matrices.csv'
df_output = pd.DataFrame(transformation_matrices)
df_output.to_csv(output_file, index=False, header=False)

print(f"变换矩阵已成功保存为 {output_file}")

对上述代码只需修改文件地址等信息即可

你可能感兴趣的:(人工智能,python,计算机视觉)