ArduCopter Loiter Tuner / SIM


This is a simulation I'm working on to improve the Loiter control laws and discover optimal gains. I have identical code from Arducopter running in Flash as OO Javascript so I can ensure the behavior is the same as the real thing. I tested the MTEK GPS to find the actual latency and accuracy and then modeled it in code. This allows me to test PIDs and other coding ideas to see how the copter will behave in real life. The copter itself is a simple physics equation and should be fairly accurate. To better tune the SIM, I can compare AC Flash Logs from real flights side-by-side with the SIM flights which also output the same text based logs.

I've already found many areas for improvement in the Loiter code which i've just checked in to the GIT repository. 


Hopefully this tool will serve as a great PID introduction as well. I know I've learned a lot by comparing plots with small changes in the gains. 





E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • All is very awesome and all, but what if I have a 10kg Quad running twin 20 volt batteries with 1000Wat motors and a 4kg scientific camera. I feel you need to include these variables because alot of people create their own styles and is very hard to test those PID's across the APM.



  • Developer

    Thanks Ryan. I'll try it. 

  • Developer

    And you can tweak it if you want by doing something like this:

    SOG_estimate = SOG_now + K*(SOG_now - SOG_old);

    Where K is some gain typically 1 or less and always positive.

  • Developer

    Jason, That's not exactly what you want to do.  You don't want to derive a separate state from the gps measurements.  You want to smooth the ones you already have!  So Speed would output a smoothed speed and position x&y would output a smoothed x&y position.  

    Speed over ground = SOG

    SOG_estimate = SOG_now + (SOG_now - SOG_old);

  • Developer

    I've got another 2-3days work to finalize it.

  • Developer


    I''m pretty far on a second version that includes the stability routines. It will also do navigation and include the Nav PIDs.  3692421472?profile=original

  • Hello Jason
    If we had more:
    -choice: Kv motor-choice: propeller-choice or configuration X+-choice weight-choice: distance between axis motors
    we would have the perfect tools!
    Bravo is already great
    Regards Daniel

  • I see the mission planner
    lotier P-I-Imax.
    as integral values if I do not agree with the mission planer?

  • Thanks! It's cool^_^

  • Developer


    I added in a basic speed estimator:

    It's pretty noisy. The red is the real speed, green is the GPS speed with latency. The blue is the adjusted speed.

    Here is the code:

    speed_input = (g_gps.longitude - last_longitude) / dt;
    sensor_speed.x = speed_input + (speed_input - speed_old) * gain;
    speed_old = speed_input


This reply was deleted.