【C++】相机标定源码笔记-基于点云和图像的标定类

基于点云标定

  • 此函数分割出点云中的地面数据,然后计算当前点云相对于地面(在Z=0处)的变换矩阵。这种方法对于需要确定机器人或传感器相对于地面准确位置的场景很有用,例如自动驾驶车辆的环境感知或机器人导航。

基于图像标定

  • 参数结构体:存储了棋盘格到机器人变换矩阵所需的六自由度参数,包括三个旋转角度(roll、pitch、yaw)和三个平移向量(x、y、z)。该结构体为后续计算变换矩阵提供了简便的参数传递方式。

  • 该函数接受参数结构体作为输入,并计算出对应的4x4变换矩阵。通过将旋转角度和平移向量结合起来,它能够提供从一个坐标系到另一个坐标系的完整描述。

  • 此函数计算从相机坐标系到机器人坐标系的变换矩阵。它首先计算相机到棋盘格的变换矩阵(利用之前定义的相机内参类),然后结合已知棋盘格到机器人的变换,得到相机到机器人的变换矩阵。在机器人视觉系统中,这是一个重要的步骤,它使系统能够根据相机捕获的图像来理解机器人与周围环境的相对位置。

应用场景

这些工具和方法对于需要精确的空间定位和坐标转换的应用至关重要,例如:

  • 机器人视觉:在机器人抓取、导航等应用中,了解相机相对于机器人本体的准确位置是必要的。

  • 增强现实(AR):在增强现实应用中,准确地将虚拟对象放置在现实世界中需要了解相机与环境间的空间关系。

  • 自动驾驶:车载传感器(如LiDAR或相机)捕捉到的数据需要转换到车辆坐标系中以正确解释周围环境。

--------------函数----------------

分割出点云中的地面数据,然后计算当前点云相对于地面(在Z=0处)的变换矩阵(输入点云,x方向最小最大值,z方向最小最大值,局外点距离阈值,变换矩阵):  初始化变换矩阵为单位矩阵,定义常量-地面最少点数,创建首次滤波点云,对两个方向上的点进行直通滤波(距离方向X 高度方向Z),如果滤波后点云数量小于地面最少点数阈值,返回错误。 准备拟合平面(定义float平面系数,创建存储平面模型系数的指针,创建平面分割对象,设置优化系数,设置模型类型为平面 ,使用RANSAC方法,设置距离阈值,分割平面,如果内点数为0说明没有找到平面返回错误,获取平面系数的值 ),去除离群点( 创建二次滤波点云,遍历首次滤波后的点云,根据平面系数距离点到平面的距离,如果距离小于等于局外点距离阈值,将点添加到二次滤波的点云。检查二次滤波点云数量是否小于等于地面最少点数,如果点数不足返回错误)。再次拟合一遍去除噪点的平面,得到新的模型系数。 求解旋转矩阵(平面法线从模型系数 变换到 0,0,1 ,根据法线变化创建旋转矩阵得到变换矩阵T的的R),平移点云(创建三次滤波点云,通过变换矩阵(仅有旋转矩阵)旋转二次滤波点云到得到三次滤波点云,创建齐次坐标 点云原始中心和点云移动后中心,使用pcl::compute3DCentroid计算原始点云(二次滤波)的质心,计算旋转后点云的质心 ,计算平移向量,设置变换矩阵的平移部分)。最后返回true。

基于图像标定的参数结构体,描述棋盘格到机器人的变换所需参数:double RPYXYZ.

 将滚转角、俯仰角、偏航角(RPY)和位移(XYZ)转换为变换矩阵: 使用Eigen库中的AngleAxis类进行RPY到变换矩阵的转换( 将角度从度转换为弧度,并创建绕X轴的旋转矩阵(滚转角r),将角度从度转换为弧度,并创建绕Y轴的旋转矩阵(俯仰角p),将角度从度转换为弧度,并创建绕Z轴的旋转矩阵(偏航角y),将三个旋转矩阵相乘得到四元数表示的整体旋转【这里使用的是绕自身坐标系旋转,先绕飞机的Z轴旋转,再绕飞机的Y轴旋转,最后绕飞机的X轴旋转。R = R_z * R_y * R_x】,将四元数转换为3x3旋转矩阵, 初始化4x4的变换矩阵为单位矩阵,将旋转矩阵赋值给变换矩阵的左上3x3部分),将平移向量赋值给变换矩阵的右上3x1部分.

ae26d59c563f2ac91f80a4d7097e26b2.png

415f165c9870b75058c8bd328af03685.png

首先计算相机到棋盘格的变换矩阵,并通过已知的棋盘格到机器人(结构)的变换矩阵(需要手动测量)计算相机到机器人的变换矩阵(输入相机内参类,输入图像向量的引用,棋盘格到机器人坐标系的变换参数,输出相机到机器人坐标系的变换参数): 调用相机内参对象的方法获取棋盘格相对于相机的位姿,如果获取失败返回false, 定义一个4x4矩阵,用于存储棋盘格在机器人坐标系下的位姿,通过输入的棋盘格相对于机器人坐标系的参数计算变换矩阵,计算相机相对于机器人坐标系的变换矩阵,返回true表示计算成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值