Propeller Autopilot (11 / 13 steg)
Steg 11: Med hjälp av GPS
Tyvärr tvingades vi vänta på att få drone att flyga till en utsedda longitud och latitud eller waypoint. Även om vi är bara ca en månad eller mindre bort från att ha den klar. Jag var på mitt första försök att läsa GPS enheten på parallaxen kan lagra allt framgångsrikt i flera matriser av byte. Men det visade sig vara svårare att få arrayer till en float variabel, så jag slog en vägspärr. Även om jag kunde komma åt all information jag behövde kunde jag inte manipulera ordentligt om du vill använda float matematiska funktioner. GPS-enheten gav oss information byte för byte så vi inte kunde hitta ett sätt att lagra våra separat array i enskilda float variabler.
PUB readGPS | u, jag, v, w, q, j, e, f, g, h, k, d, dec, final, cntr, MN_AT [1], tidsstämpel [5], datastatus [1], rmcE_W [1], rmcN_S [1], rmclong [10], rmclat [10], spd [5], mode [2], lat [10], Ingrids [1], E_W [1], alti [10], longitu [10], kvalitet [2], antal [2], [10]-indikatorn, tid [10], adress, börja, avsluta , char
** Detta är där vi har definierat alla variabler behövs för funktionen readGPS planerar att lagra värden i matriser av information vi behöver
Upprepa
Upprepa
Jag: = UARTS.rx(GPS)
GPS_IN [v]: = jag
om w == 0
indikator för [q]: = GPS_IN [v]
' UARTS.tx (PC, indicator[q])
q ++
** Jag skapade två upprepa slingor den första är att ange räknarna till noll varje gång det kommer ett komma en annan counter går också upp att hålla reda på den information vi vill komma åt i NMEA strängen. På nästa repeat går tills det finns ett kommatecken så w räknaren går upp. Annars nästa upprepa slingan använder räknaren w att känna igen sin plats längs strängen NMEA och ta tag i den information som lagras till en viss variabel. Till exempel w == 0 så vi lagrar indikatorn, detta sätt jag kan använda ett enkelt om därefter uttalande för att inse vilka NMEA sträng datorn läser (se nedan).
om indikatorn [2] == "G" och indikatorn [3] == "G"
om w == 1
tid [j]: = GPS_IN [v]
' UARTS.tx (PC, time[j])
j ++
om w == 2
lat [u]: = GPS_IN [v]
' UARTS.tx (PC, lat[u])
u ++
om w == 3
Ingrids [g]: = GPS_IN [v]
' UARTS.tx (PC, N_S[g])
g ++
…….
om w == 7
nummer [h]: = GPS_IN [v]
' UARTS.tx (PC, number[h])
h ++
om w == 9
Alti [k]: = GPS_IN [v]
' UARTS.tx (PC, alti[k])
k ++
om indikatorn [3] == "S" och indikatorn [4] == "A"
om w == 1
MN_AT [j]: = GPS_IN [v]
' UARTS.tx (PC, MN_AT[j])
j ++
om w == 2
läget [u]: = GPS_IN [v]
' UARTS.tx (PC, mode[u])
u ++
om GPS_IN [v] == ","
w ++
om GPS_IN [v] == "$"
q: = w: = j: = u: = g: = e: = f: = h: = d: = 0
v ++
tills jag == ","
Jag kunde tyvärr inte få matrisen till flytvärdet så jag var tvungen att vänta på detta tillvägagångssätt för nu. Vi beslutade att använda en GPS float bibliotek som kommer att göra exakt vad jag försökande till gör utom de hittat ett sätt att göra detta med någon församling. Så det verkar inte jag väl är tillräckligt insatt i spin språk att få matrisen lagras i flottar. De använde hex decimaler och några mycket specifika kod som jag bara sett för spin språk. Oavsett med hjälp av det nya biblioteket jag kan få tillgång till alla upplysningar som float variabler så kunde jag sedan att göra en bärande funktion där vi kommer att ge våra waypoint i longitud och latitud. Med en matematisk formel för att hitta uthärda kan jag använda GPS float math variabler av longitud och latitud för att beräkna våra uthärda. Nästa steg blir att få drone att ändra sin kurs baserat på vad lagret och rubriken lyder. Tyvärr hade vi att avsluta projektet för konkurrens på grund och oväntad ledighet till Nederländerna en vecka innan tävlingen är över. Ge oss några veckor och vi bör ha en komplett förmågan att ha drone huvudet mot specifika waypoints.
PUB uthärda (lon, lat) | dlat, dlon, blon, blat, x, y, a, b, c, Björn
blon: =-121.8576
Blat: = 37.6967
dlon: = fm.fsub (lon, blon)
dlat: = fm.fsub (lat, blat)
en: = fm.fmul(fm.cos(lat), fm.sin(blat))
b: = fm.fmul(fm.fmul(fm.sin(lat), fm.cos(blat)), fm.cos(dlon))
y: = fm.fmul(fm.sin(dlon), fm.cos(blat))
x: = fm.fsub(a,b)
bära: = fm.degrees(fm.atan2(y,x))
** Blon är vår avslutande longitud och våra blat är vår avslutande latitud att använda för våra lager. Dlon och dlat är våra skillnad i longitud och latitud från vår rubrik och våra waypoints longitud och latitud. Annars vi bara använda en matematisk formel med vår float math-biblioteket och konvertera den till grader för att få våra uthärda.