Quadcopter datavisualisering med Plotly (5 / 7 steg)
Steg 5: sensorer. Extra
Som en bonus ska jag förklara den sensor som jag använde och hur jag använde den för att få ett bra resultat. Å ena sidan, sensor fusion mellan gyroskop och accelerometer är mycket användbart för att styra quadcopter horizontalityen, och å andra sidan höjden av quadcopter är också en bra data att få, och mäts med hjälp av trycksensorn och temperaturgivare.
Sensor fusion
För att upprätthålla horizontalityen av enheten, använder vi två vinklar, pitch och rulla. Dessa två vinklar mäts med hjälp av två sensorer: accelerometer och gyroskop. Båda har sina fördelar och nackdelar. Accelerometern kan mäta styrkan av gravitationen, och med denna information kan vi få vinkeln på enheten. Problemet med accelerometern är att det också kan mäta resten av de krafter som enheten utsätts för, så det gör en massa fel och buller. Gyroskopet mäter vinkelformig hastighet, så om vi integrera dessa data kan vi få hur mycket vinkel flyttas. Problemet med denna åtgärd är inte perfekt och integrationen har en avvikelse. Det innebär att i en kort tidsperiod på tid åtgärden är mycket bra, men för längre spännvidd mäter vinkeln kommer att avvika mycket från den verkliga vinkeln.
Kombinera båda sensorerna kan lösa dessa problem. Det är kallade sensor fusion, och det finns många metoder att kombinera dem. I detta projekt har jag försökt två av dem: den Kalmanfilter och kompletterande filtret.
- Kalmanfilter är en algoritm mycket utvidgats i robotteknik, och erbjuder ett bra resultat med låg computational. Det finns en Arduino bibliotek som implementerar denna metod, men om du vill veta mer om denna metod eller genomföra det själv titta på den här sidan.
- Kompletterande filtret är en kombination av två eller flera filter som ansluter informationen från olika källor och får en uppskattning av det verkliga värdet. Man kan genomföra i bara en kodrad. För mer information besök denna sida.
vinkel = A * (vinkel + gyro * dt) + (1 - A) * accel;
där A är normalt motsvarar 0,98.
Första jag försökte använda en Kalmanfilter men jag fick inte bra resultat. Vinkeln beräknades med en liten fördröjning och det påverkade kontroll. Kalman filtret har tre variabler som du kan ändra utifrån parametrarna av dina sensorer, och genom att göra detta kan du få bättre resultat. Jag försökte ändra värdena, men jag fick inte bättre resultat så jag beslöt att genomföra kompletterande filtret. Det råkade vara mycket enklare och hade en mindre computational kostnad. Kompletterande filtret fungerade bra för mig.
Havet höjd
För att styra placeringen av våra quadcopter som vi behöver veta höjden. Detta kan mätas genom en kombination av en tryckgivare och en temperaturgivare. Det kan erhållas endast från trycket data, med hjälp av följande ekvation:
H = 44330 (1 - (Pressure_measured / 101325) ^ (1 / 5.25588))
jag fått formuläret ekvation datablad sensorn jag använde (BMP085) denna ekvation bygger på Barometrisk formel med data av standard atmosfären som innebär att det är inte sant i alla fall, men för icke-exakt program räcker. För mer exakt program måste vi använda temperatur och tryck, med hjälp av nästa formeln:
H = (((101325 / P) ^ (1 / 5.257) - 1) * (T + 273.15)) / 0.0065
Jag är inte säker på om denna formel är korrekt, men det verkar fungera. Det finns en sida där du kan beräkna den höjd som ger trycket vid havsytan och tryck och temperatur vid den punkt du vill beräkna höjden.
Obs: I denna två formler höjden beräknas i förhållande till havet, så om du vill få höjden i förhållande till marken måste du först mäta höjden på marknivå och subtrahera det från de efterföljande åtgärderna.