地磁传感器_磁感应计_电子罗盘(compass)原理

ref:

http://www.360doc.com/content/14/0724/23/9152906_396847920.shtml

https://wenku.baidu.com/view/8fcb6f94284ac850ad024244.html

 

原文链接:https://blog.csdn.net/weixin_43614541/article/details/104818380

1.利用旋转矩阵推导倾斜补偿公式

 电子罗盘的倾斜姿态可以通过三轴加速度传感器检测出,测出三个轴上重力加速度的分量,在通过计算可以得出Pitchg(俯仰角)和Roll(横滚角)。
在这里插入图片描述
 设在罗盘的翻滚角为γ

γ,俯仰角为ϕϕ,航向角为ψψ时,三轴地磁传感器的测量输出M(γ,ϕ,ψ)=[MxMyMz]TM(γ,ϕ,ψ)=[MxMyMz]T;

将式(4)带入反正切函数即可得到补偿后的航向角
在这里插入图片描述
附上手推公式过程
在这里插入图片描述
代码实现


在这里插入图片描述

 

2.利用使用矢量计算方法补偿倾斜

利用地理(重力和地磁)矢量的方向不变的和可以任意平移的特点计算航向角可以直接忽略倾斜影响。本节内容全是作者的理解,若有不正确的地方欢迎指正。这个算法是arduino的一个库里面的,此算法厉害的地方是它对传感器的安装方式不是严格的。

矢量计算航向算法描述:利用加速度传感器读数确定向下的重力向量和地磁传感器确定的地磁向量的叉积可以得到指向东的向量。东向量和重力量的叉积是北向量(右手法则)。向东和向北的向量构成了水平面平面的基础。机体(电子罗盘)向量被投影到水平平面(点乘),在利用反正切函数即可求出航向角。这段文字里除了机体向量外,其他向量都是地理向量方向不变。

 

代码实现
在这里插入图片描述
关于入参from,这个和传感器安装的位置有关,比如地磁传感器的x轴与地磁场的x轴相反则入参为{-1,0,1}。其他安装方式以此类推。

原文链接:https://blog.csdn.net/weixin_43614541/article/details/104818380

### HMC5883L 的功能和用途 #### 功能概述 HMC5883L 是一款高精度的地磁传感器,能够检测地球场强度并将其转换为数字化数据。它内部集成了一系列先进的电路模块来优化性能,包括放大器、自动消驱动器以及偏差校准单元等[^2]。 #### 主要作用 该器件的主要作用在于提供精确的方向测量能力。通过感知周围环境中的场变化,它可以计算出设备相对于地理北极的角度位置。这种特性使其非常适合用于导航系统和其他需要精确定向的应用场合。 #### 应用场景 由于其卓越的灵敏度与可靠性,HMC5883L广泛应用于多个领域,其中包括但不限于以下几个方面: - **消费电子产品**: 如智能手机和平板电脑内的电子罗盘应用; - **汽车工业**: 辅助驾驶系统的方向指示部分; - **机器人技术**: 实现自主移动机器人的路径规划及定位服务; - **航空航天业**: 飞机姿态控制与航向指引等方面发挥重要作用; #### 硬件模块描述 硬件上来说,HMC5883L采用了MEMS制造工艺生产而成的小型化封装形式,并且内置有专门设计用来增强信号质量的各种辅助组件: - **放大器**:提升原始感应到得极其微弱电信号至可被后续处理的程度; - **自动消驱动器**:减少因材料本身产生的剩效应对最终读数准确性的影响 ; - **偏差校正逻辑** :补偿由温度漂移等因素引起的数据误差. 以下是基于 Arduino 平台使用此传感器的一个简单例子程序片段展示如何初始化配置参数并与之交互获取XYZ上的场强度数值. ```cpp #include <Wire.h> #include <HMC5883L.h> HMC5883L compass; void setup() { Serial.begin(9600); while (!Serial); // For Leonardo/Micro/Zero if (compass.begin()) { Serial.println("Compass initialized successfully!"); } else { Serial.println("Error initializing compass..."); while (1); } } void loop() { sensors_event_t event; compass.getEvent(&event); Serial.print("X: "); Serial.print(event.magnetic.x); Serial.print(", Y: "); Serial.print(event.magnetic.y); Serial.print(", Z: "); Serial.println(event.magnetic.z); delay(500); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值