全球?qū)Ш叫l(wèi)星系統(tǒng) (GNSS) 非常有用,能夠定位全球任意位置已正確啟用此功能的系統(tǒng),但僅僅使用 GNSS 接收器進(jìn)行定位也存在一些問(wèn)題。使用慣性測(cè)量裝置 (IMU) 對(duì) GNSS 進(jìn)行補(bǔ)充,則可以克服這些問(wèn)題。
IMU 采用陀螺儀、加速計(jì)和磁力儀,基于初始起點(diǎn)測(cè)量位置。本文將討論它的嵌入式應(yīng)用,然后再介紹一些適當(dāng)?shù)慕鉀Q方案示例以及使用方法。
IMU 如何補(bǔ)充 GNSS
GNSS 存在四個(gè)問(wèn)題。首先,GNSS 信號(hào)具有很強(qiáng)的指向性,因此會(huì)被建筑物遮擋。其次,接收器有幾十秒到一分鐘甚至更長(zhǎng)時(shí)間的熱啟動(dòng)和冷啟動(dòng)時(shí)間。接收器需要利用啟動(dòng)時(shí)間采集并鎖定定位所需的多個(gè)衛(wèi)星信號(hào)。
第三,GNSS 的位置更新率被限制為每秒一次。這對(duì)追蹤緩慢移動(dòng)的大型物體而言沒(méi)有問(wèn)題,但對(duì)許多嵌入式應(yīng)用而言,啟動(dòng)時(shí)間太長(zhǎng)而且更新率太慢。第四,GNSS 精確到米,對(duì)于大多數(shù)嵌入式應(yīng)用而言不夠精確。這類(lèi)應(yīng)用種類(lèi)繁多,例如不涉及地面交通的機(jī)器人和虛擬現(xiàn)實(shí)等。
IMU 提供了許多嵌入式應(yīng)用所需的更精細(xì)的定位分辨率和更快的更新率。并且,和 GNSS 接收器提供絕對(duì)定位信息相反,IMU 提供距離已知起點(diǎn)的相對(duì)位置信息,因此這兩種位置傳感器可互為補(bǔ)充。
現(xiàn)代電子 IMU 以板安裝電子元件的方式提供,以微機(jī)電系統(tǒng) (MEMS) 技術(shù)為基礎(chǔ),因此體積小、重量輕且相對(duì)堅(jiān)固。它們具有可變的自由度 (DOF) 能力,而且與 GNSS 接收器不同,IMU 不依賴(lài)無(wú)線(xiàn)電信號(hào)。IMU 的耗電量極低,可通過(guò)各種供應(yīng)源獲取具有廣泛分辨率和精度的產(chǎn)品。
借助這些特性,IMU 可用于增強(qiáng) GNSS 接收器的定位信息。(請(qǐng)參閱“使用 GNSS 模塊快速設(shè)計(jì)位置跟蹤系統(tǒng)”。)
IMU 剖析
運(yùn)動(dòng)傳感器對(duì)物理運(yùn)動(dòng)做出響應(yīng)并進(jìn)行檢測(cè),包括加速度、移動(dòng)速率或距離等參數(shù)。慣性傳感器是一種特殊的運(yùn)動(dòng)傳感器。IMU 將各種運(yùn)動(dòng)傳感器集成到一個(gè)器件中,可提供高精度定位信息。它們對(duì)傳感器自身的運(yùn)動(dòng)做出響應(yīng)。
IMU 整合了以下一種或多種運(yùn)動(dòng)傳感器類(lèi)型:
陀螺儀傳感器測(cè)量角度位置變化,通常以每秒度數(shù)表示。隨時(shí)間進(jìn)行角速率積分可測(cè)得行程角度,用于追蹤方向變化。陀螺儀傳感器提供一個(gè)、兩個(gè)或三個(gè)軸,分別對(duì)應(yīng)俯仰角、翻滾角和偏航角。陀螺儀追蹤與重力無(wú)關(guān)的相對(duì)運(yùn)動(dòng),因此傳感器偏置或積分誤差會(huì)造成稱(chēng)為“漂移”的位置誤差。
加速計(jì)傳感器測(cè)量線(xiàn)性加速度,包括設(shè)備運(yùn)動(dòng)造成的加速度分量和重力造成的加速度。加速度以 G 為單位,是地球重力(1 G = 9.8 米/秒2)的倍數(shù)。加速計(jì)提供一個(gè)、兩個(gè)或三個(gè)軸,分別定義 X、Y、Z 坐標(biāo)系。通過(guò)計(jì)算測(cè)得的器件角度并進(jìn)行重力補(bǔ)償,可使用加速計(jì)數(shù)據(jù)來(lái)測(cè)量靜態(tài)設(shè)備方向。復(fù)雜運(yùn)動(dòng)周期會(huì)令方向計(jì)算變得復(fù)雜。
磁傳感器測(cè)量磁場(chǎng)強(qiáng)度,通常以微特斯拉 (μT) 或高斯(100 μT = 1 高斯)為單位。移動(dòng)電子設(shè)備中最常用的磁傳感器是三軸霍爾效應(yīng)磁力儀。根據(jù)地理位置,地球磁場(chǎng)幅度介于 25 到 65 μT 之間,且傾斜角度各不同。就美國(guó)大陸而言,強(qiáng)度介于 45 到 55 μT 之間,角度為 50 - 80 度。通過(guò)計(jì)算檢測(cè)到的地球磁場(chǎng)角度,并將此測(cè)量的角度與加速計(jì)測(cè)量的重力進(jìn)行比較,即可非常精確地測(cè)量出設(shè)備相對(duì)于地磁北極的航向。要獲得正北航向,還需要根據(jù)當(dāng)前經(jīng)緯度進(jìn)行調(diào)節(jié)。
壓力傳感器測(cè)量差壓或絕對(duì)壓力,單位通常為百帕 (hPa) 或毫巴 (mbar),二者等效。海平面標(biāo)準(zhǔn)氣壓定義為 1013.25 hPa。海拔高度變化會(huì)導(dǎo)致檢測(cè)到的環(huán)境氣壓發(fā)生相應(yīng)變化,可用于追蹤垂直運(yùn)動(dòng)。
使用 IMU 的運(yùn)動(dòng)追蹤采用傳感器融合,根據(jù)已知的起點(diǎn)和方向,推導(dǎo)單一、高精度的相對(duì)設(shè)備方向和位置估計(jì)值。傳感器融合涉及使用 IMU 制造商或應(yīng)用開(kāi)發(fā)人員開(kāi)發(fā)的復(fù)雜數(shù)學(xué)算法來(lái)組合 IMU 的各種運(yùn)動(dòng)傳感器輸出。使用傳感器融合進(jìn)行位置計(jì)算可得到以下測(cè)量結(jié)果:
重力 – 具體而言地球重力,且不含設(shè)備感應(yīng)到的由運(yùn)動(dòng)造成的加速度。當(dāng) IMU 靜止時(shí),加速計(jì)測(cè)量重力矢量。當(dāng) IMU 運(yùn)動(dòng)時(shí),重力測(cè)量需要融合加速計(jì)和陀螺儀的數(shù)據(jù),并減去運(yùn)動(dòng)造成的加速度。需要相對(duì)于地球來(lái)檢測(cè)方向的應(yīng)用可使用重力測(cè)量。
線(xiàn)性加速度 – 等于加速計(jì)測(cè)得的設(shè)備加速度,但要減去重力矢量。IMU 線(xiàn)性加速度可用于測(cè)量三維空間中的運(yùn)動(dòng)。該值的精度取決于重力矢量的追蹤精度。
方向(海拔高度)– 歐拉角集合,包括偏航角、俯仰角、翻滾角,測(cè)量單位為度。
旋轉(zhuǎn)矢量 – 由加速計(jì)、陀螺儀和磁力儀傳感器的數(shù)據(jù)組合得出。旋轉(zhuǎn)矢量表示圍繞特定軸的旋轉(zhuǎn)角度。
IMU 可用于各種應(yīng)用,包括消費(fèi)品(手機(jī))、醫(yī)學(xué)(成像)、工業(yè)(機(jī)器人)和軍工(航向跟蹤)。所需 IMU 精度取決于應(yīng)用要求。
六種自由度
自由度 (DOF) 指剛性物體在三維空間中的可能運(yùn)動(dòng)。3D 空間中只有六種 DOF:三個(gè)線(xiàn)性轉(zhuǎn)換 DOF(前/后、上/下、左/右)和三個(gè)旋轉(zhuǎn) DOF(偏航、仰俯和翻滾)。無(wú)論運(yùn)動(dòng)有多復(fù)雜,空間內(nèi)任何可能的剛性物體運(yùn)動(dòng)都能以六種基本 DOF 的組合來(lái)表示。
但在 IMU 領(lǐng)域內(nèi),有很多 9 DOF 甚至 10 DOF 傳感器的叫法。考慮到總共只有六種用于描述運(yùn)動(dòng)的 DOF,這種命名規(guī)則會(huì)造成相當(dāng)?shù)睦_。9 DOF 這一數(shù)字命名源于累計(jì) IMU 內(nèi)所含各種傳感器的 DOF。因此,如果 IMU 包含一個(gè) 3 DOF 加速計(jì)、一個(gè) 3 DOF 陀螺儀和一個(gè) 3 DOF 磁力儀,則稱(chēng)之為 9 DOF IMU。再增加一個(gè)氣壓傳感器用于測(cè)量海拔高度,就會(huì)得到一個(gè) 10 DOF IMU。
市場(chǎng)上有各種價(jià)格和功能的 IMU。例如,DFRobot 的 SEN0140 10 DOF MEMS IMU 傳感器板是一種緊湊型 IMU 板,集成了一個(gè) Analog Devices ADXL345 加速計(jì)、一個(gè) Honeywell Microelectronics & Precision Sensors 磁力儀、一個(gè) TDK Invensense 陀螺儀和一個(gè) Bosch Sensortec 氣壓傳感器。
圖 1:DFRobot 的 SEN0140 10 DOF MEMS IMU 傳感器板集成了加速計(jì)、磁力儀、陀螺儀和氣壓傳感器。(圖片來(lái)源:DFRobot)
主流 SEN0140 傳感器的測(cè)量規(guī)格如下:
ADXL345 加速計(jì):±16 g,13 位分辨率(在所有 g 量程內(nèi)保持 4 mg/LSB 的比例系數(shù))
Honeywell Microelectronics & Precision Sensors 磁力儀:±8 高斯?jié)M量程磁場(chǎng)
TDK Invensense 陀螺儀:滿(mǎn)量程 ±2000°/秒
Bosch Sensortec 氣壓傳感器:4.35 PSI 至 15.95 PSI(30 kPa 至 110 kPa)
所有這四個(gè)傳感器都連接到板上的單一 SPI 串口,這意味著嵌入式處理器必須單獨(dú)對(duì)每個(gè)處理器進(jìn)行尋址和查詢(xún)。DFRobot 的 SEN0140 還采用低噪聲 LDO,為傳感器提供 3 至 8 伏穩(wěn)壓電源。
使用現(xiàn)有 Arduino 庫(kù),DFRobot 的 10 DOF IMU 能直接兼容 Arduino 開(kāi)發(fā)板。該器件還可用于具有 SPI 端口的任何微處理器或微控制器系統(tǒng)。
以下是從 DFRobot 的 SEN0140 10 DOF 開(kāi)發(fā)板提取傳感器數(shù)據(jù)的 Arduino 代碼示例(列表 1):
復(fù)制 #include #include #include #include #include float angles[3]; // yaw pitch roll float heading; short temperature; long pressure; // Set the FreeSixIMU object FreeSixIMU sixDOF = FreeSixIMU(); HMC5883L compass; // Record any errors that may occur in the compass.int error = 0; void setup(){ Serial.begin(9600); Wire.begin(); delay(5); sixDOF.init(); //init the Acc and Gyro delay(5); compass = HMC5883L(); // init HMC5883 error = compass.SetScale(1.3); // Set the scale of the compass.error = compass.SetMeasurementMode(Measurement_Continuous); // Set the measurement mode to Continuous if(error != 0) // If there is an error, print it out.Serial.println(compass.GetErrorText(error)); bmp085Calibration(); // init barometric pressure sensor } void loop(){ sixDOF.getEuler(angles); temperature = bmp085GetTemperature(bmp085ReadUT()); pressure = bmp085GetPressure(bmp085ReadUP()); getHeading(); PrintData(); delay(300); } void getHeading(){ // Retrive the raw values from the compass (not scaled).MagnetometerRaw raw = compass.ReadRawAxis(); // Retrived the scaled values from the compass (scaled to the configured scale).MagnetometerScaled scaled = compass.ReadScaledAxis(); // Values are accessed like so: int MilliGauss_OnThe_XAxis = scaled.XAxis;// (or YAxis, or ZAxis) // Calculate heading when the magnetometer is level, then correct for signs of axis.heading = atan2(scaled.YAxis, scaled.XAxis); float declinationAngle = 0.0457; heading += declinationAngle; // Correct for when signs are reversed.if(heading 《 0) heading += 2*PI; // Check for wrap due to addition of declination.if(heading 》 2*PI) heading -= 2*PI; // Convert radians to degrees for readability.heading = heading * 180/M_PI; } void PrintData(){ Serial.print(“Eular Angle: ”); Serial.print(angles[0]); Serial.print(“ ”); Serial.print(angles[1]); Serial.print(“ ”); Serial.print(angles[2]); Serial.print(“ ”); Serial.print(“Heading: ”); Serial.print(heading); Serial.print(“ ”); Serial.print(“Pressure: ”); Serial.print(pressure, DEC); Serial.println(“ Pa”); }
列表 1:這是從 DFRobot 的 SEN0140 10DOF 開(kāi)發(fā)板提取傳感器數(shù)據(jù)的 Arduino 代碼示例。(代碼來(lái)源:DFRobot)
此 Arduino 代碼可生成圖 2 所示輸出。
圖 2:上述 Arduino 代碼生成此輸出,顯示 SEN0140 傳感器的狀態(tài)。(圖片來(lái)源:DFRobot)
Digilent 的 410-326 9 軸 IMU/氣壓計(jì)基于 STMicroelectronics 的 LSM9DS1 iNEMU IMU,該 IMU 整合如下規(guī)格的 3D 加速計(jì)、3D 陀螺儀和 3D 磁力儀:
±2/±4/±8/±16 g 滿(mǎn)量程線(xiàn)性加速度(3D 加速計(jì))
±245/±500/±2000°/秒滿(mǎn)量程角速率(3D 陀螺儀)
±4/±8/±12/±16 高斯?jié)M量程磁場(chǎng)(3D 磁力儀)
所有三種運(yùn)動(dòng)傳感器—加速計(jì)、陀螺儀和磁力儀—都集成到一個(gè)小型封裝中,并通過(guò) LSM9DS1 的 I2C 接口進(jìn)行連接。
圖 3:Digilent 的 410-326 9 軸 IMU/氣壓計(jì)使用 STMicroelectronics 的 LSM9DS1 iNEMU IMU,該 IMU 在一個(gè)封裝中整合了 3D 加速計(jì)、3D 陀螺儀和 3D 磁力儀。(圖片來(lái)源:Digilent)
Thales Visionix 的 NavChip 精密 6 軸 MEMS IMU 源自軍工技術(shù),可以 1 kHz 的速率進(jìn)行位置數(shù)據(jù)采集和處理。然后,以用戶(hù)可選擇的低至 200 Hz(或更低)的速率處理并集成數(shù)據(jù)。它還使用工廠(chǎng)校準(zhǔn)和嵌入式溫度傳感器進(jìn)行補(bǔ)償,以糾正其他傳感器的偏置、比例系數(shù)和錯(cuò)位。其加速計(jì)和磁力儀的規(guī)格如下:
加速計(jì):滿(mǎn)量程角速率 2000°/s
磁力儀:滿(mǎn)量程加速度 ±16g
NavChip 模塊帶有 TTL UART 和 SPI 端口,并具有 1 個(gè)脈沖/秒的輸入,用于同步 GPS 模塊。提供 V14447-03-02 RS-422 評(píng)估套件,讓原型設(shè)計(jì)更加輕松。模塊有內(nèi)置測(cè)試 (BIT) 模式,可按指令測(cè)試,并提供連續(xù)診斷監(jiān)測(cè)。該裝置已進(jìn)行工廠(chǎng)校準(zhǔn),并在 -40°C 至 +85°C 的工作溫度范圍內(nèi)提供溫度補(bǔ)償。
Thales 利用工廠(chǎng)校準(zhǔn)和溫度補(bǔ)償,在 NavChip 模塊的規(guī)格書(shū)中增加了一系列穩(wěn)定性規(guī)格,這在其他大多數(shù)商用 IMU 規(guī)格書(shū)中是沒(méi)有的:
陀螺儀偏置運(yùn)行穩(wěn)定性:5°/小時(shí)
角向隨機(jī)游走:0.18°/√小時(shí)
速度隨機(jī)游走:0.03 米/秒/√小時(shí)
軟件角度
有了本文所列的所有 IMU,編寫(xiě)如以上 Arduino 代碼列表所示的提取原始傳感器數(shù)據(jù)的軟件并不困難。但是,將這些傳感器讀數(shù)集成為可用的導(dǎo)航數(shù)據(jù)才是更復(fù)雜的任務(wù)。一些開(kāi)源程序包專(zhuān)門(mén)設(shè)計(jì)為將 IMU 數(shù)據(jù)整合到應(yīng)用中。
ArduPilot Mega (APM) 便是這樣一款專(zhuān)為自主式無(wú)人機(jī)而開(kāi)發(fā)的程序。它支持駕駛和無(wú)人駕駛(完全自主)飛行,包括數(shù)百個(gè) GPS 航點(diǎn)、攝像機(jī)控制、自主起飛和著陸。由于是開(kāi)源程序,IMU 代碼可開(kāi)放檢查,并能改用于其他類(lèi)型的應(yīng)用。
來(lái)自 Open Source Robotics Foundation 的機(jī)器人操作系統(tǒng) (ROS) 提供了編寫(xiě)機(jī)器人軟件的靈活框架。它集合了眾多工具、庫(kù)和慣例,旨在簡(jiǎn)化跨眾多機(jī)器人平臺(tái)創(chuàng)建復(fù)雜而強(qiáng)大的機(jī)器人行為的任務(wù)。ROS 包含多個(gè) IMU 的接口代碼,以便為其導(dǎo)航模塊提供信息。
總結(jié)
許多嵌入式應(yīng)用需要能夠在全球任意位置實(shí)現(xiàn)系統(tǒng)定位。僅 GNSS 接收器是不夠的,但有了 IMU 的補(bǔ)充,則可實(shí)現(xiàn)更精準(zhǔn)的定位和更快的更新率。
-
嵌入式
+關(guān)注
關(guān)注
5144文章
19575瀏覽量
315837 -
mems
+關(guān)注
關(guān)注
129文章
4093瀏覽量
192898 -
GNSS
+關(guān)注
關(guān)注
9文章
852瀏覽量
49148
發(fā)布評(píng)論請(qǐng)先 登錄
如何計(jì)算存儲(chǔ)示波器的垂直分辨率?
采用高分辨率位置插值的Sin/Cos編碼器工業(yè)接口
ADC的噪聲、ENOB及有效分辨率
峰峰值分辨率與有效分辨率的區(qū)別
高分辨率嵌入式視頻監(jiān)控設(shè)備的設(shè)計(jì)
什么是分辨率
什么是屏幕分辨率
峰峰值分辨率與有效分辨率
如何使用高分辨率面陣CCD設(shè)計(jì)圖像采集系統(tǒng)的論文說(shuō)明

分辨率的峰值分辨率和有效分辨率概念
AN5324_基于STM32F334單片機(jī)嵌入式高分辨率定時(shí)器實(shí)現(xiàn)太陽(yáng)能轉(zhuǎn)換器

評(píng)論