First little ArduCopter build not taking off

Today I was testing my first little 3" AC build but unfortunately it wouldn’t take off. Video here: https://wsi.li/dl/cPdre9wW2sWSrApRL/

The quad is shaking massively even on the ground and increasing throttle only makes it vibrate more, but not take off.

I checked motor directions and order, all seem fine. I held the quad in my hand, air blows down. I followed the Tuning Process Instructions, used the calculator, and believe I have set approximate values for 3" and 3S. But since it’s my first build (actually a conversion), it’s absolutely possible I overlooked something basic.

As I really prefer not to post GPS data online, I tried anonymizing the log with Dronee Plotter. Yet unfortunately it didn’t output a link as promised. (It would be fantastic btw, if there was a built in way in MP to remove GPS data from logs.)

If no reason can be found without the log, I’ll post it anyway. :wink:

One thing to note: ESC telemetry is enabled (in order to do gyro notch tuning later), but the RPM indicated on the OSD looked far too high. (Maybe by a multiple of 10.)

How high did you go with the throttle? High enough that you’d expect it to take off? Some takeoff shakiness on untuned builds is to be expected thanks to ground resonance, so it might not be unusual. But if you had throttle much higher than what you’d expect to be the takeoff throttle, then there is likely something mis-configured.

The most common culprit is confusion regarding motor order. You said you checked this, but it’s worth checking again. The Mission Planner motor test order is A-B-C-D, which is clockwise starting at the front-right motor. But this is not the same order that you plug the motors into the flight controller. The flight controller motor output order 1-2-3-4 is front right, back left, front left, back right.

Besides this, I don’t have any great ideas besides maybe accidentally entering a PID value incorrectly. Check the decimal places.

Mission Planner actually has this feature (well, at least it has a button for it). At the MP main screen, press Ctrl+F to bring up a window with advanced functions. There should be “Anon Log” button. I haven’t tried it, though.

Thanks a lot for that hint, I totally forgot about that menu! Here’s the log it generated from the bin file:

It absolutely should have taken off with that amount of throttle, at least it did when it was still running iNav and BF.

I will check motor order and direction again, actually I already did it 2 or 3 times before attempting the flight. But as I said, it’s very possible the cause lies in something stupid. :wink:

Looks like your PIDs are probably too high. It’s a bit hard to tell though because your drone wobbles at a pretty consistent 10 Hz, which is unfortunately the same rate that the motor PWMs are logged, confounding my attempts to make sense of attitude vs. motor outputs. But luckily the rate logging is much faster and it’s clear that your rate outputs are going nuts, thrashing between ±80% roll effort, so it’s not a big wonder that the drone never takes off.

Here’s attitude vs. rate outputs. You can see that the small wobbles of few degrees are causing big swings in the roll output.

Luckily you had PID logging enabled, and you can see that the P and D terms are contributing to the big roll rate outputs:

And just for fun, here’s the log aliasing I was talking about. Attitude vs. motor outputs. It looks like the motors aren’t responding much at all, with diagonal motors occasionally flipping between 50% and 0% effort. But it just looks like that because the drone is shaking at the same frequency as the PWMs are being logged. Haha.

I don’t really have any experience with drones of this size, so I can’t really offer any advice when it comes to starting PIDs. But the ArduCopter defaults should be at least flyable.

By the way, is your battery current sensor calibrated? It claims that you never draw more than 4A, but your battery sags by 0.5V. This happens when you have 2 motors at 1500 PWM and 2 idle.

Just from looking at the video its obvious the PIDS are WAY too high.

I’d start by setting the D and I terms for roll and pitch to 0 (zero) and cut the P term down to 1/3 of what it is.

If you still get the shaking, cut the P term in half and try again.

Once you can get the aircraft into the air, “blip” aileron and look for over shoot. Increase P until you get good response with minimal over shoot. Now do the same thing with Pitch.

When you get Roll and Pitch tuned, go back to Roll, add some D gain and listen for a high speed buzzing. If you get no buzzing increase D until you do and then back off D until the buzzing stops. Repeat for Pitch.

At this point you can try adding a little more P gain to Roll and Pitch. If you add too much you will get oscillations, so back P down until the oscillations stop.

Having said that, my personal opinion is to go back to either BetaFlight or iNav…

Thanks a lot for the hints, guys. Should I also try Autotune once the quad is flying reasonably well?

These were the settings used:

ATC_RAT_PIT_D,0.0036
ATC_RAT_PIT_FF,0
ATC_RAT_PIT_FLTD,9.5
ATC_RAT_PIT_FLTE,0
ATC_RAT_PIT_FLTT,9.5
ATC_RAT_PIT_I,0.135
ATC_RAT_PIT_IMAX,0.5
ATC_RAT_PIT_P,0.135
ATC_RAT_RLL_D,0.0036
ATC_RAT_RLL_FF,0
ATC_RAT_RLL_FLTD,9.5
ATC_RAT_RLL_FLTE,0
ATC_RAT_RLL_FLTT,9.5
ATC_RAT_RLL_I,0.135
ATC_RAT_RLL_IMAX,0.5
ATC_RAT_RLL_P,0.135
ATC_RAT_YAW_D,0
ATC_RAT_YAW_FF,0
ATC_RAT_YAW_FLTD,0
ATC_RAT_YAW_FLTE,2
ATC_RAT_YAW_FLTT,9.5
ATC_RAT_YAW_I,0.018
ATC_RAT_YAW_IMAX,0.5
ATC_RAT_YAW_P,0.18

Btw, I decided to convert this one to AC for 2 reasons: 1) Various (but different) problems with it on both BF and iNav - I want to find out if they’re all gone with AC - 2) I’m also building a 10" ArduCopter and thought it couldn’t hurt to go through the process with a perfectly harmless quad before…

There is a comprehensive tuning guide on the wiki that also covers small quads - have you followed that? I suspect your gyro filter is way too low, since your D filter is also way too low.

I went through https://ardupilot.org/copter/docs/tuning-process-instructions.html and was hoping that once it’s flying ok, I could try Autotune.

Do you mean https://ardupilot.org/copter/docs/tuning.html ?

If the general consensus is that my values are far too high, it seems I might not have used the Initial Settings Calculator correctly.

The first one. But clearly not as it says INS_GYRO_FILTER should be 80 for 5 inch props and half that for FLTD, but you have FLTD at 9.5 ergo I am guessing INS_GYRO_FILTER is 18 which will never work on a 3". On a 3" I would set the gyro filter to at least 100, maybe 120 with FLTD > 50 for roll and pitch

Ok, you found the massive mistake I had expected. :wink: Yet I don’t understand how that value got in there, because I even made a screenshot from the Initial Settings Calculator. It suggested a change from 20 to 115, exactly like you say. I’m certain I clicked “Write to FC” (I think I even ran it twice) but apparently and somehow the value was set close to default later, and of course I didn’t check the graph again… Thanks!

So I guess the first thing I’ll do is re-run the calculator and make sure the parameters are actually written this time and not touched again before intentional manual tuning.

Update: The massive vibrations are now gone, but I still couldn’t take off. While increasing throttle the quad started to tilt more and more to the front. It would have tipped over and broke the props if I hadn’t aborted (battery underneath). From what I saw on the OSD it didn’t look like a gyro/level problem.

Here’s a new log: https://wsi.li/dl/2YTa7ouJ5tqZgSZDR/

On the last attempts I tried to compensate for the movement with the pitch stick (thinking it might be some kind of ground effect) but even that didn’t stop the tilting. Any hints are really appreciated.

It looks a little bit like the leans that you get on these small copters. I am guessing you don’t have a GPS which would compensate. So might be IMU related or MAG. Make sure you do your MAG calibration with the battery on an connected - also the wire end of the battery tends to have a lot of interference.

As long as you can blip the copter on all axes - so on the ground throttle up until you are not quite taking off and then check that pitch and roll produce the expected results (this makes sure your motors and the board are in the correct orientation) - you should try taking off as its quite hard to control a copter that is partially on the ground and the ground will have a significant effect on control.

Also configure the harmonic notch ASAP - this is totally necessary on these smaller copters where vibration is a problem.

The quad does have a GPS but this last test was done indoors.

TBH, I did have some gyro issues with this quad before (on BF), and actually I still noticed some odd things now, like the horizon slowly tilting in MP over time, with the quad levelled on the desk. This also happened in BF. However, with AC this only happens when the battery is not connected. As soon as it’s connected, the gyro responds as expected. From what I saw in the OSD (I watched the recording several times), the crosshair and horizon move perfectly correct while the quad is tilting, also when holding it my hand.

I also had the motors run while holding it in my hand and checked for correct behaviour, as I did with many quads before: Lowering an arm should make that motor spin higher and it seems it does. So I assume that’s all correct.

I think I will just try again outside and risk some props by being less gentle on the throttle. According to my attempt at rudimentary log analysis, I aborted below 1500 PWM. Maybe it is some kind of ground effect yet, and if I throttle up more aggressively, the quad will take off.

Having or not having a GPS has absolutely NOTHING to do with roll and/or pitch stabilization.
My money is on reversing PITCH/ELEVATOR in the radio.

In order to determine “level” the EKF uses multiple sources including the GPS. Small copters with the leans have worse leans without a GPS lock.

Regarding “The Leans”, it says here https://ardupilot.org/copter/docs/common-measuring-vibration.html#looking-for-the-leans to “compare the AHRS2.Roll, NKF1[0].Roll and NKF1[1].Roll”. I can only find XKF1.Roll in APM - is it still the correct parameter to compare?

In the log I posted above, AHRS2.Roll and XKF1.Roll are quite far apart, but they already are before arming, so it can’t be due to vibrations?

Update: After a new attempt outdoors that showed another problem re-appearing, I decided to replace the FC. There might be something wrong with it after all (baro altitude went into negative values as soon as the quad took off - I saw that on iNav too months ago).

The “flight” itself (a few seconds long) was as expected from the indoor test: The quad tilted to the front and shot off. No amount of negative pitch would make it stop, so I had to drop it into the grass.

To be continued when the new FC is inside…

I finally rebuilt this one with a new FC. In the meantime I already finished my 10" ArduCopter which flies nicely so far! Now back to the tiny one.

Everything is connected as before, but I keep getting this error I’ve never seen before:

CompassCalibrator: Cannot start compass thread.

The calibration bar obviously never starts to fill up. GPS/compass is the same as before and I’d hate to take the quad apart to replace it…

Calibration attempts are taking place in the same spot where I successfully calibrated the bigger one, so I don’t think interference is the cause. Nevertheless, I also tried without VTX - no change.

I tried deactivating and reactivating the compass several times with reboot, but nothing changed. The compass is recognized correctly (although the orientation pulldown menu doesn’t seem to work).

On a side note, after having had MavFTP working for months with dev versions of copter and plane, full parameter downloads seem to take place again for the first time with this one.

The 2 ArduCopter versions tried are the most recent ones that include RunCam Control or CRSF Passthrough Telemetry (from their corresponding threads here).

Post a screen shot of the HW ID screen from Mission Planner. Let’s see what’s recognized.

I have now also tried detaching the GPS/compass from the frame to move it away from any potential nearby interference but the result remains the same.

CompassCalibrator: Cannot start compass thread.

Followed by (although calibration wasn’t possible):

PreArm: Compass calibrated requires reboot

And:

PreArm: Compass not calibrated

All compass-related settings:

COMPASS_AUTO_ROT,2
COMPASS_AUTODEC,1
COMPASS_CAL_FIT,16
COMPASS_CUS_PIT,0
COMPASS_CUS_ROLL,0
COMPASS_CUS_YAW,0
COMPASS_DEC,0
COMPASS_DEV_ID,466433
COMPASS_DEV_ID2,0
COMPASS_DEV_ID3,0
COMPASS_DEV_ID4,0
COMPASS_DEV_ID5,0
COMPASS_DEV_ID6,0
COMPASS_DEV_ID7,0
COMPASS_DEV_ID8,0
COMPASS_DIA_X,0.8641297
COMPASS_DIA_Y,0.882906
COMPASS_DIA_Z,0.9621448
COMPASS_DIA2_X,0
COMPASS_DIA2_Y,0
COMPASS_DIA2_Z,0
COMPASS_DIA3_X,0
COMPASS_DIA3_Y,0
COMPASS_DIA3_Z,0
COMPASS_ENABLE,1
COMPASS_EXTERN2,0
COMPASS_EXTERN3,0
COMPASS_EXTERNAL,1
COMPASS_FLTR_RNG,0
COMPASS_LEARN,0
COMPASS_MOT_X,0
COMPASS_MOT_Y,0
COMPASS_MOT_Z,0
COMPASS_MOT2_X,0
COMPASS_MOT2_Y,0
COMPASS_MOT2_Z,0
COMPASS_MOT3_X,0
COMPASS_MOT3_Y,0
COMPASS_MOT3_Z,0
COMPASS_MOTCT,0
COMPASS_ODI_X,-0.02166225
COMPASS_ODI_Y,-0.04440983
COMPASS_ODI_Z,0.02856155
COMPASS_ODI2_X,0
COMPASS_ODI2_Y,0
COMPASS_ODI2_Z,0
COMPASS_ODI3_X,0
COMPASS_ODI3_Y,0
COMPASS_ODI3_Z,0
COMPASS_OFFS_MAX,1800
COMPASS_OFS_X,-21.73667
COMPASS_OFS_Y,-3.487601
COMPASS_OFS_Z,121.4937
COMPASS_OFS2_X,0
COMPASS_OFS2_Y,0
COMPASS_OFS2_Z,0
COMPASS_OFS3_X,0
COMPASS_OFS3_Y,0
COMPASS_OFS3_Z,0
COMPASS_OPTIONS,0
COMPASS_ORIENT,0
COMPASS_ORIENT2,0
COMPASS_ORIENT3,0
COMPASS_PMOT_EN,0
COMPASS_PRIO1_ID,466433
COMPASS_PRIO2_ID,0
COMPASS_PRIO3_ID,0
COMPASS_SCALE,1.279936
COMPASS_SCALE2,0
COMPASS_SCALE3,0
COMPASS_TYPEMASK,0
COMPASS_USE,1
COMPASS_USE2,0
COMPASS_USE3,0

The calibration data is probably there because I imported the config after the FC swap.

Any help really appreciated…

Swap? Same FC model just a new one? Which FC? I don’t think it’s generally advisable to direct import another parameter file regardless of the circumstances between the 2. . I use parameter compare and set them manually. I would reset to default and start over but that’s up to you.