2023. december 27., szerda

Katonai drónok bombázása kötelékben

Ez egy egyszerű játékos példa a mozgó célpontok bombázására.


Forrás;

from Tkinter import *
from math import sin, cos, pi
from random import randrange
from threading import Thread
import time


 def __init__(self, boss, num, x, y, irany):
 self.boss = boss # a vászon hivatkozása
 self.num = num # az ágyú száma a listában
 self.x1, self.y1 = x, y # ágyú forgástengelye
 self.irany = irany # lövés iránya (-1:balra, +1:jobbra)
 self.lagyucso = 30 # ágyú hossza
 # ágyú rajzolása (vízszintes) :
 

self.x2, self.y2 = x + self.lagyucso * irany, y
 self.cso = boss.create_line(self.x1, self.y1,
 self.x2, self.y2, width =10)
 # ágyútest rajzolása (színes kör) :
 self.rc = 15 # a kör sugara
 self.test = boss.create_oval(x -self.rc, y -self.rc, x +self.rc,
 y +self.rc, fill ='black')
 # egy eaketa előrajzolása (kiinduláskor egy pont) :
 self.lovedek = boss.create_oval(x, y, x, y, fill='red')
 self.anim = 0
 # a célterület szélességének és magasságának meghatározása :
 self.xMax = int(boss.cget('width'))
 self.yMax = int(boss.cget('height'))
 def iranyzas(self, angle):
 "ágyú dőlésszögének beállítása"
 # rem : az <angle> (szög) paramétert stringként kapja.
 # át kell alakítani valós számmá, majd radiánná :
 

self.angle = float(angle)*2*pi/360
 self.x2 = self.x1 + self.lagyucso * cos(self.angle) * self.irany
 self.y2 = self.y1 - self.lagyucso * sin(self.angle)
 self.boss.coords(self.cso, self.x1, self.y1, self.x2, self.y2)

 def tuz(self):
 "raketa kilövésének indítása"
 # céltárgy hivatkozása :
 self.celtargy = self.boss.master.celtargy
 if self.anim ==0:
 self.anim =1
 # raketa kezdő pozíciója (ez az ágyú torka) :
 self.xo, self.yo = self.x2, self.y2
 v = 20 # kezdõ sebesség
 # ennek a sebességnek a függőleges és vízszintes komponensei :
 self.vy = -v *sin(self.angle)
 self.vx = v *cos(self.angle) *self.irany
 self.animacio_raketa()


 def animacio_raketa(self):
 "rakéta animációja (ballisztikus pálya)"
 # rakéta pozícionálása koordinátái újradefiniálásával :
 self.boss.coords(self.lovedek, self.xo -3, self.yo -3,
 self.xo +3, self.yo +3)
 if self.anim >0:
 # a következõ pozíció számolása :
 self.xo += self.vx
 self.yo += self.vy
 self.vy += .5
 self.test_akadaly() # akadályba ütközött ?
 self.boss.after(1, self.animacio_lovedek)
 else:
 

# animáció vége :
 self.boss.coords(self.lovedek, self.x1, self.y1, self.x1, self.y1)

 def test_akadaly(self):
 "Eldöntjük: a lövedék célba talált-e vagy elveszett"
 if self.yo >self.yMax or self.xo <0 or self.xo >self.xMax:
 self.anim =0
 return
 if self.yo > self.celtargy.y -3 and self.yo < self.celtargy.y +18 \
 and self.xo > self.celtargy.x -3 and self.xo < self.celtargy.x +43:
 # vizuális visszajelzés látjuk a lövedék robbanását (narancssárga kör) :
 self.robbanas = self.boss.create_oval(self.xo -10,
 self.yo -10, self.xo +10, self.yo +10,
 fill ='orange', width =0)
 self.boss.after(150, self.robbanas_vege)
 self.anim =0


 def robbanas_vege(self):
 "a robbanási kör törlése - a pontszám kezelése"
 self.boss.delete(self.robbanas)
 # a siker jelzése a master-ablaknak :
 self.boss.master.goal()
class VezerloPult(Frame):
 """Egy ágyúhoz asszociált vezérlőpult"""
 def __init__(self, boss, canon):
 Frame.__init__(self, bd =3, relief =GROOVE)
 self.score =0
 s =Scale(self, from_ =88, to =65,
 troughcolor ='dark grey',
 command =canon.iranyzas)
 s.set(45) # a lövés kezdő szöge
 s.pack(side =LEFT)
 Label(self, text ='Dõlésszög').pack(side =TOP, anchor =W, pady =5)
 Button(self, text ='Tûz !', command =canon.tuz).\
 pack(side =BOTTOM, padx =5, pady =5)
 Label(self, text ="pont").pack()
 self.pontok =Label(self, text=' 0 ', bg ='white')
 self.pontok.pack()
 # positionner a gauche ou a droite suivant le sens du canon :
 gd =(LEFT, RIGHT)[canon.irany == -1]
 self.pack(padx =3, pady =5, side =gd)
 def pontHozzaadasa(self, p):
 "a pontszám növelése vagy csökkentése"
 self.score += p
 self.pontok.config(text = ' %s ' % self.score)
class Celtargy:
 """céltárgyként szolgáló objektum"""
 def __init__(self, can, x, y):
 self.can = can # a felület hivatkozása
 self.x, self.y = x, y
 self.celtargy = can.create_oval(x, y, x+40, y+15, fill ='purple')

 def elmozditas(self, dx, dy):
 "a céltárgy dx,dy elmozdítása"
 self.x += dx
 self.y += dy
 self.can.move(self.celtargy, dx, dy)
 return self.x, self.y
class Thread_celtargy(Thread):

 def __init__(self, app, celtargy):
 Thread.__init__(self)
 self.celtargy = celtargy # az elmozdítandó objektum
 self.app = app # az alkalmazásablak hivatkozása
 self.sx, self.sy = 6, 3 # távolság- és idõnövekmények
 self.dt =.3 # az animációhoz

 def run(self):
 "animálás, amíg az alkalmazásablak létezik"
 while self.app != None:
 x, y = self.celtargy.elmozditas(self.sx, self.sy)
 if x > self.app.xm -50 or x < self.app.xm /5:
 self.sx = -self.sx
 if y < self.app.ym /2 or y > self.app.ym -20:
 self.sy = -self.sy
 time.sleep(self.dt)
 def stop(self):
 "a thread zárása, ha az alkalmazásablak zárva van"
 self.app =None

 def gyorsit(self):
 "a mozgás gyorsítása"
 self.dt /= 1.5
class Application(Frame):
 def __init__(self):
 Frame.__init__(self)
 self.master.title('<<< Lövés mozgó céltárgyra >>>')
 self.pack()
 self.xm, self.ym = 600, 500
 self.jatek = Canvas(self, width =self.xm, height =self.ym,
 bg ='ivory', bd =3, relief =SUNKEN)
 self.jatek.pack(padx =4, pady =4, side =TOP)
 # Egy ágyú és egy vezérlő pult objektum létrehozása :
 x, y = 30, self.ym -20
 self.agyu =Canon(self.jatek, 1, x, y, 1)
 self.pult =VezerloPult(self, self.agyu)


Készítsünk a teszthez egy mozgó célpontot.

Példa

 # mozgó célpont létrehozása :
 self.celtargy = Celtargy(self.jatek, self.xm/2, self.ym -25)
 # mozgó célpont animálása saját thread-del :
 self.tc = Thread_celtargy(self, self.celtargy)
 self.tc.start()
 # az összes thread leállítása amikor zárjuk az ablakot :
 self.bind('<Destroy>',self.zaras_threadek)
 def goal(self):
 "a célpontot eltaláltuk"
 self.pult.pontHozzaadasa(1)
 self.tc.gyorsit()

 def zaras_threadek(self, evt):
 "a célpont animációs thread-jének leállítása"
 self.tc.stop()
if __name__ =='__main__':
 Application().mainloop() 

Ha szükséges adatbázist is készíthetünk

Példa


# Adatbázis létrehozása és feltöltése
import gadfly
import os
path_ = os.getcwd() # aktualis konyvtar
connection = gadfly.gadfly()
connection.startup("music", path_)
cur = connection.cursor()
request = "create table zeneszerzok (eloado varchar, ev_szul integer,\
 ev_halal integer)"
cur.execute(request)
request = "create table muvek (eloado varchar, cim varchar,\
 ido integer, interpr varchar)"
cur.execute(request)
print "Bevitt adatok kiirasa a zeneszerzok adattablaba :"
while 1:
 nv = raw_input("Zeneszerzo neve (<Enter> befejezes) : ")
 if nm =='':
 break
 esz = raw_input("Szuletes eve : ")
 eha = raw_input("Halal eve : ")
 request ="insert into zeneszerzok(eloado, ev_szul, ev_halal) values \
 ('%s', %s, %s)" % (nv, esz, eha)
 cur.execute(request)
# Ellenorzeskent kiirja a bevitt adatokat :
cur.execute("select * from zeneszerzok")
print cur.pp()
print "Bevitt adatok rögzitese a muvek adattablaba :"
while 1:
 nev_ = raw_input("Zeneszerzo neve (<Enter> befejezes) : ")
 if nev_ =='':
 break
 cim_ = raw_input("Zenemu cime : ")
 ido_ = raw_input("idotartam (perc) : ")
 int = raw_input("eloado : ")
 request ="insert into muvek(eloado, cim, ido, interpr) values \
 ('%s', '%s', %s, '%s')" % (nev_, cim_, ido_, int)
 cur.execute(request)
# Ellenorzeskent kiirja a bevitt adatokat :
cur.execute("select * from muvek")
print cur.pp()
connection.commit()


Időzités

 Python turtl e modulja rendelkezik egy időzítővel, amely eseményt okozhat, ha az ideje lejár . import turtle turtle.setup(x,y) w n = turtle .Screen () wn.title("Időzítő használata")
péplda
Automatikus végrehajtás

import turtle

turtle.setup(400,500)
ablak = turtle.Screen()
ablak.title("Időzítő használata")
ablak.bgcolor("lightgreen")

Gun = turtle.Turtle()
Gun.color("purple")
Gun.pensize(3)

def ek1():
    Gun.forward(100)
    Gun.left(56)

ablak.ontimer(ek1, 2000)
ablak.mainloop()


Repülés alakzatban parancs 
shapesize

Eseményfigyelés és kezelés akár a flotta minden résztvevőjének külön külön.
import turtle
gun.listen()      
gun.mainloop()

Nyomkövetés, légi felvételek elemzése.

Felemelkedés

#############DEPENDENCIES#######################


from dronekit import connect, VehicleMode,LocationGlobalRelative,APIException
import time
import socket
import exceptions
import math

##############FUNCTIONS##########################



##Function to arm the drone props and takeoff at targetHeight (m)


def arm_and_takeoff(targetHeight):

while vehicle.is_armable!=True:
print("Waiting for vehicle to become armable.")
time.sleep(1)
print("Vehicle is now armable")

vehicle.mode = VehicleMode("GUIDED")

while vehicle.mode!='GUIDED':
print("Waiting for drone to enter GUIDED flight mode")
time.sleep(1)
print("Vehicle now in GUIDED MODE. Have fun!!")

vehicle.armed = True
while vehicle.armed==False:
print("Waiting for vehicle to become armed.")
time.sleep(1)
print("Look out! Virtual props are spinning!!")

vehicle.simple_takeoff(targetHeight)

while True:
print("Current Altitude: %d"%vehicle.location.global_relative_frame.alt)
if vehicle.location.global_relative_frame.alt>=.95*targetHeight:
break
time.sleep(1)
print("Target altitude reached!!")

return None


############MAIN EXECUTABLE#############


####sim_vehicle.py opens up port on localhost:14550



vehicle = connect('127.0.0.1:14550',wait_ready=True)


####Arm the drone and takeoff into the air at 5 meters


arm_and_takeoff(5)
print("Vehicle reached target altitude")


####Once drone reaches target altitude, change mode to LAND 




vehicle.mode=VehicleMode('LAND')
while vehicle.mode!='LAND':
print("Waiting for drone to enter LAND mode")
time.sleep(1)
print("Vehicle now in LAND mode. Will touch ground shortly.")




2023. december 24., vasárnap

Boszorkányok a faluban


Olyan nagy falu vót Demecser, hogy még vármegye gyűlést is tartottak benne eccer. Vótak bizony sokan, boszorkány-égetések meg karóba huzások is, de azok olyan régen vótak, hogy emlékük is alig maradt fenn, Kisvárdán vótak a perek, megyeszerte ma is emlegetett büdi boszorkányt és annak esetét kivéve, a kiről ma is röpked a szálló ige, amennyiben a szabolcsvármegyei ember vagy asszony, akire megharagszik és nagyon házsártosnak tartja, ma is elég gyakran használja azt a hasonlatot, hogy olyan, mint a büdi boszorkány, vagy hogy égessék el, mint a büdi boszorkányt. Eta néni mesélte, hogy ükapáink idejibe vótak még boszorkányok, azt mondták rájuk az ördöggel cimborálnak. Sokféle fehérnéppel találkoztam, aki biztos boszorkány vót.élőholt távoltatása, átok rontás levétele, delejezés, lidérc űzés.  Oszt milyenek vótak azok a boszorkányok?

Vót aki az ártó mágiát használta rontásra, igézésre, vót aki a varázslásban vót jó, szemfényvesztő, ártó, gonosz asszon, meg vótak a méregkeverők, akik 100 féle gyilkos növényt ismertek annak főzetét adták embernek állatnak, más vót a javasasszony, aki ráolvasást gyógyítást meg jóslást végzett. Strigának nevezték azokat az asszonyokat, akik éjszaka állatalakot öltöttek, és nyomasztó látomásokat okoztak. Vót akit addig kínoztak amíg mindent be nem valott vagy abbul meg nem hótt.
Vüt olyan is aki holló képében az ablakon bényerétettél, hol fejedet ruhával betakargatván az föllebb vett Asszont jésztegette, megh rontottad, úgy hogy tíz hétigh Sínlődött miátta. 

Szemmel elrontván az Gyermeket az meg is holt,  midőn a pandúrok megfogattak, hogy ha ütet elvisznek áristomra, utána még hárman gyönnek.
A másik meg edénbe összve timporált Búza, Korpa, Soó, Tégla és Foghajma átal, melyet a Csorda járásban elröjtött 16 darabbul álló marhák azonnal a sok járások és étlenségek után el vesztenek, azon tétemény föl vételével pedigh, és vízben vettetésével az marhák Szemlátomást meg jobbultak. Szerencsére Mária Terézia betiltotta, 1756ban a boszorkányüldözést. Amúgy a rendzavarási ügyben a vizsgálattal János ajaki parochus bizatott meg, aki egyszersmind borsovai alesperes volt. Hogy a borsovai alesperesi kerület a mai beregvármegyei Borsova vidékére terjedt-e ki, vagy a mai Demecser melletti Borsova puszta képezte ennek az alesperesi kerületnek központját, aztat én mán nem tudom.

2023. december 22., péntek

Wifi kapcsolat blokkolása


Katonai drónok esetén is használható titkosítatlan módszer, amikor üzenetet küldünk a wifi sugárzónak olyan sűrűn, hogy ne tudjon válaszolni, ez a túlterheléses módszer. Lehet még szűréssel és több azonos SSID-val megzavarni az adó wifit. Ez a firmware lehetővé teszi számos művelet egyszerű végrehajtását a 802.11-es hálózatok ESP8266 használatával történő teszteléséhez . Ez egy nagyszerű projekt a WiFi, a mikrokontrollerek, az Arduino, a hackelés és általában az elektronika/programozás megismerésére is. A hitelesítés-eltávolító támadás a fő funkció, amellyel az eszközöket le lehet választani a WiFi hálózatról. Bár ez a szolgáltatásmegtagadási támadás nem újdonság, sok eszköz még mindig sebezhető vele. Szerencsére ez lassan megváltozik, mivel egyre több WiFi 6-kompatibilis eszközt használnak. De sok elavult WiFi-eszköz a helyén marad, például az olcsó IoT-hardverben.

Az ESP8266 Deauther segítségével könnyedén tesztelheti ezt a támadást 2,4 GHz-es WiFi hálózatán/eszközein, és megnézheti, hogy sikeres-e vagy sem. És ha igen, akkor tudja, hogy frissítenie kell a hálózatát. A kali wifislaxot is ajánlom figyelmetekbe.  A 802.11W szabványú közeghozzáférés a felügyeleti keretek védelmére szolgáló protokoll egy kiegészítésnek tekinthető, de alapvetően ha ez benne van egy adott AP-ban, akkor sem tudjuk ezeket a kiskapukat kiküszöbölni mivel a kliensnek valamilyen módon meg kell tudnia szólítania a középponti elemet, ha titkosítva menne, még a kapcsolatfelvétel is, akkor nem volna csatorna, ahol meg tudnák beszélni egymással a titkos kulcsot. Egyébként az SSID sokszorozásnál sem az a gond, hogy van több egyforma SSID, hanem, hogy mindent klónoz, lényegében a Layer2-ben többszörösen megjelenik ugyanaz a MAC cím (ami elméletben lehetetlen), ha azt nem klónozná, akkor nem is bolondulna meg a laptop, gondoljunk arra, amikor egy szervezetnél ugyanaz az SSID van mindenhol és nem akad meg a hálózat, a host egyébként nem fogja elengedni a már működő kapcsolatát (egyébként nem is tudna önállóan, másik ugyanolyan nevű SSID-re átugrani még a jel függvényében sem, azaz nem a laptop az aki nem tudja hová kell küldeni a kereteket hanem az AP áll meg).  Ez az egész problémahalmaz kikerülhető ha tiltjuk az ssid broadcastet, hozzáteszem csak addig, amíg nem egy belső ember akar szórakozni, aki ismeri már az SSID-t.

https://github.com/SpacehuhnTech/esp8266_deauther

Drón leválasztása, vagy szeparálása a megoldás. Geo-fencing: virtuális elkerítés > ennek során olyan virtuális kerítést alakítanak ki egy adott földrajzi terület körül, mely megakadályozza, hogy oda kívülről egy drón bejuthasson. Geo-caging: virtuális bekerítés > ennek során olyan virtuális kerítést alakítanak ki egy adott terület körül, mely megakadályozza, hogy onnan belülről egy drón kijusson.
A drónok kompozit anyagokból készülnek, így nem tartalmaznak olyan mennyiségben fémet, amit felismerhet a radar.

Észlelés, detektálás és nyomkövetés: mozgó célpont észlelése, mozgási pályájának követése. Ez az egyik legfontosabb tevékenység, ugyanis ez a kulcs ahhoz, hogy minden további intézkedés megalapozott lehessen. Első feladat az, hogy egy potenciális veszélyforrást, mely a levegőben van és viszonylag kisméretű észlelni lehessen, és utána további azonosítási tevékenységeket lehessen rajta végezni.
Ehhez az alábbi technológiai megoldások állnak rendelkezésre:
Radar: hagyományos elven működő megoldás, mely az elsődleges radarokhoz hasonló megoldással dolgozik (aktív jeleket bocsát ki, mely visszaverődik a tükröződő felületről, és így megállapítható, hogy a tér mely részében – milyen magason és milyen távolságban – helyezkedik el egy tárgy). Mivel az észlelendő pilóta nélküli légijárművek kisméretűek, könnyűek és jellemzően műanyagból készülnek, így radaros detektálás esetén figyelemmel kell lenni arra, hogy kellően szűk radarkeresztmetszeti sugárzás álljon rendelkezésre, mely segítségével lehetővé válik a kisméretű eszközök és tárgyak észlelése.
Rádiófrekvenciás azonosítás, elektromágneses jelkibocsátás detektálása: a megoldások során folyamatosan szkennelik azokat a gyakran használt frekvenciákat, melyen a távirányító és a légijármű közötti adatkapcsolat zajlik. A frekvencián való rádióforgalmazás alapján megállapítható, hogy az adott területen jelen van-e egy-egy eszköz vagy sem. Az elektromágneses jelkibocsátás felderítése mind a repülőeszköz, mind pedig az azt irányító személy/állomás detektálására képes lehet. Utóbbi azért is fontos, mert ilyen módon nemcsak a drónfenyegetésre mint tünetre történhet reakció, hanem annak forrása, az elkövető/agresszor lokalizálása, megtalálása is lehetségessé válik. Adott esetben az elektrooptikai felderítés kombinálva hőforrás-érzékeléssel is alkalmazható lehet.
Elektrooptikai észlelés: vizuális jellemzők alapján történő megfigyelés, kamerák segítségével.
Infravörös észlelés: egy eszköz észlelése annak termikus jellemzői alapján. Ez különösen akkor tud hatékony lenni, ha a drón a működése során bocsát ki valamilyen termikus sugárzást. Mivel a hajtóművek működése során keletkezik hő, így ezzel a megoldással lehet detektálni. Azonban figyelembe kell venni, hogy korlátozott a lefedettség. Akusztikus észlelés: a drónok hajtóművei által keltett jellemző és egyedi hangkarakterisztika alapján megvalósuló észlelés. Az alkalmazott rotor mérete, karakterisztikája és az alkalmazott motor típusa meghatározza a felderítés sikerét. A detektálást és azonosítást végrehajtó berendezésben egy nagy érzékenységű mikrofon érzékeli a drón hangját, egy mikroprocesszor a tárolt hangmintákhoz hasonlítja azt és kiválasztja a megfelelőt, tehát a leggyakrabban használt dróntípusokat képes azonosítani is ezáltal biztosítva többletinformációt. A módszer nem képes észlelni a merevszárnyú eszközöket sikló üzemmódban; városi, zajos környezetben pedig számos zavaró hangforrás lehet jelen, azonban ezek megkülönböztetésében eléggé előrehaladott a fejlesztés. Előbbiek kombinációja: a jobb hatékonyság érdekében különböző megoldások együttes használata. Annak érdekében, hogy egy detektált eszköz jelentette veszélyeket minimalizálni lehessen, beavatkozás is szükséges. Erre is több lehetőség kínálkozik, és attól függően, hogy mi a cél, a legkülönbözőbb alkalmazások képzelhetők el. Mivel általában külső fenyegetés elleni védelmet kell biztosítani, így a geo-fencing-re épülő megoldások terjedtek el. Ezek biztosítják, hogy egy adott területtől távol lehessen tartani a nemkívánatos eszközöket. Bejutás megakadályozása: elhárítási megoldás, mely során a vezérlés megzavarása valósul meg azon célból, hogy a drón ne tudjon bejutni a légtérbe. Jamming – zavarás: Azt az ellentevékenységet értjük alatta, amikor a drón és a távpilóta közötti kommunikációt blokkolva akadályozzuk a drón további működését. Ilyenkor a drón – szoftveres kialakításától függően – vagy visszatér arra az utolsó koordinátára, ahol még kapott jelet vagy a kiindulási pontra, vagy vészleszállást hajt végre. A zavarás érintheti az irányításhoz kapcsolódó rádiófrekvenciát vagy a helymeghatározó GNSS jeleket. Spoofing: ennek során egy harmadik félnek is lehetősége van átvenni a teljes irányítást a drón fölött, úgy, hogy az eredeti távpilóta vezérlőállomás jelei elnyomásra kerülnek. Ennek megvalósításához ismerni kell a drón pontos típusát és a vezérlést biztosító rádióösszeköttetés protokollját valamint a parancsokat is. Semlegesítés: végső elhárítási megoldás, melynek hatására az adott eszköz esetleges károkozó vagy zavaró hatása megszüntethető. Ez történhet lézerrel, hálóval történő elkapás. éövedékkel való megsemmisítés. Előbbiek kombinációja: a jobb hatékonyság érdekében különböző megoldások együttes használata. Illetve megoldás még a különböző jelek együttes zavarása, mely megakadályozza a bejutást egy adott helyszínre. Az egyes megoldások kialakítása eltérő méretű lehet és eltérő eszközöket igényel: Földi telepítésű: jellemzően valamilyen földi járművön helyezik el a szükséges eszközöket. Kézben tartható: olyan kisméretű eszközök, amelyek kézi berendezésként használhatók és akár egy ember is tudja üzemeltetni. Fedélzeti megoldás: elhárító drónokra szerelt megoldások, melyek így közvetlenül a levegőből tudják végezni az elhárító manővert/műveletet az idegen vagy megsemmisítendő drón közvetlen közelébe érve. Az RF-zavarók, a legimpozánsabb például a Blighter nevű AUDS-rendszer, ez megszakítja a RF-kapcsolatot a drón és az operátor között. 

Wifi helyett a LoRa APRS

Az APRS (Automatic Packet Reporting System ) már 30 éve dübörög. Egy 144.800MHz-en üzemelő jeladót vagy a mobil adóvevőjéhez biggyesztett egy aprócska modem áramkört vezérlővel és GPS antennával van ellátva. Az APRS üzemmód újra reneszánszát éli annak köszönhetően, hogy a rádiós jelutat (az okosok) kiváltották egy sokkal korszerűbb, un. LoRa rádióadóvevőre. Ezek az adóvevők kb. 15-20 ezer Forintos áron megvásárolható aprócska modulok, melyek tartalmazzák a LoRa adóvevő chip-et, egy GPS -t, egy 0.96″-os kijelzőt, azaz “konyhakész” megoldást nyújtanak. A LoRa (Long Range) egy kis adóteljesítményű, szórt spektrumú modulációs technika, mely a 863MHz-es, valamint a rádióamatőr sávba eső 433MHz-es frekvenciát használja. A korszerű modulációs technika nagy távolságú, akár többször 10Km-es rádiós összeköttetéseket tesz lehetővé rendkívül alacsony energiafogyasztás mellett. Mielőtt valaki vérszemet kapna, természetesen a LoRa technológia sem képes a fizika megerőszakolására, a LoRa rádiójelek sem fognak átjutni akadálytalanul a vasbetonon, hegyeken és hasonló tereptárgyakon, de rövid adatcsomagokat igen jó hatásfokkal (hatótávolsággal) továbbít, azaz ideális a céljainkhoz. Mivel nem árnyékolják a tereptárgyak katonai célra kiváló. A LoRa rádió néhány olyan funkciót tartalmaz, amelyek segítségével nagy hatótávolságú hatékony teljesítményt és alacsony költséget érhet el. Néhány ilyen funkció a következőket tartalmazza: 1. Modulációs technika 2. Frekvencia 3. Adaptív adatsebesség 4. Adaptív teljesítményszintek Modulációs A Lora rádiók a csipogó szórt spektrumú modulációs technikát használják, hogy jelentősen magas kommunikációs tartományt érjenek el, miközben...A kommunikáció minden IoT-projekt egyik legfontosabb része . Egy dolognak az a képessége, hogy más „dolgokkal” (eszközfelhővel/szerverrel) kommunikáljon, az adja a jogot a „dolognak”, hogy a nevéhez csatolja az „internetet”. Noha rengeteg kommunikációs protokoll létezik, mindegyikből hiányzik egy vagy másik dolog, ami miatt „nem teljesen alkalmasak” az IoT-alkalmazásokra. A fő problémák az energiafogyasztás, a hatótáv/lefedettség és a sávszélesség. A legtöbb kommunikációs rádió, mint például a Zigbee , a BLE, a WiFi, rövid hatótávolságú, míg mások, mint a 3G és az LTE, energiaéhesek, és lefedettségük hatótávolsága nem garantálható, különösen a fejlődő országokban. Míg ezek a protokollok és kommunikációs módok bizonyos projekteknél működnek, ez kiterjedt korlátozást jelent, mint pl. nehézségek az IoT-megoldások bevezetése során olyan területeken, ahol nincs mobil (GPRS, EDGE, 3G, LTE/4G) lefedettség, és az eszközök akkumulátor-élettartamának bruttó csökkenése. Így az IoT jövőjét és mindenféle, mindenféle helyen elhelyezett „dolog” összekapcsolását elképzelve, szükség volt egy olyan, az IoT-re szabott kommunikációs médiumra, amely támogatja a kifejezetten kis energiaigényű, jelentősen nagy hatótávolságú követelményeket. , olcsó, biztonságos és könnyen telepíthető. Itt jön be a LoRa . A LoRa (amely a Long Range rövidítése ) egy szabadalmaztatott vezeték nélküli kommunikációs technológia, amely az ultraalacsony energiafogyasztást hatékony nagy hatótávolsággal ötvözi . Míg a hatótávolság nagymértékben függ a környezettől és az esetleges akadályoktól (LOS vagy N-LOS), a LoRa hatótávolsága általában 13-15 km között van , ami azt jelenti, hogy egyetlen LoRa-átjáró egy egész várost lefedhet, néhány másikkal pedig egy egész várost. ország. A technológiát a francia Cycleo fejlesztette ki, és akkor került előtérbe, amikor 2012-ben a Semtech felvásárolta a céget. Arduinóval és Raspberry Pi-vel LoRa modulokat használtunk , és az elvárásoknak megfelelően működtek.

2023. december 20., szerda

Katonai dróbok programozása alapismeretek

A drón programozásához alapos ismeretekkel kell rendelkeznie a programozási nyelvekről . Szerencsére számos kifejezetten drónprogramozásra tervezett programozási nyelv létezik, mint például a Python, a JavaScript és a C++. Ezek a nyelvek biztosítják a szükséges interfészt a repülésirányítóval való kommunikációhoz és a drón mozgásának vezérléséhez. 
A feladat végrehajtásához szükséges drón kiválasztása az első lépés. Ha drónprogramozásról van szó, az első döntő lépés az igényeinek megfelelő drón kiválasztása. A piacon elérhető lehetőségek széles skálája miatt alapvető fontosságú, hogy különféle tényezőket mérlegeljen a döntés meghozatala előtt.
Mindenekelőtt fontolja meg a költségvetését. A drónok ára jelentősen eltérhet, a megfizethető fogyasztói modellektől a csúcskategóriás professzionális drónokig. Határozza meg, mennyit hajlandó beruházni egy drónba programozási célokra, szem előtt tartva, hogy a fejlettebb funkciók és képességek gyakran magasabb árcédulával járnak.
Ezután gondolja át programozási céljait. Szeretné megtanulni a drónok programozásának alapjait vagy fejlett alkalmazásokat fejleszteni? A különböző drónok különböző szintű programozhatóságot kínálnak, ezért fontos felmérni, hogy egy adott drón képességei összhangban vannak-e az Ön programozási törekvéseivel.

A repülési képességek egy másik fontos tényező, amelyet figyelembe kell venni. Egyes drónokat kezdőknek tervezték, és stabilitást és könnyű használatot kínálnak, míg mások inkább a tapasztalt programozóknak szólnak, akik szeretnék felfedezni a haladó repülési manővereket. Fontolja meg, hogy milyen típusú repülési élményt keres, és válassza ki a megfelelő repülési képességekkel rendelkező drónt.

A programozási nyelvekkel való kompatibilitás szintén lényeges szempont. Míg a legtöbb modern drón programozható olyan népszerű programozási nyelvekkel, mint a Python, a JavaScript és a C++, érdemes ellenőrizni, hogy az Önt érdeklő drón támogatja-e azt a konkrét programozási nyelvet, amelyet kényelmes vagy szívesen megtanul.

Ezenkívül fontolja meg a szoftverfejlesztő készletek (SDK) és az alkalmazásprogramozási interfészek (API-k) elérhetőségét a tervezett drónmodellhez. Ezek az erőforrások nagymértékben leegyszerűsíthetik a drón programozási folyamatát azáltal, hogy előre beépített funkciókat és könyvtárakat biztosítanak, amelyek kezelik a gyakori feladatokat és a drón hardverével való interakciókat.

Végül ne felejtse el elolvasni a véleményeket, és visszajelzéseket gyűjteni más drónok rajongóitól. Az online fórumok, közösségek és közösségi média csoportok értékes betekintést nyújthatnak a különböző drónmodellek teljesítményébe, megbízhatóságába és általános felhasználói élményébe. A drónprogramozásban már elmélyültek meghallgatása segíthet megalapozott döntés meghozatalában.


A költségvetés, a programozási célok, a repülési képességek, a programozási nyelvekkel való kompatibilitás és a felhasználói visszajelzések gondos mérlegelésével kiválaszthatja az igényeinek leginkább megfelelő drónt. Ne feledje, a megfelelő drón kiválasztása az első lépés egy izgalmas utazás felé a drónprogramozás világába!
Az alapok megértése
Mielőtt belemerülne a drónok programozásába, elengedhetetlen, hogy alaposan ismerje a drónt alkotó alapfogalmakat és összetevőket. Ez a tudás erős alapot biztosít a programozási erőfeszítéseihez, és segít megérteni a kódot és a parancsokat, amelyekkel dolgozni fog.

A drón lényegében több alapvető összetevőből áll. Ezek közé tartozik a keret, a motorok, a légcsavarok, a fedélzeti repülésvezérlő és az akkumulátor. A keret olyan szerkezetként szolgál, amely mindent egyben tart és stabilitást biztosít repülés közben. A motorok és a légcsavarok felelősek a drón földről való felemeléséhez és a levegőben való mozgásának szabályozásához szükséges tolóerő létrehozásáért.

A repülésirányító a drón agya. Ez egy kisméretű elektronikus eszköz, amelyben érzékelők és processzorok találhatók, amelyek a parancsok értelmezéséért és a motorok és légcsavarok vezérléséért felelősek a stabil repülés elérése érdekében. A repülésirányító bemenetet kap a pilótától vagy a programozott utasításoktól, és valós idejű beállításokat hajt végre a stabilitás és a reakciókészség megőrzése érdekében.
Ezeken az alapvető alkatrészeken kívül a drónokat gyakran különféle érzékelőkkel, például gyorsulásmérőkkel, giroszkópokkal, GPS-szel és barométerekkel szerelik fel. Ezek az érzékelők döntő fontosságú adatokat szolgáltatnak a drón irányáról, sebességéről, magasságáról és az égbolton való helyzetéről. Létfontosságú szerepet játszanak a pontos repülésirányítás biztosításában, és olyan fejlett funkciókat tesznek lehetővé, mint az autonóm repülés és az akadálykerülés.
A drónrepülés alapjainak megértése is elengedhetetlen. A drónok különböző irányokba mozoghatnak: felfelé és lefelé (magasságszabályozás), előre és hátra (pitch control), oldalról oldalra (gurulásvezérlés), és foroghatnak az óramutató járásával megegyező vagy ellentétes irányba (yaw control). Ezeket a mozgásokat a motorok és a légcsavarok sebességének és forgásának beállításával érik el.
Fontos megjegyezni, hogy a drónok többféle vezérlési módra támaszkodnak. Kézi üzemmódban a pilóta teljes mértékben irányítja a drón mozgását, és aktívan kell manővereznie. Más módokban, például a GPS módban vagy a magasságtartási módban a drón a fedélzeti érzékelőit és a GPS-t használja a stabil pozíció és magasság fenntartására, így kevesebb közvetlen irányítást igényel a pilótától.
A drónkomponensek, repülésvezérlők, szenzorok és alapvető repülési manőverek alapvető fogalmainak megértésével jobban felkészülhet a drónprogramozásba. Ezzel a tudással felvértezve jobban megértheti, hogy kódja és parancsai hogyan alakulnak át valós drónmozgásokká és -viselkedésekké.
A drón beállítása
Miután kiválasztotta a megfelelő drónt a programozási törekvéseihez, ideje beállítani a programozáshoz. A drón megfelelő beállítása biztosítja, hogy zökkenőmentes és problémamentes élményben legyen része a programozás és a drón mozgásának vezérlése során.
A drón beállításának első lépése, hogy figyelmesen olvassa el és kövesse a gyártó utasításait. Minden drónnak lehetnek speciális beállítási eljárásai és irányelvei, amelyeket be kell tartania. Ismerkedjen meg a drón alkatrészeivel, az összeszerelési folyamattal, valamint a gyártó által javasolt speciális óvintézkedésekkel vagy biztonsági intézkedésekkel.
Ezután győződjön meg arról, hogy a drón firmware-je naprakész. A gyártók gyakran adnak ki firmware-frissítéseket a teljesítmény, a stabilitás és a biztonság javítása érdekében. A drón firmware-ének frissítésével kihasználhatja a legújabb funkciókat és hibajavításokat, amelyek kulcsfontosságúak lehetnek a zökkenőmentes programozáshoz és működéshez.
Mielőtt első repülésre vinné drónját, elengedhetetlen az érzékelők kalibrálása. Az érzékelő kalibrálása biztosítja, hogy a drón belső érzékelői pontosan érzékeljék a drón tájolását, magasságát és egyéb repülési paramétereit. Tekintse meg a gyártó utasításait a drón érzékelőinek megfelelő kalibrálásához.
A drón beállítása és kalibrálása után itt az ideje, hogy kapcsolatot létesítsen drónja és a programozási környezet között. A legtöbb drón vezeték nélküli csatlakozási lehetőséget biztosít, jellemzően Wi-Fi vagy Bluetooth használatával a földi vezérlőállomással vagy programozó szoftverrel való kommunikációhoz.
A drónmodelltől és a szoftverkompatibilitástól függően előfordulhat, hogy dedikált programozószoftvert kell telepítenie, vagy olyan általános programozási környezeteket kell használnia, amelyek támogatják a drónprogramozási könyvtárakat. Tekintse meg a drón felhasználói kézikönyvét vagy a gyártó webhelyét a drón és a programozószoftver közötti csatlakoztatás és kommunikáció létrehozásához.
Érdemes megemlíteni azt is, hogy néhány drón szimulációs módot kínál, amely lehetővé teszi a programozás gyakorlását és a kód tesztelését anélkül, hogy ténylegesen repülne a drónnal. Ez értékes funkció lehet a kezdők számára, vagy bonyolult manőverek és viselkedések teszteléséhez valós repülési forgatókönyvek végrehajtása előtt.

Katonai drónok titkos kódjai


With the evolution and the increasing accessibility of drone technology, criminals and among them terrorists started to utilise drones for their own purposes. Drones can be used in several ways to commit and to aid serious criminal offences, including acts of terrorism. This paper aims to shed light on this threatening phenomenon, examining the role of drone technology in the fight against terrorism, the applicability of drones for criminal purposes, the usage of drones by terrorists, the theory of the fight against drones and counter-drone technology. The fight against terrorism must prepare to face this threat both in theory and practice.  What Is Drone Programming? Drone programming is the development of software that enables drones to fly autonomously with self-awareness and situational awareness. It also enables a drone to make decisions and execute tasks without human intervention, such as last mile delivery. The programming language landscape of military drones is a complex one. While C++ serves as the primary language for controlling and managing the drone's core functions, other languages like Python, Assembly, Ada, Java, and MATLAB play crucial roles in different aspects of the drone's software system. C++ is a low-level, fast, and efficient programming language that gives you more control and flexibility over your drone's hardware and software. C++ is also the language of choice for many advanced and complex drone applications, such as computer vision, artificial intelligence, and machine learning. 
Közel 1 millió drón van a világon, a technológia példátlan ütemben fejlődik, a katonai drónok a katonai konfliktusok új korszakának szimbólumává válnak.
A technológia e pilóta nélküli csodái hihetetlen dolgokra képesek, és az "agyukba" ágyazott kód határozza meg a csatatéren tett cselekedeteiket. De hogyan jön létre ez a kód, és mitől olyan különleges? Merüljünk el a katonai drónprogramozás csodálatos világában, és derítsük ki, milyen titkokat rejt. A katonai drónok, számos érzékelővel vannak felszerelve, a kameráktól a radarig. Ezek az érzékelők valós időben gyűjtik az információkat, és továbbítják egy földi irányító állomásra, amely akár 10 000 km-re is lehet a dróntól. A drón szoftvere feldolgozza ezeket az információkat, és beépített algoritmusok vagy kezelői parancsok alapján hoz döntéseket.

Az autonómiának több szintje van, a teljesen emberi irányítástól a teljesen autonóm rendszerekig, amelyek emberi beavatkozás nélkül is képesek döntéseket hozni. Egy 2020-as tanulmány szerint a katonai drónok több mint 30%-a rendelkezik mesterséges intelligencia által hajtott autonóm döntéshozatali képességgel. A legtöbb modern drón támogatja a magas szintű programozási nyelveket, mint például a Python. Bonyolultabb műveletekhez, például motorok vezérléséhez vagy érzékelőjelek feldolgozásához azonban alacsony szintű nyelvek, például C vagy C++ használhatók. A statisztikák szerint az összes drónvezérlő szoftver 60%-a C++ nyelven íródott, míg Pythont az esetek 25%-ában használnak. Ezek a nyelvek lehetővé teszik a fejlesztők számára, hogy összetett algoritmusokat hozzanak létre különféle feladatok elvégzésére, az egyszerű megfigyeléstől a bonyolult manőverekig és ütésekig. Vannak speciális könyvtárak és keretrendszerek is, mint például a DroneKit for Python, amelyek megkönnyítik a drónszoftverek fejlesztését és tesztelését.

A drón küldetésétől függően a szoftver eltérő lehet. Például a felderítő drónok úgy programozhatók, hogy önállóan járőrözzenek egy adott területen, míg a támadó drónok bonyolultabb programozást igényelhetnek a precíziós csapásokhoz. Nyílt forráskódú adatok szerint az amerikai katonai drónok 2004 és 2020 között több mint 4000 csapást hajtottak végre, és ezek mindegyike az erre a célra kifejlesztett összetett algoritmusoknak és programoknak köszönhető. A katonai drónok programozása során az egyik legfontosabb prioritás a biztonság. Ez magában foglalja a kibertámadások elleni védelmet és robusztus algoritmusok létrehozását a nem kívánt események megelőzésére.

Egy 2019-es tanulmány szerint a katonai drónokkal kapcsolatos incidensek több mint 20%-a szoftverhiba vagy számítógépes támadások következménye. A mesterséges intelligencia és a gépi tanulási technológiák fejlődésével a katonai drónok egyre autonómabbakká válnak. Ez új lehetőségeket és kihívásokat teremt a fejlesztők számára, akik e gépek képességeit szeretnék maximalizálni. Az előrejelzések szerint 2030-ra a katonai drónok több mint 50%-a teljesen autonóm lesz, ami új programozási megközelítést és módszertant igényel. A katonai drónok programozása összetett és sokrétű feladat, amelyhez az aerodinamika, a kiberbiztonság és a mesterséges intelligencia mélyreható ismerete szükséges. Ennek a munkának köszönhetően azonban a katonai drónok továbbra is forradalmasítják a modern hadviselést, új távlatokat nyitva a katonai stratégiák és taktikák előtt.

2023. december 17., vasárnap

Drón programozás pythonban 2.


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.