Sharing: What is your application?

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Sharing: What is your application?

2,926件の閲覧回数
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

ラベル(1)
0 件の賞賛
返信
6 返答(返信)

2,512件の閲覧回数
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 件の賞賛
返信

2,512件の閲覧回数
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 件の賞賛
返信

2,512件の閲覧回数
trekwh
Contributor I

navigation

0 件の賞賛
返信

2,512件の閲覧回数
a8Chcx
Contributor V

For motion control...

0 件の賞賛
返信

2,512件の閲覧回数
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 件の賞賛
返信

2,512件の閲覧回数
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 件の賞賛
返信