推力与磁场关系
无人机上的电机电流会干扰无人机上搭载的磁罗盘,PX4官方提供了一些方式,通过分析飞行日志,判断电机是否对磁罗盘有严重影响。
PX4官方手册介绍:Thrust and Magnetic Field
将飞行日志导入PX4官方的Flight Review中,其中图表Thrust and Magnetic Field展示了推力和磁罗盘采集的原始磁场向量的模长之间的关系。
正常情况
正常状况下,飞行全程磁罗盘的曲线接近为一个常值,并且推力与磁场之间不存在相关性。
干扰情况
与推力相关
明显可以看出,磁场受到推力变化的影响。两者存在相关性
解决方法
1.增加外置罗盘
2.远离电机安装
3.罗盘补偿(后文会介绍)
与推力不相关
还有一种情况,即磁场不明显与推力相关,但不维持在一个常值。这种情况可能有两个原因:
1.磁罗盘没有正确校准
2.飞行过程受到外部干扰
罗盘补偿
无人机的磁罗盘应该安装在远离大电流的位置,比如安装时应远离电机,因为电流的诱发磁场会干扰磁罗盘的读数。同时磁场强度是按与电缆距离的二次方衰减的,因此最有效的排除干扰方式应当是改变安装位置,但如果无法改变安装位置,那么也可以在软件层面,通过推力补偿/电流补偿尽量消除这部分影响。
PX4官方手册介绍:Compass Power Compensation
操作流程
获取用于分析的日志
- 所使用固件最好是v1.11.0之后版本
- 执行磁罗盘校准
- 修改参数SDLOG_MODE = 2,使无人机从上电后就开始记录日志
- 修改参数SDLOG_PROFILE,
- 使用外力固定无人机。因为后续要推动油门,需要确保无人机无法移动,但不能影响到电机的正常转动。
- 飞行模式要调整为ACRO,在该模式下,无人机不会尝试补偿外界阻力,从而得到更为准确的数据。
开始实验:
- 解锁无人机,缓慢推动油门到最高位置
- 油门到达最高位置后,缓慢降低油门到0
- 将无人机上锁
分析日志
PX4源码里提供了分析磁罗盘补偿参数的脚本
具体目录:
PX4-Autopilot/src/modules/sensors/vehicle_magnetometer/mag_compensation/python/mag_compensation.py
用下述命令运行该脚本
python mag_compensation.py ~/path/to/log/logfile.ulg thrust(current)
/*
* ~/path/to/log/logfile.ulg是实验日志的存放目录
* thrust/current选择用推力补偿或是用电流补偿
*/
会得到拟合度曲线
和计算得到的补偿参数的数值:
调整罗盘补偿参数
得到上述补偿参数的数值 CAL_MAGx_XCOMP、CAL_MAGx_YCOMP、CAL_MAGx_ZCOMP之后。首先需要修改参数CAL_MAG_COMP_TYPE:
如果是用推力补偿,CAL_MAG_COMP_TYPE = 1
如果是用电流补偿,CAL_MAG_COMP_TYPE = 2
然后修改对应参数CAL_MAGx_XCOMP、CAL_MAGx_YCOMP、CAL_MAGx_ZCOMP的数值即可。
附上一个对比结果:
补偿前:
补偿后: