I have a question about something that seems like it would be pretty basic, but so fair I haven't been able to find a whole lot of discussion on the issue. It's possible I'm not not familiar enough with the terminology.

I have a rigid body with an accelerometer/gyro IC dev board nailed to it. I would like to know what the accelerometer would measure at another point on this board, in this case, the sensor of a camera that is also nailed to it.

My thinking is that I can use the accelerator, gyroscope and differentiated gyroscope data and the equation $a_t = a_m + \omega' \times r + \omega \times (\omega \times r)$, where

$a_t$ = transformed acceleration

$a_m$ = measure acceleration

$\omega$ = measured gyroscope reading

$\omega'$ = first derivative of the gyroscope reading

$r$ = the vector between the accelerometer/gyro and the point I want transformed to.

My plan is to get $\omega'$ with a Savitzky-Golay filter, though this makes implementation a lot less convenient, because I have to buffer my data, and try to figure out how the filter effects the noise variance of the sensor.

Does this plan make sense? Is there a better accepted way that I don't know about? I'm surprised that ROS or tf2 doesn't have a built in function for this. Is there something I am missing? Thanks!

  • $\begingroup$ Curious, Why are you interested in knowing the acceleration at the camera position? Are you working on a gimbal solution? Or a position for the camera? It's not that useful to know local accelerations. $\endgroup$ Jul 7 '17 at 22:57
  • $\begingroup$ I'm trying to get the scale of some monocular SLAM telemetry. I took the double derivative of the SLAM telemetry and with some vector math, I can get the scale and the direction of gravity. It's not great, but if averaged for a bit, it gives a pretty good estimate. The virtual IMU calculation actually worked very well once I threw a short FIR filter on the accelerometer and gryo signals. $\endgroup$
    – Obi_Kwiet
    Jul 28 '17 at 18:35

I believe this is correct, with the caveat that the acceleration will still be in the frame of the accelerometer. You'll need to multiply by the rotation matrix from m to t to know the acceleration in the t frame.

The reasons this isn't usually done include (1) the measurement errors of the accelerometer will be (mostly) statistically independent in the IMU frame but will have dependencies in the transformed frame, so any sort of signal processing should be done in the IMU frame, and (2) differentiating a gyro signal will add a ton of noise and the result will probably suck.

  • $\begingroup$ Hey, thanks for responding! I quit checking after a few days. I intentionally aligned my accelerometer and with the other point so I wouldn't have to deal with a rotation matrix. The differentiation is an annoying source of noise, but for my application, it's acceptable to smooth over a large number of points with a Savitzky-Golay filter. $\endgroup$
    – Obi_Kwiet
    Jun 16 '17 at 19:37
  • $\begingroup$ The measurement error problems are pretty annoying though. The trouble is, I'm doing the transform because I need to compare telemetry from two sources that aren't physically in the same location. I would think that in robotics this would come up a lot though. An EKF, for example, has to fuse multiple telemetry sources. How can it do this if you don't transfer the measurements into the same coordinate location? $\endgroup$
    – Obi_Kwiet
    Jun 16 '17 at 19:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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