9 releases

0.2.5 Mar 5, 2025
0.2.2 Jun 12, 2020
0.2.1 Sep 5, 2018
0.1.5 Sep 4, 2018

#111 in Embedded development

Download history 28/week @ 2024-11-27 34/week @ 2024-12-04 21/week @ 2024-12-11 2/week @ 2024-12-18 4/week @ 2024-12-25 2/week @ 2025-01-08 8/week @ 2025-01-15 3/week @ 2025-01-22 54/week @ 2025-01-29 57/week @ 2025-02-05 20/week @ 2025-02-12 18/week @ 2025-02-19 43/week @ 2025-02-26 148/week @ 2025-03-05

229 downloads per month
Used in icm42688

MIT license

55KB
1K SLoC

dcmimu

An algorithm for fusing low-cost triaxial MEMS gyroscope and accelerometer measurements.

A no_std Rust port of the original.

Build Status

NOTE: libm still doesn't work with overflow checks, so you have to compile your project with --release. Leave a comment in the linked issue to raise awareness.

Credentials

Heikki Hyyti and Arto Visala, "A DCM Based Attitude Estimation Algorithm for Low-Cost MEMS IMUs," International Journal of Navigation and Observation, vol. 2015, Article ID 503814, 18 pages, 2015.

Usage

Library is available via crates.io .


# Create DCMIMU:
let mut dcmimu = DCMIMU::new();
let mut prev_t_ms = now();
loop {
    # get gyroscope and accelerometer measurement from your sensors:
    let gyro = sensor.read_gyro();
    let accel = sensor.read_accel();
    # Convert measurements to SI if needed.
    # Get time difference since last update:
    let t_ms = now();
    let dt_ms = t_ms - prev_t_ms
    prev_t_ms = t_ms
    # Update dcmimu states (don't forget to use SI):
    let (dcm, _gyro_biases) = dcmimu.update((gyro.x, gyro.y, gyro.z),
                                            (accel.x, accel.y, accel.z),
                                            dt_ms.seconds());
    println!("Roll: {}; yaw: {}; pitch: {}", dcm.roll, dcm.yaw, dcm.pitch);
    # Measurements can also be queried without updating:
    println!("{:?} == {}, {}, {}", dcmimu.all(), dcmimu.roll(), dcmimu.yaw(), dcmimu.pitch());
}

Check out mpu9250 for accelerometer/gyroscrope sensors driver.

Documentation

Available via docs.rs.

License

MIT license.

Dependencies

~395KB