Blackout Mini Spider Hexa (mini bouwverslag + naze32 HOWTO)

Voordat ik het controleer.
Ik mis uit jouw plaatje de X coordinaten van de achterste motoren. Ik kan ze zelf op basis van foto proberen te herleiden natuurlijk op basis van wat cosinus en sinus formules, maar misschien had je die voor me?
Dus punt waar lijn B en lijn 2 elkaar kruisen ;)
 
EDIT: Snap jouw getallen niet echt in post 234, volgens mij zouden M1 en 3 negatief aan elkaar, M2 en M4 ook, en M5 en M6 ook moeten zijn. Bij jou zie ik dat niet terugkomen. .....

Daar heb ik de correctie uitgevoerd om de juiste + en - voor de mixer te krijgen in naze. Heb het gevoel dat naze32 een reversed pitch heeft ofzo, want dat kwam niet overheen volgens de X, Y


Dit is de standaard mixer en de sanity check vereist dat de min en plus overal hetzelfde is voor de naze

Code:
mixer hex6x
cmix 1	1 -0.500  0.866 1.000
cmix 2	1 -0.500 -0.866 1.000
cmix 3	1  0.500 0.866 -1.000
cmix 4	1  0.500 -0.866 -1.000
cmix 5	1 -1.000  0.000 -1.000
cmix 6	1 1.000  0.000  1.000
 
Op basis van (5 mm correctie op x as ivm iets naar achterliggende cot to motor 5,6

Code:
A = np.array([[0.77,0.97,-0.77,-0.97,1.45,-1.45],      # Y axis
             [-1.15,1.23,-1.15,1.23,0,0],     # X axis
             [1,1,-1,-1,-1,1]])     # Motor cw/ccw

Maar even simpel gezegd voor naze maakt dat toch allemaal niet uit? daar zou ik voor de roll settings voor M1 en M3 tegengestelde getellen verwachten of klopt dat niet?

Voor de normale hex dus x van 123 MM naar achterste motor en 115 naar voorste
 
Op basis van (5 mm correctie op x as ivm iets naar achterliggende cot to motor 5,6

Code:
A = np.array([[0.77,0.97,-0.77,-0.97,1.45,-1.45],      # Y axis
             [-1.15,1.23,-1.15,1.23,0,0],     # X axis
             [1,1,-1,-1,-1,1]])     # Motor cw/ccw

Maar even simpel gezegd voor naze maakt dat toch allemaal niet uit? daar zou ik voor de roll settings voor M1 en M3 tegengestelde getellen verwachten of klopt dat niet?
Dat heb ik ook en dat krijg je uit de formule :D

cmix 1 1 -0.58 0.92 0.89
cmix 3 1 0.42 1.0 -0.9
 
Dat is toch raar? Voor de roll kan toch niet de ene motor veel meer verschil maken, dat zou links of rechtsom rollen hier andere roll geven. Snap er nog nix van
 
Op basis van (5 mm correctie op x as ivm iets naar achterliggende cot to motor 5,6

Code:
A = np.array([[0.77,0.97,-0.77,-0.97,1.45,-1.45],      # Y axis
             [-1.15,1.23,-1.15,1.23,0,0],     # X axis
             [1,1,-1,-1,-1,1]])     # Motor cw/ccw

Maar even simpel gezegd voor naze maakt dat toch allemaal niet uit? daar zou ik voor de roll settings voor M1 en M3 tegengestelde getellen verwachten of klopt dat niet?

Voor de normale hex dus x van 123 MM naar achterste motor en 115 naar voorste
Je Y axis moet 0 zijn bij motor 5 en 6! Dat valt me als eerste op! Heb je Y en X helemaal omgedraaid hier?
 
Dat is toch raar? Voor de roll kan toch niet de ene motor veel meer verschil maken, dat zou links of rechtsom rollen hier andere roll geven. Snap er nog nix van

Tegenovergestelde motoren hebben tegenovergestelde Thrust vectoren! Motor 1 en 3 verzorgen beide roll in tegenovergestende richting!

Zie hier overzicht
hexa-x.jpg
 
Dacht dat ze tegenovergesteld aan elkaar moesten zijn.

Nu alleen nog even de vraag over X en Y:
Y is dus gezien vanaf COT, afstand van motor 2 en 4 tot COT, 6 en 5 tot COT en 1 en 3 tot COT? waarbij motor 5 en 6 vaak 0 is tot COT. in het plaatje hierboven van jou is Y dus omhoog en x van links naar rechts?
 
Laatst bewerkt:
Wacht je hebt inderdaad een fout bij mij ontdekt....

ga het even corrigeren. Alweer verwarring met motor 1 van openpilot!
 
Final correctie Super hex! Thanks voor het scherp houden ;)
Ik haalde 1 en 2 door mekaar

Code:
cmix 1 1 -0.42 1.00 0.9
cmix 2 1 -0.58 -0.93 0.89
cmix 3 1 0.42 1.00 -0.9
cmix 4 1 0.58 -0.93 -0.89
cmix 5 1 -1 0 -1 
cmix 6 1 1 0 1
 
en wat is daarvoor je np.array geweest? probeer even een juiste vertaal tabel te maken voor
script motor 1 = naze M..
script motor 2 = naze M..
script motor 3 = naze M..
script motor 4 = naze M..
script motor 5 = naze M..
script motor 6 = naze M..

Dan kan er straks ook nog een handleiding van komen. Of ik moet even snel python leren om de output ineens goed te maken. Moet kunnen.
 
Dit is het tabel

X as links en rechts met links negatief en Y as is boven negatief automatisch!
Code:
# Super Spider Hex
A = np.array([[15,  -14,   15,   -14,   0,   0],      # Y axis
             [ -8,  -11,    8,    11, -17,  17],       # X axis
             [   1,   1,   -1,    -1,  -1,   1]])     # Motor cw/ccw


@richardoe
In jouw plaatje is links rechts Y met links negatief en rechts positief en Boven beneden X as met beneden negatief ;)
 
Ok voor de normale Mini spider hex is het dit dan op basis van je tekening:

Code:
# mini Spider Hex
#       Motor :  1     2     3     4     5     6     Hexa X
A = np.array([[128,  -110,   128,   -110,   0,   0],      # Y axis
             [ -72,  -96.5,  72, 96.5, -145,  145],       # X axis
             [   1,   1,   -1,    -1,  -1,   1]])     # Motor cw/ccw


Output
Mixer table HexaX
---------------------------------------------
Motor: 1 2 3 4 5 6
PITCH {1.0, -0.86, 1.0, -0.86, -0.0, 0.0}
ROLL {-0.42, -0.58, 0.42, 0.58, -1.0, 1.0}
YAW {0.87, 0.85, -0.87, -0.85, -1.0, 1.0}
---------------------------------------------



En mixer cli commands voor naze32!

Mini Spider Hex
Code:
mixer custom
cmix 1 1 -0.42 1.00 0.87
cmix 2 1 -0.58 -0.86 0.85
cmix 3 1 0.42 1.00 -0.87
cmix 4 1 0.58 -0.86 -0.85
cmix 5 1 -1 0 -1 
cmix 6 1 1 0 1

Even ter vergelijking nogmaals!

Super Spider Hex
Code:
mixer custom
cmix 1 1 -0.42 1.00 0.9
cmix 2 1 -0.58 -0.93 0.89
cmix 3 1 0.42 1.00 -0.9
cmix 4 1 0.58 -0.93 -0.89
cmix 5 1 -1 0 -1 
cmix 6 1 1 0 1

Default hex6x
Code:
mixer hex6x
cmix 1	1 -0.500  0.866 1.000
cmix 2	1 -0.500 -0.866 1.000
cmix 3	1  0.500 0.866 -1.000
cmix 4	1  0.500 -0.866 -1.000
cmix 5	1 -1.000  0.000 -1.000
cmix 6	1 1.000  0.000  1.000

het is grappig om te zien dat met de upgrade naar super spider hex de rol geometrie niet verandert, maar dat de yaw en pitch andere verhoudingen krijgen!

De mini hex komt dichter in de buurt van de DEFAULT verhoudingen, waardoor je minder snel dat pitch gedrag had.

Samevatting:
Hierbij zie je verschillen in verhoudingen op iedere as.
Pitch: Mini hex [rear : front=1 : 0.86], Super Hex [rear : front=1 : 0.93]
Yaw: Mini Hex ratio [front : rear : middle=0.86 :0 :87 : 1], Super Spider Hex ratio [front : rear : middle=0.89 : 0.9 : 1]
Roll: Ratio hetzelfde op beide [front : middle : rear=0.58 : 1 : 0.42]

Default verhoudingen:
Pitch: [front:rear = 0.866:0.866]
Roll: [front:middle:rear= 0.5:1:0.5]
Yaw: [front:middle:rear=1:1:1]
 
Laatst bewerkt:
@boris, mooie samenvatting, voor toekomst het script aangepast zodat die 1 op 1 de cmixes uitspuugt, dus alleen nog maar de input nodig. Komen jouw beide waarden precies uit.

PS voor de python nerds vergeef me de omslachtige manier, kan vast mooier maar is mijn eerste keer met python :-)

Code:
#!/usr/bin/python
# Python script for naze32 multirotor mixers
# 
######################################################################################################

import numpy as np
 
# The first two lines of the A matrix represent the coordinates of each rotor in the X,Y plane,
# and the third line the direction in which they spin.

# Settings Mini Hex
A = np.array([[128,  -110,   128,   -110,   0,   0],      # Y axis
             [ -72,  -96.5,  72, 96.5, -145,  145],       # X axis
             [   1,   1,   -1,    -1,  -1,   1]])     # Motor cw/ccw


# Settings Super Hex
#A = np.array([[15,  -14,   15,   -14,   0,   0],      # Y axis
#             [ -8,  -11,    8,    11, -17,  17],       # X axis
#             [   1,   1,   -1,    -1,  -1,   1]])     # Motor cw/ccw

# Moore-Penrose pseudoinverse of A
B = np.linalg.pinv(A)
# normalizing columns of B and transpose
B_normalized = (B.T / B.max(axis=0)[:, np.newaxis])
 
# scale and round to 1 to return final coefficients
coeffs = np.around(1*B_normalized,2)
 
import string
print('')
print ('Custom mix voor naze')
print ('---------------------------------------------')
print('Motor:   1     2     3    4    5    6')
rows = ['PITCH  ', 'ROLL ', 'YAW   ']
for i, r in enumerate(rows):
    print(r + '{' + ','.join([format(c) for c in coeffs[i]]) + '}')

    x=0
    for c in coeffs[1]:
        #print(format(c))
        x += 1
        if x==1:
            roll1=format(c)
        if x==2:
            roll2=format(c)
        if x==3:
            roll3=format(c)
        if x==4:
            roll4=format(c)
        if x==5:
            roll5=format(c)
        if x==6:
            roll6=format(c)

    x=0
    for c in coeffs[0]:     
        #print(format(c))
        x += 1
        if x==1:
            pitch1=format(c)
        if x==2:
            pitch2=format(c)
        if x==3:
            pitch3=format(c)
        if x==4:
            pitch4=format(c)
        if x==5:
            pitch5=format(c)
        if x==6:
            pitch6=format(c)

    x=0
    for c in coeffs[2]:
        #print(format(c))
        x += 1
        if x==1:
            yaw1=format(c)
        if x==2:
            yaw2=format(c)
        if x==3:
            yaw3=format(c)
        if x==4:
            yaw4=format(c)
        if x==5:
            yaw5=format(c)
        if x==6:
            yaw6=format(c)
# nicely output result as defines for copy-pasting
print ('---------------------------------------------')
print ('')
print ('mixer custom')
print ('cmix 1 1 ' + roll1 + ' ' + pitch1 + ' ' + yaw1)
print ('cmix 2 1 ' + roll2 + ' ' + pitch2 + ' ' + yaw2)
print ('cmix 3 1 ' + roll3 + ' ' + pitch3 + ' ' + yaw3)
print ('cmix 4 1 ' + roll4 + ' ' + pitch4 + ' ' + yaw4)
print('cmix 5 1 ' + roll5 + ' ' + pitch5 + ' ' + yaw5)
print('cmix 6 1 ' + roll6 + ' ' + pitch6 + ' ' + yaw6)

komt dan uit:
Code:
Custom mix voor naze
---------------------------------------------
Motor:   1     2     3    4    5    6
PITCH  {1.0,-0.86,1.0,-0.86,-0.0,0.0}
ROLL {-0.42,-0.58,0.42,0.58,-1.0,1.0}
YAW   {0.87,0.85,-0.87,-0.85,-1.0,1.0}
---------------------------------------------

mixer custom
cmix 1 1 -0.42 1.0 0.87
cmix 2 1 -0.58 -0.86 0.85
cmix 3 1 0.42 1.0 -0.87
cmix 4 1 0.58 -0.86 -0.85
cmix 5 1 -1.0 -0.0 -1.0
cmix 6 1 1.0 0.0 1.0
 
Thanks man! Had ik ook aan zitten denken om te doen! Blij dat ik het niet dubbel heb gedaan :)

We zouden nog een sanity check gelijk kunnen opbouwen wat naze zelf ook doet als je de mixes invoert :d.

Dus als de geometrie onmogelijk is dan een Error uitspugen :D

Heb overigens een volle lipo en de hex bij....straks onderweg naar huis even snel testen op een veldje :D
 
Ik twijfel nog over die input getallen, ga ik nog even induiken. Ben benieuwd of die van jou nu goed vliegt in ieder geval :-) in ieder geval in mijn plaatje (normale hex) de A en de B omgedraait als ik het nameet. Plaatje in post 235 nu aangepast. De voorarmen liggen immers verder van de COT af dan de achterarmen.
Als ik dat vertaal naar de super hex dan is dat andersom. Dat vertrouw ik nog niet.
 
Ik twijfel nog over die input getallen, ga ik nog even induiken. Ben benieuwd of die van jou nu goed vliegt in ieder geval :-) in ieder geval in mijn plaatje (normale hex) de A en de B omgedraait als ik het nameet. Plaatje in post 235 nu aangepast. De voorarmen liggen immers verder van de COT af dan de achterarmen.
Als ik dat vertaal naar de super hex dan is dat andersom. Dat vertrouw ik nog niet.
de COT is dat driehoekje, maar dat maakt het te complex voor de algorythme. Ik hou mijn COT in het midden van de buitenste armen wat misschien een halve cm voor het midden van het driehoekje is. Daar is ook mijn CG, want anders moet mijn lipo nog verder naar achteren. Als je dat wel zou doen dan zouden ineens armen links en rechts pitch gaan beinvloeden namelijk en dat wil ik niet.
Dit is al vele malen correcter dan de default waardes.
Ik heb gisteren overigens gevlogen met enkel omgedraaide rol verhoudingen en dat voelde al goed, maar was enkel wat hoveren in het donker.

De waardes zijn zeer logisch eigenlijk, dus het moet kloppen.

Denk er eens over na ten opzichte van een True hex model. De armen achter krijgen minder roll authority....veel minder, maar wel meer pitch. De armen voor krijgen van beide minder (Kortere armen) en langer afstand naar COT.
De yaw is een zeer logische ook :D. Des te langer de armen meer yaw authority met als meeste de middelste armen, want die hebben nog een grotere angle of attack naar de frame!
Er is niets vreemds aan de getallen op te merken eigenlijk. Deze formule is trouwens wat toegepast wordt op andere FC's en is geen geheim

Ik heb de formule gecontroleerd en reverse ge-engineered vanaf een true hex model om zodoende de correcte mix settings te krijgen en het klopte.
 
Allemaal met je eens, maar voor de theorie om waar te zijn en met de juiste AB getallen bij mij dan moet het zo zijn dat bij de Super hex de achterarmen verder van motor 5/6 af liggen dan de voorarmen..

Bij de normale hex is dat andersom. mijn voorarmen liggen juist verder van motor 5/6 af dan de achterarmen.

dat is waar ik nog verbaasd ben. voor de berekening betekent dit 2 getallen die wijzigen (logisch alleen voor de pitch van 2 motoren van kleiner dan 1 naar groter dan 1) die nu in de naze zitten en ga NU testen :-)

mixer custom
cmix 1 1 -0.42 1.0 0.87
cmix 2 1 -0.58 -1.16 0.85
cmix 3 1 0.42 1.0 -0.87
cmix 4 1 0.58 -1.16 -0.85
cmix 5 1 -1.0 0.0 -1.0
cmix 6 1 1.0 0.0 1.0
 
Trouwens ik had wel een wijziging in mijn python script gedaan wat ik niet genoemd had!!!

Misschien vandaar de verwarring! Ik pas de eerste post wel aan! Ik had de X en Y namelijk omgedraaid daar
Code:
rows = ['PITCH  ', 'ROLL ', 'YAW   ']

Post is aangepast hier:
[post223]
 
Laatst bewerkt door een moderator:
Allemaal met je eens, maar voor de theorie om waar te zijn en met de juiste AB getallen bij mij dan moet het zo zijn dat bij de Super hex de achterarmen verder van motor 5/6 af liggen dan de voorarmen..

Bij de normale hex is dat andersom. mijn voorarmen liggen juist verder van motor 5/6 af dan de achterarmen.

dat is waar ik nog verbaasd ben. voor de berekening betekent dit 2 getallen die wijzigen (logisch alleen voor de pitch van 2 motoren van kleiner dan 1 naar groter dan 1) die nu in de naze zitten en ga NU testen :-)

mixer custom
cmix 1 1 -0.42 1.0 0.87
cmix 2 1 -0.58 -1.16 0.85
cmix 3 1 0.42 1.0 -0.87
cmix 4 1 0.58 -1.16 -0.85
cmix 5 1 -1.0 0.0 -1.0
cmix 6 1 1.0 0.0 1.0
Pitch axis heeft heeft niets met de armen in het midden te maken, want die doen er niks aan en ook niet in de originele true hex mix. Het is puur afstand tot aan CG die dat bepaalt samen met angle of attach. Oftewel vector in Y as. Die is gewoon groter.
 
Back
Top