From: Omio Abedin on
Hi all,

I have a problem which seems simple enough, but I just can't work it out. I have discrete accelerometer data from an IMU, which is collecting data at 10Hz. I have 6DOF being the x, y, z linear accelerations, and the roll, pitch, yaw rate.

I want to convert the linear accelerations to displacements and the angular velocities to angular displacements. I have been trying many different thinigs to solve this problem. I have tried cumtrapz with and without a high pass filter, but the result do not appear to be what I am looking for.

I know they are inccorect because I moving the IMU to a certain known position and the results are not conforming to that. I am moving the IMU from a table to the floor (750mm below), and thus my position should read 0.75m once it reaches the floor. But it doesn't, it starts reading 0 again.

Surely, this problem is common one, and someone out there must know how to solve it. Is there any other way to solve it without integrating? I am hoping that someone has already had to figure it out, and has got a script I could use, but any help would be greatly appreciated.

Thanks,
Omio

P.S. if any wants, I can email the script I have so far.
From: Roger Stafford on
"Omio Abedin" <omio.abedin(a)dsto.defence.gov.au> wrote in message <hq8i78$j84$1(a)fred.mathworks.com>...
> Hi all,
>
> I have a problem which seems simple enough, but I just can't work it out. I have discrete accelerometer data from an IMU, which is collecting data at 10Hz. I have 6DOF being the x, y, z linear accelerations, and the roll, pitch, yaw rate.
>
> I want to convert the linear accelerations to displacements and the angular velocities to angular displacements. I have been trying many different thinigs to solve this problem. I have tried cumtrapz with and without a high pass filter, but the result do not appear to be what I am looking for.
>
> I know they are inccorect because I moving the IMU to a certain known position and the results are not conforming to that. I am moving the IMU from a table to the floor (750mm below), and thus my position should read 0.75m once it reaches the floor. But it doesn't, it starts reading 0 again.
>
> Surely, this problem is common one, and someone out there must know how to solve it. Is there any other way to solve it without integrating? I am hoping that someone has already had to figure it out, and has got a script I could use, but any help would be greatly appreciated.
>
> Thanks,
> Omio
>
> P.S. if any wants, I can email the script I have so far.
-----------------
Accuracy of the double integration involved is crucial to the proper operation of an IMU. I seriously doubt if 'cumtrapz' is good enough. You should be using some version of the matlab 'ode' functions for solving these second order ordinary differential equations. The effects of small errors can build up very rapidly. Knowing correct orientation is crucially important in making the proper corrections for the effects of gravity. The poor IMU has no way of knowing that it is not accelerating straight upwards at some 32 feet per second per second, and if orientation is in error, it literally doesn't know which is the "up" direction to correct in. At best these devices can function only a very short time without receiving input from other sensors to allow corrections to be made. Read:

http://en.wikipedia.org/wiki/Inertial_measurement_unit

Roger Stafford
From: TideMan on
On Apr 16, 2:32 pm, "Omio Abedin" <omio.abe...(a)dsto.defence.gov.au>
wrote:
> Hi all,
>
> I have a problem which seems simple enough, but I just can't work it out. I have discrete accelerometer data from an IMU, which is collecting data at 10Hz. I have 6DOF being the x, y, z linear accelerations, and the roll, pitch, yaw rate.
>
> I want to convert the linear accelerations to displacements and the angular velocities to angular displacements. I have been trying many different thinigs to solve this problem. I have tried cumtrapz with and without a high pass filter, but the result do not appear to be what I am looking for.
>
> I know they are inccorect because I moving the IMU to a certain known position and the results are not conforming to that. I am moving the IMU from a table to the floor (750mm below), and thus my position should read 0.75m once it reaches the floor. But it doesn't, it starts reading 0 again.
>
> Surely, this problem is common one, and someone out there must know how to solve it. Is there any other way to solve it without integrating?  I am hoping that someone has already had to figure it out, and has got a script I could use, but any help would be greatly appreciated.
>
> Thanks,
> Omio
>
> P.S. if any wants, I can email the script I have so far.

I'm using an array of pairs of accelerometers to measure the
horizontal vibration of a large structure.

What I found was that the accelerometers are only good down to about
0.15 Hz, so anything at lower frequencies is rubbish, but when you
integrate, this low freq. stuff gets amplified several-fold.
Therefore, it's important to eliminate the low freq components from
the signal before integrating.
I use orthogonal wavelet decomposition, then integrate each wavelet
detail in turn twice, before superimposing at the end. I keep an eye
on the double-integrated wavelet details to make sure no drift is
introduced.
I guess there are other lots of other ways of doing it, but this works
for my application.

Moving the accelerometer from the desk to the floor would not work for
my accelerometers because there would be too much low freq energy,
which they cannot resolve.
From: Omio Abedin on
TideMan <mulgor(a)gmail.com> wrote in message <d551b1cc-f14a-449e-a617-4af5532ba214(a)i37g2000yqn.googlegroups.com>...
> On Apr 16, 2:32 pm, "Omio Abedin" <omio.abe...(a)dsto.defence.gov.au>
> wrote:
> > Hi all,
> >
> > I have a problem which seems simple enough, but I just can't work it out. I have discrete accelerometer data from an IMU, which is collecting data at 10Hz. I have 6DOF being the x, y, z linear accelerations, and the roll, pitch, yaw rate.
> >
> > I want to convert the linear accelerations to displacements and the angular velocities to angular displacements. I have been trying many different thinigs to solve this problem. I have tried cumtrapz with and without a high pass filter, but the result do not appear to be what I am looking for.
> >
> > I know they are inccorect because I moving the IMU to a certain known position and the results are not conforming to that. I am moving the IMU from a table to the floor (750mm below), and thus my position should read 0.75m once it reaches the floor. But it doesn't, it starts reading 0 again.
> >
> > Surely, this problem is common one, and someone out there must know how to solve it. Is there any other way to solve it without integrating?  I am hoping that someone has already had to figure it out, and has got a script I could use, but any help would be greatly appreciated.
> >
> > Thanks,
> > Omio
> >
> > P.S. if any wants, I can email the script I have so far.
>
> I'm using an array of pairs of accelerometers to measure the
> horizontal vibration of a large structure.
>
> What I found was that the accelerometers are only good down to about
> 0.15 Hz, so anything at lower frequencies is rubbish, but when you
> integrate, this low freq. stuff gets amplified several-fold.
> Therefore, it's important to eliminate the low freq components from
> the signal before integrating.
> I use orthogonal wavelet decomposition, then integrate each wavelet
> detail in turn twice, before superimposing at the end. I keep an eye
> on the double-integrated wavelet details to make sure no drift is
> introduced.
> I guess there are other lots of other ways of doing it, but this works
> for my application.
>
> Moving the accelerometer from the desk to the floor would not work for
> my accelerometers because there would be too much low freq energy,
> which they cannot resolve.

Thanks for the info Tideman.

What parameters did you use for you wavelet analysis? I have the wavelet toolbox, but not sure which parameters to use. I had previously created a high pass filter, but that didn't work to well anyway:

fNorm = 1/(10/2);
[b,a] = butter(10, fNorm, 'high');
acchigh = filtfilt(b,a,accel);

I am not sure if I'm getting something fundamentally wrong with my work, because I would expect sort of like a step function for the displacement when I move it to the floor. But its nothing like that atm.

Btw what acclerometer are you using? I am using a Racelogic IMU atm, but may soon turn to a Xsense IMU, as I think it can log at 100Hz.

Thanks,
Omio
From: TideMan on
On Apr 16, 5:00 pm, "Omio Abedin" <omio.abe...(a)dsto.defence.gov.au>
wrote:
> TideMan <mul...(a)gmail.com> wrote in message <d551b1cc-f14a-449e-a617-4af5532ba...(a)i37g2000yqn.googlegroups.com>...
> > On Apr 16, 2:32 pm, "Omio Abedin" <omio.abe...(a)dsto.defence.gov.au>
> > wrote:
> > > Hi all,
>
> > > I have a problem which seems simple enough, but I just can't work it out. I have discrete accelerometer data from an IMU, which is collecting data at 10Hz. I have 6DOF being the x, y, z linear accelerations, and the roll, pitch, yaw rate.
>
> > > I want to convert the linear accelerations to displacements and the angular velocities to angular displacements. I have been trying many different thinigs to solve this problem. I have tried cumtrapz with and without a high pass filter, but the result do not appear to be what I am looking for.
>
> > > I know they are inccorect because I moving the IMU to a certain known position and the results are not conforming to that. I am moving the IMU from a table to the floor (750mm below), and thus my position should read 0.75m once it reaches the floor. But it doesn't, it starts reading 0 again.
>
> > > Surely, this problem is common one, and someone out there must know how to solve it. Is there any other way to solve it without integrating?  I am hoping that someone has already had to figure it out, and has got a script I could use, but any help would be greatly appreciated.
>
> > > Thanks,
> > > Omio
>
> > > P.S. if any wants, I can email the script I have so far.
>
> > I'm using an array of pairs of accelerometers to measure the
> > horizontal vibration of a large structure.
>
> > What I found was that the accelerometers are only good down to about
> > 0.15 Hz, so anything at lower frequencies is rubbish, but when you
> > integrate, this low freq. stuff gets amplified several-fold.
> > Therefore, it's important to eliminate the low freq components from
> > the signal before integrating.
> > I use orthogonal wavelet decomposition, then integrate each wavelet
> > detail in turn twice, before superimposing at the end.  I keep an eye
> > on the double-integrated wavelet details to make sure no drift is
> > introduced.
> > I guess there are other lots of other ways of doing it, but this works
> > for my application.
>
> > Moving the accelerometer from the desk to the floor would not work for
> > my accelerometers because there would be too much low freq energy,
> > which they cannot resolve.
>
> Thanks for the info Tideman.
>
> What parameters did you use for you wavelet analysis? I have the wavelet toolbox, but not sure which parameters to use. I had previously created a high pass filter, but that didn't work to well anyway:
>
> fNorm = 1/(10/2);
> [b,a] = butter(10, fNorm, 'high');
> acchigh = filtfilt(b,a,accel);
>
> I am not sure if I'm getting something fundamentally wrong with my work, because I would expect sort of like a step function for the displacement when I move it to the floor. But its nothing like that atm.
>
> Btw what acclerometer are you using? I am using a Racelogic IMU atm, but may soon turn to a Xsense IMU, as I think it can log at 100Hz.
>
> Thanks,
> Omio

I'm at our beach cottage for the weekend, so I cannot answer your
questions until Monday.
 | 
Pages: 1
Prev: Distribution
Next: robot webcam image processing