5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 1576|回复: 14
打印 上一主题 下一主题

技术咨询 FPV专用飞控 全传感器+osd+GPS(已找到答 案)

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-29 13:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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就是两个重力向量的叉积。这个叉积向量仍旧是位于机体坐标系上的,而陀螺积分误差也是在机体坐标系,而且叉积的大小与陀螺积分误差成正比,正好拿来纠正陀螺。(你可以自己拿东西想象一下)由于陀螺是对机体直接积分,所以对陀螺的纠正量会直接体现在对机体坐标系的纠正。









复制代码


欢迎继续阅读楼主其他信息

沙发
发表于 2013-3-29 14:15 | 只看该作者
不错又一个高手出来了,期待你成功
3
发表于 2013-3-29 15:00 | 只看该作者
小白退散……………………………………
4
发表于 2013-3-29 15:21 | 只看该作者
小白退散……………………………………
5
发表于 2013-3-29 15:27 | 只看该作者
纯技术人才,欢迎欢迎~!
6
发表于 2013-3-29 19:50 | 只看该作者
支持一下楼主,自己设计电路,写代码确实是件不错的事,能学到好多东西,但是现在的论坛我感觉技术贴越来越少,好多人都是炫耀贴,像楼主这样具有开源精神的人越来越少!在此再次向楼主致敬!
7
发表于 2013-3-29 21:16 | 只看该作者
顶楼主,绝对支持!!
8
发表于 2013-3-30 13:54 | 只看该作者
像我这样的新手看到LZ遥控上的FPV就馋的不行了
9
 楼主| 发表于 2013-4-5 10:49 | 只看该作者
xiahaiyun369 发表于 2013-3-30 13:54
像我这样的新手看到LZ遥控上的FPV就馋的不行了

有的,都会有地

10
发表于 2013-5-1 11:58 | 只看该作者
最近也在研究四元数算法,似懂非懂,对网上程序还是很困惑
11
发表于 2013-5-1 12:04 | 只看该作者
向楼主致敬!
12
发表于 2013-5-1 13:16 | 只看该作者
你应该去阿莫电子论坛,这水浅~~~
13
发表于 2013-5-1 14:24 | 只看该作者
顶楼主,绝对支持!!
14
发表于 2013-6-29 21:13 | 只看该作者
强烈支持DIY
15
发表于 2013-6-30 02:06 | 只看该作者
高手,敢在这么小的室内,这么低的高度飞割草机,敬仰。
mpu模块可以用 dmp 芯片直接运算出融合好的四元数,很方便。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表