I am using Pololu AltIMU-10 v4's accelerometer to monitor the acceleration of my system. I understand that when the sensor is placed upright on the table, it should measure 1g in the +ve z-axis. However, when I place it on the table and slide it on the table in x and y directions, I see that this measured 1g in z-axis drops during the motion and goes back to 1g after the motion ends. This change in the z-axis readings is always in form of a drop regardless of the actual motion being in +ve or -ve x or y directions.

In the graph below, I carried out the motion sequence below:

  1. Sliding motion in -ve x-axis on the table.
  2. Sliding motion in +ve y-axis on the table.
  3. Handheld upward motion in +ve z-axis in the air.
  4. Handheld downward motion in -ve z-axis in the air.
  5. Sliding motion in -ve y-axis on the table.
  6. Sliding motion in +ve x-axis on the table.
  7. Random rotations of the sensor to see the change in the measured gravity.

Accelerometer readings and the calculated magnitude (norm)

It is seen that although the expected acceleration in the axis of motion is measured, the measured gravity drops during the motion. Is this the expected behaviour for an accelerometer?

If yes, how can I remove this transient drop from my readings? I understand that the gravity component may be removed by referring the global [0 0 1] vector to the sensor frame and subtracting it from the sensor measurement. But that doesn't help with this transient drop.

  • 1
    \$\begingroup\$ You've done a good test, it seems that the sensor is not performing very well. I'm sure little MEMS accelerometers have all sorts of non-linear, npn-orthogonal-axes problems that are fixed in software. Is there perhaps an updated library for the device? \$\endgroup\$
    – tomnexus
    Commented Feb 26, 2018 at 3:30
  • 1
    \$\begingroup\$ Try the same test with your phone, and an accelerometer monitor app like Physics Toolbox. I don't see the effect you describe, but I can simulate it by tipping the phone over towards the direction of movement. Is it possible you're not keeping the device flat on the table as you slide it? \$\endgroup\$
    – tomnexus
    Commented Feb 26, 2018 at 4:32
  • \$\begingroup\$ @tomnexus As for sensor readings, I wasn't using any libraries, I was directly writing/reading the registers according to the sensor datasheet (using BeagleBone Black). But I think Pololu provides a sensor library for Arduino users. I'll try and see if any extra tweaks are done over there. \$\endgroup\$
    – Fereidoon
    Commented Feb 26, 2018 at 7:14
  • 1
    \$\begingroup\$ @Andyaka the gyro chip on Pololu AltIMU-10 v4 is L3GD20H, and the accelerometer+magnetometer chip is LSM303D. \$\endgroup\$
    – Fereidoon
    Commented Feb 26, 2018 at 12:51
  • 1
    \$\begingroup\$ It might be that, while manufacturing, internal sensing mechanism would have been placed, slightly tilted. And so, the Z axis you were considering based on outer case, might not be the Z axis of the internal sensor. Thus, to get just Z axis readings, for Z axis motion (without X, Y), coordinates have to be rotated so as to align internal Z axis with external Z axis... Non zero components in X, Y axis for Z axis motion might be, 1g sin (\theta) and 1g cos (theta) \$\endgroup\$ Commented Apr 26, 2018 at 15:02

1 Answer 1


It could be inherent to the sensor technology used. If they use spring-loaded mass for sensing, you might expect that the force vector is offset to a certain extent during lateral movement. If you assume, that total length of spring is limited, then it gets clipped on Z-axis to the remaining length allowed for movement.

E.g. sum of forces E is constant 1 (or something slightly above it). If you have only gravity working on it, it "consumes" most of it. If you introduce lateral movement on +X axis with magnitude > 1, then Z drops to 0, for it's "overpowered". If you introduce movement on +X axis with magnitude less than 1 (say, 0.5), then you get much lower dip in Z, but it's still present. Which seems to be the case.

Damn, it's difficult to explain, but I have it somewhere in my headspace :) This image should illustrate it somewhat: enter image description here except here springs are ideal, while in reality they have stiffness and elasticity coefficients, which limit the "ceiling"

I haven't used this particular STM sensor, but others by them (LIS2/3) don't seem to exhibit such properties.

  • \$\begingroup\$ Well explained possible non linearity of the suspension system when away from the rest position. I would hope that these effects would be small but it is a potential error source. \$\endgroup\$
    – KalleMP
    Commented Oct 7, 2018 at 17:15
  • \$\begingroup\$ I was expecting very small magnitude of error from such nonlinearities, so it was certainly a surprise to me see such level of distortions. Anyway I worked around it via detection and rejection of the distortions in my software program (detection/rejection routine being very specific my application). Sorry I took a while to respond! \$\endgroup\$
    – Fereidoon
    Commented Mar 21, 2019 at 11:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.