Pixhawk之学习杂谈

一、开篇

        距离上一篇博文已经很久了,最近主要就是参加了几家公司的电话面试,思考了一些问题,本身就是半路杀进无人机领域的门外汉。对整个飞行控制部分理解的也是皮毛的皮毛,经过几家面试之后,稍微有了一些着重点,本篇博文就主要介绍一下几个相关的问题的思考以为拓展。肯定有理解的不好之处,烦劳各位看客帮忙完善一下每一部分的答案。

        如果问题只是问题,那它便失去了背后的意义。--------写在前面

二、版权声明

博主:summer

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.net/qq_21842557

联系方式:dxl0725@126.com

技术交流QQ:1073811738

三、实验平台

Software Version:PX4Firmware(Ver_3.3)

Hardware Version:pixhawk

IDE:eclipse Juno (Windows)

四、正文

        欧拉角是一种广为使用的姿态描述方式,最终控制时的控制量就需要它,直观明了,但是在有限资源下的MCU中进行姿态解算运算时万万不可使用它。在最常用的欧拉角表达方式中,把机体的旋转看成按照三个坐标轴转动的量:滚转角-俯仰角-偏航角(roll-pitch-yaw)。它的好处是十分的直观,且只有三个参数描述。缺点是会碰到著名的万向锁问题(gambleock):在俯仰为±90∘时,表达某个姿态的形式不唯一,也不易于插值和迭代。

思考1:关于姿态解算中使用的传感器数据的真实性如何判断?即最优选择算法

        这个到现在还是不清楚,get_best函数里面的具体实现算法是什么什么意思呢,who knows?tell me ~~~

        PX4代码中的互补滤波算法(DCM):算法中有一个滤波器的confidence函数(信任度函数,貌似模糊控制理论有个隶属函数,应该是类似的功能):返回值是对上N次测量的验证的信任程度,其值在0到1之间,越大越好。返回值是返回上N次测量的误差诊断,用于get_best函数选择最优值,选择的方法如下:

Switch if:

        1)the confidence is higher and priority is equal or higher

        2)the confidence is no less than 1% different and the priority is higher

思考2:如何补偿传感器的bias?(应该从两个方面考虑比较好)

        第一方面:对bias这个词的理解太不到位了,bias顾名思义,指的是的偏差,需要考虑到上电初始时由于gyro本身的特性产生的bias,gyro零点偏移(静态时)的随机部分一般是指陀螺漂移,是反应陀螺仪性能的主要指标,对于常用的MEMS陀螺,较大的陀螺漂移正式影响其应用的主要障碍。关于零点偏移需要通过传感器标定修正误差。

        关于传感器标定:是仪器就会有误差,像很多仪器一样mpu6050也要在使用前校正,传感器的标定类似于天平使用前的调零,所以每次使用前进行传感器的标定工作是必要的,标定是计算修正偏移量的过程,得到偏移量后,在使用传感器时需要将传感器输出数据减去偏移量,这样才能得到修正后的数据。标定有很多方法,比较简单的一种方法,当然也是最不精确的一种方法是在静止时取多次测得数据的平均值,标定后要将偏移量减去,标定的具体步骤不在赘述。

        第二方面:随着时间的积累,gyro会出现drift的积累,需要考虑如何把这部分误差修正掉。首先在姿态解算时是以gyro为主要控制量,用Acc和Mag修正补偿gyro的roll、pitch和yaw,通过PID Feedback修正以后就是对DCM的归一化处理和正交化处理,其中比较重要的步骤之一应该就是DCM正交化吧(通过交叉耦合的方式把误差量error耦合到两维向量上,再通过外积求取第三个维度的向量),该步骤是为了修正在进行数值计算时引入的不必要的误差量。

思考3:四元数的微分方式是什么样的?

        这个。。。。。移步思考8

思考4:如何使用四元数旋转一个向量?即四元数如何表示旋转的?

        我知道的就是使用四元数构建的旋转矩阵,通过左乘这个旋转矩阵来旋转某一个向量。

        四元数可以表示三维空间中任意一个旋转。按照四元数的本质来理解四元数如何旋转一个向量,其实就相当于正常旋转时需要用三个欧拉角按顺序进行三次旋转,现在使用四元数只需要一次旋转就可以达到相同的效果了,但是需要引入一个瞬时旋转轴。

        好吧,又开始上图了~~~


        四元数的详细介绍可以参考知乎链接:

http://www.zhihu.com/question/23005815/answer/33971127?from=groupmessage&isappinstalled=0

思考5:如何使用四元数更新姿态?即如何使用gyro数据更新姿态

        首先就是四元数的微分方程,然后就是四元数随时间的地推公式和DCM矩阵随时间的地推公式。在考虑四元数随时间的地推时,使用了离散数学的理论。

思考6:关于uORB是否可以从源代码中移植出去?即是否依赖于现有的OS NuttX?

        uORB仅仅就是为了IPC的实现而产生的,是一种高效的设计模式,可以进行移植。感觉这个可以深入的研究一下,可惜心有余而力不足啊。

思考7:。。。。。。。。看到这,应该有很多感悟吧,所以赶紧总结一下帮我纠正或完善答案啊。。。。别只顾着看啊。。。。。

思考8:左乘和右乘?在姿态解算过程中使用哪个?(请结合上面的思考4理解该部分)

        当三维向量发生旋转时,如果采用矩阵运算需要考虑“左乘”和“右乘”。若绕静坐标系(地理坐标系)旋转,则左乘,即旋转矩阵*向量;若是绕移动坐标系旋转(机体坐标系),则右乘,也就是向量*旋转矩阵。关于左乘和右乘的问题,需要考虑以哪个坐标系为基准的,我们在做姿态解算的过程和控制的过程都是以地理坐标系为基准的,所以用到了左乘。


思考9为什么用NuttX操作系统呢?

        从OS的优点方面介绍:有OS更适合多任务系统,增加飞控的易用性,维护起来也方便,各个功能之间能保持相对的独立性,另外可以让编程人员完全脱离硬件,嵌入式工程师其实应该是计算机专业,如果脱离不了硬件,就得找电子方向的工程师了。移植性也好,这点很重要 。

思考10源代码为什么用C++不用C?

   C++面向对象(OOP),扩展性和可维护性好;C++更强大,矩阵运算啥的方便,C++有很多有关数学的库函数,方便调用,都是优化过的。其实我也不太懂

五、总结

        不面试,不知重点所在~~~

        不沟通,不知自己有多low~~~

        不出门,不知世界有多大~~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值