Coaxial twin-rotor mechanical semi-differential helicopter with 5 servo motors

@rmackay9

I have a coaxial twin-rotor helicopter using five servos. Three servos control the cyclic pitch and collective pitch of the swashplate, and two servos control the yaw control via a semi-differential mechanical mechanism. I checked the Copter wiki, and the Heli firmware’s design for coaxial twin-rotor helicopters uses six servos, with three controlling the upper and lower rotors respectively. This doesn’t match the structure of my helicopter. I need to implement this in the firmware using CUAV’s flight control system. For the servos that synchronously drive the yaw control servos, I need to ensure that the yaw control servos are synchronized with the collective pitch, but not involved in the cyclic pitch movement. Is this functionality supported in the firmware?

The servo with the prototype half-tooth disk is installed on the output shaft of the servo on the right side of the figure below. It needs to be able to move up and down synchronously with the collective pitch control. To keep the yaw control of the yaw servo can move synchronously with the collective pitch, it needs to be able to synchronize with the collective pitch control signal, but not mix with the signal of the periodic pitch change (the control signals of servos 1, 2 and 3 are not applicable).

@zhangsir nice looking helicopter. Although it’s a coaxial rotor system, you have it set up mechanically to be able to use the conventional single main rotor and tail rotor setup. Is there any special requirements for the two servos controlling the yaw axis. Are they just electrically linked meaning that I can just output the yaw command to both. The collective to yaw mixing can still use the conventional heli mixing.

Are you looking for something more specific?

It’s a great honor to have your attention so quickly; thank you in advance!

My current request is that I’m using the right-side servo (servo 5) to drive a white rack via a cylindrical gear, which in turn drives the entire left-side servo (servo 4, i.e., the yaw servo) to make linear displacements on a track. I need the yaw servo to move in sync with servos 1, 2, and 3 during collective pitch control. This ensures that when the collective pitch changes, servo 4 (the yaw servo) moves synchronously with the collective pitch change, preventing differential movement between the upper and lower rotors when yaw is not activated. Therefore, I need the flight controller to output a separate servo control signal, containing only collective pitch control signals, without including pitch and roll movements from the CCPM (Combined Control Processing) system. However, in current conventional helicopter firmware, any control channel for servos 1, 2, and 3 integrates CCPM control, including both collective pitch control and cyclic pitch control. The signals from any of these three servos contain cyclic pitch signals.

Compared to traditional FBL systems, the default channel ch6 is the PIT control channel, which is a dedicated collective pitch control channel. However, I couldn’t find any servo control settings for this function in the ArduPilot firmware and wiki.

Therefore, my request is to add a servo control channel that only includes collective pitch control and does not include periodic pitch control.

Thank you again!

@zhangsir This seems like a very unique coaxial design. Is this common for a ganged swashplate design to have a 5th servo? Currently, ardupilot does not support this type of arrangement for a coaxial helicopter.
I’m sure you could design your own motor library to be added to the dual heli frame type. Let me know how you would like to proceed.

V/R,

Bill

Yes, a fifth servo control is needed, solely for collective pitch synchronization. It should completely exclude the mixed cyclic pitch signals from both the aileron and elevator.

I checked some firmware code. In ArduPilot 4.0 and later, a special servo function number, 155 (HeliCollective), is built-in. This channel outputs a pure collective pitch signal processed by the flight controller in real time. However, when I tried setting a servo function to 155 on a CUAV 7-nano FC with firmware version 4.6.3, no cooperative collective pitch action occurred on the servo connected to that interface!

In the ArduPilot Copter 4.1 and later source code, is k_heli_collective indeed defined? Is the definition of 155 disabled?

@zhangsir I looked up that Servo function and it is “rcin16_mapped” . I was thinking it would be an RC function. the RC function is “TRIM_TO_CURRENT_SERVO_RC”. So I am not sure where you got that servo function. You may look into using lua scripting to do this. You could read in the collective from the motors library and then map it to servo channel 5. There should be the bindings to this. It is that or you could read in all 3 swashplate servos and average them and send that to servo 5.

I apologize, but I’m a terminal flight enthusiast and know absolutely nothing about code and scripts. I’ve tried several Lua scripting methods, but they all failed, and I don’t know why. That’s why I’m asking for help from developers like you: could you extract a separate total pitch control channel within the firmware that doesn’t include pitch and roll control? That would ideally solve this problem!