2
$\begingroup$

We are using ArduIMU (V3) as our Quadrotor's inertial measurement unit. (we have a separate board to control all motors, not with ArduIMU itself).

Now we have a problem with ArduIMU's sensors output. When we put our quadrotor steady on the ground with motors on, instead of getting 0 degree in roll and pitch we have a noisy output something like the image below( -6 to 6 degree error ):

enter image description here

delta_t = 0.2s

We are sure that this isn't a mechanical problem, because we checked the mechanical joints and everything.

I should mention that with motors off everything is going well. Also we checked that if we vibrate the device slowly on yaw axis or any other axis, it still shows the noisy output.

We are using DCM filter inside ArduIMU, also we tested with Kalman filter but no difference.

We also tested FRI low-pass filter, results is good but there is about 3 seconds delay in the output.

We also checked that if we separate the ArduImu's power from our circuit, it still no difference.

What's the problem with ArduIMU and how we can get rid off this noisy output ?

Update: We think that the problem with our PID controller is because of these noises ... Is this a true assumption ? We can't tune our PID parameters ( using Ziegler–Nichols method ) when we have noisy data. We tested Ziegler–Nichols method when we have low rate noises and we successfully tuned our PID but when noise appears we are unable to tune PIDs. Is there anyway for us for tuning our PID in such situation ? Is this problem is because of the noises or the PID itself can get rid of them ?

$\endgroup$
  • $\begingroup$ What problems are being caused by the noisy output? $\endgroup$ – Ian Jul 17 '13 at 17:07
  • $\begingroup$ Really good point dear @lan , the problem is we can't tune our PID controller's parameteres. We think that the problem with our PID controller is because of these noises ... Is this a true assumption ? We can't tune our PID parameters ( using Ziegler–Nichols method ) when we have noisy data. We tested Ziegler–Nichols method when we have low rate noises and we successfully tuned our PID but when noise appears we are unable to tune PIDs. Is there anyway for us for tuning our PID in such situation ? Is this problem is because of the noises or the PID itself can get rid of them ? $\endgroup$ – Michel Gokan Jul 17 '13 at 18:03
  • $\begingroup$ What is the time scale in that graph? 1 = 1second? $\endgroup$ – TimWescott Jul 17 '13 at 23:01
  • $\begingroup$ You might want to see if you can isolate whether the problem is electrical noise from the motors or vibration. If you can rig up a motor and speed control that's completely independent of the quad copter and wave it over the IMU while it's running and the copter motors aren't, then you can get an idea of whether the ArduIMU is susceptible to radiated noise from the motor or driver. $\endgroup$ – TimWescott Jul 17 '13 at 23:02
  • 1
    $\begingroup$ @Michel: You say in your comment 0.2millisecond (200 microsecond), but you say in the text 0.2 second (200 milliseconds). If it's 200 us, you can profitably filter out the noise. If it's 200 ms, then by the time you get the noise filtered your control loop will be way too slow. $\endgroup$ – TimWescott Jul 19 '13 at 19:05
3
$\begingroup$

This answer is incorrect (TaW) It is based on IMU noise that's about 1000 times faster than it really is, based on a typo in the discussion following the original question.

I'm not a big fan of the Ziegler-Nichols method. It's an ad-hoc method that is not only not guaranteed to stabilize all plants, it comes with a guarantee that there will be some plants that it cannot stabilize. Furthermore, it has a history of coughing up an underdamped system. Its only advantage seems to be that it comes up often in web searches.

I would suspend the copter on one of the horizontal axes, parallel to the IMU, and I would tune the PID controller using the usual seat of the pants method (derivative, then proportional, then integral). Then I'd go back and measure the frequency response of the thing (still tethered), and tune the PID properly.

Then I would repeat for the vertical axis.

Only then would I cross my fingers, hold my breath, and go fly.

For some reason, I seem to think that this is a good description of the seat of the pants PID tuning method:

http://www.embedded.com/design/prototyping-and-development/4211211/PID-without-a-PhD

With that much noise in the IMU output would bandlimit my differentiator. That'll limit the bandwidth of your control loop, but if you don't do it then your differentiator will swamp out any other control signals.

| improve this answer | |
$\endgroup$
  • $\begingroup$ Dear Tim, We did exactly what you mentioned here. We built a cage for tuning our quadrotor in each 2 axis. Now let me read your great article and come back again say the results. Really thanks for your time. $\endgroup$ – Michel Gokan Jul 19 '13 at 6:04
0
$\begingroup$

We build a new version and its now available for download:

http://code.google.com/p/ardu-imu/downloads/detail?name=arduimu_vD....

The problem completely gone in this version. Read comments in arduimu_vd.ino for more info.

| improve this answer | |
$\endgroup$

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.