Co-rotating X8 multicopters

There has been a growing problem in the industry for a while now as a company called Nordic has used a patent related to co-axial multi-copter designs to cause considerable problems for some companies.
I have been working with members of the ArduPilot dev team (especially @Leonardthall and @Paul_Riseborough ) to test an alternative motor layout and mixer for X8 co-axial multicopters that avoids the patent. The above video shows an X8 multicopter flying with this new layout.
Background
The problematic patent has variations in quite a few countries. The ones I’ve looked at closely are the US and EU versions. The EU patent is EP2035276B1, the US patent is US8328128. The patents are closely related, but their detailed structure are quite different. Both only have a single independent claim, which means for non-infringement you only need to avoid the first claim. The US patent condenses a lot of required elements into that independent claim, which means it is relatively easy to make non-infringement arguments. The EU patent has fewer elements in the independent claim, making it a bit harder to make non-infringement arguments. There are however quite a few strong non-infringement arguments that could be made on both patents dependent on the details of your vehicle. If you wanted to discuss those with me then please get in touch.
This post describes a different and simpler approach which avoids the issue altogether by running the motors on each arm as co-rotating instead of contra-rotating. The reason this matters is this wording (taken from the EU patent, but with almost the same wording in the US patent):

in a rotation direction which is opposite the rotation direction of the first rotor (40) of the respective drive unit

that wording means if the motors on the arms of the multi-copter are co-rotating and not contra-rotating then the patent does not “read” on your vehicle and the patent is not an issue for you.
Running motors co-rotating in multicopters is not new, it has been around for decades, as has running motors contra-rotating, so I am not at all claiming that this is a new idea, it is just useful to point to this layout type as an approach to avoiding this patent.
There is a nice masters thesis from 2021 by Sung Hyeok Cho analysing co-rotating versus contra-rotating on small hexa and octa vehicles:

and it is not hard to find other examples from much longer ago.
Same Control, Same Redundancy
Running the motors co-rotating gives you the same level of control as contra-rotating, and the same level of redundancy. It is really just a “redundant quad” system.
There are things you need to watch out for though:

  • as the torque from the motors on the arms does not cancel with a co-rotating design you can excite frame resonances that may not be an issue in a contra-rotating design
  • in larger vehicles you need to get the cant angle of the motors right
  • on some vehicles you may lose efficiency, while on others you may gain efficiency (the aerodynamics of co-axial propellers is quite complex!)
  • you should run the top and bottom layers at slightly different throttle levels to avoid a low frequency “beat” with the blade passage frequency of the two propellers.

To convert an X8 vehicle from co-rotating to contra-rotating you need to do the following:

  • reverse the direction of the bottom layer of motors (on my vehicle I just used the SERVO_BLH_RVMASK parameter to do that).
  • swap the left and right propellers on the bottom layer, so you have the same propeller type both top and bottom in each corner
  • possibly adjust motor cant angle on the bottom layer (see discussion below)
  • set FRAME_CLASS to 17 for “dynamix scripting mixer”
  • install a lua script which implements the co-rotating mixer.

Note that this script works with a wide range of ArduPilot firmware versions. I’ve tested it back to 4.2.x (with a one line change for the Parameter() call).
We will be incorporating this co-rotating layout as a standard frame layout in ArduPilot in the near future, but in the meantime the lua script allows you to fly it now, and gives you an easy way to adjust for your vehicle.
Layer Throttle Ratio
We don’t want the top and bottom layers to be at exactly the same throttle level. This is actually true of contra-rotating as well for efficiency reasons, but for co-rotating it is more important as you can get a beat resonance in the blade passage frequency. For most of my tests I’ve been running with the top layer at 90% of the throttle of the bottom layer.
To implement this with the above lua based mixer you use the parameters MOT_X8C_BOTMUL and MOT_X8C_TOPMUL. There are implemented in a way that allows you to change them while flying, so you can adjust to be optimal for your vehicle. To start with I would recommend:

  • MOT_X8C_TOPMUL=0.9
  • MOT_X8C_BOTMUL=1.0

Frame Resonance
As mentioned above, you may experience a frame resonance which can be quite severe. On the first test flight of the vehicle in the video the copter flipped over within 1.5s of takeoff due to a resonance, although the simple home made design does make it particularly prone to these types of resonances. The issue was fixed by setting up a fixed notch filter at the resonance frequency of 32Hz, like this:

INS_HNTC2_ATT    12
INS_HNTC2_BW     10
INS_HNTC2_ENABLE 1
INS_HNTC2_FM_RAT 1
INS_HNTC2_FREQ   32
INS_HNTC2_HMNCS  1
INS_HNTC2_MODE   0
INS_HNTC2_OPTS   0 
INS_HNTC2_REF    1

The resonance frequency (if any) will vary between vehicle designs.
With that addition the copter flies just as well (and with the same tune) with co-rotating as contra-rotating. On some vehicles a re-tune will be needed, especially if you have a tune with less margin.
Motor Cant Angle
As you scale up multicopters the relative amount of yaw authority you get from motor torque decreases relative to the control you get in roll and pitch. To keep getting good yaw control it is common to “cant” the motors to increase yaw authority. A typical cant angle is between 3 and 5 degrees, and the direction to cant the motor depends on the rotation direction of the propeller.
When converting a vehicle from contra-rotating to co-rotating you need to adjust any cant angle on the bottom layer to be opposite of what you have now.
Efficiency
The impact on efficiency (and this flight time) varies between vehicles. On the vehicle in the video it loses about 4% efficiency when changing from contra-rotating to co-rotating. Some vehicles may actually gain efficiency. You will need to test on your vehicle to determine what efficiency change you get.
Expiry
The patents don’t have long to run before they expire (it varies with jurisdiction, but around 2 years more) so in the long term we will be able to ignore this issue. In the meantime you can use the technique in this post to avoid the issue.
Thanks
Many thanks to CubePilot for championing this issue, and to Leonard and Paul for their help working through the technical issues. Also thanks to @MichelleRos and @peterbarker for help with flight testing.

13 Likes

Can you show us the x8 new layout design up close?

i’m not much good at diagrams, maybe you could make one in the style of the wiki motor order diagrams but for co-rotating?

I like to try one but do i use one of my x8 frames?

I was more thinking in the same style as these:

@rmackay9 may know how these were made?

You guys are beyond impressive.
Have you considered changing the prop sizes, like increasing the bottom layer by 1” or so? It may possibly aid a bit in the efficiency loss?

yes, using different prop sizes top and bottom is already a common technique in this type of vehicle. Main downside is it makes having spare props a bit more complex. I haven’t done this on my vehicle, but it is something worth trying on a vehicle trying to maximise efficiency.

1 Like

Hi Tridge,

Sorry my question is can I use a used x8 frame I made and update it ?

yes, just follow the instructions above and it will work

No prob however I have no idea how to use the new system you have made.
Edit: I will try to understand. Possibly a video would help us I think i I have a x8 in realflight if helpful.

to use it:

  • enable scripting with SCR_ENABLE=1
  • put the lua script in APM/SCRIPTS on the microSD
  • make the physical modifications (change direction of bottom motors, swap left and right props on the bottom layer)
  • set FRAME_CLASS=17
  • run a motor test and confirm motors are co-rotating
  • set MOT_X8C_TOPMUL=0.9
  • fly
1 Like

Cool beans do you have a link to the Lua? sorry for me being an idiot.

it’s linked in the article

I see it now thanks.

"set MOT_X8C_TOPMUL=0.9 " can you tell us what it does? Thanks!

I wrote the PR and SVG markup that creates them. I can try and update with the latest frame types sometime soon.

1 Like

ahh, thanks @Yuri_Rage !
Ideally we’d have 2 new diagrams, one based on the classic X8 FRAME_TYPE=1, and the other based on the much saner FRAME_TYPE=14 where the motor order matches the motor numbering (that is much easier to setup)

2 Likes

Will try and knock that out in the next 72 hours. If someone wants to beat me to it, the script that uses the AP_MotorsMatrix test JSON output to generate the diagrams should have been in the associated PR. I’ll admit it’s a little finicky.

that parameter gets created by the lua script. Once you install the lua script it will appear after you refresh parameters

i’ve found it now I know what to look for:

1 Like