2020-09-03 17:31:29分類(lèi):技術(shù)專(zhuān)題3283
手機中的指南針系統你知道用了多少種傳感器組合嗎?從安卓5.0開(kāi)始,羅盤(pán)系統就開(kāi)始在方向傳感器上增加其他傳感器,到目前為止,羅盤(pán)不受到干擾,手機羅盤(pán)中使用到了越來(lái)越多的傳感器,包括那么這些傳感器你認識嗎?這些傳感器有什么特點(diǎn)?
1、加速度傳感器
加速度傳感器又叫G-sensor,獲取的是x、y、z三軸的加速度數值。
該數值包含地心引力的影響,單位是m/s^2。
將手機平放在桌面上,x軸默認為0,y軸默認0,z軸默認9.81。
將手機朝下放在桌面上,z軸為-9.81。
加速度傳感器可能是最為成熟的一種mems產(chǎn)品,市場(chǎng)上的加速度傳感器種類(lèi)很多。手機中常用的加速度傳感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。這些傳感器一般提供±2G至±16G的加速度測量范圍,采用I2C或SPI接口和MCU相連,數據精度小于16bit。
2、磁力傳感器
磁力傳感器簡(jiǎn)稱(chēng)為M-sensor,返回x、y、z三軸的環(huán)境磁場(chǎng)數據。
該數值的單位是微特斯拉(micro-Tesla),用uT表示。也可以是高斯(Gauss),1Tesla=10000Gauss。
硬件上一般沒(méi)有獨立的磁力傳感器,磁力數據由電子羅盤(pán)傳感器提供(E-compass)。電子羅盤(pán)傳感器在提供磁力傳感器數據的同時(shí),還能提供方向傳感器數據。
3、方向傳感器
方向傳感器簡(jiǎn)稱(chēng)為O-sensor,返回三軸的角度數據,方向數據的單位是角度。
如上所述,電子羅盤(pán)E-compass在獲取到G-sensor的數據之后,經(jīng)過(guò)計算生產(chǎn)O-sensor數據以及M-sensor數據。
O-sensor提供三個(gè)數據,分別為azimuth、pitch和roll。
azimuth:方位,返回水平時(shí)磁北極和Y軸的夾角,范圍為0°至360°。0°=北,90°=東,180°=南,270°=西。
pitch:x軸和水平面的夾角,范圍為-180°至180°。當z軸向y軸轉動(dòng)時(shí),角度為正值。
roll:y軸和水平面的夾角,由于歷史原因,范圍為-90°至90°。當x軸向z軸移動(dòng)時(shí),角度為正值。
電子羅盤(pán)在獲取正確的數據前需要進(jìn)行校準,通??捎?字校準法。8字校準法要求用戶(hù)使用需要校準的設備在空中做8字晃動(dòng),原則上盡量多的讓設備法線(xiàn)方向指向空間的所有8個(gè)象限。
4、陀螺儀傳感器
陀螺儀傳感器叫做Gyro-sensor,返回x、y、z三軸的角加速度數據。
角加速度的單位是radians/second。
根據Nexus S手機實(shí)測:
水平逆時(shí)針旋轉,Z軸為正。
水平逆時(shí)針旋轉,z軸為負。
向左旋轉,y軸為負。
向右旋轉,y軸為正。
向上旋轉,x軸為負。
向下旋轉,x軸為正。
5、重力傳感器
重力傳感器簡(jiǎn)稱(chēng)GV-sensor,輸出重力數據。
在地球上,重力數值為9.8,單位是m/s^2。
坐標系統與加速度傳感器相同。
當設備復位時(shí),重力傳感器的輸出與加速度傳感器相同。
6、線(xiàn)性加速度傳感器
線(xiàn)性加速度傳感器簡(jiǎn)稱(chēng)LA-sensor。
線(xiàn)性加速度傳感器是加速度傳感器減去重力影響獲取的數據。
單位是m/s^2,坐標系統與加速度傳感器相同。
加速度傳感器、重力傳感器和線(xiàn)性加速度傳感器的計算公式如下:
加速度 = 重力 + 線(xiàn)性加速度。
7、旋轉矢量傳感器
旋轉矢量傳感器簡(jiǎn)稱(chēng)RV-sensor。
旋轉矢量代表設備的方向,是一個(gè)將坐標軸和角度混合計算得到的數據。
RV-sensor輸出三個(gè)數據:
x*sin(theta/2)
y*sin(theta/2)
z*sin(theta/2)
sin(theta/2)是RV的數量級。
RV的方向與軸旋轉的方向相同。
RV的三個(gè)數值,與cos(theta/2)組成一個(gè)四元組。
RV的數據沒(méi)有單位,使用的坐標系與加速度相同。
舉例:
sensors_event_t.data[0] = x*sin(theta/2)
sensors_event_t.data[1] = y*sin(theta/2)
sensors_event_t.data[2] = z*sin(theta/2)
sensors_event_t.data[3] = cos(theta/2)
GV、LA和RV的數值沒(méi)有物理傳感器可以直接給出,需要G-sensor、O-sensor和Gyro-sensor經(jīng)過(guò)算法計算后得出。