Lego-LOAM IMU坐标系变换的详细记录

最近看了Lego-LOAM 的IMU部分,没看懂IMU的坐标系变换。看其它的博客,看的让我更混淆了,因此决定抛开其他人的理解,故写下这篇博客。

0 基础知识

  1. IMU的数据欧拉角表示的时从当前时刻的坐标系初始坐标系的旋转关系(内旋变换),且旋转顺序为RPY( yaw(z) - > pitch(y) -> roll(x) ), 即:
    R = R(yaw)*R(pitch)*R(roll);
  2. IMU的欧拉角的值旋转顺时针(从负轴看向正轴)为,本人实测。这也解释了第一点为什么IMU的欧拉角表示的是从当前时刻的坐标系初始坐标系的原因。
  3. 旋转矩阵 R = R(yaw)*R(pitch)*R(roll) -----------------------------------------------------------------------(1)

    在这里插入图片描述

5 IMU坐标系方向:IMU RPY顺时针为正,加速度计


在这里插入图片描述

1. IMU 重力加速度消除

首先,一般重力加速度再Z轴为正,至少本人IMU测试重力加速度再Z轴为正。有了上面的基础,再来看IMU的重力加速度消除就简单,减去重力加速度在xyz轴的分量即可。
1.1 假设在初始坐标系下IMU的重力加速度在x,y,z方向的分量表示为ginit=[0; 0 ; 9.8]
1.2 Rinit_imu =R(yaw)R(pitch)R(roll)表示从当前时刻的IMU坐标系转换到初始坐标系
1.3 因此有,ginit = Rinit_imu * gimu,可得重力加速度在当前IMU坐标系下的xyz重力分量为:
               gimu = RTinit_imu * ginit
                 = [-9.8
sin(pitch); 9.8
sin(roll)cos(pitch); 9.8*cos(roll)cos(pitch)];
1.4 IMU数据减去重力分量,并且转换到相机坐标系下:

[accZ; accX; accY] = [imu_acc_x; imu_accy; imu_acc_z] - g imu

旋转到相机坐标系下,RPY和相机坐标系的关系:


在这里插入图片描述

2 相机坐标系(camera)到初始坐标系(camera_init)的转换

上面我们将IMU转换到相机坐标系下了。在Lego-LOAM 中计算位移和速度以初始相机坐标系(camera_init)为参考,因此需要转换到初始相机坐标系(camera_init)。
2.1 从当前时刻的相机坐标系转换到初始相机坐标系的旋转关系,应该和IMU的旋转关系一致,即

R init_camera = R init_imu

acc_wrold = R init_camera * [accZ; accX; accY] = R init_imu *( [imu_acc_x; imu_accy; imu_acc_z] - g imu );

  上面等式也描述了为什么两个旋转矩阵相等,右边是IMU的旋转到初始IMU坐标系位置,左边是相机坐标系旋转到初始坐标系位置。并且从相机坐标系变换会初始坐标系时不是:z(roll) --> y(yaw)–>x(pitch),而是(y_cam)yaw -> (x_cam)pitch -> (z_cam)roll,即:
    acc_wrold = R2init_camera * [accX; accY; accZ];
    R2init_camera = R(yaw)*R(pitch)*R(roll) = R(y_cam)*R(x_cam)*R(z_cam)

2.2 最后将上述等式乘起来就是Lego-LOAM中AccumulateIMUShiftAndRotation()的坐标系变换。
2.3 Lego-LOAM旋转变换都是遵循RPY(Y->P->R)顺序,只是Yaw 对应的到底是R(x),R(y),R(z)的哪个旋转矩阵,要根据IMU的RPY坐标系和待旋转坐标轴确定。例如在相机坐标系下yaw对应的就是y轴,因此对应R(y)的旋转矩阵。明白了这些,在Lego-LOAM中其他地方的IMU坐标变换便迎刃而解。

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 要将IMU信息添加到LEGO-LOAM中,需要进行以下步骤: 1. 首先,需要在代码中添加IMU数据的读取和处理功能。可以使用ROS中的IMU消息类型来读取IMU数据,并将其转换为适合LEGO-LOAM使用的格式。 2. 接下来,需要将IMU数据与激光雷达数据进行同步。可以使用时间戳来将两者同步,确保它们在同一时刻被处理。 3. 最后,需要将IMU数据与激光雷达数据进行融合,以提高定位和建图的精度。可以使用卡尔曼滤波或扩展卡尔曼滤波等技术来实现融合。 总之,将IMU信息添加到LEGO-LOAM中需要进行一些代码修改和算法调整,以确保IMU数据能够与激光雷达数据有效地融合。 ### 回答2: LEGO-LOAM是一个基于LEGO Mindstorms EV3硬件平台和三维激光雷达(3D Lidar)的开源SLAM系统。在实际的应用场景中,通常需要加入IMU(惯性测量单元)信息来提高其定位精度和鲁棒性。那么,LEGO-LOAM如何加入IMU信息呢? 在LEGO-LOAM中,IMU信息是通过IMU传感器进行获取的。具体来说,IMU传感器能够测量设备的加速度和角速度信息,通过对这些信息进行积分可以获取设备的位置和姿态信息。因此,将IMU传感器的输出信息与3D Lidar的测量数据进行融合,便可以提高LEGO-LOAM系统的定位精度和鲁棒性。 在LEGO-LOAM中,可以通过以下步骤将IMU信息加入到系统中: 1.将IMU传感器与LEGO Mindstorms EV3设备相连接,通过EV3软件获取IMU传感器的输出数据。可以使用EV3DEV系统配合Python命令行工具对IMU传感器进行操作。 2.利用IMU传感器获取到设备的加速度和角速度信息,并进行积分得到设备的位置和姿态信息。 3.通过将IMU信息与3D Lidar测量数据进行融合,得到更可靠和精准的定位信息。 4.在代码实现中,可以运用卡尔曼滤波等算法进行IMU信息的融合和滤波,进一步提高系统的精度和稳定性。 总之,在LEGO-LOAM系统中加入IMU信息,能够显著提高系统的定位精度和鲁棒性,为实际的应用场景带来更多便利和价值。 ### 回答3: LEGO-LOAM是一种基于激光雷达的无人驾驶系统,它利用点云数据进行建图和定位。但是,对于具有运动状态的无人车辆而言,仅仅使用激光雷达并不能很好地实现建图和定位。因此,LEGO-LOAM需要结合IMU(惯性测量单元)的信息。 惯性测量单元(IMU)是一种能够测量物体姿态和运动状态的仪器。它通常包括加速度计和陀螺仪。加速度计可以测量物体的加速度,从而可以得到物体的姿态信息。而陀螺仪可以测量物体的角速度,从而可以得到物体的旋转信息。 在LEGO-LOAM中,可以通过将IMU的信息加入激光雷达数据中,使得无人车辆能够更准确地进行建图和定位。 具体来讲,首先需要读取IMU的数据,并将其转换为IMU坐标系下的加速度和角速度信息。然后,需要将IMU坐标系和激光雷达坐标系之间的关系进行校准,从而得到准确的坐标系转换矩阵。最后,将转换后的IMU信息与激光雷达数据进行融合,从而得到更加准确的点云数据,进而进行建图和定位。 总的来说,加入IMU信息可以提高LEGO-LOAM的定位精度和建图效果,使得无人车辆能够更加准确和稳定地进行自主导航和控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值