loam详细代码解析与公式推导
loam详细代码解析与公式推导(基础理论知识)
一、基础坐标变换
loam中欧拉角解算都采用R P Y 的解算方式,即先左乘R, 再左乘P, 最后左乘Y,用矩阵表示为: R = Ry * Rp * Rr。用个很简单的示例表示,在坐标系Oxyz中经过旋转后得到坐标系O'xyz,可以把坐标系Oxyz当成全局坐标系{world_link},坐标系O'xyz当成局部坐标系{local_link};有局部坐标系上的点Pl,在全局坐标系下的位置Pw是:
Pw = R * Pl = (Ry * Rp * Rr)* Pl
上式将局部坐标系上的点变换到全局坐标系即:
R = Ry * Rp * Rr
{world_link} ------------------------> {link_link}
其中:Rr是agv的翻滚角,与loam坐标系中的rot_x对应
rot_x = [1, 0, 0; 0, crx, -srx; 0 , srx, crx];
Ry是agv的偏航角,与loam坐标系中的rot_y对应
rot_y = [cry, 0, sry; 0, 1, 0; -sry , 0, cry];
Rp是agv的俯仰角,与loam坐标系中的rot_z对应
rot_z = [crz, -srz, 0; srz, crz, 0; 0 , 0, 1];
二、loam对应的欧拉变换顺序
loam中坐标变换通常分为从{link_world}到{world_link}和从{world_link}到{link_world}的变换,其分别对应的欧拉拉变换方式为:Rzxy 和 其逆矩阵inv(Rzxy) = R-y-x-z,其中
Rzxy = rot_z * rot_x * rot_y = [ cry*crz + srx*sry*srz, crz*srx*sry - cry*srz, crx*sry] [crx*srz, crx*crz, -srx] [ cry*srx*srz - crz*sry, sry*srz + cry*crz*srx, crx*cry]
inv(Rzxy) = -rot_y * -rot_x * -rot_z = [ cry*crz + srx*sry*srz, crx*srz, cry*srx*srz - crz*sry] [ crz*srx*sry - cry*srz, crx*crz, sry*srz + cry*crz*srx] [ crx*sry, -srx, crx*cry]
三、imu角度变换计算
loam中imu的坐标系方向是前左上,假设在current的imu坐标系下的各个方向加速度为
A = [ax; ay; az]
在前左上坐标系中欧拉角的解算方式是:Rxyz = rot_z * rot_x * rot_y,现在需要得到重力加速度在current坐标系下各个方向的分量,应为imu开始坐标系下G=[0; 0; -9.8];现在相当于求全局imu坐标系下的向量在局部imu坐标系下向量值G',故
G' = inv(Rxyz) * G
其中
inv(Rxyz) = [ cry*crz, cry*srz, -sry] [ crz*srx*sry - crx*srz, crx*crz + srx*sry*srz, cry*srx] [ srx*srz + crx*crz*sry, crx*sry*srz - crz*srx, crx*cry]
因此
A’= A + inv(Rxyz) * G
到这里,关于坐标系变换的基础理论就讲明白了。
loam详细代码解析与公式推导的更多相关文章
- java连接mysql数据库详细步骤解析
java连接mysql数据库详细步骤解析 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的J ...
- JavaScript “跑马灯”抽奖活动代码解析与优化(二)
既然是要编写插件.那么叫做"插件"的东西肯定是具有的某些特征能够满足我们平时开发的需求或者是提高我们的开发效率.那么叫做插件的东西应该具有哪些基本特征呢?让我们来总结一下: 1.J ...
- 6. EM算法-高斯混合模型GMM+Lasso详细代码实现
1. 前言 我们之前有介绍过4. EM算法-高斯混合模型GMM详细代码实现,在那片博文里面把GMM说涉及到的过程,可能会遇到的问题,基本讲了.今天我们升级下,主要一起解析下EM算法中GMM(搞事混合模 ...
- RobHess的SIFT代码解析步骤四
平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32 主要参考:1.代码:RobHess的SIFT源码 2.书:王永明 ...
- InceptionV3代码解析
InceptionV3代码解析 参考博文:https://blog.csdn.net/superman_xxx/article/details/65451916 读了Google的GoogleNet以 ...
- 【论文笔记】AutoML for MCA on Mobile Devices——论文解读与代码解析
理论部分 方法介绍 本节将详细介绍AMC的算法流程.AMC旨在自动地找出每层的冗余参数. AMC训练一个强化学习的策略,对每个卷积层会给出其action(即压缩率),然后根据压缩率进行裁枝.裁枝后,A ...
- VBA常用代码解析
031 删除工作表中的空行 如果需要删除工作表中所有的空行,可以使用下面的代码. Sub DelBlankRow() DimrRow As Long DimLRow As Long Dimi As L ...
- [nRF51822] 12、基础实验代码解析大全 · 实验19 - PWM
一.PWM概述: PWM(Pulse Width Modulation):脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形. PWM 的几个基本概念: 1) 占空比:占空比是指 ...
- [nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写
一.实验内容: 通过串口发送单个字符到NRF51822,NRF51822 接收到字符后将其写入到FLASH 的最后一页,之后将其读出并通过串口打印出数据. 二.nRF51822芯片内部flash知识 ...
随机推荐
- 哈希-hash
一. 概念 1.引例 有线性表(1,75,324,43,1353,90,46,- ) 目的:查找值为90的元素 常见做法: 1.通过一维数组进行遍历查找 (依次比较)( O(n) ) 2.如果关键字 ...
- && 和 ||粗解
可以这么理解 &&是来找假的,如果找到假就返回假,如果找不到,就返回最后一个真 ||是来找真的,如果找到真就返回真,如果找不到,就返回最后一个假 var speed = 12; var ...
- Win10环境下使用Flask配合Celery异步推送实时/定时消息(Socket.io)/2020年最新攻略
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_163 首先得明确一点,和Django一样,在2020年Flask 1.1.1以后的版本都不需要所谓的三方库支持,即Flask-Ce ...
- Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境(2020年最新攻略)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_160 众神殿内,依次坐着Editplus.Atom.Sublime.Vscode.JetBrains家族.Comodo等等一众编辑 ...
- 手把手教你定位线上MySQL锁超时问题,包教包会
昨晚我正在床上睡得着着的,突然来了一条短信. 什么?线上的订单无法取消! 我赶紧登录线上系统,查看业务日志. 发现有MySQL锁超时的错误日志. 不用想,肯定有另一个事务正在修改这条订单,持有这条订单 ...
- 【常见】CSS3进度条Loading动画
现在,GIF 格式的进度条已经越来越少,CSS 进度条如雨后春笋般涌现.CSS3的崛起,更使得动态效果得以轻松实现,未来,必定是CSS3的天下,所以今天我就来分享一下几个常见的CSS3进度条Loadi ...
- [网鼎杯2018]Unfinish-1|SQL注入|二次注入
1.进入题目之后只有一个登录界面,检查源代码信息并没有发现有用的信息,尝试万能密码登录也不行,结果如下: 2.进行目录扫描,发现了注册界面:register.php,结果如下: 3.那就访问注册界面, ...
- 自动化选课(Python + selenium
前几天听到朋友说自己选课事情,突发奇想想要搞这样一个东西,但是由于各种原因只做到以下的完成度,具体的情况也会在解释的最后留下.这个只适用于曲师大的教务系统,因为用的这个系统来进行的一个调试,对于其 ...
- ThreadLocal for Golang
背景 由于官方不支持 ThreadLocal,在业务中传参经常需要传递 context,造成参数混乱,开发效率低下,跨方法实现传参变得困难. 需要解决的核心问题: 1. 数据存储,g.labels u ...
- C#基础_利用Stopwatch计时器可暂停计时,继续计时
最近程序上用到了计时功能,对某个模块进行计时,暂停的时候模块也需要暂停,启动的时候计时继续 用到了Stopwatch Stopwatch的命名空间是using System.Diagnostics; ...