SLAM中各个坐标系之间的转换

在视觉SLAM中,有几个基本的坐标系

  • 世界坐标系
  • 相机坐标系
  • 成像平面坐标系
  • 图像像素坐标系

如何在各坐标系之间相互转换,把摄像头输出的2D图像和我们所在的三维世界一一对应,是SLAM技术研究的一大重点,从世界坐标系如何在各坐标系之间相互转换,把摄像头输出的2D图像和我们所在的三维世界一一对应,是SLAM技术研究的一大重点是一个小孔成像的模型,其中:

  [1]O点表示camera centre,即相机的中心点,也是相机坐标系的中心点;
  [2]z轴表示principal axis,即相机的主轴;
  [3]q点所在的平面表示image plane,即相机的像平面,也就是图片坐标系所在的二维平面;
  [4]O1点表示principal point,即主点,主轴与像平面相交的点;
  [5]O点到O1点的距离,也就是右边图中的f,即相机的焦距;
  [6]像平面上的x和y坐标轴是与相机坐标系上的X和Y坐标轴互相平行的;
  [7]相机坐标系是以X,Y,Z(大写)三个轴组成的且原点在O点,度量值为米(m);
  [8]像平面坐标系是以x,y(小写)两个轴组成的且原点在O1点,度量值为米(m);
  [9]像素坐标系一般指图片相对坐标系,在这里可以认为和像平面坐标系在一个平面上,不过原点是在图片的角上,而且度量值为像素的个数(pixel);
2、相机坐标系成像平面坐标系
[1]以O点为原点建立摄像机坐标系。点Q(X,Y,Z)为摄像机坐标系空间中的一点,该点被光线投影到图像平面上的q(x,y,f)点。
图像平面与光轴z轴垂直,和投影中心距离为(f是相机的焦距)。按照三角比例关系可以得出:
x/f = X/Z       y/f = Y/Z   ,即 x = fX/Z       y = fY/Z
以上将坐标为(X,Y,Z)的Q点映射到投影平面上坐标为(x,y)的q点的过程称作投影变换
上述Q点到q点的变换关系用3*3的矩阵可表示为:q = MQ,其中
  
    最终得出透视投影变换矩阵为:
(1)
M称为摄像机的内参数矩阵单位均为物理尺寸。

通过上面,可以把相机坐标系转换到像图像坐标系的物理单位[即(X,Y,Z)(x,y)]

3、成像平面坐标系像素坐标系

通过下面,可以把像平面坐标系物理单位到像素单位[即(u,v)]
 
以图像平面的左上角或左下角为原点建立坐标系。假设像平面坐标系原点位于图像左下角,水平向右为u轴,垂直向上为v轴,均以像素为单位。
以图像平面与光轴的交点O1 为原点建立坐标系,水平向右为x轴,垂直向上为y轴。原点O1一般位于图像中心处,O1在以像素为单位的图像坐标系中的坐标为(u0, v0)。
像平面坐标系和像素坐标系虽然在同一个平面上,但是原点并不是同一个。
摄像机模型与标定 - 小企鹅 - 企鹅的博客

设每个像素的物理尺寸大小为 dx * dy (mm) ( 由于单个像素点投影在图像平面上是矩形而不是正方形,因此可能dx != dy)
图像平面上某点在成像平面坐标系中的坐标为(x, y),在像素坐标系中的坐标为(u, v),则二者满足如下关系:[即(x, y)(u, v)]
u = x / dx + u0            v = y / dy +  v0
用齐次坐标与矩阵形式表示为:
摄像机模型与标定 - 小企鹅 - 企鹅的博客
 将等式两边都乘以Q(X,Y,Z)坐标中的Z可得:
摄像机模型与标定 - 小企鹅 - 企鹅的博客
  将摄像机坐标系中的(1)式代入上式可得:
  则右边第一个矩阵和第二个矩阵的乘积亦为摄像机的内参数矩阵(单位为像素),相乘后可得:
(2)
 和(1)式相比,此内参数矩阵中f/dx, f/dy, cx/dx+u0,cy/dy+v0  的单位均为像素。令内参数矩阵为K,则上式可写成:
摄像机模型与标定 - 小企鹅 - 企鹅的博客(3)

<think>好的,用户想了解SLAM技术中的坐标系转换实现。首先我需要回忆一下SLAM中的常见坐标系,比如世界坐标系、地图坐标系、传感器坐标系、机器人本体坐标系等。根据提供的引用内容,用户提到了ENU坐标系和WGS84坐标系的优缺点,以及转换公式。 首先,我应该明确各个坐标系的作用。比如,世界坐标系(world)通常是固定的全局参考系,而机器人本体坐标系(base_link)用于描述机器人自身的位置。地图坐标系(map)可能与世界坐标系相关,但可能有不同的原点或表示方式。根据引用[1],转换关系涉及到mapTgrid、mapTodom和odomTbase_link,这说明存在多个坐标系转换链条。 接下来,需要解释如何通过矩阵乘法进行坐标系间的转换。例如,用户提供的公式gridTbase_link = mapTgrid.inverse() * convert_transform_25(mapTodom) * odomTbase_link,这里的每一步都代表不同坐标系之间的变换矩阵相乘。需要注意的是,矩阵的逆表示反向转换,比如mapTgrid的逆就是将grid坐标系转换回map坐标系。 然后,引用[3]提到T_c_w是欧式变换矩阵,包含旋转R和平移t,用于将世界坐标系的点转换到相机坐标系。这涉及到齐次坐标的转换,即T * P_world得到相机坐标系下的点。这部分需要详细说明旋转矩阵和平移向量的组合方式。 此外,引用[2]讨论了ENU和WGS84坐标系的优缺点。ENU在计算距离时方便,但需要转换为WGS84进行输出;而WGS84虽然通用,但计算时可能存在数值问题。这可能需要解释为什么在SLAM中选择不同的坐标系,以及转换时的注意事项,比如避免矩阵求逆的问题,采用序贯滤波等方法。 用户可能还想知道具体的实现步骤,比如如何构建变换矩阵,如何处理传感器数据中的坐标转换,以及在实际应用中的优化方法。需要结合代码示例,比如展示如何用C++或Python表示变换矩阵,并进行乘法运算。同时,要强调齐次坐标的重要性,以及如何分解旋转和平移部分。 最后,需要生成相关问题,帮助用户进一步学习,比如性能优化、不同场景下的应用、常见问题的解决方法等。要确保问题覆盖用户可能感兴趣的方面,并引导他们深入理解坐标系转换SLAM中的实际应用。</think>### SLAM技术中的坐标系转换实现 在SLAM(同时定位与建图)技术中,坐标系转换是实现定位和地图构建的核心环节。以下是关键概念与实现方法的分步说明: --- #### **1. SLAM中的常见坐标系** - **世界坐标系(World Frame)**:全局固定参考系,通常与地图原点关联[^1]。 - **地图坐标系(Map Frame)**:建图过程中生成的坐标系,可能与世界坐标系重合或独立。 - **里程计坐标系(Odom Frame)**:通过传感器(如轮式编码器)累积的局部坐标系,随时间漂移。 - **机器人本体坐标系(Base Link)**:以机器人中心为原点的坐标系,用于描述自身位姿。 - **传感器坐标系(如Camera Frame)**:相机、雷达等传感器的本地坐标系。 --- #### **2. 坐标系转换的数学基础** 坐标系间的转换通过**欧式变换矩阵**($T$)实现,包含旋转矩阵$R$和平移向量$t$,其齐次形式为: $$ T = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} $$ 例如,将世界坐标系下的点$P_{\text{world}}$转换到相机坐标系: $$ P_{\text{camera}} = T_{\text{c\_w}} \cdot P_{\text{world}} $$ 其中$T_{\text{c\_w}}$表示从世界到相机的变换矩阵[^3]。 --- #### **3. 坐标系转换的实现步骤** **步骤1:定义变换关系链** 典型转换链为: `地图坐标系 → 里程计坐标系 → 机器人本体坐标系` 对应的公式为: $$ T_{\text{grid\_to\_base}} = T_{\text{map\_to\_grid}}^{-1} \cdot T_{\text{map\_to\_odom}} \cdot T_{\text{odom\_to\_base}} $$ 此处通过逆矩阵实现坐标系的反向转换。 **步骤2:处理传感器数据** 假设激光雷达数据在`base_link`坐标系下,需将其转换到`map`坐标系: $$ P_{\text{map}} = T_{\text{map\_to\_odom}} \cdot T_{\text{odom\_to\_base}} \cdot P_{\text{base}} $$ **步骤3:优化与融合** 使用滤波算法(如卡尔曼滤波)或优化库(如g2o)对多传感器数据融合,修正坐标系间的累积误差。 --- #### **4. 实现示例(C++伪代码)** ```cpp // 定义变换矩阵 Eigen::Matrix4d mapTodom = getMapToOdomTransform(); Eigen::Matrix4d odomTbase = getOdomToBaseTransform(); // 计算base_link在map坐标系下的位姿 Eigen::Matrix4d mapTbase = mapTodom * odomTbase; // 坐标转换示例:将点从base_link转换到map Eigen::Vector4d point_base(1.0, 0.0, 0.0, 1.0); // 齐次坐标 Eigen::Vector4d point_map = mapTbase * point_base; ``` --- #### **5. 关键问题与优化** - **ENU与WGS84坐标系的取舍**: - ENU坐标系(东-北-天)便于局部计算,但需转换为WGS84(经纬高)与地理坐标兼容[^2]。 - 转换时需注意数值稳定性(如避免矩阵求逆发散问题)。 - **漂移修正**:通过闭环检测(Loop Closure)重置里程计坐标系与地图坐标系的关系。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值