projects:robots:inertial_navigation_system
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| projects:robots:inertial_navigation_system [2024/04/26 05:30] – [Commercial Products] jhagstrand | projects:robots:inertial_navigation_system [2024/04/29 04:51] (current) – [videos] jhagstrand | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Inertial Navigation System (INS) ====== | ====== Inertial Navigation System (INS) ====== | ||
| + | |||
| + | spreadsheet of data:\\ | ||
| + | https:// | ||
| + | |||
| INS Intertial Navigation System - Sensors, processors, and software to estimate position. | INS Intertial Navigation System - Sensors, processors, and software to estimate position. | ||
| Line 47: | Line 51: | ||
| velocity vs acceleration | velocity vs acceleration | ||
| - | linear velocity: meters | + | per Steppe School youtubes: |
| - | linear acceleration: meters per second squared | + | |
| - | angular velocity: | + | bias, aka offset, must be removed from each measurement |
| - | angular acceleration: | + | * accelerometer |
| + | * measures linear acceleration, | ||
| + | * unit: mg, 1g = 9.8 m/s2, 1mg = 1 thousandth of a g | ||
| + | * has bias, but not so critical as gyroscope and magnetometer | ||
| + | * gravity is an acceleration of 1g or 1000mg. | ||
| + | * the upright and at-rest measurement should be x:0, y:0, z:1000. | ||
| + | * as the sensor is rotated the acceleration due to gravity is distributed among the x,y,z axes. | ||
| + | * gyroscope | ||
| + | * gyroscope measures | ||
| + | * gyroscope unit: degrees | ||
| + | * at rest, gyroscope returns the bias | ||
| + | * by subtracting the bias from a readingd, the at rest measurement is x:0, y:0, z:1000 | ||
| + | * calibration is done at rest for some seconds, the average of readings is the bias | ||
| + | * 20948 chip has " | ||
| + | * magnetometer | ||
| + | * no registers, so we must keep variables and do the subtraction from each measurement | ||
| + | * calibration is done during 3D rotation for some seconds | ||
| + | * ((max - min) / 2) should be zero, so the actual value during calibration is the bias | ||
| + | * in addition to the bias, we also have an adjustment for declination, | ||
| - | rotation velocity: hertz, cycles per second | + | localization = changing reference system from the body of the sensor to the earth |
| + | * sensor readings give data relative to the body, the vehicle | ||
| + | * ahrs values give data relative to the earth | ||
| - | movement relative to the earth' | + | units: |
| - | | + | |
| + | * linear acceleration: | ||
| + | * angular velocity: degrees per second, radians per second | ||
| + | * angular acceleration: | ||
| + | * rotation velocity: hertz, cycles per second | ||
| + | * 10**-6 | ||
| + | * 10**-3 | ||
| - | o | + | accelerometer and gyroscope measure motion |
| - | Sensors | + | we know that the z-axis is pointing straight up, but the x and y-axes are relative to some random or arbitrary starting point |
| + | by adding a magnetometer, | ||
| - | motion sensors | + | the magnetometer measures the strength of magnetic fields acting on the sensor |
| - | + | the most significant magnetic field is that of the earth | |
| - | accelerometer | + | |
| - | + | ||
| - | gyroscope | + | |
| - | + | ||
| - | IMU - Inertial Measurement Unit - | + | |
| + | naming absurdities: | ||
| + | * IMU inertial measurement unit | ||
| + | * does not measure inertia. It's components measure accleration, | ||
| + | * is not a unit of measurement | ||
| + | * 6-axis imu or 9-axis imu. There are only three axes: x,y,z. | ||
| + | * 6dof or 9dof. A sensor does not have degrees of freedom. | ||
| Line 149: | Line 180: | ||
| Magnetometer calibration | Magnetometer calibration | ||
| + | hold the sensor level and spin it horizontally | ||
| + | the graph of the results should be a perfect circle, and the radius of the circle is the strength of the magnetic field | ||
| https:// | https:// | ||
| - | Scott Lobdell, | + | Scott Lobdell, |
| + | start with 9 measurements from the 3 sensors * 3 axes | ||
| + | calibrate the magnetometer using a 3D bias to get corrected values of the 3 magnetometer measurements | ||
| + | begin ahrs | ||
| + | localize the acceleration vector from [x,y,z] to [north, | ||
| + | convert the 9 measurements into a quaternion | ||
| + | convert the quaternion into a 3x3 rotation matrix | ||
| + | multiply the acceleration vector times the inverse of the rotation matrix, giving the localized acceleration vector | ||
| + | remove the acceleration due to gravity [0,0,1] to [0,0,0] | ||
| + | apply the declination offset | ||
| https:// | https:// | ||
| + | ===== videos ===== | ||
| + | Paul McWhorter: 9-axis IMUs with Arduino, youtube \\ | ||
| + | Adafruit Bosch BNO055 \\ | ||
| + | 26 videos, in particular: \\ | ||
| + | #10: Making a tilt-compensated compass \\ | ||
| + | #21: Visualizing 3D rotations in VPython using Quaternions \\ | ||
| + | |||
| + | Scott Lobdell: How to implement an IMU \\ | ||
| + | no specific chip or code \\ | ||
| + | hand-drawn diagrams and verbal description of calibration and AHRS calculations | ||
| + | |||
| + | MicWro Engr, Michael Wrona: Magnetometer Errors and Calibration \\ | ||
| + | Adafruit Precision NXP 9-DOF Breakout Board - FXOS8700 + FXAS21002 \\ | ||
| + | series of youtubes made while developing his custom " | ||
| + | Magneto calibration software \\ | ||
| + | [[Michael Wrona notes | notes]] | ||
| + | |||
| + | Steppe School: STM32 and ICM20948 IMU part 1. accelerator and gyroscope | ||
| + | https:// | ||
| + | 3 videos | ||
| ===== Commercial Products ===== | ===== Commercial Products ===== | ||
| + | |||
| + | Arduino-compatible, | ||
| === MPU9250 === | === MPU9250 === | ||
| Line 168: | Line 232: | ||
| chip: TDK Invensense MPU9250 \\ | chip: TDK Invensense MPU9250 \\ | ||
| date: 2018 \\ | date: 2018 \\ | ||
| - | status: | + | datasheet: https:// |
| - | | + | status: |
| - | | + | comment: |
| - | * DMP output is not available in current libraries | + | |
| videos: | videos: | ||
| * https:// | * https:// | ||
| Line 177: | Line 240: | ||
| libraries: | libraries: | ||
| * https:// | * https:// | ||
| + | * https:// | ||
| === BNO055 === | === BNO055 === | ||
| board: Adafruit 9-DOF Absolute Orientation IMU Fusion Breakout, BNO055 \\ | board: Adafruit 9-DOF Absolute Orientation IMU Fusion Breakout, BNO055 \\ | ||
| chip: Bosch Sensortec BNO055 \\ | chip: Bosch Sensortec BNO055 \\ | ||
| - | date: 2015 \\ | + | date: 2014 \\ |
| status: "Not recommended for new designs...You could use BHI260AP...", | status: "Not recommended for new designs...You could use BHI260AP...", | ||
| + | datasheet: https:// | ||
| components: | components: | ||
| * Atmel SAM20D processor | * Atmel SAM20D processor | ||
| Line 193: | Line 258: | ||
| * modes: IMU, compass, M4G, NDOF | * modes: IMU, compass, M4G, NDOF | ||
| libraries: | libraries: | ||
| - | * | + | * https:// |
| videos: | videos: | ||
| * https:// | * https:// | ||
| * video demo, no heading mentioned, euler and quat, quat more accurate, too slow for vehicle | * video demo, no heading mentioned, euler and quat, quat more accurate, too slow for vehicle | ||
| * https:// | * https:// | ||
| + | |||
| + | === LIS3MDL === | ||
| + | board: Polulu #2862 MinIMU-9 v6 Gyro, Accelerometer, | ||
| + | chips: | ||
| + | datasheets: | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | === UM7-LT === | ||
| + | board: made by Redshift Labs, sold by Polulu | ||
| + | chip: UM7 | ||
| + | description: | ||
| + | * AHRS, includes microcontroller running a Kalman Filter | ||
| + | * expensive 160 USD | ||
| + | * Redshift Labs appears to be out of business | ||
projects/robots/inertial_navigation_system.1714123858.txt.gz · Last modified: 2024/04/26 05:30 by jhagstrand