5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: 技术咨询 FPV专用飞控 全传感器+osd+GPS(已找到答 案) [打印本页]

作者: xukkkkkk    时间: 2013-3-29 13:51
标题: 技术咨询 FPV专用飞控 全传感器+osd+GPS(已找到答 案)
本帖最后由 xukkkkkk 于 2013-3-29 13:52 编辑

问下下面这个函数这两段怎么理解// 估计方向的重力        vx = 2*(q1*q3 - q0*q2);        vy = 2*(q0*q1 + q2*q3);        vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;                // 错误的领域和方向传感器测量参考方向之间的交叉乘积的总和        ex = (ay*vz - az*vy);        ey = (az*vx - ax*vz);        ez = (ax*vy - ay*vx);
其他的都懂了,就这个还没想通

我搞了个FPV专用飞控 全传感器+osd+GPS最近再搞个433遥控,可以回发数据以前在模型论坛混,玩技术的不多,不深,现在改这里吧说实话这里四轴发展太慢了,现在都GPS自主飞行了,坛子里好像没人搞,去搞微型四轴
有兴趣联系我吧,我的资料程序PCB全开源

试飞的视频在下面



void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az) {        float norm;        float vx, vy, vz;        float ex, ey, ez;                         // 测量正常化        norm = sqrt(ax*ax + ay*ay + az*az);               ax = ax / norm;        ay = ay / norm;        az = az / norm;                      // 估计方向的重力        vx = 2*(q1*q3 - q0*q2);        vy = 2*(q0*q1 + q2*q3);        vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;                // 错误的领域和方向传感器测量参考方向之间的交叉乘积的总和        ex = (ay*vz - az*vy);        ey = (az*vx - ax*vz);        ez = (ax*vy - ay*vx);                // 积分误差比例积分增益        exInt = exInt + ex*Ki;        eyInt = eyInt + ey*Ki;        ezInt = ezInt + ez*Ki;                // 调整后的陀螺仪测量        gx = gx + Kp*ex + exInt;        gy = gy + Kp*ey + eyInt;        gz = gz + Kp*ez + ezInt;                // 整合四元数率和正常化        q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;        q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;        q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;        q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;                  // 正常化四元        norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);        q0 = q0 / norm;        q1 = q1 / norm;        q2 = q2 / norm;        q3 = q3 / norm;}



答 案:
答 案 呵呵,值得回一下下
// normalise the measurements        norm = sqrt(ax*ax + ay*ay + az*az);              ax = ax / norm;        ay = ay / norm;        az = az / norm;      把加计的三维向量转成单位向量。      
        // estimated direction of gravity        vx = 2*(q1*q3 - q0*q2);        vy = 2*(q0*q1 + q2*q3);        vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;
这是把四元数换算成《方向余弦矩阵》中的第三列的三个元素。根据余弦矩阵和欧拉角的定义,地理坐标系的重力向量,转到机体坐标系,正好是这三个元素。所以这里的vx\y\z,其实就是当前的欧拉角(即四元数)的机体坐标参照系上,换算出来的重力单位向量。

        // error is sum of cross product between reference direction of field and direction measured by sensor        ex = (ay*vz - az*vy);        ey = (az*vx - ax*vz);        ez = (ax*vy - ay*vx);
axyz是机体坐标参照系上,加速度计测出来的重力向量,也就是实际测出来的重力向量。axyz是测量得到的重力向量,vxyz是陀螺积分后的姿态来推算出的重力向量,它们都是机体坐标参照系上的重力向量。那它们之间的误差向量,就是陀螺积分后的姿态和加计测出来的姿态之间的误差。向量间的误差,可以用向量叉积(也叫向量外积、叉乘)来表示,exyz就是两个重力向量的叉积。这个叉积向量仍旧是位于机体坐标系上的,而陀螺积分误差也是在机体坐标系,而且叉积的大小与陀螺积分误差成正比,正好拿来纠正陀螺。(你可以自己拿东西想象一下)由于陀螺是对机体直接积分,所以对陀螺的纠正量会直接体现在对机体坐标系的纠正。









复制代码



作者: 林林林林LIN    时间: 2013-3-29 14:15
不错又一个高手出来了,期待你成功

作者: 广西星尘    时间: 2013-3-29 15:00
小白退散……………………………………

作者: kara0992    时间: 2013-3-29 15:21
小白退散……………………………………

作者: zhlmir2    时间: 2013-3-29 15:27
纯技术人才,欢迎欢迎~!

作者: feng235    时间: 2013-3-29 19:50
支持一下楼主,自己设计电路,写代码确实是件不错的事,能学到好多东西,但是现在的论坛我感觉技术贴越来越少,好多人都是炫耀贴,像楼主这样具有开源精神的人越来越少!在此再次向楼主致敬!

作者: 喜歪歪    时间: 2013-3-29 21:16
顶楼主,绝对支持!!

作者: xiahaiyun369    时间: 2013-3-30 13:54
像我这样的新手看到LZ遥控上的FPV就馋的不行了

作者: xukkkkkk    时间: 2013-4-5 10:49
xiahaiyun369 发表于 2013-3-30 13:54
像我这样的新手看到LZ遥控上的FPV就馋的不行了

有的,都会有地


作者: 可与愉快谔谔    时间: 2013-5-1 11:58
最近也在研究四元数算法,似懂非懂,对网上程序还是很困惑

作者: kgdln    时间: 2013-5-1 12:04
向楼主致敬!

作者: xiaop5345    时间: 2013-5-1 13:16
你应该去阿莫电子论坛,这水浅~~~

作者: wcj3445    时间: 2013-5-1 14:24
顶楼主,绝对支持!!

作者: a417930899    时间: 2013-6-29 21:13
强烈支持DIY

作者: xlla    时间: 2013-6-30 02:06
高手,敢在这么小的室内,这么低的高度飞割草机,敬仰。
mpu模块可以用 dmp 芯片直接运算出融合好的四元数,很方便。





欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://wz.5imx.com/) Powered by Discuz! X3.3