Custom Motor Mixing Multirotor | What | Calculate | Uses

Custom Motor mixer is used to adjust the motor output power, in order to optimize your multicopter performance.

What is Custom Motor Mix

Motor Mixing is basically a table which specifies the magnitude of forces that should be applied to each motor of your multirotor, therefore it’s sometimes called output mixer. For a X4 quadcopter, each motor has 100% output force in all 3 axis, that’s because it’s symmetrical in all 3 axis.

Multiwii, BaseFlight and CleanFlight etc they all have many default mixes for different configurations, tricopter, hexacopter, octocopter etc. But when you have a multirotor frame that is not symmetrical (unique design), it might still fly fine with default output mixer, the motors might be giving too much or too little thrust, but the FC can sense it and correct it. With custom motor mixing hopefully we can reduce the need for correcting, and therefore optimise the performance of your drone.

Warning: Changing motor mixer could mess up your motor outputs and causes problems, if you have done it the wrong way. Don’t copy and paste the cmix table in this post directly in CLI. Make sure you type it in manually. Use custom mixer in your own risk.

Is Custom Motor Mix Necessary?

The way it works is, motors that are placed further away from the centre of gravity will require a greater amount of thrust to travel the same distance (or arc length) as a motor that has been placed near to the centre of gravity.

Layout of the motor is one thing, another thing is mass distribution, which generally has equally important impact on the quadcopter performance.

A mini quad typically has more centralised mass on the roll axis compared to its pitch axis (due to how the Gopro/mobius and Lipo are mounted). Therefore, it can have higher P and I gains on pitch than roll. When people put in a custom motor mix, P and I gains are now closer to roll and as a result it makes tuning easier.

Therefore if you mini quad frame is already a rectangular motor layout, by simply tuning your P and I gains appropriately, you should be fine and no need to change your motor mix. If you have a non-rectangular motor layout (like a dead-cat or T copter), or especially if you have an A-tail or V-tail, or something more complicated like that, then a custom motor mix is more likely to be needed.

There are other uses of motor mix, such as remapping motor output pins. Here is a tutorial on how to.

How Custom Motor Mix works in Cleanflight

Since I am using the Naze32 with Cleanflight, I will be using this system as an example. Each motor must be defined with a custom mixing table for that motor in this format:

mmix [motor number] [throttle] [roll] [pitch] [yaw]

For example for a quadcopter of standard X configuration we have this layout:

  4CW      2CCW
         /
     Naze32
     /    
  3CCW     1CW

And the predefined motor mix for this motor layout:

mmix 1 1.000 -1.000 1.000 -1.000 (Rear Right motor)
mmix 2 1.000 -1.000 -1.000  1.000 (Front Right motor)
mmix 3 1.000 1.000 1.000 1.000 (Rear Left motor)
mmix 4 1.000 1.000 -1.000 -1.000 (Front Left motor)

Note: in Baseflight the command is cmix, in Cleanflight it’s mmix.

You can see there are lots of 1’s there, 1 means 100% force should be applied. This is due to the fact that the X Quadcopter has a symmetrical geometry. KK2 boards use percentage bases, so they use 100 instead of 1 in their custom mixer table.

Many popular quadcopter frames, such as the Deadcat450, Blackout 250 mini quad (with 6′ extended arms) and the QAV250 are not perfect X configurations. This is where we can apply custom motor mixing to optimize flight performance.

I took measurement of my ZMR250 mini quad frame, and I realize the frame width is longer than the length. So I will use this as my example to calculate the custom motor mixing for this frame. It will get a bit more complicated in layouts with more motors, such as Hexacopter and Octocopter, but we will not cover it in this short post.

Note: it’s advised to use the result from calculations, but you should be able to adjust the values according to your personal liking.

Calculate Custom Motor Mix: Example of ZMR250

There are four values we need to get, throttle, pitch, roll and yaw.

Throttle is 1 for all motors that are used in this configuration, unused set to 0, so we don’t need to worry about it.

Yaw indicates the direction of the motor rotation, CCW = 1 and CW = -1. I think if all four motors are on the same dimensional plane and facing the same direction, we can safely assume their force magnitude is 100%. (But If it’s not, it will get tricky)

So that leaves us only pitch and roll values to find, both accepts values nominally from 1.0 to -1.0.

The simplest way to calculate these values, is to use the longest distance between the motor to either the pitch axis or roll axis, as the denominator, to divide the distance between each motor to the pitch axis and roll axis. And the ratio is what we are after, it’s the force of the motor that should contribute to that particular axis.

I guess you are confused? Don’t worry, take a look at this example.

  • Get a full size 3D CAD drawing of your frame and print it out (make sure there is no shrinking or enlarging). If you can’t find one, just outline your frame on a piece of paper, that’s what I did.

zmr250-cad-top zmr250-drawing-outline-shape-dimension zmr250-drawing-outline-shape-dimension-arm

  • Measure all distances from motors to roll and pitch axes. Since the four arms are mirros of each other, the distances to the roll and pitch axes are the same.
    • Motor to Pitch axis = 7.75cm
    • Motor to Roll axis = 10.125cm

zmr250-drawing-outline-shape-dimension-graph

  • Take the longest distance to be your denominator, so the result is within the range of -1 and 1. In my case the denominator is 10.125 cm.
  • Here we can work out the CMIX for all four motors
    • Motor1:
      • Roll: 10.125/10.125 = 1
      • Pitch: (-) 7.75/10.125 = -0.765
    • Motor2:
      • Roll: (-) 10.125/10.125 = -1
      • Pitch: (-) 7.75/10.125 = -0.765
    • Motor3:
      • Roll: 10.125/10.125 = 1
      • Pitch: 7.75/10.125 = 0.765
    • Motor4:
      • Roll: (-) 10.125/10.125 = -1
      • Pitch: 7.75/10.125 = 0.765

So we have this custom mixing table for my ZMR250.

mmix 1 1.000 -1.000 0.765 -1.000
mmix 2 1.000 -1.000 -0.765 1.000
mmix 3 1.000 1.000  0.765 1.000
mmix 4 1.000 1.000 -0.765 -1.000

This is kind of boring, as this frame is symmetrical, but it should give you the idea how I calculate cmix. You might notice the only difference from the default X quadcopter mixer is the pitch value. It actually makes sense if you think of it this way, the quad’s length is shorter than the width, so it’s quicker to rotate around roll axis (pitch forward or backward), therefore we need to reduce the force on that axis.

Another way of Calcuating – Using angle and Trigonometry

Inspired by how KK2 calculate their custom mixer, it’s also possible to calculate this with trigonometry. With this method all we need to know is the angles between the motor-FC to roll axis, and the between the motor-FC to pitch axis. There is no need to measure any distance, therefore it’s more accurate if you are not confident with your distance values.

Here is the ZMR250 frame. I will calculate the roll and pitch values for motor 2 as an example. First you need to measure all the angles with a protractor, and take the maximum angle as your denominator.

A = 51.6
B = 38.2

In this case, it’s angle A.

  • Roll: sin(A) / sin(A) = 1
  • Pitch: sin(B) / sin(A) = 0.6184 / 0.7837 = 0.789

The values are very close to the above results!

zmr250-angle-cmix-custom-mixer-mixing-calculation

So how do we know if this actually works? If we look deeper, you will realize this second method can be transformed into the first method.

sin(A) = a / c
sin(B) = b / c

so when calculating Pitch, we have sin(B) / sin(A) = (b / c) / (a / c) = b / a.

With Roll, we have sin(A) / sin(A) = (a / c) / (a / c) = a / a.

And there we have it! It’s exactly calculating the same thing. The reason for the result difference is because of the imperfect frame drawing, and measurement.

How to set Custom Motor Mix in Cleanflight

Steps to configure custom mixer in the CLI:

  1. Enter mixer custom to enable the custom mixing.
  2. Type mmix reset to erase the any existing custom mixing.
  3. Use mmix statement for each motor in this syntax: mmix NUMBER THROTTLE ROLL PITCH YAW

Other use of Custom Motor Mixing

Apart from adjusting motor authority over flight controller to get better performance, there are also some other creative uses of Custom mixer. From a quick search I found the following:

  • reverse motor rotations
  • if you have damaged motor output pin/solder pad, you can use a spare motor output pin
  • change motor order

75 thoughts on “Custom Motor Mixing Multirotor | What | Calculate | Uses

  1. Michael Whiting

    i know this is a old article but I am having trouble getting this to work properly. I have a ZMR 250 quad frame just like the one you used in your example and I am also running clean flight. the problem is after I change the quad type to “Custom” and enter in the new mmix values in the cli the quad will not arm. I have tried it several time and havfe reread this article probably 4 time now and I still done know why it wont work. any help would be greatly appreaciated.

    Best regards,

    Michael

    Reply
    1. Oscar Post author

      simply change it back to quadx in the mixer settings tab. If still no joy, trying resetting all settings, or even re-flash firmware. I reckon you probably changed some parameters by mistake.

      Reply
  2. Derrick Mitchell

    In your opinion which is best Cleanflight or Baseflight to do a custum mix on for a Vtail 500? It is a Lyxmotion Vtail. In addition can you give me the mmix or cmix for it, right now it flies like crap.

    Reply
  3. Gabriel Morales

    Hi Oscar,

    Very nice post. Please help with one simple question regarding a large, custom hexacopter my dad and I are building from scratch ? We’d greatly appreciate it !

    The Hexacopter is about 42″ in diameter…some key points…
    1.) All 6 motors are equidistant to the center, essentially arranged in a perfect circle
    2.) There is an equal arc distance between every single motor, everything is accurately and evenly spaced out down to the mm.
    3.) The center of gravity will lie exactly within the geometric center of the motors. It will be perfectly balanced, regardless of its long nose.

    THE QUESTION: can we use a standard Naza V2 flight controller with the “V” config hexacopter layout as it comes from the factory without having to do custom motor mixes? ….and I ask this because even though our motors are arranged symmetrically the arms do not attach the same way to the body of the hexacopter. Will the gyro within the Naza be able to disregard arm attachment points and just focus on where the motors are oriented in space?

    Thanks in advance !!

    Reply
    1. Sal

      Hi Gabriel;

      Hope you are doing well.

      Have you managed to control your Hexacopter ? i working on the same project ! any recommendation ?

      Thanks

      Reply
  4. David

    Hi Oscar,
    Here is a link to a very useful online calculator. Even creates the CLI command for you (for those who don’t like the math) :)

    Reply
  5. billyd

    Hi Oscar

    What if the FC is not on the CG of the aircraft? Do we measure to the CG of the FC or the CG of the aircraft?
    It seems odd that we would measure to the FC, but that is what the docs are saying. The cg of the FC.

    I guess it makes sense if the FC is regulating accelerations and not thrust. Then it wouldn’t care about the CG of the aircraft directly.

    Although I think using the cg of the aircraft might be a better choice since knowing which motors are most effective at changing accelerations would be valuable. If we took a case where the FC was extremely far from the CG, I think if you entered a CMIX with distances to the CG of the FC, instead of the CG of the aircraft, it could cause a lot of problems in stability.

    I’ve really managed to confuse myself.

    ps With respect to the directions of the motors. In a coaxial arrangement, if all motors spinned CCW, would you enter CW as the rotations for the bottom motors? Since their apparent rotations would be opposite that of the top motors.

    Thanks for any comments,

    Billy D.

    Reply
  6. Vytautas Valaitis

    Nice tutorial!
    But, I think, gyro should be considered as a center point, not the actual center of the frame.
    Naze32 rev5 has gyro way of center, e. g..

    Reply
    1. Oscar Post author

      you are right, but the difference, is so small (less than 1 cm), you can hardly tell the difference anyway
      unless you are doing it on a much smaller frame… then it becomes more important.

      Reply
  7. Mark Duncan

    Hi Oscar

    Nice post, have you see the guy on you-tube who has a calc tool for this purpose. fancy testing it and giving a verdict on it ? youtube.com/watch?v=9FvpT9jH0NA

    Reply
  8. Vasic

    You write:
    Motor1:
    Roll: 10.125/10.125 = 1
    Pitch: (-) 7.75/10.125 = -0.765

    But command is:
    mmix 1 1.000 -1.000 0.765 -1.000

    Is sighn wrong or i miss something?

    Reply
  9. Capsurfer

    Hi Oscar,
    I am currently working on an OCTOX8 ZMR250 with a Naze32 board, because why not. I am still in the planning phase.

    Motors 1-6 will be mapped to the standard motor pins. Motors 7 and 8 will be mapped to the PIN_OUT 5 & 6. Additionally I want to add a LED Strip. My problem is the LED STRIP feature maps PIN_OUT 5 to the signal cable. However this is already used by Motor 7.

    I am not planning to use the PIN_OUT 2,3,4,7 & 8, so I was thinking about 2 possible solutions.

    This is my initially planned motor mix:

    mixer custom
    mmix reset
    mmix 1 1 -1 0.772 -1
    mmix 2 1 -1 -0.772 1
    mmix 3 1 1 0.772 1
    mmix 4 1 1 -0.772 -1
    mmix 5 1 -1 0.772 1
    mmix 6 1 -1 -0.772 -1
    mmix 7 1 1 0.772 -1
    mmix 8 1 1 -0.772 1

    Easiest solution could be to replace mmix 7 & 8 with 9 & 10.

    mixer custom
    mmix reset
    mmix 1 1 -1 0.772 -1
    mmix 2 1 -1 -0.772 1
    mmix 3 1 1 0.772 1
    mmix 4 1 1 -0.772 -1
    mmix 5 1 -1 0.772 1
    mmix 6 1 -1 -0.772 -1
    mmix 9 1 1 0.772 -1 ->should map to pin 7 on the naze?
    mmix 10 1 1 -0.772 1 -> should map to pin 8 on the naze?

    Could this work? Is it allowed to skip mmix 7 & 8?

    My other ‘solution’ would be to compile my own .hex file which maps the LED_STRIP feature to either PIN_OUT 2, 3, 4, 7 or 8. Tricky thing is, I can’t find the mapping in the source code. Could somebody point me to the correct file:line_number?

    Any other obvious solutions I might have overlooked here?

    Reply
    1. Scott

      Thank you for this post it really has helped. Also big thanks to Henk for the motor mixing calculator which has saved me a lot of math:)

      Reply
    2. Ed

      Hi Henk,

      Tried your calculator with Quanum XJ470 frame.
      Motors 1&3 are 144mm from the pitch axis,
      Motors 2&4 are 161mm from the pitch axis.
      Calc giving same pitch ratio. Don’t think this is right.

      Uploaded my workings here blindtuna.com/wp/index.php/2015/11/21/quanum-xj470-calculating-cmix/

      Reply
  10. Bob

    Hi Oscar,
    Another thing to consider is the weight distribution of your quad. With my square x mini quad, the battery runs down the centerline – this means the pitch axis has a much higher moment of inertia. So even though it’s square, I still run a custom mix that cuts back the roll column by 40% because the weight distribution rolls easier than it pitches.

    Reply
    1. Oscar Post author

      HI Bob,
      yes that’s a very good point!!
      That’s why on a lot of ZMR250 people didn’t use any cmix they still fly well, because it’s wide, and weight on pitch is heavier, so extra forces required on each axis just cancel out!
      thanks
      Oscar

      Reply
  11. Pakal

    You should correct your article : the motor diagram shows the naze32 configuration but then you define Motor 1 as the front left one. It generates some confusions, as other readers have pointed out.

    Reply
    1. Blaine

      Hi Oscar,
      Great description, but PLEASE fix the motor layout description.. it’s all in the wrong order and very confusing.

      Reply
  12. Cedric

    I’m using the latest firmware by Boris B, that has the new LuxFloat v2.

    When I try to enter “cmix reset”, in CLI, I get a unknown command error.
    Also in the “help” listing, cmix is no longer present as a command.

    Is there a work around for this? Possibly using mmix? I’m unsure of the difference between cmix and mmix.

    Is cmix being phased out?

    Thanks.

    Reply
    1. Ale

      I try this, so what you say is correct:
      # mmix load quadx
      Loaded QUADX
      Motor Thr Roll Pitch Yaw
      #0: 1.000 -1.000 1.000 -1.000
      #1: 1.000 -1.000 -1.000 1.000
      #2: 1.000 1.000 1.000 1.000
      #3: 1.000 1.000 -1.000 -1.000

      Reply
  13. Rick Trimble

    I’ve got a Armattan cf258 vtail. I don’t know how to get the measurements without disassemble. I also don’t know how to implement it. Bought it built, and looks like it is a custom mix, as baseflight vtail is actually for Atail, if I understand correctly. I think I use ‘0’ in the cleanflight, but am not sure. I am unhappy with its performance in baseflight, and PID’s are not the only problem their, I am thinking. Is there someone who has used cleanflight for a 258 vtail with success? If so, I would really appreciate knowing what I must do in cleanflight to be able to use my vtail. My standard x quad is in cleanflight now, and it is under page ‘3’, and it is so much nicer to fly.

    Respectfully
    Rick

    Reply
  14. moosestang

    what if your front motors are closer to the roll axis than your rear motors and your rear motors are closer to the roll axis than your front motors? I get 27mm to pitch axis for fronts and 47mm for rear, i get 57.5mm for the front motors to the roll axis and 40mm for the rear.

    Reply
    1. moosestang

      Sorry, i meant front motors are closer to the pitch axle than rear and rear are closer to roll than front.

      Reply
      1. moosestang

        Ok, i’m assuming the units of measure don’t matter here, so using my mm numbers this is what i get, if i’m doing this right

        cmix 1 = 1/-.851/1/-1
        cmix 2 = 1/-1/-.452/1
        cmix 3 = 1/.851/1/1
        cmix 4 = 1/1/-.452/-1

        ??????

      2. moosestang

        So do you use the largest pitch/roll distance as the constant for calculating all motors? Or would i use the largest roll/pitch for the front motor calculations and the largest roll/pitch for the rear motor calculations?

      3. moosestang

        Hi Oscar. I have another question. I’m starting to second guess myself on what motors should have how much power authority. In the dead cat configuration, the rear motors are closer to each other and closer to the yaw axis. Would the rear motors then require more power to yaw the quad than the front motor or less? It seems like they would need more power to turn it equal distance as the fronts. Also if i think about the front and rear arms as levers, would not the front motors reqire less power to roll the quad than the rears since the motors are further from the roll axis? a longer lever reqires less force to turn than a shorter one. This stuff is making my head hurt.

      4. Oscar Post author

        don’t think about power, think about the time it would take for it to rotate the same distance… under the same force, longer arms will take longer to rotate the same degree than shorter arms, so you want to apply larger force on them…

      5. Rob2160

        Hi Moosetang,

        In a quad that is symmetrical left to right the Centre of Thrust (CoT) is located mid point between the front and rear motors.

        I understand your rear motors are closer together than your front motors. This does not affect the fore and aft CoT position.

        Imagine all motors are producing equal thrust – the resultant of the front motors acts on the centre line of the frame and so does that of the rear motors – the Centre of thrust is midpoint between these two resultants. i.e. mid way between front and rear motor pairs.

        This is where you should locate your CG and ideally the FC also. This position is where any custom mix calculations should be derived otherwise one pair of motors will always be working much harder than the other.

        Also there seems to be some confusion about what the CMIX, MMIX values are doing. They are telling the FC how much authority each motor has over the FC. IE, looking at Roll, a value of 1.0 means it has maximum roll authority, a value of 0.5 means it has 50% roll authority (compared to 1.0)

        See the explanation here. (and quoted)

        github.com/cleanflight/cleanflight/blob/master/docs/Mixer.md

        Roll – indicates how much roll authority this motor imparts to the roll of the flight controller. Accepts values nominally from 1.0 to -1.0.

        Pitch – indicates the pitch authority this motor has over the flight controller. Also accepts values nominally from 1.0 to -1.0.

        I have developed a custom mix calculator for Quads and Hexacopters – you can download it here. It assumes CG of your quad will be at the CoT (mid point between front and rear motor pairs) and for a Hex it will auto calculate the CoT (which is the optimum location for CG to ensure all 6 motors work evenly in a hover)

        dl.dropboxusercontent.com/u/62849459/NAZE%20MIX%20EDITOR%20V3.xlsx

  15. Tony Perr

    I ended up with this mix for my Spedix S250 Agility Version Frame. The rear two motors are closer to the roll axis than the front two. Seems like its flying pretty locked in. It feels very neutral.

    cmix 1 1.0 -0.81 1 -1
    cmix 2 1.0 -1.0 -1 1
    cmix 3 1.0 0.81 1 1
    cmix 4 1.0 1.0 -1 -1

    Reply
  16. Sven

    Maybe it’s a bit fussy but I was wondering if you should take the center of the FC for roll/pitch axis or better the center of the IMU?

    Reply
    1. Oscar Post author

      very good point, i think it should really be the center of the sensor… But the difference is only a 1 or 2 cm anyway i doubt it’s going to make a huge difference.

      Reply
      1. Luke

        I’m not so sure this is the case. The attitude and rate of change of attitude of a surface is equal at all points on that surface. I might be mistaken, but it shouldn’t matter where the imu is.

  17. Michel

    Oscar,

    hopefully you can help,

    I am inputting my setting for an SK450 dead cat and am running into an issue with the custom mix.
    Custom mixer:
    Motor Thr Roll Pitch Yaw
    #1: 1.000 -0.769 1.000 -0.800
    #2: 1.000 -1.000 -0.800 0.769
    #3: 1.000 0.769 1.000 0.800
    #4: 1.000 1.000 -0.800 -0.769
    Sanity check: OK NG OK

    the pitch will not become OK, it will only be okee when they are all equal. either all 1 or all 0.8.
    Custom mixer:
    Motor Thr Roll Pitch Yaw
    #1: 1.000 -0.769 0.800 -0.800
    #2: 1.000 -1.000 -0.800 0.769
    #3: 1.000 0.769 0.800 0.800
    #4: 1.000 1.000 -0.800 -0.769
    Sanity check: OK OK OK

    do you have any idea why this is happening?

    kind regards Michel

    Reply
    1. michel

      Okee,

      after going through the source code of cleanflight I think I found why it is not validating. the sanity check wants the sum of the values to be 0, however for pitch this does not need to be true. with an asymmetrical frame this is actually never true. I think this is a bug in cleanflight as the sum of the pitch is validated the same as for roll and yaw where the opposing engine will be negative and therefor the sum of these will amount to a 0. for Pitch there is no equal opposing engine as the rear engines will be both positive and the rear negative.

      now for the important question, when the values are not validated will they stil work in the mixer? my deadcat was very uncontrollable with these setting.

      gr

      Reply
      1. Chris Leech

        You know that you can bring up this point at Cleanflight firmware for STM32F3 based FCBs, rcgroups.com/forums/showthread.php?t=2249574, But read some first, it might be covered.
        The multiWii thread (Cleanflight aka Multiwii port to STM32 F10x and F30x) is not very active at all!!!
        I am impressed that you have been able to make this dissertation through plying through the source code of Cleanflight.Recent releases are getting pretty darned big, in the area of 300k+ before compiling to hex. So kudos to you
        But hey if you found the Clean-code :-) as it were on GitHub, then you would know that there is possibly a way of getting word back to the Dev’s there right?
        I just used Oscars cmix for my ZMR and adjusted the throttles as well.
        I found it a lot easier to write out the whole thing check syntax and then cut and paste.
        I got the three Sanity Check Ok Ok Ok.
        And I am about to go test it.
        Whew. I still have so much to learn about the Cleanflight Configurator Port settings :-o

  18. Chris Leech

    Dear Oscar,
    yes I agree with Charles, the motor position (description) per number is incorrect.
    I am running a ZMR250 as well and would like to use the custom mix but once I try to proof the calculations I start seeing some small edits you might help us with.

    Also, in the section with your calculations both Mot1 and Mot2 have negative pitch values, yet where you post next, the actual values that you have used for your custom mix Mot2 is a positive pitch value.
    Do you see what I am getting at?
    So it is very confusing for those that are trying to wrap their poor heads around custom CLI entries in Cleanflight :-). Could you please edit a bit to solve this Oscar thank you.
    I will try your custom mix as it is and hope for the best.
    Best Regards
    Chris

    Reply
    1. Chris Leech

      EDIT: sorry I mean’t: in your final cmix, Mot1 has a positive Pitch value, contradicting your calcs that show a neg value

      Reply
  19. Chris

    I’ve somehow lost output on pin #4 and i am trying to run the #4 output on an x-quad on the #5 motor pin. i can’t get this to set in CLI…Can you pleaes illustrate how to do this? I ahve tried the following:

    cmix 1 1.0, -1.0, 1.0, -1.0
    cmix 2 1.0, -1.0, -1.0, 1.0
    cmix 3 1.0, 1.0, 1.0, 1.0
    cmix 5 1.0, 1.0, -1.0, -1.0

    Then CF ignores the #5 motor and still only has a setting for 3 motors. Then i tried:
    cmix 1 1.0, -1.0, 1.0, -1.0
    cmix 2 1.0, -1.0, -1.0, 1.0
    cmix 3 1.0, 1.0, 1.0, 1.0
    cmix 4 1.0, 1.0, -1.0, -1.0
    cmix 5 1.0, 1.0, -1.0, -1.0

    This doesn’t ignore the #4 or #5 motor, but this still tell the flight controller that there are two motors at the exact same location, right? I’m reluctant to try this with props on, unless you think it will work.

    I then tried:
    cmix 1 1.0, -1.0, 1.0, -1.0
    cmix 2 1.0, -1.0, -1.0, 1.0
    cmix 3 1.0, 1.0, 1.0, 1.0
    cmix 4 0, 1.0, -1.0, -1.0
    cmix 5 1.0, 1.0, -1.0, -1.0

    But it again ignored the #4 and #5 motor mixes and output the following:

    cmix 1 1.0, -1.0, 1.0, -1.0
    Custom mixer:
    Motor Thr Roll Pitch Yaw
    #1: 1.000 -1.000 1.000 -1.000
    Sanity check: NG NG NG

    # cmix 2 1.0, -1.0, -1.0, 1.0
    Custom mixer:
    Motor Thr Roll Pitch Yaw
    #1: 1.000 -1.000 1.000 -1.000
    #2: 1.000 -1.000 -1.000 1.000
    Sanity check: NG OK OK

    # cmix 3 1.0, 1.0, 1.0, 1.0
    Custom mixer:
    Motor Thr Roll Pitch Yaw
    #1: 1.000 -1.000 1.000 -1.000
    #2: 1.000 -1.000 -1.000 1.000
    #3: 1.000 1.000 1.000 1.000
    Sanity check: NG NG NG

    # cmix 4 0, 1.0, -1.0, -1.0
    Custom mixer:
    Motor Thr Roll Pitch Yaw
    #1: 1.000 -1.000 1.000 -1.000
    #2: 1.000 -1.000 -1.000 1.000
    #3: 1.000 1.000 1.000 1.000
    Sanity check: NG NG NG

    # cmix 5 1.0, 1.0, -1.0, -1.0
    Custom mixer:
    Motor Thr Roll Pitch Yaw
    #1: 1.000 -1.000 1.000 -1.000
    #2: 1.000 -1.000 -1.000 1.000
    #3: 1.000 1.000 1.000 1.000
    Sanity check: NG NG NG

    What would to get x-quad configuration like i had before, just with #4 motor output coming out of the #5 pin?

    Reply
    1. ali

      make sure you change your quad configuration to custom instead of quad x in the first page. Didn’t work for me until i did that. I have now got motor 4 coming out of motor 5 output

      Reply
    2. lorenz

      did you manage to get it to work ?
      I have nearly the same problem, my motor out 1 is broken so i wanted to switch it to 5.

      what i tried was this:

      cmix 1 0, 0, 0, 0
      cmix 2 1.0, -1.0, -1.0, 1.0
      cmix 3 1.0, 1.0, 1.0, 1.0
      cmix 4 1.0, 1.0, -1.0, -1.0
      cmix 5 1.0, -1.0, 1.0, -1.0

      so i used the values from motor 1 and applied them to 5 which should tell port 5 to do the same as 1 did before and shut down motor 1 right ?

      but for some reason it diddnt work.

      would be great if somebody could help me out :)

      Reply
      1. Tedenz

        My motor 4 had no power so this is my mix to shift motor 4 to motor 5 layout

        mixer custom
        mmix reset
        mmix 0 1 -1 1 -1
        mmix 1 1 -1 -1 1
        mmix 2 1 1 1 1
        mmix 3 1 1 -1 -1
        mmix 4 1 1 -1 -1

        save

        Works great

      2. Certacito

        The throttle setting on motor 1 that you want to change out, needs to be 1 instead of 0 I think.

  20. Nicolas

    Hey Oscar

    I tried this today and it works wonders on my spider/deatcat quad. Had all sorts of issues before, most of which vanished with the correct cmix. Great stuff!

    Reply
    1. michel

      Could you post your mix settings? I am running into issues with my mix settings as they will not pass the sanity check

      my settings for my sk450 deadcat are

      Custom mixer:
      Motor Thr Roll Pitch Yaw
      #1: 1.000 -0.767 0.837 -0.800
      #2: 1.000 -1.000 -0.428 0.769
      #3: 1.000 0.767 0.837 0.800
      #4: 1.000 1.000 -0.428 -0.769
      Sanity check: OK NG OK

      Reply
  21. Turbini

    I don’t get it. If the third value is pitch and pitch has less momentum due to less distance from motor to motor, why should its force be reduced to 0.765? Shouldn’t be greater than roll? I tried both combinations and my pitch/roll P are closer when using more force for pitch, which makes sense to me but I’m just confused about this. Did you try it on pid controller 0?

    thanks!

    Reply
  22. smitty

    Correct me if I’m wrong, but I would think the longer axis arm should get the reduced value for force required. The shortest axis arm would be defined as 1.0. Imagine a very wide H quad. Torque = force x distance so it’s much easier for the motor to roll the craft than it is to pitch it. To end up with the same torque on each axis, the roll should be the factor that’s reduced.

    Also, if you can determine where your cg is, like if you have a big fat 2200mah on the back, you can calculate from that axis as well. In your case, if the cg was offset 1cm backward, the pitch axes are 6.75 from the back and 8.75 to the front. The pitch factor for motors 1 and 3 would be +/-1.0 since they are the closest to any axis and will work the hardest. Pitch on 2 and 4 would be +/-0.771 and roll for all motors would be +/- 0.667

    Reply
    1. DeeHawk

      I don’t think the force has much to do with it, since it doesn’t take any to tilt it. It’s about speed and the circle traveled by the motor in a full roll/flip. Shorter circumference, shorter travel time for the given motor speed and pitch of your props.

      Reply
    2. Rob2160

      Hi Oscar & Smitty.

      The custom mix tells the FC how much authority each motor has. That is why the longest arms have 1.0 and shorter arms have a lower value. A lower value means the motor has less authority in this axis.

      e.g. 0.5 roll means that motor has 50% roll authority compared to a motor with a value of 1.0

      github.com/cleanflight/cleanflight/blob/master/docs/Mixer.md

      Quoting from above..

      Roll – indicates how much roll authority this motor imparts to the roll of the flight controller. Accepts values nominally from 1.0 to -1.0.

      Pitch – indicates the pitch authority this motor has over the flight controller. Also accepts values nominally from 1.0 to -1.0.

      Reply
  23. Jon

    Thanks for the informative post! I have a problem where only 2 of my motors are not spinning the correct direction. Motor 1 CCW (rear right), Motor 2 CW (front right) which is incorrect for the default quadx configuration.

    I had a couple of questions:

    I run the following:

    mixer custom
    cmix reset
    cmix load quadx
    cmix

    This dumps out the quadx default mixer values, so in this case I need to change 1 & 2

    #1: 1.000 -1.000 1.000 -1.000
    #2: 1.000 -1.000 -1.000 1.000

    Which values should I be switching to reverse the motor direction? I have tried all combinations and the motor still spins the incorrect direction.

    I even:

    save
    Click Motors tab, test, no success
    Click CLI tab
    cmix

    displays my changed values
    save
    disconnect comm
    reconnect

    values still show updated to my new values, but the motor did not change direction.

    Which values should I be changing to reverse the motor? Any reason this is not updating?

    Reply
  24. Harris

    I’m glad to see this implemented in cleanflight, but I’m not a big math person. I’m running a tricopter that – although the motor locations sit in a perfect triangle at 200mm in any direction – the FC and CG sits forward of the centerline from front to back. how would I come up with the differential between the 2 front motors and the rear with the CG moved up from center?

    Reply
  25. Marek

    Hey Oscar,
    Great blog. Very helpful on many topics getting into the hobby. Do you think it would be possible to create an excel spreadsheet that would calculate the CMIX parameters by inputting the frame dimensions? I want to play around an build a frame of my own with different sized arms but I am afraid that without a proper CMIX it will not fly well. Thanks in advance

    Reply
    1. Oscar Post author

      Hi Marek
      yes, someone in our FB group has created a Excel sparesheet for this. Join the group and you can find it in the file tab.
      thanks
      Oscar

      Reply
      1. Prebster

        Hey!
        I love your posts, and I’ve “liked” your facebook site, but I don’t see a “files tab”… What is the “group” called that I need to join to find this Excel-sheet?

        I’m flying a Warthox Fquad from Flyduino, and it’s everything but symmetrical. Flew OK with KK2.1, upgraded to NAZE32, but never got it to fly well with this yet. Hope that editing the motor-mixing will fix it, and want to have that settled before I start spending lots of time with PID-tuning…

        Here’s a pic of my bird: drive.google.com/open?id=0B0uGESM4uEIdSkFseTJtdWpqMVk&authuser=0

        Thanx a lot again!

  26. Hammerhead

    Hi i am little bit confuse, because you motor layout and Cmix layout not are the same.
    so is this right:
    Cmix1 = Motor 4 CW
    Cmix2 = Motor 2 CCW
    Cmix3 = Motor 1 CW
    Cmix4 = Motor 3 CCW

    And how i know which are negative and positive values?
    Here you example pitch/roll/yaw:

    Pitch – – Roll + – Yaw – +
    + + – + – +

    This not look right for me? what i don´t understand right…

    I think they they should have something like this????
    Pitch – – Roll + – Yaw – +
    + + + – + –

    Btw thank you very much for the excellent blog. it´s really good and helpful for quad copter beginner like me :)

    Reply
    1. Hammerhead

      Also you have there 2 different cmix formula..
      cmix [motor number] [throttle] [pitch] [roll] [yaw]
      and
      cmix NUMBER THROTTLE ROLL PITCH YAW
      I think last one is right?

      Reply
    2. Oscar Post author

      Hi, no the numbering should follow the motor order e.g.
      cmix1 = motor 1
      cmix2 = motor 2
      ..
      ..
      you find the positive/negative from the default quadcopter cmix table (the one with all one’s the beginning of the post)
      And yes, I mistakenly written roll/pitch in the wrong order, i have corrected it now, thanks for pointing out! I have corrected it now.

      Reply
      1. Charles

        you also have the motor description wrong, should it not say…
        cmix 1 1.0, -1.0, 1.0, -1.0 (Rear right motor)
        cmix 2 1.0, -1.0, -1.0, 1.0 (Front Right motor)
        cmix 3 1.0, 1.0, 1.0, 1.0 (Rear left motor)
        cmix 4 1.0, 1.0, -1.0, -1.0 (front Left motor)

    1. Oscar Post author

      it’s fine, you can always dump the cli values and check.
      make sure there is only 1 space between values as well…

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Are you Robot? *

I only check blog comments once or twice a week, if you want a quick reply you can post your question on this forum IntoFPV.com... You might get a faster response from me there (multirotor related only).