Bilag 1: Helikopterens fysiske egenskaber - SmartData
Bilag 1: Helikopterens fysiske egenskaber - SmartData
Bilag 1: Helikopterens fysiske egenskaber - SmartData
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”.