ARDUCOPTER SONAR - what´s the best?


Sorry to insist, but SONAR in 2.0.37 was perfect.


Please have a look to this video. This is using 2.0.37, defaults PIDs and the behaviour, I consider almost perfect.


Same hardware with 2.0.38 is really much worst and oscillating. Maybe it could be re-consider to come back to the 2.0.37 philosophy.


Noise problems are ALL solved isolating and shielding cables to SONAR and separating from ESC (as recomended in the WIKI)





E-mail me when people leave their comments –

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

Join diydrones


  • Testing alt-hold on the 2.0.40 very good. The best ever

  • Testing alt-hold from the 2.0.39 now is much better, similar thn 2.0.37
  • I´m updated to 2.0.39 and now SONAR is much better that in 2.0.38 and similar to the very best 2.0.37. I dont know the changes done but now is close to a perfect one. Still osme PID adjustements in my copter but defaults are already very good. 


    I use the board2560 and the Max sonar MB 1200 (with the old board STMega 1280 ad Max Sonar MB1240 it doesn´t work).



  • Jason,
    I'll be several days out. I'll do when come back

  • For a multi-copter (Hex) what model of Sonar module is recommended?  My intention is to have the aircraft RTL and then decend to landing using the Sonar probe.  First, is this duable using the APM and .37 software or am I getting ahead of myself?





  • Thanks Chris and Pieter, I'll give it a shot.
  • Developer

    Could someone try a simple experiment for me? 
    Replace the read function in RangeFinder.cpp (in libraries) with this one:

    int RangeFinder::read()
    // read from the analog port or pitot tube
    if( _ap_adc != NULL ){
    raw_value = _ap_adc->Ch(AP_RANGEFINDER_PITOT_TUBE_ADC_CHANNEL) >> 2; // values from ADC are twice as big as you'd expect }else{
    // read raw sensor value and convert to distance
    raw_value = analogRead(_analogPort);
    // convert analog value to distance in cm (using child implementation most likely)
    raw_value = convert_raw_to_distance(raw_value);
    // ensure distance is within min and max
    raw_value = constrain(raw_value, min_distance, max_distance);

    //distance = _mode_filter->get_filtered_with_sample(raw_value);
    return raw_value;

    this will read the slightly filter values from the ADC and skip the mode filter.

  • T3

    Would median filtering make any difference?

  • this seems to be a very good graphical helpin PID tuning. Thx

  • BTW my AH is rock steady. Just experiment with your PID using this as a helper.

    Its in my flightbox as an cheatsheet :)






    Observe your copter and try to find the behavour in this diagram.


    Kc = your P

    Ti = 1/your I  ( so more I is to the left)


    Pieter Jan




This reply was deleted.