Sharing: What is your application?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Sharing: What is your application?

2,927 Views
michaelestanley
NXP Employee
NXP Employee

To: Users of the NXP Sensor Fusion Library

Would you tell us a bit about your application(s) for the library?  We are always looking for good examples of how people use our tools, and we would love to hear from you.  If yours is a commercial product, here's your chance to expose others to it.  It it's academic, it's a chance to highlight your skillset.

Just respond to this thread and share whatever you are comfortable sharing.

Regards,

Mike Stanley

Labels (1)
0 Kudos
Reply
6 Replies

2,513 Views
a8Chcx
Contributor V

Hi Mike,

Thank you. So, in IMU mode, if no motion detect, there will be no angle change. not like earlier version, the angle keep changing because of GYRO...

Looking forward to trying the new version 7.00. Do I need to sign anything to use new version 7.00 or it is the same as before?

Thanks,

Christie

0 Kudos
Reply

2,513 Views
michaelestanley
NXP Employee
NXP Employee

At this point, I am expecting it will be the same license as before.  But check the license when it is released to be sure.

Mike

0 Kudos
Reply

2,513 Views
trekwh
Contributor I

navigation

0 Kudos
Reply

2,513 Views
a8Chcx
Contributor V

For motion control...

0 Kudos
Reply

2,513 Views
a8Chcx
Contributor V

That is why I asked the function to detect there is motion or not based on ACC and GYRO. Hope this function is included in version 7.0.

0 Kudos
Reply

2,513 Views
michaelestanley
NXP Employee
NXP Employee

You probably don't want to use the gyro for this - it's power hungrey.  But the accel works great.  I DID add this capability to Version 7.00, and it appears to work better than I hoped.  I'm using the accel to determine motion or not, and using that flag to power the gyro up and down as appropriate, and even turn off the fusion calculations when the part is not in motion.  I see no visible artifacts when viewing the motion in the sensor fusion toolkit.  Transitions are quick and it is nice and smooth.    We've added low level hooks for power control, but the specific mechanism will be under your control within the fusion loop.  Here's what it will look like:

static void fusion_task(void *pvParameters)
{
    uint16_t i=0;  // general counter variable
   float motion_baseline[3] = {0.0, 0.0, 0.0};
    bool stationary;
    static bool lastStationary;
    uint32_t stationaryCount = 0;
    while (1)
    {
        xEventGroupWaitBits(event_group,    /* The event group handle. */
                            B0,            /* The bit pattern the event group is waiting for. */
                            pdTRUE,        /* BIT_0 and BIT_4 will be cleared automatically. */
                            pdFALSE,        /* Don't wait for both bits, either bit unblock task. */
                            portMAX_DELAY); /* Block indefinitely to wait for the condition to be met. */

        // sfg.runFusion(&sfg);            // Run the actual fusion algorithms
        // Rather than call runFusion directly, this example invokes the lower level
        // calls here.  This allows us to check to see if the board is stationary,
        // and if so, transition to a lower power state.
        conditionSensorReadings(&sfg);  // magCal is run as part of this
        stationary = motionCheck(
                    sfg.Accel.fGc,      // calibrated accelerometer reading
                    motion_baseline,    // baseline to check new values against
                    0.01,              // changes less than this are ignored
                    120,                // three seconds at 40Hz rate
                    &stationaryCount);
        if (stationary) {
            if (!lastStationary) {  // suspend some operations
                FXAS21002_Idle(&(sensors[1]), &sfg);
            }
            clearFIFOs(&sfg);
        } else {
            if (lastStationary) {  // restart operations
                FXAS21002_Init(&(sensors[1]), &sfg);
            }
            // fuse the sensor data
            sfg.runFusion(&sfg);
        }

        sfg.applyPerturbation(&sfg);        // apply debug perturbation (testing only)

        sfg.loopcounter++;                  // The loop counter is used to "serialize" mag cal operations
        i=i+1;
        if (i>=4) {                        // Some status codes include a "blink" feature.  This loop
                i=0;                        // should cycle at least four times for that to operate correctly.
                sfg.updateStatus(&sfg);    // This is where pending status updates are made visible
        }
       if (stationary) {
            sfg.queueStatus(&sfg, LOWPOWER);    // assume LOWPOWER status for next pass through the loop
        } else {
            sfg.queueStatus(&sfg, NORMAL);      // assume NORMAL status for next pass through the loop
        }
        sfg.pControlSubsystem->stream(&sfg, sUARTOutputBuffer);      // Send stream data to the Sensor Fusion Toolbox
        lastStationary = stationary;
    }
}

Regards,

Mike

0 Kudos
Reply