23.07.2013 Views

Bilag 1: Helikopterens fysiske egenskaber - SmartData

Bilag 1: Helikopterens fysiske egenskaber - SmartData

Bilag 1: Helikopterens fysiske egenskaber - SmartData

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Bilag</strong> 1: <strong>Helikopterens</strong> <strong>fysiske</strong> <strong>egenskaber</strong><br />

1<br />

<strong>Bilag</strong> 1: <strong>Helikopterens</strong> <strong>fysiske</strong> <strong>egenskaber</strong><br />

I dette bilag redegøres for Draganflyer III helikopterens <strong>fysiske</strong> <strong>egenskaber</strong> såsom<br />

dimensioner, vægt og nyttelast. <strong>Helikopterens</strong> dimensioner er angivet på følgende figur<br />

og i tabel 1.<br />

11.7 cm<br />

47.8 cm<br />

6.1 cm<br />

47.8 cm<br />

29.0 cm<br />

8.0 cm<br />

Figur 1: Draganflyer III dimensioner


Tabel 1: Draganflyer III dimensioner<br />

Målinger foretaget d. 27.08.03 med digital skydelære og lineal.<br />

2<br />

<strong>Bilag</strong> 1: <strong>Helikopterens</strong> <strong>fysiske</strong> <strong>egenskaber</strong><br />

Beskrivelse Længde<br />

Helikopter diameter, vingespids til vingespids (dvs. inkl. rotorer)<br />

rotor-akse til rotor-akse<br />

DC motor akse til DC motor akse<br />

Rotor diameter, spids til spids<br />

tandhjul diameter (56 ”tænder”)<br />

Kulfiber bund længde x bredde<br />

Tykkelse<br />

Vandret printplade længde x bredde<br />

Tykkelse<br />

Lodret printplade længde x bredde<br />

Tykkelse<br />

Kulfiber rør-arme længde (løsvægt)<br />

diameter (tykkelse)<br />

DC motor diameter<br />

længde<br />

tandhjul diameter (10 ”tænder”)<br />

Lodrette afstande, underlag til midt rør-arme ”kryds”<br />

underlag til midt vandret printplade<br />

underlag til midt kulfiber bund<br />

underlag til overkant lodret printplade<br />

underlag til midt rotor-tandhjul<br />

768.0 mm<br />

424.0 mm<br />

478.0 mm<br />

290.0 mm<br />

46.2 mm<br />

100.0 x 88.0 mm<br />

0.5 mm<br />

88.0 x 75.0 mm<br />

0.8 mm<br />

88.0 x 37.0 mm<br />

0.8 mm<br />

190.0 mm<br />

5.0 mm<br />

24.3 mm<br />

30.0 mm<br />

9.5 mm<br />

61.0 mm<br />

80.0 mm<br />

16.7 mm<br />

117.0 mm<br />

Antenne længde 180.0 mm


3<br />

<strong>Bilag</strong> 1: <strong>Helikopterens</strong> <strong>fysiske</strong> <strong>egenskaber</strong><br />

Af Draganflyer III producentens hjemmeside fremgår, at helikopteren har en nyttelast<br />

på mindst 1 ounce dvs. ca. 31g (Draganfly Innovations). Dette er imidlertid kun<br />

gældende ved brug af NiCd batterier. Da der i vores tilfælde anvendes et væsentlig<br />

lettere Lithium-Polymer batteri, forventes nyttelasten at være forbedret. Derfor måles<br />

nyttelasten ved hjælp af en vægt. Ved samme lejlighed måles også vægten af de enkelte<br />

helikopter-dele (se tabel 3).<br />

Under helikopteren fastgøres et tungt lod (1124.0 gram) for at forhindre helikopteren i<br />

at lette. Lod og helikopter anbringes på vægten (se figur 2a) og den samlede vægt<br />

noteres (se tabel 2). Herefter sættes fuld fart på helikopterens rotorer (se figur 2b) og<br />

vægten aflæses atter (se tabel 2). På denne måde vurderes helikopterens nyttelast ved<br />

subtraktion af den noterede vægt med og uden rotorerne kørende. Nyttelasten findes til<br />

ca. 170 gram.<br />

Figur 2a Figur 2b<br />

Figur 2: Måling af helikopter-vægt og nyttelast<br />

Tabel 2: Draganflyer III nyttelast.<br />

Målinger foretaget d. 26.08.03 med mekanisk ”Struer”-vægt udlånt af Kjeld Nørgård.<br />

Helikopteren er under forsøget fastgjort til et lod (1124.0g) ved hjælp af tape.<br />

Beskrivelse Vægt<br />

Total vægt inkl. Lod og tape, alle propeller i hvile 1629g<br />

Total vægt inkl. Lod og tape, fuld fart på alle rotorer 955.g<br />

Draganflyer III løfteevne (1629.5g - 955.0g – 504.0g) 170.g<br />

Bemærk: Indstilling af den mekaniske vægt under ”flyvningen” var en smule<br />

vanskelig, målingerne forventes derfor behæftet med en usikkerhed på et par gram.<br />

Resultatet er desuden muligvis påvirket af turbulensforhold omkring vægten.


4<br />

<strong>Bilag</strong> 1: <strong>Helikopterens</strong> <strong>fysiske</strong> <strong>egenskaber</strong><br />

Tabel 3: Draganflyer III vægtfordeling<br />

Målinger foretaget d. 26.08.03 med digitalvægt i Ingeniørhøjskolens kemilokale.<br />

Beskrivelse Vægt<br />

Total vægt ekskl. batteri & kamera 370.0g<br />

Batteri med ledning 134.0g<br />

Rotor, 1 stk. (gennemsnitlig vægt). 5.5g<br />

kulfiber rør-arme (”carbon fiber tube arms”), 1 stk. 3.4g<br />

Motorholder (”motor mounts”), 1 stk. 2.8g<br />

Kamera (”eyecam”) 18.0g<br />

Plastic-dække til elektronik (”clear dome canopy”) 9.0g<br />

DC motor uden køleplade, 1 stk. 47.3g<br />

Køleplade til DC motor, 1 stk. 3.0g<br />

Rotor og motorholder med gear, 1 stk. 16.4g<br />

Tabel 4: Afledte resultater (baseret på tabel 3)<br />

Beskrivelse Vægt<br />

Total vægt inkl. batteri og kamera 522.0g<br />

Total vægt inkl. batteri, ekskl. kamera. 504.0g<br />

Propel med tandhjul, 1 stk. 13.6g<br />

Elektronik med printplader, bundplade og 4 stk. vertikale støtter (”vertical<br />

riser”)<br />

89.6g<br />

Kilder:<br />

[1] Draganfly Innovations. “Draganflyer III.” RCTOYS.com // Inventing The<br />

Future of Radio Controlled Flight. 6. December. 2003.<br />

< http://www.rctoys.com/draganflyer3.php >


<strong>Bilag</strong> 2: Pulse Position Modulation<br />

1<br />

<strong>Bilag</strong> 2: Pulse Position Modulation<br />

Draganflyer III helikopteren styres ved Pulse Position Modulation (PPM). Signalet er<br />

udformet som angivet på nedenstående figur (figur 1). Positionen af flankerne eller<br />

bredderne af pulserne angiver cyclic (hvor cyclic-x benyttes til at justere pitch-vinklen og<br />

cyclic-y til roll-vinklen), collective og anti-torque input til helikopteren.<br />

5V<br />

0V<br />

412us<br />

18ms<br />

tcyclic-x tcyclic-y tcollective tanti-torque 560us<br />

Figur 1: PPM signalets form<br />

Det ses af nedenstående tabel at pulsbredderne varierer mellem 500us og 1700us. Tiderne<br />

er målt både med et HP54600B digitalt oscilloskop samt en Single-Board Computer (SBC)<br />

udstyret med 12bit A/D-converter.<br />

Absolut minimum Alle i center Absolut maksimum<br />

tcyclic-x 548us 1100us 1712us<br />

tcyclic-y 564us 1100us 1662us<br />

tcollective 642us 1100us 1544us<br />

tanti-torque 561us 1100us 1670us<br />

500us 1100us 1700us<br />

I den konstruerede I/O-controller kvantificeres området mellem 500us og 1700us til 8bit,<br />

hvor 0 svarer til 500us og 255 til 1700us.


<strong>Bilag</strong> 3: Kommercielle IMU/AHRS<br />

Produkt-navn<br />

Producent<br />

LN-200<br />

NorthrupGrumman<br />

Crista IMU<br />

Cloud Cap<br />

Technology, Inc.<br />

TCM2-50<br />

Precision<br />

Navigation, Inc.<br />

MP2028g<br />

MicroPilot<br />

REV2.4.6DOFK<br />

Rotomotion, LCC<br />

REV2.5AHRSA<br />

Rotomotion, LCC<br />

3DM-DH<br />

Microstrain<br />

Beskrivelse Dimensioner<br />

Vægt<br />

6-DOF IMU<br />

fiber-optic gyroer<br />

Pris<br />

8.9cm x 8.9cm x 8.5 cm<br />

700.0 g<br />

Pris ukendt (“low-cost”)<br />

6-DOF GPS-aided IMU 1.35” x 1.50” x 0.80”<br />

18.9 g<br />

3-axis sensing instrument<br />

(accelerometre og<br />

magnetometre) +/- 50 o<br />

UAV autopilot (AHRS)<br />

IMU, GPS modtager<br />

100-field telemetry (1Hz)<br />

6-DOF IMU<br />

AHRS<br />

(gyroer, accelerometre og<br />

magnetometre)<br />

Microminiature Solid State 3axis<br />

Pitch, Roll, & Yaw Sensor<br />

1,950.00$<br />

63.5 x 50.8 x 31.75 mm<br />

45.5 g<br />

769.00$<br />

10 cm x 4 cm x 1.5 cm<br />

28.0 g<br />

5,000.00$<br />

Dimensioner og vægt ukendt<br />

300.00$<br />

Dimensioner og vægt ukendt<br />

2090.95$<br />

2.8cm x 6.7cm x 0.8cm<br />

Vægt ukendt<br />

795.00$<br />

Kilde<br />

http://www.ngnavsys.com/<br />

http://www.cloudcaptech.com/crista_imu.htm<br />

http://www.precisionnav.com<br />

http://www.micropilot.com/<br />

http://www.rotomotion.com<br />

http://autopilot.sourceforge.net<br />

http://www.rotomotion.com<br />

http://autopilot.sourceforge.net<br />

http://www.microstrain.com/3DM-DH.html


<strong>Bilag</strong> 4: Andre modelhelikopter-baserede UAV projekter<br />

Projekt-navn<br />

Organisation/sted<br />

HUMMINGBIRD<br />

Aerospace<br />

robotics<br />

laboratory<br />

Stanford<br />

University<br />

Autonomous<br />

Helicopter Project<br />

Carnegie Mellon<br />

University<br />

Marvin<br />

Technischen<br />

Universität Berlin<br />

Helikopter /<br />

platform<br />

Excel 60 PRO<br />

(Benzin)<br />

Længde 1,57 m<br />

Rotor ø: 1,55 m<br />

Vægt: ~ 5 Kg (tanket)<br />

Nyttelast: 5-6 Kg<br />

Modified Yamaha R-<br />

50 “Unmanned<br />

helicopter for<br />

industrial use”<br />

(Benzin)<br />

Længde: 2,7 m<br />

Rotor ø: 3,1 m<br />

Vægt: 67,0 kg<br />

Nyttelast 20,0 kg<br />

SSM Technik, Ukendt<br />

model<br />

(Benzin)<br />

Længde: Ukendt<br />

Rotor ø: 1,8 m<br />

Vægt: 6,5 kg,<br />

Nyttelast: ~5,0 kg<br />

Sensorer Kilde<br />

4 stk. DGPS (Trimble Advanced Navigation<br />

System (TANS) Vector Differential Carrier<br />

Phase GPS).<br />

DGPS (Novatel RT-2).<br />

IMU (Litton LN-200).<br />

Kompas (KVH C100 fluxgate) .<br />

Laser højdemåler (ukendt fabrikat).<br />

Kamera (ukendt fabrikat).<br />

DGPS (Novatel, ukendt model).<br />

IMU, hjemmebygget (ADXL-05 Analog<br />

Devices, ENC-05E Murata).<br />

Kompas, hjemmebygget (3 stk SLC Fluxgate<br />

magnetometre).<br />

Kamera (Sanyo VPC-X350EX).<br />

Ultralyds sonar (Polaroid, ukendt model).<br />

Hamamatsu UVtron ”flamesensor”.<br />

Andrew R. Conway.<br />

Autonomous Control of an Unstable Helicopter<br />

Using Carrier Phase GPS Only.<br />

PhD thesis, Stanford University, Stanford, CA<br />

94305, March 1995.<br />

http://sun-alley.stanford.edu/~heli/info.html#Stats<br />

Miller R., B. Mettler & O.Amidi.<br />

Carnegie Mellon University´s 1997 International<br />

Aerial Robotics Competition Entry. Technical<br />

Report Carnegie Mellon University, USA 1997.<br />

http://user.cs.tu-berlin.de/~remuss/marvin.html<br />

http://pdv.cs.tu-berlin.de/MARVIN/index.html


Projekt-navn<br />

Organisation/sted<br />

AVATAR<br />

University of<br />

Southern<br />

California<br />

RAPTOR<br />

University of<br />

Southern<br />

California<br />

Helikopter /<br />

platform<br />

Bergen Industrial<br />

Helicopter (Benzin)<br />

Længde: 1,5 m<br />

Rotor ø: 1,6 m<br />

Vægt 8,2 Kg<br />

Nyttelast ~9,0 Kg<br />

Lite Machine LMH-<br />

110 (Batterier)<br />

Længde 0,67 m<br />

Rotor ø: 0,60 m<br />

Vægt: 0,8 kg (eksl<br />

batt.)<br />

Nyttelast ~1,0 kg<br />

Sensorer Kilde<br />

DGPS (Novatel RT-20).<br />

IMU (Boeing CMIGTS-II INS).<br />

Kamera (Sony Colour CCD ukendt model).<br />

Ultralyds sonar (ukendt fabrikat).<br />

IMU, hjemmebygget (ADXL-202 Analog<br />

Devices, CG-16D NEC Tokin).<br />

Kamera (Spectronix’s Robo-CAM2 CMOS<br />

kamera m. integreret frame-grabber).<br />

Ultralyds sonar (Polaroid 6500 sonar range<br />

finder).<br />

Laser-pointer (ukendt fabrikat).<br />

Saripalli, Srikanth, David J. Naffin og Guarav S.<br />

Sukhatme.<br />

Autonomous Flying Vehicle Research at the<br />

University of Southern California. Proceedings of<br />

First International Workshop on Multi-Robot<br />

Systems, Washington DC 2002.<br />

http://wwwrobotics.usc.edu/~avatar/hardware/hardframe.html<br />

http://www.bergenrc.com/IndustrialTwin.asp<br />

Saripalli, Srikanth, David J. Naffin og Guarav S.<br />

Sukhatme.<br />

Autonomous Flying Vehicle Research at the<br />

University of Southern California. Proceedings of<br />

First International Workshop on Multi-Robot<br />

Systems, Washington DC 2002.<br />

http://wwwrobotics.usc.edu/~dnaffin/Research/research.html


<strong>Bilag</strong> 5: I/O controller elektrisk kredsløb<br />

1<br />

<strong>Bilag</strong> 5: I/O controller elektrisk kredsløb


2<br />

<strong>Bilag</strong> 5: I/O controller elektrisk kredsløb<br />

Accelerometer-modul<br />

Bemærk at, i det endelige accelerometer-modul indgår 2 stk. af nedenstående kredsløb.


<strong>Bilag</strong> 6: Udsnit af MAX232 datablad<br />

1<br />

<strong>Bilag</strong> 6: Udsnit af MAX232 datablad


<strong>Bilag</strong> 7: Kommunikations-protokol mellem PC og I/O-controller<br />

<strong>Bilag</strong> 7: Kommunikations-protokol mellem PC og I/O-<br />

controller<br />

Der benyttes en simpel pakkeorienteret protokol til kommunikation mellem PC og I/Ocontroller.<br />

PC’en sender en pakke på 5 bytes, der indeholder helikopterens 4 regulerings<br />

parametre og en check sum. Når den konstruerede I/O-controller modtager denne pakke,<br />

returneres en ny pakke på 19 bytes. Denne indeholder data fra samtlige sensorer ombord på<br />

helikopteren og en checksum. Denne checksum beregnes simpelt, ved at lave en 8 bit<br />

addition af samtlige bytes i pakken (overflow ignoreres).<br />

Pakken der sendes er illustreret herunder på figur 1.<br />

Pakken der returneres er illustreret herunder på figur 2.<br />

2 bytes pr. værdi<br />

1 byte pr. værdi<br />

Roll Pitch Throttle Yaw ChkSum<br />

Figur 1: Pakke fra PC til I/O-controller<br />

Acc0(x) Acc0(y) Acc0(T2*) Acc1(x) Acc1(y) Acc1(T2*)<br />

1 byte pr. værdi<br />

Gyro0 Gyro1 Gyro2 AN3 AN4 Port C ChkSum<br />

Figur 2: Pakke fra I/O-controller til PC<br />

Gyro0:Roll Gyro1:Pitch Gyro2:Yaw<br />

1


<strong>Bilag</strong> 7: Kommunikations-protokol mellem PC og I/O-controller<br />

Ulemperne ved ovenstående protokol er følgende:<br />

1. PCen kontrollerer samplefrekvensen, derved opnås måske ikke optimal udnyttelse<br />

af helikopterens sensorer.<br />

2. <strong>Helikopterens</strong> styresignaler kan ikke sendes uden at den konstruerede I/O-controller<br />

returner data samtlige sensorer. Dvs. styresignaler og sensor-sampling er<br />

synkroniseret.<br />

Det blev forsøgt at konstruere en forbedret I/O controller, hvor samtlige sensorer blev<br />

samplet med en fast samplingsfrekvens. Derved blev data stream’et til PC’en med fast<br />

periode. Den implementerede signalbehandling på PC’en kunne herved synkroniseres efter<br />

data pakkerne, desuden kunne styresignaler sendes med vilkårligt interval.<br />

Desværre opstod problemer med COM-porten under Windows 2000, der ikke kunne<br />

håndtere vores data, når disse blev stream’et til RS232 COM-porten. COM-port driverens<br />

input buffer blev tilsyneladende fyldt og data overskrevet, efter flere ufrugtbare forsøg på at<br />

løse problemet blev ideen opgivet. Vi er overbeviste om, at en anden driver eller<br />

styresystem (f.eks. Linux) vil kunne håndtere denne opgave, men vi ville ikke bruge for<br />

mange ressourcerne på COM-port detaljer. Det blev derfor besluttet at anvende den<br />

originale protokol.<br />

2


<strong>Bilag</strong> 8: Datablad for accelerometer (ADXL210E)<br />

<strong>Bilag</strong> 8: Datablad for accelerometer (ADXL210E)<br />

1


<strong>Bilag</strong> 8: Datablad for accelerometer (ADXL210E)<br />

2


<strong>Bilag</strong> 9: Accelerometer-båndbredde<br />

1<br />

<strong>Bilag</strong> 9: Accelerometer-båndbredde<br />

Generelt er målinger fra elektroniske sensorer overlejret støj, det resulterende sensor<br />

output kan således skrives som<br />

y = m +<br />

n<br />

Hvor m er den ideelle sensor måling, n er målestøjen i sensoren. Målestøjen på<br />

sensorens output er proportional med sensorens båndbredde eller Band-Width (BW), en<br />

begrænsning i båndbredden medfører derfor ligeledes en reduktion af målestøjen. Af<br />

accelerometerets (ADXL210E) datablad oplyses, at målestøjen n kan beregnes således:<br />

hvor [ ]<br />

( 200 g / Hz ) ⋅ ( BW 1.<br />

) [ g]<br />

Noise( rms)<br />

= µ<br />

⋅ 6<br />

2<br />

g angiver tyngdeaccelerationen (9.82 m / s ). Accelerometerets båndbredde<br />

beregnes vha. nedenstående formel<br />

BW = f −<br />

3dB<br />

=<br />

2π<br />

1 5µ<br />

F<br />

=<br />

C<br />

( 32kΩ<br />

⋅ C )<br />

x,<br />

y<br />

x,<br />

y<br />

[ Hz]<br />

Hvor kondensatorerne Cx,y danner et lavpas-filter i sammenhold med den interne<br />

modstand på 32K Ω i accelerometeret. Med en båndbredde BW på 10Hz fås Cx,y til:<br />

C x,<br />

y ≈<br />

500nF<br />

Med en båndbredde BW på 10Hz fås en målestøj på:<br />

Noise( rms)<br />

= 0.<br />

8<br />

mg<br />

Af praktiske årsager anvendes en kondensator på 470nF, men da tolerancerne på den<br />

anvendte kondensator-type alligevel ligger mellem 10% - 20%, anses dette er ikke for<br />

værende et problem. Desuden øges den resulterende båndbredde ikke i et betydeligt<br />

omfang (ca. 6.5% ).


<strong>Bilag</strong> 10: Frekvenskarakteristik af Draganflyer gyroforstærker<br />

<strong>Bilag</strong> 10: Frekvenskarakteristik af Draganflyer<br />

gyroforstærker<br />

Herunder er frekvenskarakteristikken for den eksisterende gyro-forstærker på Draganflyer<br />

III helikopteren vist i dB.<br />

dB(Vout)<br />

9.652<br />

4.652<br />

-0.348<br />

-5.348<br />

-10.348<br />

-15.348<br />

10 -1 10 0 10 1 10 2 10 3 10 4 10 5<br />

Frekvens [Hz]<br />

Figur 1: Frekvenskarakteristik for Draganflyer’s eksisterende gyroforstærker<br />

1


<strong>Bilag</strong> 11: Datablad for gyro (NEC/TOKIN CG-16D)<br />

<strong>Bilag</strong> 11: Datablad for gyro (NEC/TOKIN CG-16D)<br />

1


<strong>Bilag</strong> 12: Anvendte C++ programmer<br />

1<br />

<strong>Bilag</strong> 12: Anvendte C++ programmer<br />

Implementeringen af Kalman filter rutinerne baseres på en dertil indrettet matrix-vector<br />

pakke udvidet til at kunne håndtere assymetriske matrixer. Desuden implementeres<br />

klasser til kommunikation med den konstruerede I/O-controller m.m.<br />

Kildekoden er organiseret således:<br />

AttitudeEstimator<br />

• Et program der viser den estimerede attitude af helikopteren baseret på sensor-input.<br />

Autostabilization<br />

• Et program med implementering af eksperimentel regulator af helikopteren baseret på 3D Kalman filter.<br />

DensityFuncSampler<br />

Doc<br />

• Program til opsamling af 10000 tilfældige accelerometer og gyromålinger, samt efterfølgende konstruktion af<br />

histogrammer.<br />

• Auto-genereret dokumentation på baggrund af kommentarer i koden (Doxygen).<br />

GyroBias<br />

• Program til opsamling af gyro målinger, efterfølgende midling for at bestemme gyro bias-udvikling.<br />

Include<br />

lib<br />

src<br />

• Program til opsamling af gyro målinger, efterfølgende midling for at bestemme gyro bias-udvikling.<br />

• Fælles header- filer.<br />

• kildekode.<br />

Test<br />

• Diverse test-programmer.<br />

Her følger et udpluk af dokumentationen til de anvendte klasser, dokumentationen er<br />

automatisk genereret på baggrund af kommentarer i koden.


Template based Vector/Matrix library<br />

Detailed Description<br />

MatrixMxN.h M by N matrix template<br />

Note: : Based on original by Peter Ørbæk.<br />

Todo:<br />

2<br />

<strong>Bilag</strong> 12: Anvendte C++ programmer<br />

extraction of eigenvalues & vectors, computation of matrix rank<br />

Add #ifdefs for disabling use of exceptions<br />

Remarks:<br />

All angles are in Radians<br />

Quaternion.h Routines for using 4-element vectors as quaternions<br />

VectorN.h Vector implementation. Based on original by Peter Ørbæk.<br />

Classes<br />

Typedefs<br />

class Matrix<br />

class Vector<br />

typedef Vector< 4, double > Quatd<br />

typedef Vector< 4, float > Quatf<br />

Enumerations<br />

enum QElements { Q_W, Q_X, Q_Y, Q_Z }<br />

enum Axes { X, Y, Z, W }<br />

Generated on Fri Dec 5 17:09:09 2003 for Autostabilisering af en modelhelikopter by<br />

1.3.4


Attitude estimation library<br />

Detailed Description<br />

AccAHRS.h<br />

3<br />

<strong>Bilag</strong> 12: Anvendte C++ programmer<br />

Attitude & Heading Ref. System based on accelerometer input ONLY<br />

Attitude.h Contains functions for converting between different attitude representations.<br />

Note:<br />

Most of the functions in here are tightly coupled to the definitions of the<br />

helicopter- & navigation-frames (or references if you like), and the rotationorder<br />

of the Euler angles. Currently the used rotation-order for transforming<br />

from the helicopter-frame to the navigation-frame is Yaw-Pitch-Roll<br />

GyroAHRS.h<br />

Attitude & Heading Ref. System based on gyro input ONLY<br />

KalmanAHRS.v1.h Attitude & Heading Ref. System based on Kalman filtering of<br />

BOTH accelerometer & Gyro inputs<br />

Classes<br />

Typedefs<br />

class AccAHRS<br />

class GyroAHRS<br />

class KalmanAHRS_v1<br />

class KalmanAHRS_v1<br />

typedef KalmanAHRS_v1 KalmanAHRS


Enumerations<br />

Functions<br />

4<br />

<strong>Bilag</strong> 12: Anvendte C++ programmer<br />

enum OrderOfRotation { YAW, PITCH, ROLL }<br />

Matrix< 3, 3, double > euler2DCM (double yaw, double pitch, double roll)<br />

Matrix< 3, 3, float > euler2DCM (float yaw, float pitch, float roll)<br />

Vector< 4, double > euler2quaternion (double yaw, double pitch, double<br />

roll)<br />

Vector< 4, float > euler2quaternion (float yaw, float pitch, float roll)<br />

template Matrix< 3, 3, T > quaternion2DCM (const Vector< 4, T > &q)<br />

template Vector< 3, T > quaternion2euler (const Vector< 4, T > &q)<br />

Vector< 4, double > DCM2quaternion (const Matrix< 3, 3, double ><br />

&DCM)<br />

Vector< 4, float > DCM2quaternion (const Matrix< 3, 3, float ><br />

&DCM)<br />

Vector< 3, double > DCM2euler (const Matrix< 3, 3, double > &DCM)<br />

Vector< 3, float > DCM2euler (const Matrix< 3, 3, float > &DCM)<br />

template Vector< 3, T > acc2euler (const Vector< 3, T > &acc)<br />

template Vector< 4, T > acc2quaternion (const Vector< 3, T > &acc)<br />

template Vector< 3, T > quaternion2g (const Vector< 4, T > &q)<br />

Generated on Fri Dec 5 17:09:09 2003 for Autostabilisering af en modelhelikopter by<br />

1.3.4


IoCtrl.h File Reference<br />

Detailed Description<br />

Abstraction for I/O controller HW onboard the helicopter.<br />

#include "VectorN.h"<br />

#include "Win32/ComPort.h"<br />

Classes<br />

class Accelerometers<br />

class Gyros<br />

class IoCtrl<br />

Functions<br />

void printPDU (const uchar pdu[IoCtrl::PDU_LENGTH])<br />

5<br />

<strong>Bilag</strong> 12: Anvendte C++ programmer<br />

void calibrateAccelerometersAndGyros (IoCtrl &ioctrl, Vector< 3 > *OUT accBias,<br />

Vector< 3 > *OUT gyrBias)<br />

Generated on Fri Dec 5 17:09:07 2003 for Autostabilisering af en modelhelikopter by<br />

1.3.4


<strong>Bilag</strong> 13: Eulervinkler<br />

1<br />

<strong>Bilag</strong> 13: Eulervinkler<br />

Følgende matrixer beskriver en rotation mod uret jf. ”Højrehåndsreglen” 1 (se fig. 1)<br />

omkring x,y & z-akserne i et ortogonalt koordinatsystem (Croft, Davidson &<br />

Hargreaves s.204):<br />

⎡1<br />

0 0 ⎤ ⎡ cos( ψ)<br />

0 sin( ψ)<br />

⎤ ⎡cos( φ)<br />

−sin(<br />

φ)<br />

0⎤<br />

R ( ) =<br />

⎢<br />

⎥<br />

X θ<br />

⎢<br />

0 cos( θ)<br />

−sin(<br />

θ)<br />

⎢<br />

⎥<br />

⎥<br />

R Y ( ψ)<br />

=<br />

⎢<br />

0 1 0<br />

⎥<br />

R<br />

⎢<br />

⎥<br />

Z ( φ)<br />

=<br />

⎢<br />

sin( φ)<br />

cos( φ)<br />

0<br />

⎥<br />

⎢⎣<br />

0 sin( θ)<br />

cos( θ)<br />

⎥⎦<br />

⎢⎣<br />

−sin(<br />

ψ)<br />

0 cos( ψ)<br />

⎥⎦<br />

⎢⎣<br />

0 0 1⎥⎦<br />

Et eksempel er forsøgt visualiseret på følgende figur:<br />

0<br />

Sættes θ = 90 , roteres vektoren [ ] T<br />

v = 0 1 0 , således:<br />

'=<br />

R<br />

v X<br />

( 90<br />

0<br />

⎡1<br />

) ⋅ v =<br />

⎢<br />

⎢<br />

0<br />

⎢⎣<br />

0<br />

0<br />

0<br />

1<br />

0 ⎤ ⎡0⎤<br />

⎡0⎤<br />

− 1<br />

⎥ ⎢ ⎥<br />

=<br />

⎢ ⎥<br />

⎥<br />

⋅<br />

⎢<br />

1<br />

⎥ ⎢<br />

0<br />

⎥<br />

0 ⎥⎦<br />

⎢⎣<br />

0⎥⎦<br />

⎢⎣<br />

1⎥⎦<br />

Det ses, at enhedsvektoren i y-aksens retning roteres, så den resulterende vektor peger i<br />

z-aksens retning præcis som ventet.<br />

De 3 matrixer R X ( θ ), R Y ( ψ ) og R Z (φ ) kan multipliceres til en enkelt rotationsmatrix<br />

udtrykt ved 3 vinkler R ( θ , ψ , φ)<br />

. Eulers rotations-teorem (Weisstein) siger, at en<br />

vilkårlig rotation kan beskrives med 3 rotationer, vinklerne kaldes derfor ofte eulervinkler.<br />

1 ”Højrehånds-reglen”: Hold højre hånd lukket, men med tommelfingeren langs rotations-aksen. De<br />

øvrige fingre krummer nu i rotationens retning.<br />

Z´<br />

X<br />

θ<br />

Z<br />

Figur 1: Rotation med vinklen θ omkring x-aksen<br />

Y´<br />

(x-aksen peger ”ud af papiret”)<br />

Y


2<br />

<strong>Bilag</strong> 13: Eulervinkler<br />

Da matrix-multiplikation ikke kommuterer ( A ⋅ B ≠ B ⋅ A ), afhænger formen af den<br />

resulterende matrix af rotations-rækkefølgen. Dette hænger sammen med i hvilket<br />

koordinatsystem rotationerne og dermed vinklerne er beskrevet.<br />

Et eksempel:<br />

R( θ , ψ , φ)<br />

= R X ( θ ) ⋅ R Y ( ψ ) ⋅ R Z ( φ)<br />

= (( I ⋅ R X ( θ )) ⋅ R Y ( ψ )) ⋅ R Z ( φ)<br />

Hvor I er identitetsmatrixen. Udtrykkes ovenstående med ord, fås:<br />

”rotér omkring nuværende x-akse”<br />

”rotér omkring den resulterende y-akse fra forrige rotation”<br />

”rotér omkring den resulterende z-akse fra de to forrige rotationer”<br />

I eksemplet angiver vinklerne ψ og φ altså rotationer i forhold til midlertidige<br />

koordinatsystemer! Rotations-rækkefølgen er derfor naturligt nok bestemmende for<br />

betydningen af vinklerne. En given rotation kan altså beskrives som en vilkårlig<br />

rækkefølge af rotationer med forskellige vinkler, f.eks.:<br />

R ( θ , ψ , φ)<br />

= R(<br />

ψ ',<br />

φ',<br />

θ ')<br />

hvor<br />

R(<br />

θ , ψ , φ)<br />

= R<br />

X<br />

R(<br />

ψ ',<br />

φ',<br />

θ ')<br />

= R<br />

( θ ) ⋅ R<br />

Y<br />

Y<br />

( ψ ')<br />

⋅ R<br />

( ψ ) ⋅ R<br />

Z<br />

Z<br />

( φ)<br />

( φ'<br />

) ⋅ R<br />

X<br />

( θ ')<br />

En entydig beskrivelse af en rotation med euler-vinkler forudsætter derfor en<br />

fastlæggelse af rotations-rækkefølgen.<br />

Kilder:<br />

[1] Croft, Davidson & Hargreaves. Engineering Mathematics: A Modern<br />

Foundation for Electronic, Electrical and System Engineers. 2nd Ed.<br />

Addison-Wesley, Essex 1996.<br />

[2] Weisstein, Eric W. "Euler Angles." Eric Weisstein's world of<br />

Mathematics. Wolfram Research. 21. Oktober 2003.<br />


<strong>Bilag</strong> 14: Quaternioner<br />

1<br />

<strong>Bilag</strong> 14: Quaterioner<br />

Matematikken bag quaternionerne blev grundlagt af Sir William Rowan Hamilton, der i<br />

1843 spontant skal have ridset den karakteristiske formel:<br />

i 2 = j 2 = k 2 = ijk = -1<br />

På Brougham Bridge i Dublin, i glæde over endelig at have indset løsningen til<br />

multiplikation af vektorer eller triplets (Wilkins). Quaternionerne er en udvidelse af de<br />

komplekse tal:<br />

q = w + xi<br />

+ yj<br />

+ zk<br />

hvor w er den reelle del og vektoren [ y z]<br />

Re( q)<br />

= w<br />

Im( q)<br />

=<br />

[ x y z]<br />

x er den imaginære del.<br />

Quaternioner hvorom gælder, at Re( q ) = 0 kaldes ”ren”.<br />

Hamilton viser at multiplikation af quaternioner er givet ved (Hamilton s. 2):<br />

q ⋅ q'=<br />

ww'+<br />

wx'i<br />

+ wy'<br />

j + wz'k<br />

+ xw'i<br />

+ xx'i<br />

+ yw'<br />

j + yx'<br />

ji + yy'<br />

j<br />

2<br />

+ xy'ij<br />

+ xz'ik<br />

+ zw'k<br />

+ zx'ki<br />

+ zy'kj<br />

+ zz'k<br />

2<br />

+ yz'<br />

jk<br />

Givet følgende definitioner (Hamilton s. 2):<br />

i<br />

2<br />

2 2<br />

= j = k = −1<br />

ij = k<br />

ji = −k<br />

jk = i<br />

kj = −i<br />

ki = j<br />

ik = −j<br />

Kan produktet af quaternionerne q og q’ omskrives til:<br />

w''<br />

= ww'−xx'−<br />

yy'−zz',<br />

x''<br />

= wx'+<br />

xw'+<br />

yz'−zy',<br />

y''<br />

= wy'+<br />

yw'+<br />

zx'−xz',<br />

z''<br />

= wz'+<br />

zw'+<br />

xy'−<br />

yx'<br />

Dette resultat ligger til grund for de gængse definitioner af ”prik-produktet” og ”krydsproduktet”<br />

for vektorer.<br />

2


Vi kan alternativt udtrykke en quaternion som:<br />

2<br />

<strong>Bilag</strong> 14: Quaterioner<br />

q = s,<br />

v , hvor skalaren s er den reelle del og vektoren v den imaginære<br />

del. Herved kan produktet q ' af quaternionerne q og q ' kort skrives:<br />

q' '=<br />

q ⋅ q'=<br />

ss'−v<br />

• v',<br />

v × v'+<br />

s ⋅ v'+<br />

v ⋅ s<br />

hvor • angiver et ”prik-produkt” og × et ”kryds-produkt”. Af definitionerne følger<br />

yderligere, at:<br />

q + q'=<br />

s + s',<br />

v + v'<br />

q − q'=<br />

s − s',<br />

v − v'<br />

Quaternionerne er som tidligere nævnt en generalisering af de komplekse tal. En<br />

quaternion kan, præcis som de komplekse tal kan det, konjugeres ved følgende<br />

definition (Hamilton s. 14):<br />

q * = s,<br />

−v<br />

hvoraf følger, at<br />

( q*)*<br />

= ( s,<br />

−v)*<br />

= s,<br />

v = q<br />

( q + q')*<br />

= s + s',<br />

−(<br />

v + v')<br />

= s + s',<br />

−v<br />

− v'=<br />

q * + q'*<br />

( q ⋅ q')*<br />

= ss'−v<br />

• v',<br />

−(<br />

v × v'+<br />

s ⋅ v'+<br />

s'⋅v)<br />

= ss'−(<br />

−v)<br />

• ( −v'<br />

), ( v')<br />

× ( v)<br />

− s ⋅ v'−s'⋅v<br />

= ss'−(<br />

−v'<br />

) • ( −v),<br />

( −v'<br />

) × ( −v)<br />

+ s'⋅(<br />

−v)<br />

+ s ⋅ ( −v'<br />

)<br />

= q'*<br />

⋅ q *<br />

Normen 1 af en quaternion defineres som (Hamilton s. 13):<br />

2 2<br />

norm(<br />

q)<br />

= q = w + x + y<br />

+ z<br />

q ⋅ q*<br />

= ss − v • ( −v),<br />

v × ( −v)<br />

+ s ⋅ v + s ⋅ ( −v)<br />

= s<br />

2<br />

2<br />

2<br />

+ v • v =<br />

1 2 2 2<br />

Hamilton skriver ”(TQ) = (SQ) - (VQ) , and if we suppose TQ to be always a real<br />

and positive or absolute number, which we may call the tensor of the quaternion Q, we<br />

shall not thereby diminish the generality of that quaternion. The tensor is what was<br />

called in former articles the modulus” (s.13). Hamilton skriver videre, at han ikke finder<br />

”modulus” en passende betegnelse.<br />

q


3<br />

<strong>Bilag</strong> 14: Quaterioner<br />

En quaternion hvor om gælder at q = 1 kaldes en enheds- eller unit-quaternion (Eberly<br />

s.2).<br />

−1<br />

−1<br />

Den inverse quaternion hvor om gælder, at q ⋅ q = q ⋅ q = 1 (Eberly s. 2), findes ved:<br />

q ⋅ q *<br />

q ⋅ q*<br />

= q ⇒ = 1<br />

q<br />

−1<br />

=<br />

q *<br />

q<br />

[] q<br />

Quaternionerne er som tidligere nævnt en udvidelse af de komplekse tal. Et komplekst<br />

tal kan opfattes som et punkt, der roterer i planen, jf. Euler-relationen:<br />

i<br />

isin(θ)<br />

e<br />

iθ<br />

θ<br />

cos(θ)<br />

= cos( θ ) + i sin( θ )<br />

Figur 1: Komplekst tal roterende i planen<br />

Ifølge Eberly, kan Euler-relationen generaliseres til quaternioner (Eberly s.2):<br />

q = cos( θ ) + ûsin(<br />

θ )<br />

exp( ûθ<br />

) = cos( θ ) + ûsin(<br />

θ )<br />

1<br />

Hvor û er en ren enheds quaternion, hvorom det således gælder, at:<br />

û ⋅ û = −1


4<br />

<strong>Bilag</strong> 14: Quaterioner<br />

Quaternioner kan, efter tilsvarende princip som for de komplekse tal, benyttes til at<br />

beskrive rotationer i rummet. På følgende figur er vist hvorledes en 3-dimensional<br />

stedvektor p pegende på punktet P, roteres omkring aksen langs enhedsvektoren û til<br />

stedvektoren p’ pegende på punktet P’:<br />

Af figur 2 ses, at:<br />

O<br />

p<br />

P<br />

OP'=<br />

OC + CP'<br />

C<br />

Figur 2: Rotation i rummet omkring aksen û<br />

= OC + cos( Φ)<br />

CP + ( û × p)<br />

sin( Φ)<br />

= û(<br />

û • p)<br />

+ ( p − û(<br />

û • p))<br />

cos( Φ)<br />

+ ( û × p)<br />

sin( Φ)<br />

= cos( Φ)<br />

p + û(<br />

û • p)(<br />

1−<br />

cos( Φ))<br />

+ ( û × p)<br />

sin( Φ)<br />

Opfattes vektoren p som en ren quaternion uden skalar-del, der præ-muliplicers med<br />

quaternionen q defineret som:<br />

q = cos( θ ) + ûsin(<br />

θ )<br />

og efterfølgende post-multipliceres med q*, fås at<br />

q ⋅ p ⋅ q*<br />

= cos( 2θ<br />

) p + ( 1−<br />

cos( 2θ<br />

))( û • p)<br />

û + sin( 2θ<br />

) û × p<br />

Φ<br />

û(û●p)<br />

p’<br />

û<br />

Ved at sammenligne med den tidligere opstillede sammenhæng på baggrund af figur 2<br />

ses det, at quaternionen q altså beskriver en rotation omkring aksen langs û med vinklen<br />

2θ (Eberly s.3-4).<br />

P’<br />

P<br />

C<br />

Φ<br />

P’<br />

û×p


5<br />

<strong>Bilag</strong> 14: Quaterioner<br />

Rotationen beskrevet ved en enheds quaternion kan omskrives til matrix form, idet<br />

⎡q0<br />

⎤<br />

⎢ ⎥ ⎡x⎤<br />

p '= q ⋅p<br />

⋅ q * , hvor ⎢<br />

q1<br />

q = ⎥ og p =<br />

⎢ ⎥<br />

⎢q<br />

⎥ ⎢<br />

y<br />

⎥<br />

2<br />

⎢ ⎥ ⎢ ⎥<br />

⎣q<br />

⎣z<br />

⎦<br />

3 ⎦<br />

Skrives alle leddene for quaternions-produkterne ud og samles udtrykkene for x-,y- og<br />

z-komposanterne af p’, fås:<br />

⎡<br />

0<br />

⎤<br />

⎢ 2 2 2 2<br />

⎥<br />

⎢<br />

( q0<br />

+ q1<br />

− q2<br />

− q3<br />

) x 2(<br />

q1q<br />

2 − q0q<br />

3)<br />

y 2(<br />

q1q3<br />

+ q0q<br />

2 ) z<br />

p '=<br />

⎥<br />

2 2 2 2<br />

⎢ 2(<br />

q q + q q ) x ( q − q + q − q ) y 2(<br />

q q − q q ) z ⎥<br />

1 2 0 3<br />

0 1 2 3<br />

2 3 0 1<br />

⎢<br />

2 2 2 2 ⎥<br />

⎣ 2(<br />

q1q3<br />

− q0q<br />

2 ) 2(<br />

q2q<br />

3 + q0q1<br />

) y ( q0<br />

− q1<br />

− q2<br />

+ q3<br />

) z⎦<br />

Hvilket let omskrives til et matrix-vektor produkt, og dermed kan den ønskede matrix<br />

opstilles (Titterton & Weston s. 49):<br />

2 2 2 2<br />

⎡(<br />

q<br />

⎤<br />

0 + q1<br />

− q2<br />

− q3<br />

) 2(<br />

q1q<br />

2 − q0q<br />

3)<br />

2(<br />

q1q3<br />

+ q0q<br />

2 )<br />

⎢<br />

2 2 2 2<br />

⎥<br />

R = ⎢ 2(<br />

q1q2<br />

+ q0q<br />

3)<br />

( q0<br />

− q1<br />

+ q2<br />

− q3<br />

) 2(<br />

q2q<br />

3 − q0q1<br />

) ⎥<br />

⎢<br />

2 2 2 2 ⎥<br />

⎣ 2(<br />

q1q3<br />

− q0q<br />

2 ) 2(<br />

q2q<br />

3 + q0q1<br />

) ( q0<br />

− q1<br />

− q2<br />

+ q3<br />

) ⎦<br />

Kilder:<br />

[1] Wilkins, D.R.. Letters describing the Discovery of Quaternions. School of<br />

Mathematics, Trinity College, Dublin, 21. Oktober 2003<br />

.<br />

[2] Hamilton, William R. On Quaternions, or on a new system of imaginaries<br />

in algebra. Red. D.R. Wilkins. Philosophical Magazine, 1844–1850. 21.<br />

Oktober 2003<br />

.<br />

[3] Titterton, D.H. og J.L. Weston. Strapdown inertial navigation technology.<br />

Peter Peregrinus Ltd., London 1997.<br />

[4] Eberly, David. Quaternion Algebra and Calculus. Magic Software, Inc.<br />

2002. November 2003<br />

.


<strong>Bilag</strong> 15: Tidskonstant for rotorsystem<br />

1<br />

<strong>Bilag</strong> 15: Tidskonstant for rotorsystem<br />

Formålet med dette eksperiment er at måle den samlede tidskonstant for helikopterens<br />

eksisterende rotorsystem dvs. tidskonstanten gennem mikroprocessor-styring, motor og<br />

rotor. Hastigheden af rotorerne måles med et dertil indrettet kredsløb baseret på IR-dioder.<br />

Dette kredsløb og tilhørende test-opstilling er skitseret herunder på figur 1.<br />

Spændingen Vout på kredsløbets udgang falder, når den infrarøde stråle fra IR-LED’en<br />

afbrydes af rotor-bladet. Ved at måle puls-frekvensen med en digital analysator kan<br />

rotationshastigheden af rotoren bestemmes (se figur 2).<br />

IR sensor<br />

Figur 1: RPM målers elektriske kredsløb<br />

Digital<br />

Analysator<br />

5V<br />

Figur 2: Måling af rotationshastighed<br />

tp


2<br />

<strong>Bilag</strong> 15: Tidskonstant for rotorsystem<br />

Der sættes et step på systemet, således:<br />

1. Måling med den digitale analysator startes.<br />

2. Der gives i ét ryk fuld gas på motorene vha. fjernbetjeningen mens helikopteren<br />

holdes fastspændt.<br />

Resultatet er en graf, hvor rotorens Revolutions-Per-Minute (RPM) vises som funktion af<br />

tiden. Heraf kan stige-tiden og dermed tidskonstanten for det samlede system bestemmes.<br />

Periodetiden tp er tiden det tager rotoren at rotere en halv omgang, da der er 2 blade på<br />

propellen (se figur 2).<br />

Rotorens RPM derfor beregnes på følgende måde:<br />

Periode tiden T for en rotation er givet ved: = 2 ⋅t<br />

[ s]<br />

1<br />

T<br />

1<br />

2 ⋅ t<br />

Frekvensen er derved: f = = [ Hz]<br />

p<br />

T p<br />

60<br />

2 ⋅ t<br />

Frekvensen i RPM er givet ved: RPM = 60 ⋅ f = [ omdr / min]<br />

Det resulterende RPM signal som funktion af tiden, er angivet på nedenstående figur (figur<br />

3).<br />

2.861e3<br />

2.270e3<br />

1.679e3<br />

1.089e3<br />

497.871<br />

-92.935<br />

-8.156e-3 0.225 0.459 0.693 0.926 1.160<br />

Den målte kurve og den approksimeret (firkant)<br />

Figur 3: Rotorernes RPM<br />

p


RPM-signalet approksimeres med et simpelt ekspontielt udtryk:<br />

y(<br />

t)<br />

= B<br />

− A ⋅t<br />

( 1−<br />

e ) + C<br />

hvor konstanterne bestemmes til: A=13.9 ; B=4130 ; C=-1500<br />

3<br />

<strong>Bilag</strong> 15: Tidskonstant for rotorsystem<br />

Tids-konstanten for rotorsystemet (mikroprocessor-styring, motor og rotor) findes nu ved<br />

Herved fås<br />

1<br />

−t⋅<br />

τ<br />

y ( t)<br />

= B(<br />

1−<br />

e ) ; hvor τ er tids-konstanten.<br />

τ =<br />

1<br />

= 0,<br />

072<br />

A<br />

[] s<br />

Hvilket giver båndbredde på ca.<br />

BW 14<br />

1 ≈<br />

= τ<br />

Hz


<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

I dette bilag beskrives et Kalman filter, hvormed helikopterens altitude, dvs. dens højde<br />

over jorden, kan estimeres. De vedlagte resultater er baseret på simuleret input, men den<br />

benyttede sensor målestøj er den samme, som benyttet i de øvrige Kalman filtre i specialet.<br />

Udover accelerometer-modulet anvendes en ultralyds-afstandsmåler (SRF04) fra<br />

Devantech Ltd. Det er hensigten, at ultralyds-afstandsmåleren monteres under helikopteren.<br />

Udledningen af Kalman filtret er angivet i detaljer, dels for at give indsigt i Kalman filtret,<br />

dels fordi der anvendes et specielt trick i filteret, men mere herom senere. Der tages<br />

udgangspunkt i følgende blokdiagram<br />

hvor<br />

x2 : vertikal hastigheden [m/s]<br />

x1 : højde over gulvet [m]<br />

Vi modeller vores accelerometer system diskret med nedenstående ligning:<br />

hvor<br />

x = φ x + u + w<br />

k + 1<br />

k<br />

k<br />

k<br />

φ k : matrice der relaterer xk til xk+1<br />

uk : deterministisk kontrol input<br />

wk : model støj<br />

u + w<br />

k<br />

x<br />

1<br />

s<br />

x<br />

x 2<br />

1<br />

1<br />

s<br />

x2 1 x<br />

Figur 1: state-space model<br />

x


<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

Målingerne opsamles diskret og antages at kunne beskrives ved nedenstående ligning<br />

hvor<br />

z = H x + v<br />

k<br />

zk : målevektor<br />

k<br />

k<br />

k<br />

vk : målestøj for den benyttede sensor<br />

Hk : matrice der relaterer sensorerne til tilstandsvektoren xk.<br />

Vi kan skrive vores accelerometer måling som:<br />

dx2<br />

a m = + g + a<br />

dt<br />

n<br />

2<br />

Hvor an er normalt fordelt hvidstød n ( 0,<br />

n ) N a σ<br />

omskrives til:<br />

= x<br />

+ g + an<br />

⇒ x<br />

2<br />

= am<br />

− g − an<br />

= u + w<br />

am 2<br />

≡ og g er tyngdeaccelerationen. Dette kan<br />

Tilstandsligningen for systemet kan diskretiseres ved at benytte Taylor-udvikling<br />

2<br />

( τ − a)<br />

p(<br />

τ ) = f ( a)<br />

+ f<br />

( a)(<br />

τ − a)<br />

+ f<br />

(<br />

a)<br />

+ .... hvor a = t og τ = t + ∆t<br />

2!<br />

Derved fås det diskrete system:<br />

x1 k + 1)<br />

= x1(<br />

k)<br />

+ x2<br />

( k)<br />

⋅ ∆t<br />

+ 0.<br />

5(<br />

am<br />

− g − an<br />

( ) ∆t<br />

x k + 1)<br />

= x ( k)<br />

+ 0.<br />

5(<br />

a − g − a<br />

2 ( 2<br />

m<br />

n<br />

Dette kan skrives på matrix form som:<br />

⎡ x1(<br />

k + 1)<br />

⎤ ⎡1 ∆t⎤<br />

⎡ x1(<br />

k)<br />

⎤ ⎡0.<br />

5∆<br />

⎢ ⎥ = ⎢ ⎥ ⋅ ⎢ ⎥ + ⎢<br />

⎣x2<br />

( k + 1)<br />

⎦ ⎣0<br />

1 ⎦ ⎣x<br />

2 ( k)<br />

⎦ ⎣ 0.<br />

5<br />

)<br />

2<br />

2<br />

t ( am<br />

− g)<br />

( a − g)<br />

m<br />

2<br />

2<br />

⎤ ⎡−<br />

0.<br />

5∆t<br />

a<br />

⎥ + ⎢<br />

⎦ ⎣ − 0.<br />

5an<br />

⎤<br />

⎥<br />

⎦<br />

n


<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

Nu kan systemets covarians matrix Qk bestemmes af støjen wk som:<br />

Q k<br />

1<br />

=<br />

1<br />

⎡<br />

2<br />

T ⎡−<br />

0.<br />

5∆t<br />

a ⎤ n<br />

2<br />

[ k k ] = E⎢⎢<br />

⎥ ⋅ [ − 0.<br />

5∆t<br />

an<br />

⎢⎣<br />

⎣ − 0.<br />

5an<br />

⎦<br />

− 0.<br />

5a<br />

⎡Ew1w1<br />

] ⎥ = ⎢<br />

⎥⎦<br />

⎣Ew1w2<br />

Ew1w2<br />

⎤<br />

Ew<br />

⎥<br />

2w2<br />

⎦<br />

w w<br />

2 2<br />

4 2<br />

= E[<br />

( − 0. 5∆t<br />

an<br />

) ] = 0.<br />

25∆t<br />

an<br />

4<br />

= 0.<br />

25∆t<br />

2<br />

n<br />

= E[<br />

( −<br />

2<br />

. 5∆t<br />

a )( − 0.<br />

5a<br />

2 2<br />

) ] = 0.<br />

25∆t<br />

a<br />

2<br />

= 0.<br />

25∆t<br />

2<br />

E n<br />

Ew w<br />

σ<br />

Ew w 0 n<br />

n<br />

n σ n<br />

1<br />

2<br />

2<br />

2<br />

2<br />

[ ( − . 5a<br />

) ] = 0.<br />

25a<br />

= 0.<br />

25<br />

Ew2w2 = E 0 n<br />

n σ n<br />

Qk bliver dermed:<br />

Q<br />

k<br />

4 2 ⎡0.<br />

25∆t<br />

σ n<br />

= ⎢<br />

2 2<br />

⎣ 0.<br />

25∆t<br />

σ n<br />

2 2<br />

0.<br />

25∆t<br />

σ ⎤ n<br />

2 ⎥<br />

0.<br />

25σ<br />

n ⎦<br />

Som tidligere nævnt kan målingen beskrives ved nedenstående ligning:<br />

z = H x + v<br />

k<br />

k<br />

k<br />

k<br />

Vi måler vores højde med en ultralydssensor, derved fås:<br />

H k<br />

=<br />

[ 1 0]<br />

Det ses at matrixen Hk bestemmer, hvilke tilstandsvariabler der måles af sensorerne. Jo<br />

flere der måles jo bedre estimater, dvs. jo flere sensorer jo større præcision.<br />

z = x1<br />

+ v ; hvor det huskes at x1 er positionen<br />

k<br />

k<br />

Målestøjen v k er normal fordelt hvidstøj v ~ Ν(<br />

0,<br />

σ )<br />

Covarians matrixen k R af vk v k bestemmes som:<br />

R<br />

k<br />

T<br />

2 2<br />

[ v ] = E[<br />

v ] =<br />

= E v σ<br />

k<br />

k<br />

k<br />

v<br />

k<br />

3<br />

2<br />

v<br />


Kalman filteret kan nu beregnes vha. nedenstående ligninger:<br />

Start estimat af<br />

Kalman gain<br />

K<br />

P<br />

H<br />

−<br />

xˆ og<br />

( ) 1 −<br />

− T<br />

H P H + R<br />

− T<br />

k = k k k k k k<br />

Opdatér estimat og måling<br />

−<br />

P 0 . Se fodnote 1<br />

zk er ny måling, xˆ k er nyt beregnet estimat<br />

− ( z − H x )<br />

xˆ ˆ<br />

ˆ<br />

−<br />

k = x k + K k k k k<br />

Beregn fejl covarians matrice<br />

k<br />

−<br />

T<br />

T<br />

( I − K H ) P ( I − K H ) K R K<br />

P =<br />

+<br />

Projicér fremad<br />

− ˆ k + 1 = φ k<br />

x xˆ<br />

k<br />

k<br />

+ u<br />

P = φ P φ + Q<br />

−<br />

k + 1<br />

k<br />

k<br />

T<br />

k<br />

k<br />

k<br />

k<br />

k<br />

1 ^ betyder estimat og – betyder bedste estimat før tiden tk.<br />

k<br />

k<br />

k<br />

k<br />

<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

k<br />

4


Estimaternes fejl covarians matrix Pk er givet ved:<br />

k<br />

T<br />

T<br />

[ e e ] = E[<br />

( x − xˆ<br />

)( x − ) ]<br />

P = E xˆ<br />

−<br />

k<br />

k<br />

k<br />

k<br />

− −T<br />

−<br />

− T<br />

[ e ke<br />

k ] = E[<br />

( x k − xˆ<br />

k )( x k − k ) ]<br />

P = E<br />

xˆ<br />

k<br />

Ved ukorreleret fejl ek fås (for 2 dimensionel vektor):<br />

2<br />

2<br />

T ⎡ e ⎤ ⎡ ⎤<br />

1 e1e2<br />

Ee1<br />

0<br />

[ e ke<br />

k ] = E⎢<br />

⎥ = 2 ⎢ ⎥<br />

⎣e1e2<br />

e2<br />

⎦ ⎣ 0 Ee2<br />

⎦<br />

k<br />

k<br />

<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

P k = E<br />

; hvor e1 er fejlen i estimering af x1, osv.<br />

2<br />

da [ e e ] = 0<br />

E for ukorreleret ek.<br />

1<br />

Det ses også at<br />

2<br />

Ee = σ da middelværdien af fejlen er 0.<br />

2 2<br />

1 e1<br />

Ovenstående kan naturligvis generaliseres til n-dimensionelle vektorer.<br />

Den estimerede højde og hastighed fås af tilstandsvektoren k x .<br />

Hvis f.eks. hastigheden ønskes fås: x2 = [ 0 1]<br />

xk<br />

Dog er denne udregning normalt overflødig, da Kalman filteret implementeres som<br />

computer program. Derfor har brugeren normalt direkte adgang til samtlige elementer i<br />

tilstandsvektoren.<br />

5


<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

Fordelen ved accelerometer måling som kontrol input<br />

I det netop beskrevne Kalman filter benyttes accelerometer målingerne som kontrol input,<br />

dvs. de ikke indsættes i målevektoren zk. Denne metode er beskrevet af Joseph (s. 7-11) og<br />

karakteriseres som et smart trick, dette trick har været anvendt helt tilbage i 1960’erne.<br />

Da accelerometeret ikke kan modelleres simpelt, vil en tilnærmet beskrivelse være<br />

fejlbehæftet. Problemet består i, at effekten af modelstøjen ikke kendes. Hvis denne antages<br />

lille, vil Kalman filteret give små fejl ved små accelerationer, men store fejl ved store<br />

accelerationer. Hvis modelstøjseffekten derimod øges, vil Kalman filteret give små fejl ved<br />

store accelerationer, men store fejl ved små accelerationer. Størrelsen af modelstøjseffekten<br />

må derfor blive et kompromis. Modelstøjen wk bestemmer så at sige dynamikken<br />

af Kalman filteret, dvs. filterets evne til at reagere på målingerne. Ovenstående kompromis<br />

undgås, hvis accelerometer målingerne udnyttes på samme vis, som angivet i det netop<br />

beskrevne Kalman filter. Her indgår accelerometer-målingerne direkte som kontrol input til<br />

Kalman filteret. Udsættes systemet for en pludselig acceleration, vil denne indgå direkte i<br />

modellen og dermed elimineres problemet med dynamikken. Dynamikken af Kalman<br />

filteret bestemmes altså af accelerometeret og ikke modelstøjen.<br />

6


<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

Eksperimenter af altitude estimering med kalman filter<br />

Resultaterne i dette afsnit er fremstillet på grundlag af simulerede måledata. Støjeffekten<br />

fra accelerometeret er målt, men støjeffekten fra ultralyds-afstandsmåleren oplyses ikke i<br />

databladet. I denne simulering er støjens spredning for ultralyds-afstandsmåleren sat til<br />

1cm.<br />

De anvendte værdier ses herunder:<br />

Variansen af støjen på accelerometeret: σ = 50mg<br />

Variansen af målestøjen på ultralydssensoren: σ = 1cm<br />

Samplefrekvensen er 50Hz, så derfor fås<br />

Qk og Rk kan nu bestemmes.<br />

Q k<br />

R k<br />

− ⎡ 1⋅10<br />

⎢<br />

⎣2.<br />

5⋅10<br />

10<br />

−<br />

2.<br />

5⋅10<br />

6.<br />

25 ⋅10<br />

= −7<br />

−4<br />

4<br />

10 −<br />

=<br />

7<br />

⎤<br />

⎥<br />

⎦<br />

n<br />

7<br />

v<br />

1<br />

∆ t =<br />

50Hz<br />

Sensor måledata for hhv. accelerometer og ultralyds-afstandsmåler er defineret på følgende<br />

måde:<br />

a = 0 + w<br />

m<br />

og<br />

z 1 = 0 +<br />

vk<br />

k<br />

Hvor wk og vk er 2 uafhængige hvidstøjsprocessor med spredningerne σ n og σ v . På figur 2<br />

herunder er vist resultatet af simuleringen.


Figur 2 herunder viser outputtet x1 af filteret for 1000 samples.<br />

højde (m)<br />

<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

Det bemærkes at signalet ligger pænt omkring højden 0m.<br />

Fejleffekten i estimeringen af højde og hastighed kan ses af pk matrixen.<br />

p k<br />

0.015<br />

8.348e-3<br />

1.766e-3<br />

-4.815e-3<br />

-0.011<br />

-0.018<br />

-48.950 170.830 390.610 610.390 830.170 1.050e3<br />

⎡2.<br />

72E<br />

⎢<br />

⎣2.<br />

13E<br />

−5<br />

2.<br />

13E<br />

−4<br />

= −4<br />

−3<br />

3.<br />

96E<br />

⎤<br />

⎥<br />

⎦<br />

tid (n)<br />

Figur 2: Output x1 af kalman filter<br />

−5<br />

Det ses at fejlen i estimering af x1 har en spredning på: 2.<br />

72E<br />

= 0.<br />

52cm<br />

forbedring i forhold til ultralydsmålerens spredning.<br />

8<br />

altså en klar


<strong>Bilag</strong> 16: Altitude estimering med Kalman filter<br />

Flyver helikopteren ind over et bord, vil dette pludselig ændre den målte højde med<br />

ultralyds-afstandsmåleren, men accelerometeret vil ikke måle en ændring. Et eksempel er<br />

angivet på følgende figur. Hvor z1 efter 250 samples ændres fra 1 vk<br />

til 1 vk<br />

hastighed (m/s)<br />

5.496<br />

4.243<br />

2.990<br />

1.737<br />

0.485<br />

-0.768<br />

9<br />

tid (n)<br />

z = 0 +<br />

z = 1+<br />

-48.950 170.830 390.610 610.390 830.170 1.050e3<br />

Figur 3: output x2 af kalman filter<br />

Det ses at hastighedsændringen giver en nål i den estimerede hastighed, netop når<br />

helikopteren passerer over bordet. Hvis helikopteren reguleres efter hastighedssignalet x2,<br />

vil nålen formentlig ikke forårsage en væsentlig ændring af helikopterens højde. Det<br />

antages at inertien af helikopterens mekaniske system virker som et lavpas-filter, der<br />

således undertrykker nålen. Ovenstående eksempel kunne være en god øvelse i<br />

undervisningssammenhæng, da der implementeres en simpel adfærd: ”Hold afstand over<br />

gulvet”.<br />

Kilder:<br />

[1] Joseph, Peter D. "Kalman lessons 0 to 4" Kalman filters. Oktober 2003<br />

< http://ourworld.compuserve.com/homepages/PDJoseph/kalman.htm>


<strong>Bilag</strong> 17: Resumé af journal<br />

1<br />

<strong>Bilag</strong> 17: Resumé af journal<br />

I dette bilag gives et kronologisk resumé af specialeforløbet på baggrund af indholdet i<br />

vores journal.<br />

Efter at have modtaget helikopteren, blev helikopterens <strong>fysiske</strong> <strong>egenskaber</strong> tabellagt, dvs.<br />

dimensioner, vægt, løfte evne, strømforbrug, mv. Herefter blev helikopterens<br />

ombordværende elektronik ”reverse engineered”, dvs. funktionaliteten af den<br />

ombordværende elektronik blev analyseret. Yderligere blev rotorernes maksimale<br />

omdrejningshastighed målt og i samme forbindelse blev tidskonstanten fra styringen til<br />

motorerne bestemt. På baggrund af RAPTOR-projektet ved University of Southern<br />

California, som benytter samme type gyroer som anvendt i helikopterens eksisterende<br />

regulering, bestiltes ADXL-202 accelerometre som vareprøver fra Analog Devices.<br />

Herefter fremstilles en IMU prototype og I/O-controller til dataopsamling. Sideløbende<br />

påbegyndes research af egnede strukturer for Kalman filtrering.<br />

Indledende forsøg med attitude-bestemmelse ved midling af accelerometer-målinger. Det<br />

konstateres at den estimerede tyngdevektor hælder til den ene side af (på det tidspunkt)<br />

ukendte årsager. Problemer med COM porten i windows 2000, da det lader til at COM<br />

portens buffer ”løber over”.<br />

Teorien vedrørende extended Kalman filter volder problemer, sideløbende undersøges brug<br />

af accelerometre som kontrol input til simpelt Kalman filter. På dette tidspunkt bruges<br />

relativ lang tid til, at omsætte teori til praksis. Her kunne en vejleder med god praktisk<br />

erfaring med Kalman filtrering måske have bistået.<br />

Ved nærmere undersøgelse af de eksisterende gyro-forstærkerkredsløb ombord på<br />

helikopteren findes, at disse fungerer som båndpas filtre og således ikke kan måle bias<br />

signalet fra gyroerne. Nyt forstærkerkredsløb konstrueres.


2<br />

<strong>Bilag</strong> 17: Resumé af journal<br />

Mistanke vedrørende ”mætnings”-problem for accelerometrene verificeres med brug af en<br />

højtaler. Erfarer at skolen råder over accelerometre. B&O accelerometer og mini shaker<br />

benyttes til yderligere at undersøge ”mætnings”-problem, samt måle vibrationerne ombord<br />

på helikopteren. Nye accelerometre (ADXL 210E) bestilles.<br />

Nye accelerometre monteres.<br />

Prototype færdig, men kvaliteten vanskelig at vurdere, da<br />

• Der ikke rådes over en mekanisk opstilling, hvor kendte påvirkninger (rotation og<br />

bevægelser) kan påtrykkes.<br />

• COM-port problemer udelukker brug af ønsket sample-frekvens.<br />

• Prototypen er ikke trådløs, så helikopteren kan ikke flyve ”frit”<br />

• Tilkobling af helikopterens fjernbetjening til PC ikke færdig, så virkningen af den<br />

eksperimentelle regulator kan ikke opleves ”på egen krop”.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!