前言
继上一篇讲解了pixhawk的硬件组成,上上篇讲了飞控固件的移植。基本都是与硬件密切相关的。今天,我还是继续记录与硬件相关的内容。如题目所示,主要写一下pixhawk的IMU和compass的一些安装细节内容。
一、IMU和compass是什么?
IMU全称是inertial measurement unit即惯性测量单元,它可以测量出物体的加速度和角速度。目前在小型飞控上我们采用的都是体积小、重量轻、价格较低的MEMS IMU原件。compass即磁罗盘,它可以测量出物体与地磁场的夹角。这两个元件的具体测量原理请大家移步B站获得更好体验 原理讲解与基本使用
二、导航坐标系与机体坐标系
-
对于导航而言,目前最常用的导航坐标系应该是东北天坐标系,即x轴指向东方,y轴指向北方,z轴指向天空,如下图所示:
-
对于机体坐标系而言,在飞行力学里我们基本都惯用前右下左标系,即x轴指向机体前方,y轴指向机体右方,z轴指向机体下方,如下图所示:
这样一来两个坐标系就不一致了,这样用起来岂不是不方便。确实,不过机体系还有另外一种那就是右前上坐标系。该坐标系与东北天坐标系是相对应的。
下面对常用的导航坐标系和对应的机体坐标系做出总结
轴 | 东北天导航坐标系 | 右前上机体坐标系 | 北东地导航坐标系 | 前右下机体坐标系 | |
---|---|---|---|---|---|
x | E | 右 | N | 前 | |
y | N | 前 | E | 右 | |
z | U | 上 | D | 下 |
三、安装IMU,compasss
根据第二部分所述,一般IMU和compass安装时,应该将IC的坐标系与机体的右前上机体坐标系(对应东北天坐标系)相对齐。如果真的是这样那么世界就美好了。很不幸的是,实际并非完全如此。
- IMU
1.先说好消息,目前我看过的InvenSense出品的IMU,例如:MPU6000, ICM-20689, ICM-20602。都可以按上面的所述原则来进行。也就是IMU的坐标系与机体右前上坐标系完全对齐。
2.现在来说坏消息,博士出品的IMU,例如BMI055, BMI088,却不能按照上述原则进行。而是其x轴方向与飞机机头方向一致,y轴指向飞机右侧,z轴指向飞机下方,也就是与机体的前右下坐标系相重合。不要问我为什么,我也没搞清楚,反正分析了hwdef文件和相应硬件,我确定事实就是这样的。
- compass
相比与IMU,compass更让人摸不着头脑。比如IST8310。这是怎么回事儿?它自身的坐标轴系居然都不是右手坐标系?啊?不是吧不是吧!
最后我还是硬着头皮摸出了规律,虽然我完全不知道为啥?但是管他的能用就行!规律如下:将其坐标系按原有的x轴和与Z轴定义为右手坐标系,然后将该坐标系与飞机机体的前右下坐标系重合。
以上说描述的IMU,compass应对准的机体坐标系,我们这里称之为标准坐标系。也就是说,如果想要不做任何额外设置就使用该传感器的话,PCB设计时就要将该IC焊接设计成如上所述的位置。
四、hwdef中设置IMU,compass朝向
正如上上篇内容所讲,在实际硬件中我们其实可以随意摆放IMU和compass,因为hwdef文件中我们可以定义这些IC的实际朝向相对于姿态解算需要标准坐标朝向的关系。(即IC实际坐标系相对于其标准坐标系的关系)然后有了这些信息飞控获取数据时就不会有问题了。这里就细致地说一下这个朝向是如何设置的,我自己不是很确定我说的是否完全正确,但是经过硬件推敲,这个规律至少是可用的。
这里我还是拿出怒飞老师的NFCYv5来举例:
图中白色箭头所指是为飞控的机头朝向,该面也为上面。
首先,我们来看ICM-20689,根据第三部分我们所述的规律,它与机体的右前上坐标系的z轴重合,但是y轴方向与机体右前上坐标系y轴相反。所以从IC的标准坐标系旋转到实际的坐标系我们需要的操作是偏航角方向旋转180°:
# second is icm20689
IMU Invensense SPI:icm20689 ROTATION_YAW_180
而对于BMI088,根据第三部分内容,它与机体前右下坐标系的x轴重合,而z轴和y轴方向都相反,所以需要:
IMU BMI088 SPI:BMI088_a SPI:BMI088_g ROTATION_ROLL_180
最后对于IST8310来说,它的Z轴与机体前右下坐标系重合,而x轴和y轴方向都相反,所以需要:
COMPASS IST8310 I2C:ALL_INTERNAL:0x0E false ROTATION_YAW_180
由于NFCYv5的传感器布置的还是很规整了,需要定义的旋转变化比较简单,所以这里我在选择一个例子说明:
# 3rd could be BMMI055 or BMI088
IMU BMI055 SPI:bmi055_a SPI:bmi055_g ROTATION_ROLL_180_YAW_90
IMU BMI088 SPI:bmi055_a SPI:bmi055_g ROTATION_ROLL_180_YAW_90
比如这个是CUAV nona的BMI系列IMU的hwdef定义。这里就表示将IMU标准坐标系旋转到实际坐标系,我们需要先绕IC坐标系yaw90°,然后再绕当前IC坐标系roll180°即可和的机体坐标系重合。
总结
嗯,好了。写到这里,又水完了一期博客。这部分其实没啥好总结的,我自己也还有有点懵,只是根据实际例子摸出了规律仅此而已,希望以后看代码能看出具体原因,不过不知道也行,能用就OK^_*。
补充:自己的硬件按照这个规律来写hwdef已经实测没有问题。