一般惯导姿态角的初始值是由加速度数据和磁场数据计算得到的,加速度数据计算得到滚转角和俯仰角,由滚转角,俯仰角以及磁场数据经过计算再得到初始的偏航角。下面是具体的计算和推导过程。
这里我们的导航坐标系为东北天坐标系(ENU),载体坐标系为右、前,上(x,y,z),姿态角的旋转顺序为:z,x,y(偏航、俯仰,滚转)。
对于加速度计,有以下公式:
表示导航系到载体系的转换矩阵。设偏航,滚转、俯仰的初始值分别为z0 ,y0 , x0 。
并且满足:
经过计算得到:
所以:
在推导过程中纯手推容易出错,可以借助matlab计算矩阵,这样不易出错,我在推导这部分时也使用matlab来计算。代码如下:
syms x0
syms y0
syms z0
syms g
x_r_matrix=[1,0,0;0,cos(x0),-sin(x0);0,sin(x0),cos(x0)];
y_r_matrix=[cos(y0),0,sin(y0);0,1,0;-sin(y0),0,cos(y0)];
z_r_matrix=[cos(z0),-sin(z0),0;sin(z0),cos(z0),0;0,0,1];
Cn_b = z_r_matrix*x_r_matrix*y_r_matrix;
Cb_n = Cn_b';
g_n=[0;0;g];
g_b=Cb_n*g_n;
这块可以想象一下,假设一开始平稳放置磁力计,则偏航角的计算公式如下:
该平稳状态设定为a状态,即俯仰角和滚转都为0,对于磁力计放置的任意状态,有以下公式:
根据上式求出 和 之后,再根据 公式就可求出偏航角。
Matlab推导代码如下:
syms x0
syms y0
syms z0
syms mgbx
syms mgby
syms mgbz
x_r_matrix=[1,0,0;0,cos(x0),-sin(x0);0,sin(x0),cos(x0)];
y_r_matrix=[cos(y0),0,sin(y0);0,1,0;-sin(y0),0,cos(y0)];
z_r_matrix=[1,0,0;0,1,0;0,0,1];
Cn_b = z_r_matrix*x_r_matrix*y_r_matrix; m_b=[mgbx;mgby;mgbz];
m_n = Cn_b*m_b;
我这里验证使用的IMU型号为ADI公司的ADIS16470,其载体坐标系的定义如下图所示:
和上文提到的载体坐标系是一致的,右,前,上代表载体坐标系的x,y,z轴,软件界面如下图所示:
具体的验证过程很简单,这里不再详叙,不同IMU的载体坐标系定义是不一样的,这点在使用时要注意。当逆时针绕y轴旋转,x轴数据为负, z轴向数据为正;当顺时针绕y轴旋转,x轴向数据为正,z轴数据为正;当逆时针绕x轴旋转,y轴数据为正,z轴数据为正;当顺时针绕x轴旋转,y轴数据为负,z轴数据为正。和前面公式计算得到的角度的正负号验证是一致的。
文章浏览阅读866次。已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均成绩(结果按整型输出)。提示:该整数与题目无关,为了保证系统稳定性需要有输入语句的代码。_c语言求三门课程的平均成绩
文章浏览阅读2.2k次。本片blog用来记录平时学习过程中遇到的错误,以及解决办法;错误1错误提示:在using namespace cv;前缺少一个“;” 原因,是在引用的头文件中存在一个类等结束后未加“;”.错误2cv::Mat_::const_iterator it= binary.begin();程序运行到此处,出现中断。原因:在使用迭代器时,如果图像channels为3,定义应为cv_opencv_ffmpeg2413.dll
文章浏览阅读1w次,点赞13次,收藏31次。参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.7_vggVGGVGG的名字来源于论文作者所在的实验室Visual Geometry Group。VGG提出了可以通过重复使用简单的基础块来构建深度模型的思路。VGG块VGG块的组成规律是:连续使用数个相同的填充为1、窗口形状为3×3的卷积层后接上一个步幅为2、窗口形状为2×2的最大池化层。卷积层保持输入的高和宽不变,而池化层则对其减半。我们使用vgg_block函_vgg pytorch
文章浏览阅读1.8k次。(function($) { var opt; $.fn.jqprint = function (options) { opt = $.extend({}, $.fn.jqprint.defaults, options); var $element = (this instanceof jQuery) ? this : $(this); ..._前端jqprint打印功能怎么做到同时有两种打印方向
文章浏览阅读3.5k次。学习PyQt时,导入UI文件运行时报错“AttributeError: ‘PySide2.QtWidgets.QMainWindow’ object has no attribute ‘button’”,检查UI文件中确实有控件名称为‘button’问题原因问题原因不清楚处理方法将‘button’改成‘Button’就可以正常运行了..._ui_mainwindow' object has no attribute 'button_image_open
文章浏览阅读1.4k次。ProjectServer2010+SharepointServer2010 错误环境为:win2008R2+sqlserver2008R2+project server2010+sharepoint server2010按照文档操作,当创建PWA时 日志报如下错误,如果一切正常,会看到状态为“已提供”设置“PWA”: 未能设置数据库。出现异常: Failed to grant log_sharepoint 2010 projectserver
文章浏览阅读9.3k次,点赞5次,收藏10次。列表的进入/离开过渡,对列表直接操作(增、删)的元素,封装并按常规的CSS或JS过渡即可;但在操作这些元素的位置变化时,由于DOM文档流的变化,会同时引起其它(邻近)节点元素的位置变化,例如在列表插入一个,插入点原本的会下移,删除一个,下面的会上移补充占据这个位置。 对于这些“被动”移动的元素来说,也可以实现过渡,这就用到了v-move 特性。 v-move 特性。会在元素的改变定位的过_v-move
文章浏览阅读78次。Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog目录目录前文列表扩展阅读用户登录帐号用户登录状态Flask-Login使用 Flask-Login 来保护应用安全小结前文列表用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写..._flask 页面保护
文章浏览阅读804次。注:json字符串和普通对象的区别:json字符串会直接忽略function(本质函数,有new关键字介入改变this指向)console.log("猫")}}js的对象都是由原型对象拷贝而来,原型对象也由自己的原型拷贝而来,这样就形成一条拷贝链,将这条拷贝链称为原型链当一个对象,去调用某个方法,或者属性,该对象先在自己的属性和方法中找,如果没找到就在原型上找,如果原型也没有,就在原型的原型上继续寻找,找到后直接调用。......_前端面向对象的应用
文章浏览阅读3.7k次。每天都阅读大量的文献,是不是看着满屏的英文都头疼?不要着急,今天小编就给大家推荐一款文献阅读神器——知云文献翻译,兼具强大的英文翻译及pdf阅读功能,可同时打开多篇pdf、可做标注和注释、可提取pdf页面、可将同一篇文献拆分成多个视图同时对比阅读,绝对称得上是人人必备的英文文献阅读神器!一、软件安装直接进入该网址:http://down.zhiyunwenxian.cn,点击任意一个下载安装通道即..._ubuntu安装知云文献翻译
文章浏览阅读763次。内容辅助键 alt + / 在想不起来代码的时候,可以用这个来做代码的自动生成 main syso sout 输出语句 创建对象 补全类名 构造方法,给变量起名字 遍历数组 快捷键: ctrl +n 新建工程、 包 、 类、和文件 ctrl + shift + f: 格式化代码 记得关输入法快捷键 ctrl + shift + o:自动导包 或者删除没有用的包 ctrl +/ 单行注释 取消单行注释 ctrl + shift + / ..._eclipse 快速生成数组循环方法
文章浏览阅读577次。转载:http://yang2001.blog.51cto.com/25307/737808vim /etc/hosts---------------------------------127.0.0.1 localhost.localdomain localhost192.168.9.34 mail.myweb.com..._zimbra技巧