Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Orientation_tracker X_NUCLEO_IKS01A2
Diff: main.cpp
- Revision:
- 20:c27bce3cf63b
- Parent:
- 19:428ad790bdb3
- Child:
- 21:c62412a679b0
--- a/main.cpp Mon May 13 11:59:00 2019 +0000 +++ b/main.cpp Mon May 20 08:22:32 2019 +0000 @@ -39,8 +39,8 @@ /* Includes */ #include "mbed.h" #include "XNucleoIKS01A2.h" -#include "MagdwickAHRS.h" - +#include "MadgwickAHRS.h" +#define sampleFreqDef 1500.0f /* Instantiate the expansion board */ static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5); @@ -96,7 +96,9 @@ int32_t mag[3]; int32_t gyr[3]; int32_t ac[3]; + float offset[9] = {0}; float pitch, roll, yaw; + int offset_cnt = 0; /* Enable all sensors */ @@ -117,14 +119,14 @@ // printf("LSM6DSL accelerometer & gyroscope = 0x%X\r\n", id); - Magdwick magdwick_filter; - magdwick_filter::begin(sampleFreqDef); + Madgwick madgwick_filter; + madgwick_filter.begin(sampleFreqDef); while(1) { printf("\r\n"); - magnetometer->get_m_axes(axes);- + magnetometer->get_m_axes(axes); mag[0] = axes[0]; mag[1] = axes[1]; mag[2] = axes[2]; @@ -136,7 +138,7 @@ ac[0] = axes[0]; ac[1] = axes[1]; ac[2] = axes[2]; - printf("LSM303AGR [acc/mg]: %6ld, %6ld, %6ld\r\n", ac[0], ac[1], ac[2]); + printf("LSM303AGR [acc/mg]: %6ld, %6ld, %6ld\r\n", ac[0] - offset[3]*1000, ac[1] - offset[4]*1000, ac[2] - offset[5]*1000); //acc_gyro->get_x_axes(axes); //printf("LSM6DSL [acc/mg]: %6ld, %6ld, %6ld\r\n", ac[0], ac[1], ac[2]); @@ -145,16 +147,41 @@ gyr[0] = axes[0]; gyr[1] = axes[1]; gyr[2] = axes[2]; - printf("LSM6DSL [gyro/mdps]: %6ld, %6ld, %6ld\r\n", gyr[0], gyr[1], gyr[2]); - - magdwick_filter::update(gyr[0], gyr[1], gyr[2], ac[0], ac[1], ac[2], mag[0], mag[1], mag[2]); - magdwick_filter::computeAngles(); + printf("LSM6DSL [gyro/mdps]: %6ld, %6ld, %6ld\r\n", gyr[0]/1000 - offset[0], gyr[1]/1000 - offset[1], gyr[2]/1000 - offset[2]); + if (offset_cnt > 10) + { + madgwick_filter.update(gyr[0]/1000 - offset[6], gyr[1]/1000 - offset[7], gyr[2]/1000 - offset[8], ac[0]/1000 - offset[3], ac[1]/1000 - offset[4], ac[2]/1000- offset[5], mag[0]/1000, mag[1]/1000, mag[2]/1000); + //madgwick_filter.update(0,0,0,0,0,0,0,0,0); + madgwick_filter.computeAngles(); + } + + pitch = madgwick_filter.getPitch(); + roll = madgwick_filter.getRoll(); + yaw = madgwick_filter.getYaw(); - pitch = magdwick_filter::getPitch(); - roll = magdwick_filter::getRoll(); - yaw = magdwick_filter::getYaw(); - - printf(" Pitch: %.2f\n Roll: %.2f\n, Yaw: %.2f\n", pitch, roll, yaw); + if (offset_cnt < 10) + { + offset[0] += mag[0]/1000; + offset[1] += mag[1]/1000; + offset[2] += mag[2]/1000; + offset[3] += ac[0]/1000; + offset[4] += ac[1]/1000; + offset[5] += ac[2]/1000; + offset[6] += gyr[0]/1000; + offset[7] += gyr[1]/1000; + offset[8] += gyr[2]/1000; + } + if(offset_cnt == 10) + { + for(int i = 0; i<10;i++) + { + offset[i] = offset[i]/10; + printf("Offset[%d]: %.2f/n",i,offset[i]); + } + } + + offset_cnt++; + printf(" Roll: %.2f\n Pitch: %.2f\n , Yaw: %.2f\n", roll, pitch, yaw); printf("Hehehehe"); wait(0.5); }