I thought I’d try out reverse thrust to slow down a wing which is always too fast on landing. Before applying it to the actual craft, I set up a simple test with only FC, RX, 1 ESC, 1 motor.
I’m trying to use the RCn_OPTION = 64 method according to https://ardupilot.org/plane/docs/reverse-thrust-setup.html. Messages “RevThrottle: ENABLE” and “DISABLE” are appearing correctly.
BLHeli32 ESC is set to “Bidirectional 3D”. SERVO_BLH_3DMASK is 0. (When it’s 1, reverse thrust works but not by the switch, only by throttle stick - center stick is zero throttle.)
At one point I thought I almost had it working - the switch was reversing the motor direction on-the-fly. But at that point the motor started to spin at zero throttle already.
Now it seems I can’t get it working again at all. Flipping the reverse switch simply stops the motor, flipping it back makes it spin again. Only forward thrust works correctly.
Channel settings are:
ESC settings: (I also tried a second ESC, made no difference)
Minimum Throttle 1040
Maximum Throttle 1960
There might be something wrong with this FC (other odd things happening), but before assuming that I wanted to make sure I have set this up correctly.
I tried another FC which made all other oddities disappear - but Reverse Thrust by switch is still not working for me. The switch is simply cutting throttle instead of reversing it.
Question: The dotted line says “Manual Mode Only” - but I’m sure this applies only to manual throttle control, not to manual flight mode? Just to be safe.
In the above posting I forgot to add that I have also set:
Same problem here. Just trying to get this to work on manual throttle modes for now.
I flashed my ESCs to the latest BLHeli code. And went thru the setup to use RC3 for throttle input. I use RC5 as the RCn_OPTION = 64 switch. This is a twin, with outputs on Servo3 and Servo6.
I also have Messages “RevThrottle: ENABLE” and “DISABLE” appearing correctly. When disabled, the throttle controls the motors w/o issue. When enabled, nothing happens. The Radio Calibration input screen shows the tranmitter input ramping from 1000 PPM up to 2000 PPM. But the servo output stays at 1500.
So, the input is good. Works in the forward direction and is received in the reverse direction.
The output is also good. If I adjust the trim value for the servos down from 1500 (on the Servo Output screen), the motors do run in reverse.
And…strangely enough…when I first started testing it did seem to work a few times.But since I can spin the motors in both direction, I don’t think anything is broken in the hardware.
FYI…this is on an older Pixhawk clone. I loaded the latest Beta using the 1M option today.
Sounds very similar indeed. I had given up on getting this to work in the meantime - but if there is a solution, I’d still be very interested.
Well…I have a workaround for you. I spent a few hours digging thru the code and could probably figure out what’s wrong if if wanted to go thru all the trouble of getting this version and setting up the build environment so I could print out a few variables.
Talk is cheap, but I don’t feel the need since this is easy to work around. There are a lot of conditionals for the modes where reverse thrust is allowed. And a separate place for manual mode. I realized that I don’t care about manual, since my most basic flying is FBWA anyway.
So, I changed the USE_REV_THRUST parameter from zero (which should have still allowed it in manual mode only) to enable it for landing, and for FBWA and stabilize modes. I get “20482” in that parameter box now, but I suspect most other values (than zero) will work.
Fired it up, armed the motors, and it works perfectly. Not only in FBWA, but also in manual! Some code test for min_throttle or for use_reverse_thrust must be erroneously applied even in manual mode when the USE_REV_THRUST value is zero.
I always planned to add other modes anyway, this just forced me into it prior to my planned time. Hopefully the thread title will allow others to see this issue and use the workaround w/o wasting too much time…until one of the coding gods notices and does the real fix that’s needed.
Great work! Well, there don’t seem to be too many people interested in setting up reverse thrust recently, otherwise there would’ve been more replies here, or someone else would have noticed this bug earlier.
I guess this would be the best place to get it noticed.
To be honest, I didn’t give USE_REV_THRUST any consideration during my attempts, because in the wiki, the parameter is mentioned in the paragraph “Reverse Thrust: AutoPilot Controlled”. And since all I wanted was a switch to enable it manually, I assumed I wouldn’t need to worry about setting that parameter.
I tested a few days ago. Had two close calls.
On the first test flight, one prop loosened up (this was a twin engine plane). I managed to stall about 25 meters up, but recovered and glided down from about 3 meters.
This happened despite having nylock nuts in place! The nuts have now been made very tight.
On the 2nd flight, I slowed too much on the approach. Looked like a crash was inevitable, but I goosed the throttle in reverse and it essentially stopped falling just about the time it got to the ground. No damage. Very lucky and I really wish I had video of it.
On those two flights, my transmitter momentary switch enabled reverse with the amount controlled by the throttle stick. The problem is that it’s very hard to estimate speed and you can’t fly a visual approach while watching airspeed values on the transmitter. At least I can’t.
So I’ve just finished modifying the transmitter controls. My new approach is a pitch dependent reverse thrust envisioned to work this way:
Start the approach relatively level.
Engage momentary switch when ready to descend. This will force zero throttle.
Pitch the elevator down. This will make the plane descend and will actuate reverse thrust. The elevator is mixed into the throttle at 50% with a 100% offset. So, reverse starts at mid-stick and increases as the stick is pushed forward.
I set the amount of reverse, for this specific aircraft and configuration, based on data from the first flight. In FBWA with full commanded down pitch (20%), a PPM value of 1375 was sufficient to roughly hold current speed (where 1500 PPM is off, 1000 is full reverse, and 2000 is full forward).
My hope is that this will allow me to do steep descents w/o gaining much speed (when the momentary switch is actuated). Without risking a stall. I will adjust further if needed, based on upcoming tests.
I also plan to try AUTO landings. I had one set up for the first test, but my way-points were too close together and the plane didn’t line up with the runway in time.
Very interesting, maybe at some point you could post a video? I’d be interested to see this in action. It’s much more complex than what I had in mind - I just wanted to engage reverse thrust during the last few seconds before touchdown and then directly disarm, over some tall grass, so even a stall wouldn’t matter. Mainly meant for a little wing that always comes in too fast and needs too much space for landing considering its size. Good luck with your experiments!
Pitch dependent reverse thrust shows promise. I’ve successfully landed several times using it. Originally, I had the FBWA down pitch limit set to 20 degrees. At 20 degrees down, the PPM value of 1375 did a pretty good job of keeping speed constant. I then tried adjusting the FBWA down pitch limit to 30 degrees, but neglected to update my mix to increase the amount of reverse thrust. So, the plane picked up too much speed.
I plan to retest with the amount of reverse thrust increased.
I have reverse working well.
The following graph shows a manual landing. There are two dives. The 1st dive, from 164 to 40 meters shows the -30 degree pitch commanded and then achieved. ~12 seconds for 120 meters - a sink rate of 10 m/s. Airspeed is constant during the dive.
Then I had to stop the steep descent for 5-6 seconds to clear some trees. After this, I nosed down again with some partial down pitch (averaging about 15 degrees) for another 5 seconds or so. The orange squiggle (IMU ACCx) shows where ground contact occurs).
After adjusting the flare height, I was also able to do some great auto landings. They aren’t as spectacular since they started the approach much lower, but reverse is used to good effect (RCOU3 is the throttle for one of the motors and anything below 1500 is reverse thrust),
Ive been going nuts today trying to get reverse thrust working on a known working reverse thrust set up.
What stopped reverse thrust working was changing to the newest version of ardupilot. Im still trying to work out why…
Glad to see im not the only one with issues.
Are you guys using dshot on your motors?
Here are my settings and now rev thrust is working how i want it to now in manual and fbwa.
USE_REV_THRUST = 4096
SERVO_DSHOT_ESC = 1
SERVO_BLH_OTYPE = 4
SERVO_BLH_MASK = 2
SERVO_BLH_AUTO = 1
SERVO_BLH_3DMASK = 2
I still have a PixHawk in this plane, so no dshot for me.
I have no success on this param
I use rc8_trim 1500 instead of rc3_trim 1500