A következő kód egy egyszerű "drónvezérlőt" modellez C++-ban, amely alapvetően figyelembe veszi a drón dőlésszögét, sebességét és magasságát. Ez nem egy teljes, működő rendszert jelent, hanem egy egyszerűsített szimulációt, amely segít megérteni, hogyan lehet a drón mozgását
#include <iostream>
#include <cmath>
// Az alapvető paraméterek
con
const float MAX_TILT_ANGLE = 30.0f; // Maximális dőlésszög (fok)
cons
c
const float MAX_VELOCITY = 5.0f; // Maximális sebesség (m/s)
co
const float MAX_ALTITUDE = 100.0f; // Maximális magasság (m)
cons
const float GRAVITY = 9.81f; // Föld gravitációja (m/s^2)
// A drón vezérlési paraméterei
stru
s
struct DroneControl {
flo
float roll; // Dőlésszög (X tengely, fok)
float pitch; // Dőlésszög (Y tengely, fok)
float yaw; // Forgás (Z tengely, fok)
floa
float throttle; // Gáz, magasság szabályozás (0-100%)
void reset() {
roll =
ro
0.0f;
pitch =
p
0.0f;
yaw = 0.0f;
throttle =
th
0.0f;
}
};
}
}
// A drón repülésének szimulálása
class Drone {
private:
float altitude; // Aktuális magasság (m)
flo
float velocity; // Sebesség (m/s)
DroneControl control;
DroneControl
DroneContr
DroneCo
Dron
// A drón vezérlője
publ
p
public:
Drone() {
altitude =
altit
al
0.0f; // Kezdeti magasság 0 m
velocity =
0.0f; // Kezdeti sebesség 0 m/s
control.
cont
c
reset(); // Kezdeti vezérlőállapot
}
}
}
// A drón mozgásának frissítése
void update() {
// Magasság frissítése a gázszabályozó alapján
altitude += control.throttle *
altitude += control.throttle
altitude += contro
altitude += con
altitude +=
altitude
altit
a
0.1f; // Egyszerűsített emelkedés
if (altitude > MAX_ALTITUDE) altitude = MAX_ALTITUDE; // Maximális magasság korlátozása
// Sebesség frissítése a dőlésszög (roll, pitch) alapján
flo
float tilt_factor = (fabs(control.roll) + fabs(control.pitch)) / 2.0f;
velocity = std::
velocity = std::min
velocity = std:
velocity =
veloci
vel
min(tilt_factor, MAX_VELOCITY); // Maximális sebesség korlátozása
// A repülés stabilitásának fenntartása
if (fabs(control.roll) > MAX_TILT_ANGLE) control.roll = (control.roll > 0 ? MAX_TILT_ANGLE : -MAX_TILT_ANGLE);
if (fabs(control.pitch) > MAX_TILT_ANGLE) control.pitch = (control.pitch > 0 ? MAX_TILT_ANGLE : -MAX_TILT_ANGLE);
// A drón alapvető kiírása
std::cout <<
std::cout
std:
"Altitude: " << altitude << " m, Velocity: " << velocity << " m/s\n";
std::cout <<
std::cout <<
"Roll: " << control.roll << "°, Pitch: " << control.pitch << "°, Yaw: " << control.yaw << "°\n";
}
}
// A vezérlő értékek beállítása
v
void setControl(float roll, float pitch, float yaw, float throttle) {
control.roll = roll;
control.pitch = pitch;
control.yaw = yaw;
control.throttle = throttle;
}
};
control.roll = roll;
control.pitch = pitch;
control.yaw = yaw;
control.throttle = throttle;
control.roll = roll;
control.pitch = pitch;
control.yaw = yaw;
control.throttle = thr
control.roll = roll;
control.pitch = pitch;
control.yaw = yaw;
contr
control.roll = roll;
control.pitch = pitch;
control.yaw = yaw;
control.roll = roll;
control.pitch = pitch;
control.yaw = y
control.roll = roll;
control.pitch = pitch;
contr
control.roll = roll;
control.pitch
control.roll = roll;
contr
control.roll = roll;
control.roll =
con
int main() {
Drone drone;
Drone dro
Dron
// A felhasználó beviteli lehetősége
float roll, pitch, yaw, throttle;
whil
while (true) {
std::cout <<
std::cout <<
std::
"Enter roll, pitch, yaw (degrees) and throttle (0-100): ";
std::cin >> roll >> pitch >> yaw >> throttle;
std::cin >> roll >> pitch >> yaw >> throttle;
std::cin >> roll >> pitch >> yaw >> throttle
std::cin >> roll >> pitch >> yaw >> th
std::cin >> roll >> pitch >> yaw
std::cin >> roll
std::ci
std:
s
// A drón vezérlésének beállítása
drone.
drone.setContr
drone
setControl(roll, pitch, yaw, throttle);
// A drón állapotának frissítése
drone.
update();
// Kilépés a programból (opcionális)
ch
char quit;
std::cout <<
std::cout
std::
"Continue? (y/n): ";
std::cin >> quit;
std::cin >> qui
std::cin >>
std::cin
if (quit == 'n' || quit == 'N') break;
}
}
}
return 0;
}
A
Drone osztály :Droneosztál
Frissítési metódus : Aupdate()metó
Kontroll beállítás : A
Egyszerűsített szimuláció : A
Példa
A program futtatásakor a következő kér
yaml
Kód másolása
Enter roll, pitch, yaw (degrees) and
Altitude:
throttle (0-100): 10 5 0 50
Altitude: 5 m, Velocity: 5 m/s
Roll: 10°, Pitch: 5°, Yaw: 0°
Continue? (y/n): y
Persze kell még hozzá a PID (Proporcionális-Integráló-Differenciáló) vezérlő algoritmusok
GPS és IMU szenzorok integrálása, Valós idejű adatfeldolgozás, Hálózati kommunikáció földi irányító állomásokkal.