Fully articulated TVC bi-(or)-tandem copter.

Ok. I can’t find the edit function for my blog to correct some of my stupidities and (gramar, spelling) errors :smiley: , hence, I reply to myself.

First, some corrections: OAT = Oblique Active Tilting (not Thrust); second, obviously, after thinking more than 10secs about it, the COAX class is a good starting point, BUT since I’ve a tandem configuration, the mixing of thrust + yaw thrust (-yaw thrust), will immidiatelly cause a nose up/down pitch around the lateral axis.

    _thrust_yt_ccw = thrust_out + 0.5f * yaw_thrust;
    _thrust_yt_cw = thrust_out - 0.5f * yaw_thrust;

Two options here. Either I consider also pitch at the same time (which will be very tricky I guess, because a change in pitch will then cause a yaw moment…etc etc. ) or I leave for the beginning thrust as it is:

    _thrust_yt_ccw = thrust_out ;
    _thrust_yt_cw = thrust_out ;

My configuration would allow to use the pitch servo for pitch ( clear), and I could mix the yaw signal with the roll channel. This should look somehow like this:

_actuator_out[0] = (roll_thrust + yaw_thrust) / thrust_out_actuator;  // Left roll and yaw mixing servo
    _actuator_out[2] = (-roll_thrust + yaw_thrust) / thrust_out_actuator;  // Right roll and yaw mixing  servo
    _actuator_out[1] = pitch_thrust / thrust_out_actuator;  // Pitch servos
 _actuator_out[3] = -_actuator_out[1];

I guess the signs need to be checked, it does more or less what it is supposed to do, but I’ve not fully tested it yet.

What I think is a bit strange is, that the tilt is normalized with the thrust, and more thrust means more tilting of the servos. I am just wondering because my guts feeling (never trust the guts) would say, as more thrust, as less input I need. When x-checking with the tailsitter code, it appears to me (not a coding expert) that the tailsiter does not normalize with the thrust:

    // thrust vectoring
    _tilt_left  = pitch_thrust - yaw_thrust;
    _tilt_right = pitch_thrust + yaw_thrust;

Very intersting is actually the Dual Heli Tandem configuration:

// Differential cyclic roll is used for yaw and combined for roll
    const float swash1_roll = roll_input + _yaw_scaler * yaw_input;
    const float swash2_roll = roll_input - _yaw_scaler * yaw_input;

    // cyclic is not used for pitch control
    const float swash_pitch = 0.0;

    // Differential collective for pitch and combined for thrust
    const float swash1_coll =  0.45 * _dcp_scaler * (pitch_input + constrain_float(_dcp_trim, -0.2, 0.2)) + collective1_input;
    const float swash2_coll = -0.45 * _dcp_scaler * (pitch_input + constrain_float(_dcp_trim, -0.2, 0.2)) + collective2_input;

as starting point to think about. In this matter I found also ideas and asked if I couldn’t use the dual heli tandem configuration with no collective (fix pitch) as starting point as described here:

and

The VESCs work good. In the beginning the low RPM were a bit grumpy, especially my newer VESC has phase filters and they caused troubles (after switching them off, much less troubles during startup)… I installed now NTC resistors to compensate the temperature and installed AS5047d for rpm sensing (at low rpm during start up only up to 4000ERPM).

Now I’ll get rid of some play to reduce vibrations. Maybe someone gives me hint into which direction I should move with the software code :smiley: