A katonai drónok irányítása komoly programozási ismereteket feltételez. Az éles használatot mindig sok szimuláció előzi meg. Ez a példa a dronekit-sitl segítségével elindít egy szimulált drónt a SITL szimulátorban, majd a drónt felszálltatja 10 méter magasságba, leszáll, és lezárja a kapcsolatot. Drón szimulációs alkalmazások készítéséhez a dronekit-sitl (Software In The Loop) és más, rónszimulációhoz tervezett eszközöket használhatod a Pythonban. Ezen eszközök segítségével virtuális környezetben tesztelheted a drón vezérlőprogramját, anélkül, hogy egy valós drónt kellene használnod.
Pygame modul oktatófelületet használhatunk.
Az alábbiakban egy egyszerű példa a dronekit-sitl használatával egy szimulált drón irányítására. Először telepítsd a szükséges könyvtárakat:
pip install dronekit-sitl
Szimulátor indítása
from dronekit_sitl import SITL
from dronekit import connect, VehicleMode
import time
# SITL (Software In The Loop) szimulátor indítása
sitl = SITL()
sitl.download('copter', '3.3', verbose=True)
sitl_args = ['-I0', '--model', 'quad', '--home=47.641468,-122.140165,0,0']
sitl.launch(sitl_args, await_ready=True)
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Felszállás
def arm_and_takeoff(altitude):
print("Várakozás a drón készenlételére...")
while not vehicle.is_armable:
time.sleep(1)
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
time.sleep(1)
print("Felszállás megkezdése...")
vehicle.simple_takeoff(altitude)
while True:
print("Aktuális magasság: %f m" % vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= altitude * 0.95:
print("Elértük a kívánt magasságot.")
break
time.sleep(1)
# Felszállás 10 méter magasságba
arm_and_takeoff(10)
# Leszállás
print("Leszállás...")
vehicle.mode = VehicleMode("LAND")
# Várakozás a leszállás befejezéséig
while not vehicle.armed:
time.sleep(1)
# Szimulátor és kapcsolat lezárása
sitl.stop()
vehicle.close()
--------------------------
Az alábbiakban egy egyszerű példa található egy Python programra, amely egy szimulált drónt irányít. Ebben a példában a Pygame modult használjuk egy egyszerű grafikus felülethez, ahol a drónt a nyilakkal lehet irányítani.Ez a kód egy egyszerű drón irányítást valósít meg a Pygame segítségével. Ennek csak a tanulási és demonstrációs célokra szolgáló példakód, valós alkalmazás esetén speciális drónvezérlő könyvtárakat kell alkalmazni.
---------------implementáció------------------
import pygame
import time
# Inicializáljuk a Pygame modult
pygame.init()
# A drón kezdeti pozíciója
drone_x = 100
drone_y = 100
# A drón sebessége
drone_speed = 5
# A képernyő mérete
screen_width = 800
screen_height = 600
# Inicializáljuk a képernyőt
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Drone Control")
# A játék ciklus
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Irányítás
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
drone_x -= drone_speed
if keys[pygame.K_RIGHT]:
drone_x += drone_speed
if keys[pygame.K_UP]:
drone_y -= drone_speed
if keys[pygame.K_DOWN]:
drone_y += drone_speed
# Korlátozzuk a drón mozgását a képernyőn belül
drone_x = max(0, min(drone_x, screen_width - 20))
drone_y = max(0, min(drone_y, screen_height - 20))
# Törlés és újra rajzolás
screen.fill((255, 255, 255)) # Tiszta háttér
pygame.draw.rect(screen, (0, 128, 255), (drone_x, drone_y, 20, 20)) # Drón kirajzolása
# Frissítjük a képernyőt
pygame.display.flip()
# Késleltetés
time.sleep(0.02)
# Pygame bezárása
pygame.quit()
másik példa
import pygame
import sys
# Initialize Pygame
pygame.init()
# Set up display
width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Drone Simulation")
# Set up drone
drone_width, drone_height = 50, 50
drone_x, drone_y = width // 2 - drone_width // 2, height // 2 - drone_height // 2
drone_speed = 5
# Main game loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and drone_x > 0:
drone_x -= drone_speed
if keys[pygame.K_RIGHT] and drone_x < width - drone_width:
drone_x += drone_speed
if keys[pygame.K_UP] and drone_y > 0:
drone_y -= drone_speed
if keys[pygame.K_DOWN] and drone_y < height - drone_height:
drone_y += drone_speed
# Update display
screen.fill((255, 255, 255)) # White background
pygame.draw.rect(screen, (0, 0, 255), (drone_x, drone_y, drone_width, drone_height)) # Blue drone
pygame.display.flip()
pygame.time.Clock().tick(30) # 30 frames per second
------------------------ eddig játék, de innen már nem---------------------------
Lássuk élesben a vezérlést fel és leszállás. Ez a példa egy egyszerű UDP socketet használ, hogy parancsokat küldjön a drónnak. A valódi drónok irányítása többek között kriptográfiai biztonsági intézkedéseket, hitelesítést és más speciális protokollokat igényel.
import socket
# A drón IP címe és portja
drone_ip = "192.168.1.1" # példa cím, cseréld ki a valós IP címre
drone_port = 5555
# Inicializáljuk a socketet
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# A drón vezérlése
def control_drone(command):
sock.sendto(command.encode(), (drone_ip, drone_port))
# Példa parancsok
takeoff_command = "takeoff"
land_command = "land"
forward_command = "forward 50" # Példa: előre mozgás 50 egységnyi távolságban
# Tesztelés: Drón felszállása, előre mozgás, és leszállás
control_drone(takeoff_command)
control_drone(forward_command)
control_drone(land_command)
# Socket lezárása
sock.close()
-----------------
A drónok helyzetmeghatározása többféleképpen történhet, de a legtöbb modern drón a GPS (Global Positioning System) rendszert használja a globális pozíciók meghatározásához. Ezenkívül más szenzorok is alkalmazhatók, például giroszkópok, gyorsulásmérők és magasságérzékelők a pontosabb helyzetmeghatározás érdekében. A következőkben egy egyszerű példát találsz egy Python programra, amely a dronekit könyvtárat használja, hogy elérje egy szimulált drón helyzetét.
Először is, telepítsd a dronekit és a sphinx-simulator könyvtárakat a szimulált drón használatához. A dronekit a drónok irányítására, míg a sphinx-simulator a szimulációhoz szükséges.
bash szimulátor
pip install dronekit-sitl
pip install dronekit
pip install pymavlink
Ez a példa egy szimulált drón helyzetét olvassa le és kiírja a konzolra.
Azonban érdemes megjegyezni, hogy a valódi drónok irányításához és helyzetmeghatározásához a GPS-t, giroszkópokat, gyorsulásmérőket és más érzékelőket egy komplex rendszer részeként kell használni.
Ez egy python szkrip a drón helyzetének lekérdezéséhez:
from dronekit import connect, VehicleMode
# SITL (Software In The Loop) szimulátor indítása
from dronekit_sitl import SITL
sitl = SITL()
sitl.download('copter', '3.3', verbose=True)
sitl_args = ['-I0', '--model', 'quad', '--home=47.641468,-122.140165,0,0']
sitl.launch(sitl_args, await_ready=True)
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Helyzetleolvasás
def get_drone_position():
return vehicle.location.global_frame
try:
while True:
# Helyzet lekérdezése és kiíratása
current_position = get_drone_position()
print(f'Drón helyzete: Lat={current_position.lat}, Lon={current_position.lon}, Alt={current_position.alt}')
except KeyboardInterrupt:
print("Program leállítva.")
finally:
# Szimulátor és kapcsolat lezárása
sitl.stop()
vehicle.close()
----------------
Ez a példa egy szimulált drón vezérlését valósítja meg, beleértve a felszállást, az előre mozgást, és a leszállást. A dronekit könyvtár lehetővé teszi a MAVLink protokollon keresztüli drón irányítást, és a dronekit-sitl egy szimulált környezetet biztosít a teszteléshez.
from dronekit import connect, VehicleMode, LocationGlobalRelative
import time
# SITL (Software In The Loop) szimulátor indítása
from dronekit_sitl import SITL
sitl = SITL()
sitl.download('copter', '3.3', verbose=True)
sitl_args = ['-I0', '--model', 'quad', '--home=47.641468,-122.140165,0,0']
sitl.launch(sitl_args, await_ready=True)
# Csatlakozás a drónhoz azonosítás
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Felszállás
def arm_and_takeoff(altitude):
print("Várakozás a drón készenlételére...")
while not vehicle.is_armable:
time.sleep(1)
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
time.sleep(1)
print("Felszállás megkezdése...")
vehicle.simple_takeoff(altitude)
while True: #szelekció feltétel
print("Aktuális magasság: %f m" % vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= altitude * 0.95:
print("Elértük a kívánt magasságot.")
break
time.sleep(1)
# Felszállás 10 méter magasságba
arm_and_takeoff(10)
# Mozgás előre 50 méterrel
print("Előre mozgás 50 méterrel...")
new_location = LocationGlobalRelative(47.641468, -122.140165, 10) # cél helyzete
vehicle.simple_goto(new_location)
# Várakozás a cél eléréséig
while True:
remaining_distance = new_location.distance_to(vehicle.location.global_frame)
print("Távolság a céltól: %f m" % remaining_distance)
if remaining_distance <= 1:
print("A cél elérve.")
break
time.sleep(1)
# Leszállás
print("Leszállás...")
vehicle.mode = VehicleMode("LAND")
# Várakozás a leszállás befejezéséig
while not vehicle.armed:
time.sleep(1)
# Szimulátor és kapcsolat lezárása
sitl.stop()
vehicle.close()
-------------------------
Drón célzásának GPS-koordináták alapján történő megvalósításához a dronekit könyvtárat használhatod. Az alábbi példa egy egyszerű Python programot mutat be, amely a drónt előre mozgatja egy adott célkoordináta felé.
Telepítsd a szükséges könyvtárakat:
pip install dronekit dronekit-sitl
Ebben a példában a simple_goto metódus segítségével beállítjuk a drón célszámú koordinátáit, majd a drón automatikusan elkezdi a cél felé való mozgást.
from dronekit import connect, VehicleMode, LocationGlobalRelative
import time
# SITL (Software In The Loop) szimulátor indítása
from dronekit_sitl import SITL
sitl = SITL()
sitl.download('copter', '3.3', verbose=True)
sitl_args = ['-I0', '--model', 'quad', '--home=47.641468,-122.140165,0,0']
sitl.launch(sitl_args, await_ready=True)
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Felszállás
def arm_and_takeoff(altitude):
print("Várakozás a drón készenlételére...")
while not vehicle.is_armable:
time.sleep(1)
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
time.sleep(1)
print("Felszállás megkezdése...")
vehicle.simple_takeoff(altitude)
while True:
print("Aktuális magasság: %f m" % vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= altitude * 0.95:
print("Elértük a kívánt magasságot.")
break
time.sleep(1)
# Felszállás 10 méter magasságba
arm_and_takeoff(10)
# Célkoordináták beállítása
target_latitude = 47.642268
target_longitude = -122.141964
target_altitude = 10
# Célhoz mozgás
target_location = LocationGlobalRelative(target_latitude, target_longitude, target_altitude)
print(f"Célkoordináták: Lat={target_latitude}, Lon={target_longitude}, Alt={target_altitude}")
print("Mozgás a cél felé...")
vehicle.simple_goto(target_location)
# Várakozás a cél eléréséig
while True:
remaining_distance = target_location.distance_to(vehicle.location.global_frame)
print("Távolság a célhoz: %f m" % remaining_distance)
if remaining_distance <= 1:
print("A cél elérve.")
break
time.sleep(1)
# Leszállás
print("Leszállás...")
vehicle.mode = VehicleMode("LAND")
# Várakozás a leszállás befejezéséig
while not vehicle.armed:
time.sleep(1)
# Szimulátor és kapcsolat lezárása
sitl.stop()
vehicle.close()
---------------------
Ebben a példában a simple_goto metódus segítségével beállítjuk a drón célszámú koordinátáit, majd a drón automatikusan elkezdi a cél felé való mozgást.
A drón sebességének beállításához a dronekit könyvtárat használhatod. Az alábbi példa egy egyszerű Python programot mutat be, amely a drón sebességét állítja be előre és oldalra a simple_goto metódus segítségével.
from dronekit import connect, VehicleMode, LocationGlobalRelative
import time
# SITL (Software In The Loop) szimulátor indítása
from dronekit_sitl import SITL
sitl = SITL()
sitl.download('copter', '3.3', verbose=True)
sitl_args = ['-I0', '--model', 'quad', '--home=47.641468,-122.140165,0,0']
sitl.launch(sitl_args, await_ready=True)
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Felszállás
def arm_and_takeoff(altitude):
print("Várakozás a drón készenlételére...")
while not vehicle.is_armable:
time.sleep(1)
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
time.sleep(1)
print("Felszállás megkezdése...")
vehicle.simple_takeoff(altitude)
while True:
print("Aktuális magasság: %f m" % vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= altitude * 0.95:
print("Elértük a kívánt magasságot.")
break
time.sleep(1)
# Felszállás 10 méter magasságba
arm_and_takeoff(10)
# Beállítjuk a sebességeket (előre és oldalra)
forward_speed = 5 # m/s
right_speed = 2 # m/s
print("Előre mozgás...")
vehicle.simple_goto(LocationGlobalRelative(vehicle.location.global_frame.lat + forward_speed,
vehicle.location.global_frame.lon,
vehicle.location.global_frame.alt))
time.sleep(5) # Várunk 5 másodpercet az előre mozgás befejezéséig
print("Oldalra mozgás...")
vehicle.simple_goto(LocationGlobalRelative(vehicle.location.global_frame.lat,
vehicle.location.global_frame.lon + right_speed,
vehicle.location.global_frame.alt))
time.sleep(5) # Várunk 5 másodpercet az oldalra mozgás befejezéséig
# Leszállás
print("Leszállás...")
vehicle.mode = VehicleMode("LAND")
# Várakozás a leszállás befejezéséig
while not vehicle.armed:
time.sleep(1)
# Szimulátor és kapcsolat lezárása
sitl.stop()
vehicle.close()
------------------------------------
Ebben a példában a simple_goto metódus segítségével a drón sebességét állítjuk be, előre és oldalra mozgáshoz.
Az előre és oldalra mozgás során a LocationGlobalRelative objektum segítségével megadhatod a célkoordinátákat a drón aktuális pozíciójától való elmozdulás helyett.
from dronekit import connect, VehicleMode, LocationGlobalRelative
import time
# SITL (Software In The Loop) szimulátor indítása
from dronekit_sitl import SITL
sitl = SITL()
sitl.download('copter', '3.3', verbose=True)
sitl_args = ['-I0', '--model', 'quad', '--home=47.641468,-122.140165,0,0']
sitl.launch(sitl_args, await_ready=True)
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Felszállás
def arm_and_takeoff(altitude):
print("Várakozás a drón készenlételére...")
while not vehicle.is_armable:
time.sleep(1)
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
time.sleep(1)
print("Felszállás megkezdése...")
vehicle.simple_takeoff(altitude)
while True:
print("Aktuális magasság: %f m" % vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= altitude * 0.95:
print("Elértük a kívánt magasságot.")
break
time.sleep(1)
# Felszállás 10 méter magasságba
arm_and_takeoff(10)
# Beállítjuk a sebességeket (előre és oldalra)
forward_speed = 5 # m/s
right_speed = 2 # m/s
print("Előre mozgás...")
vehicle.simple_goto(LocationGlobalRelative(vehicle.location.global_frame.lat + forward_speed,
vehicle.location.global_frame.lon,
vehicle.location.global_frame.alt))
time.sleep(5) # Várunk 5 másodpercet az előre mozgás befejezéséig
print("Oldalra mozgás...")
vehicle.simple_goto(LocationGlobalRelative(vehicle.location.global_frame.lat,
vehicle.location.global_frame.lon + right_speed,
vehicle.location.global_frame.alt))
time.sleep(5) # Várunk 5 másodpercet az oldalra mozgás befejezéséig
# Leszállás
print("Leszállás...")
vehicle.mode = VehicleMode("LAND")
# Várakozás a leszállás befejezéséig
while not vehicle.armed:
time.sleep(1)
# Szimulátor és kapcsolat lezárása
sitl.stop()
vehicle.close()
--------------------
példa látható a mavproxy használatára, ami a dronekit alapján működik. Ebben a példában a drón célzása egy adott GPS-koordinátára történik.
könyvtár telepitése
pip install dronekit-sitl mavproxy
Ebben a példában a mavproxy segítségével a drónhoz kapcsolódunk, majd a simple_goto metódus segítségével beállítjuk a drón célkoordinátáit. Ne feledd, hogy ez csak egy példa, és a valóságban a drón célzásának implementálása sokkal bonyolultabb lehet a valós rendszerek specifikációitól függően.
Python szkriptet a drón célzásához
from dronekit import connect, LocationGlobalRelative
import time
# SITL (Software In The Loop) szimulátor indítása
from dronekit_sitl import SITL
sitl = SITL()
sitl.download('copter', '3.3', verbose=True)
sitl_args = ['-I0', '--model', 'quad', '--home=47.641468,-122.140165,0,0']
sitl.launch(sitl_args, await_ready=True)
# MAVProxy indítása
# -j a jármű alapján teszi elérhetővé a bejövő adatokat és a célzást
# --console azért szükséges, hogy a terminál ablakban megjelenjenek az információk
cmd = 'mavproxy.py --master tcp:127.0.0.1:5760 --out udp:127.0.0.1:14550 --out udp:127.0.0.1:14551 --console'
sitl.launch(sitl_args, await_ready=True, verbose=True)
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Célkoordináták beállítása adatbevitel vagy módosítás
target_latitude = 47.642268
target_longitude = -122.141964
target_altitude = 10
# Célhoz mozgás
target_location = LocationGlobalRelative(target_latitude, target_longitude, target_altitude)
print(f"Célkoordináták: Lat={target_latitude}, Lon={target_longitude}, Alt={target_altitude}")
# Vezérlés
vehicle.simple_goto(target_location)
# Várakozás a cél eléréséig iterációval
while True:
remaining_distance = target_location.distance_to(vehicle.location.global_frame)
print("Távolság a célhoz: %f m" % remaining_distance)
if remaining_distance <= 1:
print("A cél elérve.")
break
time.sleep(1)
# Szimulátor és kapcsolat lezárása
sitl.stop()
vehicle.close()
----------
drón vezérlését és a célpontok módosítása a dronekit könyvtár segítségével történhet.
from dronekit import connect, LocationGlobalRelative
import time
# SITL (Software In The Loop) szimulátor indítása
from dronekit_sitl import SITL
sitl = SITL()
sitl.download('copter', '3.3', verbose=True)
sitl_args = ['-I0', '--model', 'quad', '--home=47.641468,-122.140165,0,0']
sitl.launch(sitl_args, await_ready=True)
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Felszállás
def arm_and_takeoff(altitude):
print("Várakozás a drón készenlételére...")
while not vehicle.is_armable:
time.sleep(1)
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
time.sleep(1)
print("Felszállás megkezdése...")
vehicle.simple_takeoff(altitude)
while True:
print("Aktuális magasság: %f m" % vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= altitude * 0.95:
print("Elértük a kívánt magasságot.")
break
time.sleep(1)
# Felszállás 10 méter magasságba
arm_and_takeoff(10)
# Célkoordináták beállítása
target_latitude = 47.642268
target_longitude = -122.141964
target_altitude = 10
# Célhoz mozgás
target_location = LocationGlobalRelative(target_latitude, target_longitude, target_altitude)
print(f"Célkoordináták: Lat={target_latitude}, Lon={target_longitude}, Alt={target_altitude}")
# Vezérlés: Mozgás a célpont felé
vehicle.simple_goto(target_location)
# Várakozás a cél eléréséig feltételes iterációval
while True:
remaining_distance = target_location.distance_to(vehicle.location.global_frame)
print("Távolság a célhoz: %f m" % remaining_distance)
if remaining_distance <= 1:
print("A cél elérve.")
break
time.sleep(1)
# Új célpont koordináták beállítása
new_target_latitude = 47.643268
new_target_longitude = -122.142964
new_target_altitude = 15
new_target_location = LocationGlobalRelative(new_target_latitude, new_target_longitude, new_target_altitude)
print(f"Új célpont koordináták: Lat={new_target_latitude}, Lon={new_target_longitude}, Alt={new_target_altitude}")
# Vezérlés: Mozgás az új célpont felé
vehicle.simple_goto(new_target_location)
# Várakozás az új cél eléréséig iterációval
while True:
remaining_distance = new_target_location.distance_to(vehicle.location.global_frame)
print("Távolság az új célhoz: %f m" % remaining_distance)
if remaining_distance <= 1:
print("Az új cél elérve.")
break
time.sleep(1)
# Leszállás
print("Leszállás...")
vehicle.mode = VehicleMode("LAND")
# Várakozás a leszállás befejezéséig iterációval
while not vehicle.armed:
time.sleep(1)
# Szimulátor és kapcsolat lezárása
sitl.stop()
vehicle.close()
---------------
Titkosítási algoritmus
A drón programok titkosítása és biztonságosabbá tétele során fontos szempont a titkosítás és a biztonságos kommunikáció alkalmazása. Az egyik módszer a TLS (Transport Layer Security) vagy az SSL (Secure Sockets Layer) protokoll használata a kommunikáció biztosításához. Ezenkívül más biztonsági intézkedések, például az aláírások és az azonosítások, is hozzáadhatók a drón programokhoz.
Az alábbiakban egy egyszerű példa található a TLS-titkosított kommunikációra, amely a ssl modult használja a Pythonban.
Ez a példa feltételezi, hogy a drón rendelkezik egy SSL/TLS-képes szolgáltatással, és a hozzá tartozó tanúsítványokkal. A tanúsítványok létrehozásához és a továbbiakban használathoz a openssl eszközt vagy más SSL/TLS tanúsítványokat készítő eszközöket kell alkalmazni.
import socket
import ssl
# Drón IP-címe és portja
drone_ip = "192.168.1.1" # Cseréld le a valós IP-címre
drone_port = 5555
# SSL/TLS beállítások
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain(certfile="server.crt", keyfile="server.key") # Helyettesítsd a valós tanúsítvány és kulcs fájljaiddal
# Inicializáljuk a socketet és SSL/TLS kapcsolatot
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl_context.wrap_socket(sock, server_side=False, server_hostname=drone_ip)
# Kapcsolódás a drónhoz
ssl_sock.connect((drone_ip, drone_port))
# Titkosított üzenet küldése
message = "Ez egy titkosított üzenet a drónnak!"
ssl_sock.send(message.encode())
# Kapcsolat lezárása
ssl_sock.close()
----------------
A műholdas navigáció kockázatos. A drónok tájékozódása GPS nélkül kihívást jelent, mivel a GPS az egyik legelterjedtebb és legpontosabb pozícionálási mód a repülő tárgyak számára. Azonban léteznek más módszerek is a tájékozódásra, például szenzorok és egyéb adatforrások felhasználásával. Az alábbiakban néhány olyan módszer és szenzor van felsorolva, amelyeket egy drón tájékozódásához lehet használni GPS nélkül:
Inerciális mérőeszközök (IMU): Az IMU szenzorok gyorsulásmérést és szögmérést használnak a drón mozgásának követésére. Az IMU adhat információkat a drón elmozdulásáról és irányáról, de hosszú távú használat során a hibák felduzzadhatnak.
Barométer: A barométer a légnyomás változását méri, és ezáltal magasságbecslést tesz lehetővé. Hasznos lehet a drón magasságának meghatározásához, bár érzékeny lehet időjárási változásokra.
Kamera és képfeldolgozás: Egy drón kamerájának használata a környezetének felvétele és a képfeldolgozás segítségével a tájékozódásra. Ez a módszer különféle algoritmusok és technikák alkalmazását igényli, például a látási odometriát vagy a struktúrális helymeghatározást.
Ultrahang és infravörös szenzorok: Az ultrahang és infravörös szenzorokat gyakran használják a talajtól való távolság meghatározására. Ezek a szenzorok a drón magasságának pontosabb meghatározásához járulhatnak hozzá.
Mágneses szenzorok: A mágneses szenzorok segíthetnek a drón irányának meghatározásában, de érzékenyek lehetnek külső mágneses interferenciákra.
Fontos megjegyezni, hogy ezek a módszerek és szenzorok összeadódnak és kombinálódnak (például a szenzor összefűzés vagy a tájékozódás-összetétel módszereivel), hogy javítsák a drón pozícióinak és irányának pontosságát.
-------------------
Ebben a példában a drón felszáll, visszahívódik a kiindulópontjára (RTL mód), majd a célpontokat törli.
A drónok visszahívása és célpontjainak törlése programozási nyelven, például Pythonban, a drón típusától és az alkalmazott vezérlőkönyvtártól függ. Az alábbiakban egy egyszerű példa található a dronekit könyvtárra épülő kódra, amely bemutatja, hogyan lehet egy drónt visszahívni és törlési utasításokat küldeni. A példa a SITL szimulátorral működik, de a valóságban egy valódi drónhoz hasonlóan módosítani kell a kapcsolódási paramétereket.
from dronekit import connect, VehicleMode
import time
# SITL (Software In The Loop) szimulátor indítása
from dronekit_sitl import SITL
sitl = SITL()
sitl.download('copter', '3.3', verbose=True)
sitl_args = ['-I0', '--model', 'quad', '--home=47.641468,-122.140165,0,0']
sitl.launch(sitl_args, await_ready=True)
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Felszállás
def arm_and_takeoff(altitude):
print("Várakozás a drón készenlételére...")
while not vehicle.is_armable:
time.sleep(1)
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
time.sleep(1)
print("Felszállás megkezdése...")
vehicle.simple_takeoff(altitude)
while True:
print("Aktuális magasság: %f m" % vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= altitude * 0.95:
print("Elértük a kívánt magasságot.")
break
time.sleep(1)
# Felszállás 10 méter magasságba
arm_and_takeoff(10)
# Visszahívás
print("Visszahívás a kezdeti helyre...")
vehicle.mode = VehicleMode("RTL")
# Várakozás a visszahívás befejezéséig
while True:
print("Drón állapota: %s" % vehicle.mode.name)
if vehicle.mode.name == "RTL" and not vehicle.armed:
print("Visszahívás befejeződött.")
break
time.sleep(1)
# Célpontok törlése
print("Célpontok törlése...")
vehicle.commands.clear()
vehicle.commands.upload()
# Várakozás a törlés befejezéséig
while vehicle.commands:
print("Fennmaradó parancsok száma: %d" % len(vehicle.commands))
time.sleep(1)
# Leszállás
print("Leszállás...")
vehicle.mode = VehicleMode("LAND")
# Várakozás a leszállás befejezéséig
while not vehicle.armed:
time.sleep(1)
# Szimulátor és kapcsolat lezárása
sitl.stop()
vehicle.close()
--------------
Parancs törlése drón visszahívása
A drónok visszahívását (Return To Launch - RTL) általában a dronekit vagy más drón vezérlőkönyvtárak segítségével lehet megvalósítani Python nyelven. Az alábbiakban egy egyszerű példa található, amely bemutatja a drón visszahívását a dronekit könyvtárral.
from dronekit import connect, VehicleMode
import time
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Felszállás
def arm_and_takeoff(altitude):
print("Várakozás a drón készenlételére...")
while not vehicle.is_armable:
time.sleep(1)
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
time.sleep(1)
print("Felszállás megkezdése...")
vehicle.simple_takeoff(altitude)
while True:
print("Aktuális magasság: %f m" % vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= altitude * 0.95:
print("Elértük a kívánt magasságot.")
break
time.sleep(1)
# Felszállás 10 méter magasságba
arm_and_takeoff(10)
# Visszahívás
print("Visszahívás a kezdeti helyre...")
vehicle.mode = VehicleMode("RTL")
# Várakozás a visszahívás befejezéséig
while True:
print("Drón állapota: %s" % vehicle.mode.name)
if vehicle.mode.name == "RTL" and not vehicle.armed:
print("Visszahívás befejeződött.")
break
time.sleep(1)
# Leszállás
print("Leszállás...")
vehicle.mode = VehicleMode("LAND")
# Várakozás a leszállás befejezéséig
while not vehicle.armed:
time.sleep(1)
# Kapcsolat lezárása
vehicle.close()
--------------------
A get_drone_position függvény segítségével kiolvassuk a drón aktuális globális pozícióját (szélesség, hosszúság, magasság) és kiíratjuk ezeket az értékeket. Fontos megjegyezni, hogy a drónnak el kell érnie a GPS-jelet a pontos pozíció meghatározásához.
A drón pozíciójának meghatározása számos módon történhet a Python nyelvben, attól függően, hogy milyen szenzorokat használ a drón, és milyen típusú adatokat szeretnél elérni. Egy gyakran használt mód a GPS használata, de más szenzorok, például IMU, barométer, ultrahang szenzorok stb. is felhasználhatók a pozíció meghatározásához.
Az alábbiakban egy példa található, amely a dronekit könyvtárat használja a drón pozíciójának lekérdezéséhez. Ez a példa egy szimulált drónra vonatkozik, amelyet a dronekit-sitl szimulátorral hozunk létre
from dronekit import connect, VehicleMode
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Funkció a drón pozíciójának lekérdezéséhez
def get_drone_position():
lat = vehicle.location.global_frame.lat
lon = vehicle.location.global_frame.lon
alt = vehicle.location.global_frame.alt
print(f"Latitude: {lat}, Longitude: {lon}, Altitude: {alt} meters")
# Lekérdezés és kiíratás
get_drone_position()
# Kapcsolat lezárása
vehicle.close()
----------------------
from dronekit import connect, VehicleMode
import time
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Funkció a drón pozíciójának lekérdezéséhez
def get_drone_position():
# Várjuk meg, amíg a drón készen áll
while not vehicle.is_armable:
print("Várakozás a drón készenlételére...")
time.sleep(1)
# Felszállás engedélyezése
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
# Várakozás a felszállás befejezéséig
while not vehicle.armed or not vehicle.mode.name == "GUIDED":
print("Várakozás a felszállásra...")
time.sleep(1)
# Felszállás 10 méter magasságba
print("Felszállás megkezdése...")
vehicle.simple_takeoff(10)
while True:
# Lekérjük és kiírjuk a drón pozícióját
print("Drón pozíciója: %s" % vehicle.location.global_relative_frame)
time.sleep(1)
# Funkció hívása
get_drone_position()
# Kapcsolat lezárása
vehicle.close()
vagy a
from dronekit import connect, VehicleMode
import time
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Funkció a drón pozíciójának lekérdezéséhez
def get_drone_position():
# Várjuk meg, amíg a drón készen áll
while not vehicle.is_armable:
print("Várakozás a drón készenlételére...")
time.sleep(1)
# Felszállás engedélyezése
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
# Várakozás a felszállás befejezéséig
while not vehicle.armed or not vehicle.mode.name == "GUIDED":
print("Várakozás a felszállásra...")
time.sleep(1)
# Felszállás 10 méter magasságba
print("Felszállás megkezdése...")
vehicle.simple_takeoff(10)
while True:
# Lekérjük és kiírjuk a drón pozícióját
print("Drón pozíciója: %s" % vehicle.location.global_relative_frame)
time.sleep(1)
# Funkció hívása
get_drone_position()
# Kapcsolat lezárása
vehicle.close()
........-----------------
Tehát a get_drone_position számára dronekit és dronekit-sitl ad lehetőséget.
---------------
Hova tart az idegen drón?
a példában a get_drone_heading függvényben a drón felszáll 10 méter magasságba, majd folyamatosan kiírja az aktuális irányát.
from dronekit import connect, VehicleMode
import time
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Funkció a drón irányának lekérdezéséhez
def get_drone_heading():
# Várjuk meg, amíg a drón készen áll
while not vehicle.is_armable:
print("Várakozás a drón készenlételére...")
time.sleep(1)
# Felszállás engedélyezése
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
# Várakozás a felszállás befejezéséig
while not vehicle.armed or not vehicle.mode.name == "GUIDED":
print("Várakozás a felszállásra...")
time.sleep(1)
# Felszállás 10 méter magasságba
print("Felszállás megkezdése...")
vehicle.simple_takeoff(10)
while True:
# Lekérjük és kiírjuk a drón irányát
print("Drón iránya: %f°" % vehicle.heading)
time.sleep(1)
# Funkció hívása
get_drone_heading()
# Kapcsolat lezárása
vehicle.close()
A drónok irányának meghatározása a Pythonban általában az inerciális mérőeszközök (IMU) adatainak feldolgozásával történik. Az IMU szenzorok mérési adatokat szolgáltatnak a drón gyorsulásáról, szögeiről és szögsebességéről, amelyekből a drón iránya és orientációja kiszámítható.
Az alábbi példa bemutatja, hogyan használhatod a dronekit könyvtárat a drón irányának meghatározására egy szimulált környezetben.
Azonosítás
A drón azonosítása Pythonban általában a dronekitvagy másdronekit segítségével lehetséges
from dronekit import connect, VehicleMode
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Drón adatainak kiíratása
print("Drón azonosítása:")
print("Üzemállapot: %s" % vehicle.mode.name)
print("Pozíció: %s" % vehicle.location.global_frame)
print("Sebesség: %s" % vehicle.velocity)
print("Akkumulátor állapota: %s" % vehicle.battery)
print("GPS fix: %s" % vehicle.gps_0.fix_type)
# Kapcsolat lezárása
vehicle.close()
--------------------
Drón visszahívása
from dronekit import connect, VehicleMode
import time
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Felszállás
def arm_and_takeoff(altitude):
print("Várakozás a drón készenlételére...")
while not vehicle.is_armable:
time.sleep(1)
print("Felszállás engedélyezése...")
vehicle.mode = VehicleMode("GUIDED")
vehicle.armed = True
while not vehicle.armed:
time.sleep(1)
print("Felszállás megkezdése...")
vehicle.simple_takeoff(altitude)
while True:
print("Aktuális magasság: %f m" % vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt >= altitude * 0.95:
print("Elértük a kívánt magasságot.")
break
time.sleep(1)
# Felszállás 10 méter magasságba
arm_and_takeoff(10)
# Visszahívás
print("Visszahívás a kezdeti helyre...")
vehicle.mode = VehicleMode("RTL")
# Várakozás a visszahívás befejezéséig
while True:
print("Drón állapota: %s" % vehicle.mode.name)
if vehicle.mode.name == "RTL" and not vehicle.armed:
print("Visszahívás befejeződött.")
break
time.sleep(1)
# Leszállás
print("Leszállás...")
vehicle.mode = VehicleMode("LAND")
# Várakozás a leszállás befejezéséig
while not vehicle.armed:
time.sleep(1)
# Kapcsolat lezárása
vehicle.close()
-----------------
A célpont földrajzi pozíciójának meghatároza
from dronekit import connect, VehicleMode, LocationGlobalRelative
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Földrajzi pozíció beállítása (példa koordináták)
target_latitude = 37.7749 # Példa: San Francisco, CA
target_longitude = -122.4194
# Célpont földrajzi pozíció beállítása
target_location = LocationGlobalRelative(target_latitude, target_longitude, 10) # Harmadik paraméter a magasság
# Célpont beállítása
vehicle.simple_goto(target_location)
# Várakozás, amíg eléri a célpontot
while True:
current_location = vehicle.location.global_relative_frame
distance_to_target = current_location.distance_to(target_location)
print(f"Távolság a céltól: {distance_to_target} méter")
if distance_to_target < 1: # Példa: A cél közelében
print("A drón elérte a célpontot.")
break
# Kapcsolat lezárása
vehicle.close()
------------
Global Navigation Satellite System
from dronekit import connect, VehicleMode
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Ellenőrzés, hogy rendelkezik-e a drón GPS jelességgel
if vehicle.gps_0.fix_type > 1:
print("A drón rendelkezik GPS jellességgel.")
# GPS pozíció lekérdezése
latitude = vehicle.location.global_frame.lat
longitude = vehicle.location.global_frame.lon
altitude = vehicle.location.global_frame.alt
print(f"Földrajzi pozíció: Latitude: {latitude}, Longitude: {longitude}, Altitude: {altitude} méter")
else:
print("A drón nem rendelkezik elegendő GPS jellességgel.")
# Kapcsolat lezárása
vehicle.close()
---------------
Drónok távolságának és sebességének mérésére radar széles körben használt eszköz lehet, különféle szenzorokat használva. A radarok működése alapvetően az objektumokra visszaverődő rádióhullámok észlelésén alapul.
from dronekit import connect
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Ellenőrzés, hogy rendelkezik-e a drón GPS jellességgel
if vehicle.gps_0.fix_type > 1:
print("A drón rendelkezik GPS jellességgel.")
# GPS pozíció lekérdezése
latitude = vehicle.location.global_frame.lat
longitude = vehicle.location.global_frame.lon
altitude = vehicle.location.global_frame.alt
print(f"Földrajzi pozíció: Latitude: {latitude}, Longitude: {longitude}, Altitude: {altitude} méter")
# Itt folytathatod a radarhoz szükséges kód írását
# ...
else:
print("A drón nem rendelkezik elegendő GPS jellességgel.")
# Kapcsolat lezárása
vehicle.close()
---------------
A drónok ultrahang- és Lidar-szenzorokat használhatnak a távolság mérésére, akadályok érzékelésére és navigációjuk javítására.
from dronekit import connect
import time
# Csatlakozás a drónhoz
vehicle = connect('tcp:127.0.0.1:5760', wait_ready=True)
# Ellenőrzés, hogy rendelkezik-e a drón szenzorokkal
if vehicle.rangefinder.distance:
print("A drón rendelkezik ultrahang-szenzorral.")
# Ultrahang távolság lekérdezése
ultrasonic_distance = vehicle.rangefinder.distance
print(f"Ultrahang távolság: {ultrasonic_distance} méter")
else:
print("A drón nem rendelkezik ultrahang-szenzorral.")
# Ellenőrzés, hogy rendelkezik-e a drón Lidar-szenzorral (példa)
if hasattr(vehicle, 'rangefinder_lidar') and vehicle.rangefinder_lidar.distance:
print("A drón rendelkezik Lidar-szenzorral.")
# Lidar távolság lekérdezése
lidar_distance = vehicle.rangefinder_lidar.distance
print(f"Lidar távolság: {lidar_distance} méter")
else:
print("A drón nem rendelkezik Lidar-szenzorral.")
# Várakozás néhány másodpercig
time.sleep(5)
# Kapcsolat lezárása
vehicle.close()
-------------------
Kamera bekapcsolása DJI SDK-t kell felhasználni, hogy hozzáférjünk a kamera- vagy videóérzékelő adataihoz.
from djitellopy import Tello
import cv2
# Csatlakozás a drónhoz
drone = Tello()
drone.connect()
# Kamera bekapcsolása
drone.streamon()
# Kép elkészítése
frame = drone.get_frame_read().frame
# Kép megjelenítése (OpenCV használatával)
cv2.imshow("Drone Camera", frame)
cv2.waitKey(0)
# Kapcsolat lezárása
drone.streamoff()
drone.disconnect()
--------------
DJI Thermal Analysis ToolKit-t (Thermal-ATK) használhatod az infravörös hőképek feldolgozásához. Infravörös (IR) szenzorokat gyakran használnak drónokban különböző alkalmazásokhoz, beleértve a hőképek készítését, éjszakai látást és a hőforrások detektálását
from djitellopy import Tello
from djitellopy.utils import load_joystick
import cv2
# Csatlakozás a drónhoz
drone = Tello()
drone.connect()
# IR kamera bekapcsolása
drone.enable_ir_video()
# Hőkép feldolgozása
frame = drone.get_ir_video_frame()
# Hőkép megjelenítése (OpenCV használatával)
cv2.imshow("IR Camera", frame)
cv2.waitKey(0)
# Kapcsolat lezárása
drone.disconnect()
----------------
Az Inertial Measurement Unit (IMU) szenzorok olyan eszközök, amelyek gyorsulásmérőt, giroszkópot és néha magnetométert kombinálnak a test mozgásának és orientációjának követésére. Az IMU szenzorok adatainak lekérdezése Pythonban különböző módon történhet, attól függően, hogy milyen típusú IMU-t használsz és milyen kommunikációs protokollt alkalmazol (pl. I2C, SPI).
Itt egy példa egy egyszerű Python programra, amely lekérdezi egy I2C-s IMU (például MPU6050) adatait. Ehhez a smbus modult fogjuk használni, amely az I2C kommunikáció kezelésére szolgál.
Ez a kód egy végtelen ciklusban periodikusan lekérdezi az IMU szenzor adatait, majd kiírja azokat a konzolra. Ne felejtsd el az IMU címét (IMU_ADDRESS), az I2C busz számát (I2C_BUS) és a regiszterek címét (ACCEL_XOUT_H, GYRO_XOUT_H) az adott IMU specifikációja alapján beállítani.
import smbus
import time
# Az I2C cím, ahol az IMU található
IMU_ADDRESS = 0x68
# Az I2C busz számának meghatározása
I2C_BUS = 1
# A gyorsulásmérő és giroszkóp regiszterek címzése
ACCEL_XOUT_H = 0x3B
GYRO_XOUT_H = 0x43
# Az I2C busz inicializálása
bus = smbus.SMBus(I2C_BUS)
def read_word_2c(reg):
# Két bájtos érték olvasása és 16 bites számmá alakítása
high = bus.read_byte_data(IMU_ADDRESS, reg)
low = bus.read_byte_data(IMU_ADDRESS, reg + 1)
val = (high << 8) + low
if val >= 0x8000:
return -((65535 - val) + 1)
else:
return val
def read_imu_data():
# Gyorsulásmérő és giroszkóp adatok olvasása
accel_xout = read_word_2c(ACCEL_XOUT_H)
gyro_xout = read_word_2c(GYRO_XOUT_H)
return accel_xout, gyro_xout
def main():
try:
while True:
# Gyorsulásmérő és giroszkóp adatok lekérése
accel_data, gyro_data = read_imu_data()
# Eredmények kiírása
print(f"Gyorsulásmérő adatok: {accel_data}, Giroszkóp adatok: {gyro_data}")
# Várakozás egy másodpercig
time.sleep(1)
except KeyboardInterrupt:
# Program leállítása, ha a felhasználó megszakítja a futást (Ctrl+C)
pass
finally:
# I2C busz lezárása
bus.close()
if __name__ == "__main__":
main()
---------------------------
Ez a példa egy egyszerű DroneUser osztályt és egy DroneSystem osztályt használ a felhasználók tárolására és beléptetésére. Azonban a valóságban használj mindig biztonságosabb és összetettebb hitelesítési rendszereket, például OAuth, JWT, vagy más megbízható rendszereket a felhasználókezeléshez. Az ilyen rendszerek komolyan veszik a biztonságot és az adatvédelmet.
Belépési rendszer
class DroneUser:
def __init__(self, username, password):
self.username = username
self.password = password
class DroneSystem:
def __init__(self):
# A felhasználók tárolására egy szótárat használunk
self.users = {}
def add_user(self, user):
# Felhasználó hozzáadása a rendszerhez
self.users[user.username] = user
def login(self, username, password):
# Felhasználó hitelesítése
if username in self.users and self.users[username].password == password:
print(f"Belépés engedélyezve: {username}")
else:
print("Hibás felhasználónév vagy jelszó")
def main():
# Példa felhasználók létrehozása
user1 = DroneUser("user1", "password1")
user2 = DroneUser("user2", "password2")
# Példa drón rendszer létrehozása
drone_system = DroneSystem()
# Felhasználók hozzáadása a rendszerhez
drone_system.add_user(user1)
drone_system.add_user(user2)
# Felhasználók beléptetése
drone_system.login("user1", "password1")
drone_system.login("user2", "wrong_password")
drone_system.login("user3", "password3")
if __name__ == "__main__":
main()
--------------------------------
Minden drónnak van egy azonosítója és státusza, és a rendszer lehetőséget biztosít a drónok hozzáadására, eltávolítására és státuszának kiíratására
Ebben a példában az osztály tartalmaz egy listát (drones), ami a drónokat tárolja. Minden drónnak van egy egyedi azonosítója (id) és egy státusza (status), például "Active" vagy "Inactive".
class Drone:
def __init__(self, drone_id, status):
self.id = drone_id
self.status = status
class DroneSystem:
def __init__(self):
# A drónok tárolására egy listát használunk
self.drones = []
def add_drone(self, drone):
# Drón hozzáadása a rendszerhez
self.drones.append(drone)
print(f"Drón hozzáadva a rendszerhez: {drone.id}")
def remove_drone(self, drone_id):
# Drón eltávolítása a rendszerből az azonosító alapján
for drone in self.drones:
if drone.id == drone_id:
self.drones.remove(drone)
print(f"Drón eltávolítva a rendszerből: {drone.id}")
return
print(f"Nem található drón az azonosítóval: {drone_id}")
def print_drone_status(self):
# Drónok státuszának kiíratása
for drone in self.drones:
print(f"Drón azonosítója: {drone.id}, Státusza: {drone.status}")
def main():
# Példa drón rendszer létrehozása
drone_system = DroneSystem()
# Példa drónok hozzáadása a rendszerhez
drone1 = Drone(drone_id=1, status="Active")
drone2 = Drone(drone_id=2, status="Inactive")
drone_system.add_drone(drone1)
drone_system.add_drone(drone2)
# Példa drónok státuszának kiíratása
drone_system.print_drone_status()
# Példa drón eltávolítása a rendszerből
drone_system.remove_drone(drone_id=1)
# Példa drónok státuszának újbóli kiíratása
drone_system.print_drone_status()
if __name__ == "__main__":
main()
----------------
Ebben a példában a Drone osztály tárolja a drón azonosítóját és a hozzátartozó jelszót. A DroneSystem osztály felelős a drónok tárolásáért, hozzáadásáért, és a hitelesítésért. A authenticate metódus ellenőrzi, hogy a megadott drón azonosító és jelszó egyezik-e a tároltakkal
class Drone:
def __init__(self, drone_id, password):
self.id = drone_id
self.password = password
class DroneSystem:
def __init__(self):
# A drónok tárolására egy szótárat használunk
self.drones = {}
def add_drone(self, drone_id, password):
# Drón hozzáadása a rendszerhez
drone = Drone(drone_id, password)
self.drones[drone_id] = drone
print(f"Drón hozzáadva a rendszerhez: {drone.id}")
def authenticate(self, drone_id, entered_password):
# Drón hitelesítése
if drone_id in self.drones:
drone = self.drones[drone_id]
if entered_password == drone.password:
print(f"Belépés engedélyezve a drónhoz: {drone.id}")
else:
print("Hibás jelszó")
else:
print(f"Nem található drón az azonosítóval: {drone_id}")
def main():
# Példa drón rendszer létrehozása
drone_system = DroneSystem()
# Példa drónok hozzáadása a rendszerhez
drone_system.add_drone(drone_id=1, password="secure_password")
drone_system.add_drone(drone_id=2, password="another_password")
# Példa drónok hitelesítése
drone_system.authenticate(drone_id=1, entered_password="wrong_password")
drone_system.authenticate(drone_id=1, entered_password="secure_password")
drone_system.authenticate(drone_id=3, entered_password="some_password")
if __name__ == "__main__":
main()
Az egyszerűség kedvéért ebben a példában csak egy jelszót tárolunk el a drónhoz, és a felhasználótól bekért jelszót hasonlítjuk össze a tárolttal.
-----------
Csomag meghívása
pip install pyserial
Aktív portok lezárása
Ebben a példában a serial.Serial objektum inicializálásakor megadod a használni kívánt soros port nevét ("/dev/ttyUSB0"), a sebességet (baudrate), és az időtúllépési időt (timeout). A write metódussal küldhetsz adatokat a drónnak, és a readline metódussal olvashatod a választ. A close metódus segítségével lezárhatod a portot.
port lezárása
a drónod a /dev/ttyUSB0 porton kommunikál
import serial
# Port inicializálása
serial_port = serial.Serial("/dev/ttyUSB0", baudrate=9600, timeout=1)
try:
# Drón vezérlése, kommunikáció a porton keresztül
# Példa: Küldj egy parancsot a drónnak
command = "TAKEOFF\r\n"
serial_port.write(command.encode())
# Várakozás a válaszra
response = serial_port.readline().decode()
print(f"Drón válasza: {response}")
# Példa: Lezárás (csak akkor, ha már nincs további kommunikáció)
serial_port.close()
except Exception as e:
print(f"Hiba történt: {e}")
finally:
# Biztosítsd, hogy a port mindig lezáródik, még hiba esetén is
if serial_port.is_open:
serial_port.close()
---------------------------------------
A katonai drónok szenzorokkal rendelkeznek, amelyek segítik az irányításukat, navigációjukat, környezeti érzékelésüket és feladatvégzésüket. A drónok szenzorai különböző típusok lehetnek, a következők közé tartozhatnak:
1. **GPS (Global Positioning System):** A GPS szenzorok lehetővé teszik a drónoknak, hogy meghatározzák a földrajzi pozíciójukat a világban.
2. **IMU (Inertial Measurement Unit):** Az IMU szenzorok méri a drón gyorsulását, szögelfordulását és szögsebességét, amelyek fontosak a stabil repüléshez és navigációhoz.
3. **Barométer:** A barométerek a légnyomást mérve segítenek a drónnak az aktuális magasságának meghatározásában.
4. **Kamera és Videóérzékelők:** A drónok gyakran felszereltek kamerákkal vagy más videóérzékelőkkel a környezetük vizuális megfigyeléséhez.
5. **Ultrahang- és Lidar-szenzorok:** Ezek a szenzorok segíthetnek a drónoknak az akadályok elkerülésében és a pontos távolságmérésben.
6. **IR (Infravörös) szenzorok:** Az IR szenzorok észlelhetik a hőt és segíthetnek a drónnak a célpontok felismerésében.
7. **Radar:** A radarok lehetővé teszik a drónok számára a távolság és a sebesség mérést, és hasznosak lehetnek az időjárási viszonyok figyelésében.
8. **GNSS (Global Navigation Satellite System):** Ezen rendszerek, mint például a GPS, más műholdak segítségével is meghatározhatják a drón pontos pozícióját.