激光雷达标定(坐标系转换)

这篇具有很好参考价值的文章主要介绍了激光雷达标定(坐标系转换)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 旋转矩阵

  • 由于激光雷达获取的点云数据的坐标是相对于激光雷达坐标系的,为了使车最终得到的点云数据坐标是在车坐标系下的,我们需要对点云中每一个点的坐标进行坐标转换。
  • 首先是需要对坐标系进行旋转变换,先以二维平面的单位向量坐标转换为例,假设两坐标系中的旋转矩阵为R,旋转角度为 θ \theta θ,点P在 x 1 o y 1 x_1oy_1 x1oy1坐标(车坐标系)下的坐标为 ( x 1 , y 1 ) (x_1,y_1) (x1,y1);点P在 x 2 o y 2 x_2oy_2 x2oy2坐标(激光雷达坐标系)下的坐标为 ( x 2 , y 2 ) (x_2,y_2) (x2,y2),已知点在激光雷达坐标系下的坐标 ( x 2 , y 2 ) (x_2,y_2) (x2,y2),可以由以下的坐标系的转换关系得到 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)

旋转矩阵R:将点P在旋转后的坐标系下的坐标转换为旋转前的坐标系下的坐标

[ x 1 y 1 ] = R [ x 2 y 2 ] (1) \begin{bmatrix} x_1\\y_1 \end{bmatrix} =R\begin{bmatrix} x_2\\y_2 \end{bmatrix} \tag{1} [x1y1]=R[x2y2](1)
激光雷达标定(坐标系转换)

图1 二维坐标系转换
  • 根据旋转角度 θ \theta θ,由上图1可得 x 1 x_1 x1 y 1 y_1 y1为:
    x 1 = x 2 c o s θ − y 2 s i n θ y 1 = x 2 s i n θ + y 2 c o s θ (2) x_1=x_2cos\theta-y_2sin\theta\\ y_1=x_2sin\theta+y_2cos\theta \tag{2} x1=x2cosθy2sinθy1=x2sinθ+y2cosθ(2)
  • 由此可以得出以下的坐标转换矩阵等式:
    [ x 1 y 1 ] = [ c o s θ , − s i n θ s i n θ , c o s θ ] [ x 2 y 2 ] (3) \begin{bmatrix} x_1\\y_1 \end{bmatrix} =\begin{bmatrix} cos\theta,-sin\theta\\ sin\theta,cos\theta\\ \end{bmatrix} \begin{bmatrix} x_2\\y_2 \end{bmatrix} \tag{3} [x1y1]=[cosθ,sinθsinθ,cosθ][x2y2](3)
  • 旋转矩阵R即为:
    R = [ c o s θ , − s i n θ s i n θ , c o s θ ] (4) R =\begin{bmatrix} cos\theta,-sin\theta\\ sin\theta,cos\theta\\ \end{bmatrix} \tag{4} R=[cosθ,sinθsinθ,cosθ](4)
  • 由二维推广至三维,由右手定则可以想象在上图1中的O点处有一条垂直于XOY平面指向屏幕的的Z轴:
    激光雷达标定(坐标系转换)
图2 航向角转换
  • 那么上述的二维空间内的坐标旋转便可推广至三维空间中绕z轴的旋转,旋转角度 θ \theta θ便是欧拉角中的航向角(也称偏航角yaw),由于旋转前后z轴没有发生变换,上述公式(3)可以写为以下形式:
    [ x 1 y 1 z 1 ] = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ x 2 y 2 z 2 ] (5) \begin{bmatrix} x_1\\y_1\\z_1 \end{bmatrix} =\begin{bmatrix} cos\theta&-sin\theta&0\\ sin\theta&cos\theta&0\\ 0&0&1\\ \end{bmatrix} \begin{bmatrix} x_2\\y_2\\z_2 \end{bmatrix} \tag{5} x1y1z1 = cosθsinθ0sinθcosθ0001 x2y2z2 (5)
  • 由此可得航向角(也称偏航角yaw)旋转矩阵 R y a w R_{yaw} Ryaw为:
    R y a w = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] (6) R_{yaw}=\begin{bmatrix} cos\theta&-sin\theta&0\\ sin\theta&cos\theta&0\\ 0&0&1\\ \end{bmatrix} \tag{6} Ryaw= cosθsinθ0sinθcosθ0001 (6)
    激光雷达标定(坐标系转换)
图3 俯仰角转换
  • 由上述公式(6)同理可以推导出绕坐标轴y轴旋转 β \beta β(俯仰角pictch)的公式如下:
    [ x 1 y 1 z 1 ] = [ c o s β 0 s i n β 0 1 0 − s i n β 0 c o s β ] [ x 2 y 2 z 2 ] (7) \begin{bmatrix} x_1\\y_1\\z_1 \end{bmatrix} =\begin{bmatrix} cos\beta&0&sin\beta\\ 0&1&0\\ -sin\beta&0&cos\beta\\ \end{bmatrix} \begin{bmatrix} x_2\\y_2\\z_2 \end{bmatrix} \tag{7} x1y1z1 = cosβ0sinβ010sinβ0cosβ x2y2z2 (7)
  • 由此可得俯仰角pictch旋转矩阵 R p i c t c h R_{pictch} Rpictch为:
    R p i t c h = [ c o s β 0 s i n β 0 1 0 − s i n β 0 c o s β ] (8) R_{pitch}=\begin{bmatrix} cos\beta&0&sin\beta\\ 0&1&0\\ -sin\beta&0&cos\beta\\ \end{bmatrix} \tag{8} Rpitch= cosβ0sinβ010sinβ0cosβ (8)
    激光雷达标定(坐标系转换)
图4 横滚角转换
  • 也可以推导出绕坐标轴x轴旋转 γ \gamma γ(横滚角roll)的公式如下:
    [ x 1 y 1 z 1 ] = [ 1 0 0 0 c o s γ − s i n γ 0 s i n γ c o s γ ] [ x 2 y 2 z 2 ] (9) \begin{bmatrix} x_1\\y_1\\z_1 \end{bmatrix} =\begin{bmatrix} 1&0&0\\ 0&cos\gamma&-sin\gamma\\ 0&sin\gamma&cos\gamma\\ \end{bmatrix} \begin{bmatrix} x_2\\y_2\\z_2 \end{bmatrix} \tag{9} x1y1z1 = 1000cosγsinγ0sinγcosγ x2y2z2 (9)
  • 由此可得横滚角roll旋转矩阵 R r o l l R_{roll} Rroll为:
    R r o l l = [ 1 0 0 0 c o s γ − s i n γ 0 s i n γ c o s γ ] (10) R_{roll}=\begin{bmatrix} 1&0&0\\ 0&cos\gamma&-sin\gamma\\ 0&sin\gamma&cos\gamma\\ \end{bmatrix} \tag{10} Rroll= 1000cosγsinγ0sinγcosγ (10)
  • 按照不同的顺序对坐标轴进行旋转可以得到不同的旋转矩阵R,R共有六种形式,分别为
    R = R y a w R p i t c h R r o l l   R = R y a w R r o l l R p i t c h R = R p i t c h R y a w R r o l l   R = R p i t c h R y a w R r o l l R = R r o l l R p i t c h R y a w   R = R r o l l R y a w R p i t c h (11) R=R_{yaw}R_{pitch}R_{roll} \ R=R_{yaw}R_{roll}R_{pitch}\\ R=R_{pitch}R_{yaw}R_{roll} \ R=R_{pitch}R_{yaw}R_{roll}\\ R=R_{roll}R_{pitch}R_{yaw} \ R=R_{roll}R_{yaw}R_{pitch} \tag{11} R=RyawRpitchRroll R=RyawRrollRpitchR=RpitchRyawRroll R=RpitchRyawRrollR=RrollRpitchRyaw R=RrollRyawRpitch(11)
  • 按照欧拉角的测量方式,每次旋转按照车底盘坐标系的坐标轴进行旋转(即外旋),外旋旋转矩阵是左乘矩阵,即按照X-Y-Z的顺序进行旋转的话,得到的旋转矩阵是 R = R Z R Y R X R=R_ZR_YR_X R=RZRYRX,通过测量的得到的欧拉角的角度值就可以计算出对应的旋转矩阵。

外旋(左乘):每次旋转绕固定轴旋转
内旋(右乘):每次旋转绕自身旋转后的轴旋转


2. 平移矩阵

已知激光雷达相对于车坐标原点的三维坐标x,y,z,可以得到激光雷达与车坐标系的平移矩阵为:
T = [ x y z ] (12) T=\begin{bmatrix} x\\y\\z \end{bmatrix} \tag{12} T= xyz (12)
激光雷达标定(坐标系转换)

图5 三维坐标系转换

3. 坐标系的转换

根据上述计算得到的旋转矩阵R和平移矩阵T。设车坐标下点的坐标为 ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc)激光雷达下点的坐标为 ( x l , y l , z l ) (x_l,y_l,z_l) (xl,yl,zl)即最终的变换形式为:
[ x c y c z c ] = R [ x l y l z l ] + T (13) \begin{bmatrix} x_c \\ y_c\\ z_c \end{bmatrix} =R\begin{bmatrix} x_l \\ y_l\\ z_l \end{bmatrix} +T \tag{13} xcyczc =R xlylzl +T(13)文章来源地址https://www.toymoban.com/news/detail-414967.html


4. 坐标转换代码

  • 构造旋转平移矩阵对点云中的点进行转换
//坐标变换将激光雷达坐标系下的点转换到小车坐标系下
void MainWindow::changePoint(pcl::PointCloud<pcl::PointXYZ>::Ptr lidarCloud,
                 pcl::PointCloud<pcl::PointXYZ>::Ptr carCloud,
                 double yaw,double pitch,double roll,double x,double y,double z)
{
    Eigen::Matrix4f transform=Eigen::Matrix4f::Identity();
    Eigen::Matrix4f transformYaw;
    Eigen::Matrix4f transformPitch;
    Eigen::Matrix4f transformRoll;
    
    //航向角
    transformYaw<<cos(yaw),-sin(yaw),0,0,\
            sin(yaw),cos(yaw),0,0,\
            0,0,1,0,\
            0,0,0,1;
    //俯仰角
    transformPitch<<cos(pitch),0,sin(pitch),0,\
            0,1,0,0,\
            -sin(pitch),0,cos(pitch),0,\
            0,0,0,1;
    //横滚角
    transformRoll<<1,0,0,0,\
            0,cos(roll),-sin(roll),0,\
            0,sin(roll),cos(roll),0,\
            0,0,0,1;
            
    //旋转矩阵
    transform=transformRoll*transformPitch*transformYaw;
    
    //平移矩阵
    transform(0,3)=x;
    transform(1,3)=y;
    transform(2,3)=z;
    
    //坐标转换
    pcl::transformPointCloud(*lidarCloud,*carCloud,transform);
}

到了这里,关于激光雷达标定(坐标系转换)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 三维坐标系旋转矩阵推导

    注意 坐标系 旋转不同于 坐标点 旋转 坐标系旋转角度θ则 等同于 将目标点围绕坐标原点反方向旋转同样的角度θ 假设三维坐标系是一个右手坐标系。如下图 可以通过右手定则确定是右手坐标系。 确定轴的旋转的正方向,用右手的大拇指指向轴的正方向,弯曲手指手指。手

    2023年04月18日
    浏览(28)
  • 旋转矩阵的作用:世界坐标变换;求解局部坐标系下的局部坐标

    以下数据以平面直角坐标系为例,三维空间同理 上图中,B点为旋转前的点,C点为B点旋转后的对应点(逆时针旋转90°),对应的旋转矩阵为: 对坐标轴做相同旋转: 我们再对比下旋转矩阵,可以发现旋转后的坐标轴可以在旋转矩阵中找到,其实这个旋转矩阵也表示了一个坐标

    2024年01月22日
    浏览(30)
  • 无人机中的坐标系、旋转矩阵与相机姿态计算

    球坐标系 球坐标系是三维坐标系中的一种,在无人机中一般使用球坐标系来表示相机姿态,相机姿态的坐标是相对于无人机的,而无人机的飞行姿态则是相对于大地坐标系的。这里我们使用的相机是2自由度的相机,即可以水平 ϕ phi ϕ 和垂直 θ theta θ 两个方向转动,其中

    2024年02月12日
    浏览(27)
  • 标准DH坐标系,改进DH坐标系转换矩阵matlab函数代码2.0

    1.标准DH坐标系(Standard DH) 2.改进DH坐标(modified DH)

    2024年02月13日
    浏览(26)
  • 3Dslicer医学图像三维坐标系(xyz,RAS,IJK)差异,转换,旋转,平面角

    目录 World coordinate system世界坐标系xyz Anatomical coordinate system解剖学坐标系(LPS/RAS/RAI) Image coordinate system图像坐标系ijk Image transformation图像转换 三维坐标变换 A.旋转矩阵和旋转向量 B.欧拉角 C.四元数​编辑 计算平面角Angle Planes插件 参考链接 处理医学图像和应用程序时的问题之一

    2024年01月17日
    浏览(124)
  • 对于SLAM定位中各类坐标系的理解(坐标系,里程计坐标系,基座坐标系与雷达坐标系)

    最近系统性学习了一遍LIO-SAM,开始的时候一直搞不懂里程计坐标系,经过不断学习才有了一点自己的拙见。 引言 :首先我们搞清楚SLAM算法主要是解决建图与定位问题,其更 侧重定位 ,即让机器人知道自己在全局地图的哪个位置,只有这样才能继续后续的预测、感知、控制

    2024年02月03日
    浏览(38)
  • 双相机坐标系标定

    在工业应用中,常常会遇到双相机定位的项目,下面就介绍双相机如何标定才能做到精准定位。 1,产品  如上图所示,玻璃上对角有两个mark点,由于mark点的间距太远只能用两个相机去拍。 2,相机布局  两个相机分别拍产品的对角。 3,标定流程   1,根据n点标的规则获取

    2024年02月12日
    浏览(36)
  • N点标定-坐标系变换

    vector_to_hom_mat2d(Px, Py, Qx, Qy, HomMat2D) 这里参考了halcon算子块的官方文档,使用的是最小二乘法,求HomMat2D矩阵。 -常用九点标定,求两个坐标系的坐标转换。。 下面个人实现原理,结果和上面算子算出来的结果一致,知识有限,仅供学习交流。 1:先来看一张图,图中矩阵为2行

    2024年02月16日
    浏览(28)
  • 机器人坐标系转换从局部坐标系转换到世界坐标系

    矩阵方式: 下面是代码: 函数方式: 根据三角函数的特性,可以进行一下简化: 下面是简化前的代码示例:

    2024年04月16日
    浏览(50)
  • 坐标转换(相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系)

    一般情况下我们所涉及到的坐标包括四个,即相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系。我们本文的讲解思路是在讲解每个坐标转换之前先讲清楚每个坐标系所表示的含义。本文主要参考由高翔主编的视觉SLAM十四讲第五章相机模型。 相机将三维世界的坐

    2024年02月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包