@lkaino lkaino released this Nov 12, 2017

Assets 77

Based on Triflight 0.7 Beta 2 (Betaflight v3.1.7)

New features

  • Motor feedback based yaw control. This is a big change to the way the yaw output is controlled. The yaw output should now be more linear throughout the throttle range, verified in the test bench: The maximum yaw output is limited by the new CLI parameter tri_yaw_boost. The default value should be fine, but if you experience pitch forward during yaw, lower the value. If you would like to have more authority on yaw, increase the value. This feature was iterated and discussed in
  • Arming prevention in case of invalid servo feedback value. Arming of the copter is prevented in case the servo feedback is configured but the value is outside of calibrated range. This might happen e.g. if the feedback cable breaks. If the feedback is lost while armed, the yaw boost (motor output control based on servo deflection) is disabled and the yaw output becomes sloppier.


  • Default tri_motor_acc_yaw_correction set to 0. The new style yaw control handles the throttle cuts much better, increase this only if you experience yawing when throttle is cut.
  • Maximum servo deflection to 40 degrees.
  • Servo feedback support for DOGE target.

@lkaino lkaino released this Jun 4, 2017 · 30 commits to master since this release

Assets 77

Based on Triflight 0.7 Beta 1 (Betaflight v3.1.7)

New features

  • Servo output channels enabled by default on many targets. No need to fiddle with the resource CLI command. Check this wiki page for more information.


  • Rebased to Betaflight 3.1.7.
  • Fixed EXT1 ADC for servo feedback use, thanks to @bhuism and @jihlein. BFF3 board uses PWM1 as EXT1 channel (wiki page).
  • Servo lowpass filter fixed. Check servo_lowpass_freq and servo_lowpass_enable CLI variables.
  • Fixed the lowpass filters used in tricopter mixer (tail motor and servo feedback).
  • Expected yaw error (tri_motor_acc_yaw_correction) now only applies to P term.
  • Yaw boost is only enabled in air mode. Enable air mode feature or stick mode to get more yaw authority at low throttle.
  • Changed default Yaw PIDs and tri_motor_acc_yaw_correction.

Join us in the discussion at RCExplorer forums thread.

If you want to support the development, you can do so through Patreon or Paypal


@lkaino lkaino released this Apr 9, 2017 · 147 commits to master since this release

Assets 71

Based on Triflight 0.6 RC1 (Betaflight v3.1.6)

It's been a long time since last release, the winter starts finally to be over here in Finland. It's again time for some tricopter goodness.

This is a beta release for testing the new Betaflight based Triflight, packed with some new features listed below. Please test it and report feedback in this thread or in the github issues.

Huge thanks to everyone who donated through Patreon and Paypal

New features

  • Dynamic yaw rewritten. After getting a state-of-the-art 😄 tricopter test bench (click image below for video), I was able to get data from actual system, which helped to improve dynamic yaw to be linear throughout the throttle range.
    tri_dynamic_yaw_minthrottle parameter is now removed. The yaw output is always 100% at min throttle, while tri_dynamic_yaw_maxthrottle controls the output reduction at max tail motor throttle. The yaw output is now a linear curve throughout the throttle range. The defaults for tri_dynamic_yaw_maxthrottle and tri_yaw_boost were tuned in the test bench and should work fine on all tricopters.
    test bench video.
  • Yaw boost. Getting it linear at zero throttle was not possible without increasing the correction which is applied to pitch axis according to servo deflection angle. There simply wasn't enough thrust at zero throttle. A new parameter, tri_yaw_boost controls the gain for this correction, with a default value of 2.4 (240). In previous versions of Triflight this parameter was hard-coded to 1. Turn down this parameter if you're not interested in low throttle yaw authority, or you're experiencing pitch jumps when yawing.
    Yaw boost.


  • Rebased on Betaflight. Use Betaflight configurator to configure your FC.
  • Yaw D is disabled by default in Betaflight. It is re-enabled in Triflight, as a tricopter has greater authority on yaw than a quad. Yaw D is hidden in Betaflight configurator, it must be configured in CLI (yaw_d) or via in-flight adjustments.
  • Default servo PWM rate is set to 300 Hz, lower this before plugging power to your copter if you're running an analog servo.

Known issues

Target changes

The Triflight features no longer fit on following targets. Following changes were made:

  • NAZE: disabled LEDSTRIP
  • BETAFLIGHTF3: disabled ESC telemetry
  • CC3D OPBL: removed target
  • MICROSCISKY: removed target
  • FURYF3: disabled sonar and ESC telemetry
  • SPRACINGF3MINI: disabled ESC telemetry
  • STM32F3DISCOVERY: disabled SONAR
  • CJMCU: removed target
  • FURYF3: disabled SONAR and ESC telemetry

@lkaino lkaino released this Nov 5, 2016 · 4299 commits to master since this release

Assets 16


Based on Triflight 0.5 (Cleanflight v1.14.0).

This is a release candidate for testing CF 1.14 rebased Triflight.


  • Rebased on Cleanflight v1.14. Notch filter and other awesome features included, see
  • Changed dynamic yaw default values
  • Slightly increased in-flight tail tune DPS limit (6.0 dps to 6.5)
  • Default gyro update frequency set to 1600 Hz for all targets.
  • F3FC target renamed to RCEXPLORERF3

@lkaino lkaino released this Jul 24, 2016 · 4299 commits to master since this release

Assets 22

Based on Triflight 0.5 Beta 3 (Cleanflight v1.13.0).


Reminder to everyone updating to 0.5 (or any other version that wipes the configuration) and using a servo feedback wire: Remember to re-run the servo speed calibration! If you don’t do this the FW doesn’t know the position of the servo. Pitch back in unarmed tail tune mode. This will rewrite the servo calibration to configuration. The calibration parameters are not in CLI so you can’t copy them from previous version.

I finally got the time to do enough flight testing to be sure that Triflight is ready for 0.5 release.

Triflight has come a long way since the 0.4 over half a year ago. Here's just a summary of the changes compared to 0.4, please check the beta releases below for more information about the changes.

Please view the awesome setup video made by David Windestål:

New features compared to 0.4

  • Rebased on Cleanflight v1.13.
  • Support for servo reversing (alpha)
  • Dynamic yaw output based on tail motor speed, replaces TPA for yaw (beta 3)
  • Tail motor acceleration/deceleration produced error estimation and correction (beta 3)
  • Support for wired servo feedback signal for accurate position measurement (beta 1, beta 2)
  • Unarmed tail tune mode for setting up servo end-points, center position and speed calibration (beta 1)
  • More precise in-flight tail tune (beta 1)
  • Many small improvements.


  • Defaults are tuned for RCExplorer Baby tricopter (170mm sized). Should work okay for larger copters as well.
  • Display feature has been disabled for NAZE and CC3D targets due to memory constraints.

@lkaino lkaino released this May 31, 2016 · 4299 commits to master since this release

Assets 20

Based on Triflight 0.5 Beta 3 (Cleanflight v1.12.0).

This is an alpha release for testing servo reversing. Please report findings to #11! Please test tri_unarmed_servo = ON, unarmed tail tune servo setup and flight. BE CAREFUL!



  • Fixed VCP.
  • Servo reversing supported! Use smix reverse 5 2 r if you have a reverse servo / gearing after servo. Use smix reverse 5 2 n to return to normal behavior.
  • tri_servo_angle_at_max removed and replaced with the servo tab configured angles. The configured angles must be the same, default for tricopter servo (5) changed to 40.0 degrees.

@lkaino lkaino released this May 22, 2016 · 4299 commits to master since this release

Assets 20

Based on Triflight 0.5 Beta 2 (Cleanflight v1.12.0).


New features

Dynamic yaw output

On a Tricopter the yaw output is based on the servo angle and the speed (thrust) of the tail motor. Dynamic yaw output takes the motor speed into account, increasing yaw authority on low speed and decreasing it on higher speeds. These features replace the old YAW TPA.

Related CLI parameters:
Motor acceleration from min throttle to max throttle (and vice versa for deceleration) in seconds. Default is 0.18 (180 ms). The speed is used to calculate virtual motor speed feedback.

Dynamic yaw gain when tail motor is spinning at min throttle. Default is 290 (%).

Example values:
100: Dynamic gain disabled. Yaw output is same as in mid throttle.
150: Yaw output at min throttle is 50% greater than on mid throttle.
300: Yaw output at min throttle is 300% (3 times) greater than on mid throttle.
Values between mid and min throttle are linearly interpolated.

Tuning tips:
To gain more low throttle authority, increase the value. Remember that there's a limit on how much yaw can be produced at min throttle. Extremely high values reduce the resolution of PID output and causes oscillations.

Dynamic yaw gain when tail motor is spinning at max throttle. Default is 100 (%). This is the opposite of tri_dynamic_yaw_minthrottle, it reduces the yaw output at high tail motor speeds. It's possible to increase it, but usually not preferred. By default this parameter has no effect as the value is 100 %.

Example values:
100: Dynamic gain disabled. Yaw output is same as in mid throttle.
75: Yaw output at max throttle is 25% lower than on mid throttle.
50: Yaw output at max throttle is 50% lower than on mid throttle.
25: Yaw output at max throttle is 75% lower than on mid throttle.
0: 100% reduction of yaw output at max throttle. This means no yaw output at all.

Values between mid and max throttle are linearly interpolated.

Tuning tips:
Reduce the value if you are experiencing yaw oscillation at higher throttle values.

Motor acceleration correction

When a motor is accelerating or decelerating, the change in torque forces the copter to turn on yaw axis. On a tricopter where there's an odd number of motors this is visible on rapid throttle change scenarios. When motor is accelerating it forces the copter to rotate on opposite direction. When it's decelerating it forces the copter to rotate on the same direction. Triflight estimates this added yaw error based on the virtual motor model (see tri_motor_acceleration) and a configurable gain.

Note! See the post about a known issue in this feature in the end of the release notes. Please be careful when using this. If you're not interested in rapidly cutting throttle, please set the related CLI parameter to 0.

Related CLI parameters:
Gain to correct the error in yaw generated by accelerating/decelerating motor. Default is 6. Value of 0 disables the motor acceleration correction.

Tuning tips:
Tail motor must turn CCW. If copter turns CCW when throttle is dropped, increase the value.


Thanks to @Bengt-M and @pqueiros for helping with these!

  • New default tune from Dawid Windestål. The default tune is for Mini tricopter with EMAX 2300KV setup.
  • Support for upcoming RCExplorer integrated F3 controller.
  • Tail tune thrust factor calculation simplified.
  • Unarmed servo setup automatically saves the values when speed calibration is done (pitch stick is pulled down). It saves even when there is no feedback signal.
  • Tail tune mode turns green in configurator when activated.
  • Virtual servo calculation fixed. Much better experience for users without servo feedback cable. Should solve the issue with strong tail oscillations (#17).
  • Default looptime to 1000
  • Support for CUSTOM_TRI mixer
  • Improved detection of in-air tail tune failure

Knows issue with the new yaw correction feature

Following is copied from a post a made to RCExplorer forums (

This brings us to the main issue why I have been holding on the release. Now that we have more yaw authority it brings out a new problem with tricopters. I think we have traded the yaw authority to even bigger problem :(. The yaw authority works perfectly when the copter is climbing straight up, the copter keeps the heading very well. But the problem arises when the throttle is cut in fast forward flight.
Here’s my interpretation of what happens and what causes it:

  1. The copter is tilted forward and has forward momentum, throttle is cut.
  2. When the tail motor starts decelerating the generated torque forces the copter to turn to the direction the motor is spinning.
  3. The new Triflight feature quickly detects (expects) this and starts correcting the yaw error by tilting the servo.
  4. When the servo is tilted the added torque force starts affect the pitch axis, forcing the copter to pitch forward.
  5. As the copter is moving forward fast in the air, the pitch PID fails to correct the error as the propellers would have to spin a lot faster to get a grip of the “moving” air. The normal PID gains are not enough to correct on this special case.
  6. As the tail propeller is tilting to the other side, the disc area is reduced, thus reducing the drag. This also increases the error caused for the pitch axis.
  7. Pitch PID controller is trying to correct the error by increasing the throttle for the front motors and reducing the tail motor throttle. This further reduces the yaw authority, making the copter drift on yaw axis aw well.

Because of above effect, I will put a lower yaw correction value as a default to the new firmware. It would be quite surprising for newer pilots and cause many crashes.

I personally think this makes the situation even worse, Further development is required to make this feature feasible for other scenarios than climbing straight up and cutting the throttle. One idea would be to increase the pitch PID gains when the tail motor is decelerating. I’m open to ideas. In any case it would require throttling the motors up until the copter is stabilized, giving a momentary floaty feeling when throttle is cut rapidly.

I’m starting to think that tricopters just weren’t made for this kind of acro flying. I might be wrong and time will tell. Personally I will use my mini Tricopter for racing where it works wonderfully.


@lkaino lkaino released this Mar 12, 2016 · 4299 commits to master since this release

Assets 19

Based on Triflight 0.5 Beta 1 (Cleanflight v1.12.0).


New features

  • Servo feedback source is configurable
    • Before connecting the servo feedback cable, define in CLI the source pin for the feedback:
    • set tri_servo_feedback = VIRTUAL | RSSI | CURRENT | EXT1.
    • RSSI = Use RSSI ADC pin. RSSI feature can't be used at the same time.
    • CURRENT = Use the CURRENT ADC pin. CURRENT feature can't be used at the same time.
    • EXT1 = Use the EXT1 ADC pin. On Naze32 board this is the RC6 pin.
    • The calibration no longer automatically selects the source, user must define it in the CLI before using it.


  • TriFlight no longer based on Betaflight
    • Merged to latest Cleanflight release (1.12)
    • 1.12 contains many features from Betaflight, including air mode.
  • Tricopter mixer works with air mode.
    • Uses the Triflight integrator disable instead of the original Air mode one. Better yaw control.
  • Servo angle calculation changed to use integers.
    • Faster execution
  • Tail tune now beeps 5 longer beeps before starting the tune.
    • User has 5 seconds to take copter into hover. Can also be activated in air.
  • REWRITE integer PID controller is now the default
    • New defaults tuned for RCExplorer mini tricopter.
  • TriFlight now released for all targets, except CJMCU.

@lkaino lkaino released this Jan 25, 2016 · 4040 commits to master since this release

Assets 4

Based on Triflight 0.4 (Cleanflight 1.10 / Betaflight Oct 4).


New features

  • Tail tune version 2. Faster, more precise.
    • There's now new functionality for tail tune in unarmed state. To activate in-flight tail tuning, arm the copter before switching tail tune on. Tail tune can be activated on land or in air. After activating the mode user has 5 seconds to take copter into hover.
    • After the tune is beeping the ready pattern, land and disarm, still having tail tune on. The ready beeping should continue every 2 seconds. The values are now automatically saved. Deactivate tail tune after disarming copter!
  • Servo setup without configurator
  • Servo position feedback support
    • More accurate tail motor control based on servo position.
    • Currently only supported on Naze target
    • Servo feedback signal must be max 3.3V! Use voltage divider if your signal is greater than that.
    • Connect the feedback signal to RC6 pin on Naze board. See
    • Feedback signal is calibrated by pulling down on pitch stick while in unarmed tail tune state. Min, mid and max positions must be set before this. This also sets the tri_tail_servo_speed. Check your servo speed from CLI!
    • If servo speed is set, the FW will use the calibrated feedback signal from this point on.
    • To fall back to using virtual servo, disconnect the feedback cable and initiate the feedback calibration again. The servo will go to min position and then mid position. Failure beep pattern can be heard from buzzer. If your servo does this while feedback cable is connected, there is something wrong in your feedback signal.


  • Integrator disable allows shrinking of I term. Better yaw drift control.
  • SBUS overflow fix. Merged from CF.
  • BB in-flight adjustment fix. Merged from CF.

@lkaino lkaino released this Jan 1, 2016 · 4040 commits to master since this release

Assets 4

Based on Triflight 0.4 Beta 2 (Cleanflight 1.10 / Betaflight Oct 4).

  • Default servo PWM rate to 250 Hz.