Le Hangar de Kierra

Des fusées, des avions, et d'autres! Partagez vos modèles ici. Pour plus de personnalisation, de partage et d'aspect communautaire, n'hésitez pas à utiliser notre outil hangar !
Avatar de l’utilisateur
Kierra
Messages : 19
Inscription : 05 novembre 2018, 15:58
Contact :

Le Hangar de Kierra

Message par Kierra » 22 janvier 2019, 15:16

Le Quadricoptère

Voici la première de mes créations qui mérite d'être présentée, le Quadricoptère ! Comme son nom l'indique, c'est un drone à quatres rotors. Les rotors ne sont pas des moteurs ajoutés par un mod, mais des rotors construits avec Infernal Robotics. Les controles du drone (attitude/rotors) sont gérés via kOs.

Cela donne un craft très maniable, capable de vol stationnaire et muni d'une petite caméra pour faire de jolies prises de vues !

Image
Image
Image

Mods utilisés : Infernal Robotics, kOs, Procedural Parts, B9 Procedural Wings, RLA Reborn, Action Group ReExtended
Craft : https://cdn.discordapp.com/attachments/ ... e_V2.craft


Le script :

Code : Tout sélectionner

SET A1 TO ADDONS:IR:GROUPS[2].
SET A2 TO ADDONS:IR:GROUPS[4].
SET B1 TO ADDONS:IR:GROUPS[1].
SET B2 TO ADDONS:IR:GROUPS[3].

SET A1Rotor TO A1:SERVOS[0].
SET A1Pas TO list(A1:SERVOS[1],A1:SERVOS[2],A1:SERVOS[3],A1:SERVOS[4],A1:SERVOS[5],A1:SERVOS[6]).

SET A2Rotor TO A2:SERVOS[0].
SET A2Pas TO list(A2:SERVOS[1],A2:SERVOS[2],A2:SERVOS[3],A2:SERVOS[4],A2:SERVOS[5],A2:SERVOS[6]).

SET B1Rotor TO B1:SERVOS[0].
SET B1Pas TO list(B1:SERVOS[1],B1:SERVOS[2],B1:SERVOS[3],B1:SERVOS[4],B1:SERVOS[5],B1:SERVOS[6]).

SET B2Rotor TO B2:SERVOS[0].
SET B2Pas TO list(B2:SERVOS[1],B2:SERVOS[2],B2:SERVOS[3],B2:SERVOS[4],B2:SERVOS[5],B2:SERVOS[6]).

SET Camera TO ADDONS:IR:GROUPS[0].
SET CameraX TO Camera:SERVOS[0].
SET CameraY TO Camera:SERVOS[1].

SET VA1Pas to 0.
SET VA2Pas to 0.
SET VB1Pas to 0.
SET VB2Pas to 0.

SET VA1SpeedRotor to 0.
SET VA2SpeedRotor to 0.
SET VB1SpeedRotor to 0.
SET VB2SpeedRotor to 0.

SET VCameraX to 0.
SET VCAmeraY TO 0.

SET NoHorizontal to SHIP:FACING.
SET KillRoll to SHIP:FACING:ROLL.
SET ControlRate TO 0.5.

function StartRotationRotor {
A1Rotor:MOVERIGHT().
A2Rotor:MOVERIGHT().
B1Rotor:MOVERIGHT().
B2Rotor:MOVERIGHT().
}
function StopRotationRotor {
A1Rotor:STOP().
A2Rotor:STOP().
B1Rotor:STOP().
B2Rotor:STOP().
}

function FA1Pas {
A1Pas[0]:MOVETO(VA1Pas,1).
A1Pas[1]:MOVETO(VA1Pas,1).
A1Pas[2]:MOVETO(VA1Pas,1).
A1Pas[3]:MOVETO(VA1Pas,1).
A1Pas[4]:MOVETO(VA1Pas,1).
A1Pas[5]:MOVETO(VA1Pas,1).
}
function FA2Pas {
A2Pas[0]:MOVETO(VA2Pas,1).
A2Pas[1]:MOVETO(VA2Pas,1).
A2Pas[2]:MOVETO(VA2Pas,1).
A2Pas[3]:MOVETO(VA2Pas,1).
A2Pas[4]:MOVETO(VA2Pas,1).
A2Pas[5]:MOVETO(VA2Pas,1).
}
function FB1Pas {
B1Pas[0]:MOVETO(VB1Pas,1).
B1Pas[1]:MOVETO(VB1Pas,1).
B1Pas[2]:MOVETO(VB1Pas,1).
B1Pas[3]:MOVETO(VB1Pas,1).
B1Pas[4]:MOVETO(VB1Pas,1).
B1Pas[5]:MOVETO(VB1Pas,1).
}
function FB2Pas {
B2Pas[0]:MOVETO(VB2Pas,1).
B2Pas[1]:MOVETO(VB2Pas,1).
B2Pas[2]:MOVETO(VB2Pas,1).
B2Pas[3]:MOVETO(VB2Pas,1).
B2Pas[4]:MOVETO(VB2Pas,1).
B2Pas[5]:MOVETO(VB2Pas,1).
}
function FPasGen {
FA1Pas().
FA2Pas().
FB1Pas().
FB2Pas().
}

function FA1RotorSpeed {
SET A1Rotor:SPEED to VA1SpeedRotor.
}
function FA2RotorSpeed {
SET A2Rotor:SPEED to VA2SpeedRotor.
}
function FB1RotorSpeed {
SET B1Rotor:SPEED to VB1SpeedRotor.
}
function FB2RotorSpeed {
SET B2Rotor:SPEED to VB2SpeedRotor.
}
function FRotorSpeedGen {
FA1RotorSpeed().
FA2RotorSpeed().
FB1RotorSpeed().
FB2RotorSpeed().
}

function FCameraX {
CameraX:MOVETO(VCameraX,1).
}
function FCameraY {
CameraY:MOVETO(VCameraY,1).
}

// Fonction Positionnement
function Initial {			
LOCK steering to NoHorizontal.
SET VA1SpeedRotor TO 120.
SET VB1SpeedRotor TO 120.
SET VA2SpeedRotor TO 120.
SET VB2SpeedRotor TO 120.
SET VA1Pas TO 25.
SET VA2Pas TO 25.
SET VB1Pas TO 25.
SET VB2Pas TO 25.
FPasGen().
FRotorSpeedGen().
StopRotationRotor().
StartRotationRotor().
}

// Fonction de calibrages
function CalibrageVSpeed {
    parameter TimeCalibrage,SpeedIn,PasCalibrageRate.
    SET AffineRate to TimeCalibrage.
    UNTIL TimeCalibrage = 0 {
        SET VSpeedCal1 to SHIP:VERTICALSPEED.
        If VSpeedCal1 > SpeedIn {
            SET VA1Pas to VA1PAS - PasCalibrageRate.
            SET VA2Pas to VA2PAS - PasCalibrageRate.
            SET VB1Pas to VB1PAS - PasCalibrageRate.
            SET VB2Pas to VB2PAS - PasCalibrageRate.
        } else if VSpeedCal1 < SpeedIn {
            SET VA1Pas to VA1PAS + PasCalibrageRate.
            SET VA2Pas to VA2PAS + PasCalibrageRate.
            SET VB1Pas to VB1PAS + PasCalibrageRate.
            SET VB2Pas to VB2PAS + PasCalibrageRate.
        }
        FPasGen().
        SET TimeCalibrage to TimeCalibrage - 1.
        SET PasCalibrageRate to PasCalibrageRate - PasCalibrageRate / AffineRate.
        print "Temps de calibrage restant : " + TimeCalibrage + "s".
        wait 1.
    }
    wait 1.
    print "Vitesse verticale finale : " + SHIP:VERTICALSPEED.
}	

// Fonction Decollage/Atterissage
function Decollage {
StartRotationRotor().
Initial().
print "Decollage commencé".
WAIT UNTIL SHIP:VERTICALSPEED > 1.
print "Decollage OK".
WAIT UNTIL ALT:RADAR > 50.
CalibrageVSpeed(40,0,1).
}
function Atterissage {
Initial().
CalibrageVSpeed(5,0,1).
print "Annulation de la vitesse horizontale".
WAIT UNTIL SHIP:GROUNDSPEED < 1.
print "Atterissage commencé".
CalibrageVSpeed(15,-3,1).
WAIT UNTIL ALT:RADAR < 1.
print "Atterissage OK, exctinction des rotors".
StopRotationRotor().
}

// Fonction de controle
function FCtrlA1PasPlus {				
SET VA1Pas TO VA1Pas + ControlRate.
FA1Pas().
}
function FCtrlA2PasPlus {
SET VA2Pas TO VA2Pas + ControlRate.
FA2Pas().
}
function FCtrlB1PasPlus {
SET VB1Pas TO VB1Pas + ControlRate.
FB1Pas().
}
function FCtrlB2PasPlus {
SET VB2Pas TO VB2Pas + ControlRate.
FB2Pas().
}
function FCtrlPasPlusGen {
FCtrlA1PasPlus().
FCtrlA2PasPlus().
FCtrlB1PasPlus().
FCtrlB2PasPlus().
}

function FCtrlA1PasMoins {				
SET VA1Pas TO VA1Pas - ControlRate.
FA1Pas().
}
function FCtrlA2PasMoins {
SET VA2Pas TO VA2Pas - ControlRate.
FA2Pas().
}
function FCtrlB1PasMoins {
SET VB1Pas TO VB1Pas - ControlRate.
FB1Pas().
}
function FCtrlB2PasMoins {
SET VB2Pas TO VB2Pas - ControlRate.
FB2Pas().
}
function FCtrlPasMoinsGen {
FCtrlA1PasMoins().
FCtrlA2PasMoins().
FCtrlB1PasMoins().
FCtrlB2PasMoins().
}

function FCtrlA1SpeedPlusRotor {
SET VA1SpeedRotor TO VA1SpeedRotor + ControlRate * 2.
FA1RotorSpeed().
StopRotationRotor().
StartRotationRotor().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
}
function FCtrlA2SpeedPlusRotor {
SET VA2SpeedRotor TO VA2SpeedRotor + ControlRate * 2.
FA2RotorSpeed().
StopRotationRotor().
StartRotationRotor().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
}
function FCtrlB1SpeedPlusRotor {
SET VB1SpeedRotor TO VB1SpeedRotor + ControlRate * 2.
FB1RotorSpeed().
StopRotationRotor().
StartRotationRotor().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
}
function FCtrlB2SpeedPlusRotor {
SET VB2SpeedRotor TO VB2SpeedRotor + ControlRate * 2.
FB2RotorSpeed().
StopRotationRotor().
StartRotationRotor().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
}

function FCtrlA1SpeedMoinsRotor {
SET VA1SpeedRotor TO VA1SpeedRotor - ControlRate * 2.
FA1RotorSpeed().
StopRotationRotor().
StartRotationRotor().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
}
function FCtrlA2SpeedMoinsRotor {
SET VA2SpeedRotor TO VA2SpeedRotor - ControlRate * 2.
FA2RotorSpeed().
StopRotationRotor().
StartRotationRotor().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
}
function FCtrlB1SpeedMoinsRotor {
SET VB1SpeedRotor TO VB1SpeedRotor - ControlRate * 2.
FB1RotorSpeed().
StopRotationRotor().
StartRotationRotor().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
}
function FCtrlB2SpeedMoinsRotor {
SET VB2SpeedRotor TO VB2SpeedRotor - ControlRate * 2.
FB2RotorSpeed().
StopRotationRotor().
StartRotationRotor().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
}

function FCtrlCameraXMoins {
SET VCameraX TO VCameraX - ControlRate * 4.
FCameraX().
}
function FCtrlCameraXPlus {
SET VCameraX TO VCameraX + ControlRate * 4.
FCameraX().
}
function FCtrlCameraYMoins {
SET VCameraY TO VCameraY - ControlRate * 4.
FCameraY().
}
function FCtrlCameraYPlus {
SET VCameraY TO VCameraY + ControlRate * 4.
FCameraY().
}

// Fonction input
ON AG8 {
initial().
PRESERVE.
}
ON AG9 {
decollage().
PRESERVE.
}
ON AG10 {
atterissage().
PRESERVE.
}
ON AG7 {
CalibrageVSpeed(20,0,1).
PRESERVE.
}

ON AG11 {			// W - Augmentation du pas générale
FCtrlPasPlusGen().
PRESERVE.
}
ON AG12 {			// X - Baisse du pas générale
FCtrlPasMoinsGen().
PRESERVE.
}

ON AG13 {
FCtrlA1SpeedPlusRotor(). // Z - X+
FCtrlB1SpeedPlusRotor().
PRESERVE.
}
ON AG14 {
FCtrlA1SpeedMoinsRotor(). // S - X-
FCtrlB1SpeedMoinsRotor().
PRESERVE.
}
ON AG15 {				  // Z - Z+
FCtrlB2PasPlus().
FCtrlA1PasPlus().
FB2Pas().
FA1Pas().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
PRESERVE.
}
ON AG16 {					// Q - Z-
FCtrlB2PasMoins().
FCtrlA1PasMoins().
FB2Pas().
FA1Pas().
LOCK steering to R(SHIP:FACING:PITCH,SHIP:FACING:YAW,KillRoll).
PRESERVE. 
}

ON AG17 {
FCtrlCameraXMoins().
PRESERVE.
}
ON AG18 {
FCtrlCameraXPlus().
PRESERVE.
}
ON AG19 {
FCtrlCameraYMoins().
PRESERVE.
}
ON AG20 {
FCtrlCameraYPlus().
PRESERVE.
}


LOCK steering TO NoHorizontal.
clearscreen.
print "Fonctions correctement initialisées".

Avatar de l’utilisateur
Rothor
Messages : 502
Inscription : 16 novembre 2015, 17:19
Localisation : Dans le VAB, à bricoler
Contact :

Re: Le Hangar de Kierra

Message par Rothor » 22 janvier 2019, 16:47

Sympa. J'ai jamais vraiment eu le courage de me mettre à KOS, mais en regardant ton script, je me permets une petite remarque d'ordre mécanique :) Si j'ai bien compris, les quatre rotors tournent tous dans le même sens. Et ça s'est pas idéal. Je m'explique : chaque rotor produit un effet gyroscopique plus ou moins gênants (exemple : Roulis involontaire induit par une manœuvre de tangage). Comme ils tournent tous dans le même sens, les effets s'ajoutent. En inversant le sens de rotation par rapport à l'axe de symétrie du véhicule (gauche-droite), les effets de gauche se retranche aux effets de droites, et c'est bien mieux ! Mais bon, je suis pas sûr que les effets gyroscopiques soient bien restitués dans KSP.

Avatar de l’utilisateur
Kierra
Messages : 19
Inscription : 05 novembre 2018, 15:58
Contact :

Re: Le Hangar de Kierra

Message par Kierra » 22 janvier 2019, 18:02

Non, ils ne tournent pas dans le même sens comme pourrait le laisser croire le script ! J'ai préféré inversé leur sens de rotation directement avec Infernal Robotics. Il est vrai que j'aurais pu le faire directement avec kOs, mais... je n'y ai simplement pas pensé. Pour donner un ordre d'idée de ce que donne de configuration des servos d'IR :
Image
Et du coup, les rotors sont montés ainsi :

A B
B A
A = Rotation horaire, B = Rotation antihoraire

Pour le coup je confirme, les effets gyroscopiques sont bien gerés par KSP/IR !

Avatar de l’utilisateur
Rothor
Messages : 502
Inscription : 16 novembre 2015, 17:19
Localisation : Dans le VAB, à bricoler
Contact :

Re: Le Hangar de Kierra

Message par Rothor » 22 janvier 2019, 19:17

ah ok ! c'est pas plus mal comme ça en fait :) Pour continuer sur les effets inertiels, ils ne sont pas parfaitement implémentés dans KSP. Enfin, disons plutôt qu'il y a moyen de contourner les lois de la physique Kerbalienne via l'usage de certains mods. Scott Manley a fait une vidéo sur le sujet il y a quelques temps.


Avatar de l’utilisateur
Kierra
Messages : 19
Inscription : 05 novembre 2018, 15:58
Contact :

Re: Le Hangar de Kierra

Message par Kierra » 11 février 2019, 02:03

Image
Image

Prototype d'un drone pour Titan... très inspiré de Dragonfly, le tout (instant autopromo) sur le mod KSRSS !

Plus d'info à venir, une fois n'est pas coutume, je vais faire un script complet de gestion de drone, et ça donnera lieu à une belle mission pour envoyer le drone ainsi qu'un orbiteur principal et quelques cubesats de relais !

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit