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 !



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".