Blackout Mini Spider Hexa (mini bouwverslag + naze32 HOWTO)

Boris, ik vond die lage look van jou wel heel vet dat ik het niet kon laten om het idee te jatten. Hope you don't mind. ;-)

Ben benieuwd hoe hij vliegt, hopen dat het morgen nog ff droog is.

9e9u8amy.jpg

2uty8aze.jpg

su9aguze.jpg
 
Ziet er goed uit wook...


Eindelijk eens na alle troubles mijn Super Spider Hex kunnen invliegen!
 
Laatst bewerkt door een moderator:
Ik was niet zo bij met soms het "onvoorsbelbare" gedrag van het assymetrie van de spider hex, wat voornamelijk bij heftige moves naar voren kwam. Dit is ook volstrekt logisch aangezien Spider Hex niet de juiste symmetrie heeft van een echte hexa.

Ik ben wat gaan zoeken over hoe ik op naze de mixer daarvoor het beste zou kunnen maken en toen kwam ik een hele mooie python script die het op een wiskundige manier mooi voor je berekend. Je dient enkel coordinaten van je motoren op te geven in X en Y vorm.

Dit is de python script wat ik gebruikt heb:

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.

# Super Spider Hex
#       Motor :  1     2     3     4     5     6     Hexa X
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)
 
# nicely output result as defines for copy-pasting
import string
print('')
print ('Mixer table HexaX')
print ('---------------------------------------------')
print('Motor:   1     2     3    4    5    6')
rows = ['PITCH  ', 'ROLL ', 'YAW   ']
for i, r in enumerate(rows):
	#print coeffs[i]
    print(r + '{' + string.join([format(c) for c in coeffs[i]], ', ') + '}')
print ('---------------------------------------------')

Om kort verhaal lang te maken. Je voert alle X,Y coordinaten en motor draai richting per motor in en je krijgt mixer waardes terug voor pitch, roll en yaw.

Na het invoeren van de juiste coordinaten ben ik op volgende mixer gekomen voor naze32
Dit in de cli invoeren en je bent klaar

Code:
mixer custom
cmix 1 1 -0.58 0.92 0.9
cmix 2 1 -0.42 -1.0 0.89
cmix 3 1 0.42 1.0 -0.89
cmix 4 1 0.58 -0.92 -0.9
cmix 5 1 -1 0 -1 
cmix 6 1 1 0 1

Een van de zaken wat het oplost is het spontaan dippen bij meer throttle wat simpelweg te verklaren was door de kleinere hoek van de armen achter wat ervoor zorgden dat er veel meer pitch authority is tegenover de voorste armen die wat meer zijwaartse hoek hebben en dus ook minder invloed op pitch.
De voorste armen hebben bijvoorbeeld wel meer invloed op roll dan de achterste die totaal geen rol invloed hebben. Kortom dit wordt allemaal niet in de standaard hex6x mixer opgevangen.

Dit wou ik even met jullie delen...
 
Laatst bewerkt:
you are a wizard !!!!
Thanks man. Probeer te helpen...had het toch beloofd ;). Maar dan hoor ik dat je de jouwe omgebouwd hebt8O

Maar even een korte toelichting op de mixer om het begrijpbaar te maken.

Bij de mixer waarde dien je de volgende zaken in te vullen
cmix <motor nummer> <throttle invloed> <roll invloed> <pitch invloed> <yaw invloed>

+ en - zijn de richtingen uiteraard

Bij alle motoren is throttle invloed gelijk namelijk. Er zijn geen hoeken in de motoren zoals vtail bijvoorbeeld.

Zie verhouding voor pitch tussen voor en achter motoren. Voor motoren krijgen wat meer met 1.0 ten opzichte van 0.9 van de achterste motoren. Hiermee haal je de verkeerde balans uit (hopelijk). Kan nog bijgesteld worden. Met de standaard mixer worden ze als gelijke behandeld namelijk en dan winnen de achterste.

Motoren Voor (pitch is 1.0 tegenover 1.07 van motoren achter, dus FC moet hier meer correctie uitvoeren):
cmix 2 1 -0.58 -1.0 0.89
cmix 4 1 0.58 -1.00 -0.89

Motoren achter (Deze motoren staan dichter bij de Y as van de frame en dat resulteert in minder invloed op de rol as ten opzichte van de anderen):
cmix 1 1 -0.42 1.07 0.9
cmix 3 1 0.42 1.07 -0.9

Middelste motoren (totaal geen invloed bij pitch)
cmix 5 1 -1 0 -1
cmix 6 1 1 0 1
 
Laatst bewerkt:
Zijn hier de settings dan nog verschillend voor de mini en de Uber hex? (ik zou zeggen van niet)
Zijn wel verschillend uiteraard. De motoren hebben andere afstanden ten opzichte van cg gekregen.
Het is wel zo dat de verhoudingen sterk op elkaar lijken en dat deze mix waarschijnlijk veel beter zal werken dan de standaard hex6x :)
 
Laatst bewerkt:
@boris, erg cool, welke coordinaten heb ji gebruikt? Wil eens even vergelijken met een normale mini hex, kijken wat ik daaruit krijg, vind de referentie dan prettig.
En hoe heb je je cg bepaald? Moet dat niet niet centre of thrust zijn?
 
@boris, erg cool, welke coordinaten heb ji gebruikt? Wil eens even vergelijken met een normale mini hex, kijken wat ik daaruit krijg, vind de referentie dan prettig.
En hoe heb je je cg bepaald? Moet dat niet niet centre of thrust zijn?
Ja bedoelde ook COT uiteraard :D. Met balanceren zorg ik ook dat het mijn COG wordt ;)

Coordinaten is kwestie vanuit COT alle X en Y coordinaten van de motoren op te meten. Ik heb het in centimeters gedaan en de berekening gedaan.
Echter de formule was gebaseerd voor openpilot FC die net wat andere motor nummering heeft en andere draai richting van de motoren, dus heb ik dat omgezet.
 
Laatst bewerkt:
Mensen....ik besef dat ik wat motoren omgedraaid had.

Hier de juiste waardes. Heb het ook in de vorige post aangepast om verwarring te voorkomen.
Het probleem was relatie tussen openpilot FC leggen en naze32 wat verwarrend is als de motor nummeringen anders zijn.


Code:
mixer custom
cmix 1 1 -0.42 1.07 0.9
cmix 2 1 -0.58 -1.0 0.89
cmix 3 1 0.42 1.07 -0.9
cmix 4 1 0.58 -1.00 -0.89
cmix 5 1 -1 0 -1 
cmix 6 1 1 0 1

EDIT:
Gecorrigeerd!
 
Laatst bewerkt:
Leuke materie,

Paar checkvragen of ik het goed begrijp.
- kleine driehoek midden van frame is COT
- Rood Op de foto zijn Y waarden
- Groen Op de foto zijn X waarden
- Afstanden moeten op basis van COT berekend worden.
- Rechtsom draaiende motoren zijn -1

Als dat klopt zal ik de np.array eens berekenen

040019a962.jpg
 
Laatst bewerkt:
Leuke materie,

Paar checkvragen of ik het goed begrijp.
- kleine driehoek midden van frame is COT
- Rood Op de foto van boven/onder is Y waarden
- Groen Op de foto van links/rechts is X waarden
- Afstanden moeten op basis van COT berekend worden.
- Rechtsom draaiende motoren zijn -1

Als dat klopt zal ik de np.array eens berekenen

f09f67cbd1.jpg

Ik kan het in mijn script invoeren. Ben hem nog verder aan het uitwerken voor de juiste naze32 vertalingen.
maar aan bovenstaande info heb ik genoeg.
 
prima, deel je de np.array even? ben wel benieuwd wat dat geworden is.

Het blijkt dus gewoon met de juiste - en + getallen te maken, aangezien de X en Y as net anders is op open pilot.
Dit is voor de Super Spider Hex de array. Ga nu een voor de normale hex maken en berekenen.
Code:
# Super Spider Hex
#       Motor :  1     2     3     4     5     6     Hexa X
A = np.array([[14,  -15,   -15,   14,   0,   0],      # Y axis
                   [ -11,  -8,    8,    11, -17,  17],       # X axis
                    [   1,   1,   -1,    -1,  -1,   1]])     # Motor cw/ccw

Je krijgt dan dit
Mixer table Super spider Hex
---------------------------------------------
Motor: 1 2 3 4 5 6
PITCH {1.0, -1.07, -1.07, 1.0, 0.0, -0.0}
ROLL {-0.58, -0.42, 0.42, 0.58, -1.0, 1.0}
YAW {0.89, 0.9, -0.9, -0.89, -1.0, 1.0}
---------------------------------------------

0f je nou 1 staat tot 0,93 of 1,07 staat tot 1.0 gebruikt maakt niet veel uit, want verhouding is bijna hetzelfde.
Ik had het een tikkeltje erger gemaakt namelijk 0,92 omdat ik mijn CG liever precies in het midden van de 2 zij motoren wil hebben voor de gemakkelijkheid in plaats van midden driehoek :D

woei dit gaat me boven de pet :D

top notch boris.
Wiskunde jonguh!
 
gaat mij ook nog boven de pet, maar net als wiskunde blijven oefenen. voor de normale hex kom ik uit op:

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
Krijg ik:

Mixer table HexaX
---------------------------------------------
Motor: 1 2 3 4 5 6
ROLL {0.44,0.56,-0.44,-0.56,1.0,-1.0}
PITCH {-0.93,1.0,-0.93,1.0,0.0,0.0}
YAW {0.84,0.83,-0.84,-0.83,-1.0,1.0}
---------------------------------------------

die moet dan vertaald worden naar:
cmix <motor nummer> <throttle invloed> <roll invloed> <pitch invloed> <yaw invloed>

Dus:
cmix 1 1 -0.44 0.93 0.84
cmix 2 1 -0.56 -1.0 0.83
cmix 3 1 0.44 1.0 -0.83
cmix 4 1 0.56 -0.93 -0.84
cmix 5 1 -1 0 -1
cmix 6 1 1 0 1

kijken of de meester het goedkeurt :-)

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. .....
 
Back
Top