Flock of Birds Driver

From Fontys VR-Wiki
Jump to: navigation, search

Sindskort heeft de Fontys CAVE een flock of birds systeem. Een flock of birds systeem is een systeem dat aan de hand van een magnetisch veld de posities van enkele nodes bij kan houden in de directe omgeving van het apparaat (onze CAVE).

Als wij het apparaat direct in het midden van de CAVE plaatsen moeten we zinnige waarden uit het apparaat krijgen over de positie van de nodes in de CAVE. De Flock is direct boven de gebruiker gepositioneerd op iets meer dan 2m hoog. Het is belangrijk om in te stellen dat de flock op het onderste hemisphere moet werken.

Omdat de flock niet precies in het midden van de CAVE te krijgen is, en omdat we rekening moeten houden met storing van de omgeving is het nodig om wat calibraties op onze stelling toe te passen. Ook willen wij data krijgen in het zinnige formaat van meters of centimeters. Hiervoor gaan we eerst wat metingen doen om uiteindelijk de offset en de schaal te ontdekken.

Het schrijven van een Device Driver wordt niet in dit artikel beschreven. Zie Een nieuw device maken voor de CAVE hiervoor.


Bepalen van de werkelijke waarden

Met het programma dat bij het pakket kwam kunnen we waarden direct uit de flock lezen. Het is meteen vrij duidelijk dat de waarden ook in stilstaande positie erg fluctueren. We kunnen dus niet zomaar een paar waarden kiezen. Het liefst neem je dan het gemiddelde uit een aantal waarden om voor zowel meetfouten als "ruis" te corrigeren. Echter omdat we dat ding zo snel mogelijk aan het werk willen hebben kiezen we ervoor om het gemiddelde uit 5 metingen te nemen.


Van boven naar beneden: Z-as

Om metingen te verrichten zetten we eerst de waarden van 2 assen vast om vervolgende de derde as bij verschillende afstanden te meten. We begonnen met de "van boven naar beneden as". We zetten de 2 andere assen vast op 0 door direcht onder de Flock te werk te gaan. We kozen er ook voor om vanaf de grond te meten ipv vanaf de flock omdat we een coordinaten systeem willen hanteren dat uitgaat van de 0,0,0 center bij de voeten van de gebruiker in het midden van de CAVE.

Bij het meten wordt al vrij snel duidelijk dat de "van boven naar beneden as" de Z as voor de flock of birds is.

x = 0 (cm)

boven naar beneden

y = 0 (cm)

z (m)

m1

m2

m3

m4

m5

avg z

0.0

x

-13,5461

-13,8414

-13,5321

-14,861

-14,629

y

-17,4451

-16,4923

-16,4079

-15,8735

-16,6189

z

79,1005

78,988

78,9212

78,8684

79,1567

79,00696

0.2

x

-10,5015

-10,3152

-10,4558

-11,2785

-11,0675

y

-12,7797

-12,1996

-12,4211

-13,2402

-13,2965

z

77,1246

77,1668

77,1914

77,6133

77,2477

77,26876

0.4

x

-7,6924

-7,2741

-7,4287

-8,0194

-8,3956

y

-8,051

-7,4076

-7,7909

-8,501

-8,3323

z

74,2417

74,2804

73,862

74,2663

74,8956

74,3092

0.6

x

-5,14

-4,9361

-4,4087

-5,372

-5,9592

y

-4,6443

-4,4333

-4,1486

-4,9537

-5,4107

z

69,3654

69,2142

69,2634

69,5693

69,5763

69,39772

0.8

x

-3,4067

-3,4735

-2,9145

-3,47

-4,0536

y

-2,4364

-2,5524

-2,2958

-3,2028

-3,3821

z

63,35

63,1883

63,234

62,8613

63,684

63,26352

1.0

x

-2,2923

-2,2606

-1,8844

-1,9301

-2,4997

y

-1,4942

-1,2762

-1,0969

-1,7473

-1,9512

z

56,2341

56,4802

56,4275

50,18

56,7474

55,21384

1.2

x

-1,6172

-1,5856

-1,3465

-1,5961

-2,1938

y

-0,5836

-0,6574

-0,8473

-0,8578

-1,4379

z

49,1675

49,1499

49,2941

49,1324

49,4558

49,23994

1.4

x

-1,2762

-0,9387

-1,5047

-1,0934

-1,3711

y

-0,3692

-0,3305

-1,2094

-0,6856

-0,6847

z

41,6931

41,9778

41,8829

42,0728

41,9778

41,92088

1.6

x

-0,9844

-0,8227

-0,6047

-1,9653

-0,7735

y

0,2953

-0,218

-0,7735

-1,67

0,0949

z

34,2532

34,419

34,3874

34,5913

34,7354

34,47726

1.8

x

-0,8297

-0,4922

-0,6363

-0,4385

-0,9457

y

0,3656

0,1406

0,1266

0,2813

0,4711

z

26,9164

26,9481

26,5438

26,9481

26,9657

26,86442

2.0

x

-0,1231

-0,0176

-0,1371

-0,5731

-0,7453

y

0,4992

0,3516

0,3973

0,232

0,2285

z

20,008

20,1451

20,2858

19,9869

19,9975

20,08466


Hier controleren we of de gemeten waarden niet teveel van elkaar verschillen bij dezelfde afstand. Zo te zien is dat in de meeste gevallen wel in orde. Het wordt echter ook duidelijk dat ons gemiddelde gebasseerd op een sample van 5 metingen per afstand erg gevoelig is voor afwijkingen van deze soort.

Z-as check.PNG


Nu willen we graag een functie uit onze data krijgen. Door het toevoegen van een trend line (lineaire regressie) is het mogelijk om de ideale lijn door onze data punten heen te krijgen.

Z-as linear.PNG


Onze functie voor de z-as wordt dus:

z_meters = (-0,0316 * z_gemeten) + 2,6957



Van links naar rechts: Y-as

z = 165.0 ( cm)

Van links naar rechts

y = 0 (cm)

y (m)

m1

m2

m3

m4

m5

avg y

-1,4

x

-2,9532

-2,5524

-2,6825

-2,8618

-2,9708

y

52,2262

52,511

52,4407

52,5989

52,5743

52,47022

z

30,6396

30,6502

30,6291

30,6642

30,6396

-1,2

x

-2,0391

-1,9372

-2,0743

-2,2325

-2,1938

y

45,5463

45,3143

45,4584

45,6377

45,933

45,57794

z

30,7943

30,7802

30,7978

30,8084

30,7697

-1

x

-1,7579

-1,8106

-1,6137

-1,9337

-1,6172

y

37,9664

28,2898

38,1176

38,3742

38,6836

36,28632

z

30,956

30,9525

30,956

30,956

30,9279

-0,8

x

-1,575

-1,5997

-1,2657

-1,6032

-1,3008

y

29,8697

31,0685

30,1122

30,8259

30,7275

30,52076

z

31,1775

31,1529

31,1318

31,1424

31,1318

-0,6

x

-0,8438

-0,791

-0,6153

-1,6067

-1,0793

y

22,4128

22,7468

22,5077

22,5007

24,3218

22,89796

z

31,3428

31,3603

31,3322

31,3568

31,2478

-0,4

x

-0,7629

-0,668

-0,9352

-1,0547

-0,7172

y

14,5938

14,6958

14,5938

14,7485

14,9348

14,71334

z

31,6275

31,6592

31,617

31,624

31,5994

-0,2

x

-0,4254

-0,5977

-0,9317

-1,2903

-0,7559

y

6,3072

6,3283

6,81

6,7678

6,9893

6,64052

z

31,9158

31,9053

31,9228

31,8701

31,8701

0

x

-0,7699

-0,7383

-0,6856

-0,6153

-0,9141

y

-1

-0,9317

-1,0371

-0,9317

-1,0371

-1,01604

z

32

32,0811

32,0635

32,0811

32,0635

0,2

x

-0,2426

-0,3656

-0,8051

-1,1391

-0,1231

y

-9,3624

-9,2393

-9,0495

-9,1304

-9,2288

-9,20208

z

32,0811

32,0705

32,1162

32,0986

32,0635

0,4

x

-0,6153

-0,4395

-0,8614

-0,8965

-0,9141

y

-17,4732

-17,3501

-17,2658

-17,199

-17,2271

-17,303

z

31,858

31,958

31,9404

31,965

31,9404

0,6

x

-0,7946

-0,2988

-1,0688

-1,0688

-0,9035

y

-24,7472

-24,8703

-25,2887

-24,7859

-25,1375

-24,9659

z

31,7506

31,7857

31,74

31,7998

31,7471

0,8

x

-0,5801

-0,5274

-1,2481

-1,016

-1,1321

y

-32,8194

-33,069

-32,9073

-32,9951

-32,9951

-32,9572

z

31,3709

31,3955

31,3779

31,3779

31,3955

1

x

-0,9492

-1,1707

-1,1602

-0,9387

-1,7719

y

-40,9477

-40,7825

-40,5962

-40,6454

-40,9091

-40,7762

z

30,8013

30,8681

30,8259

30,8259

30,7802

1,2

x

-1,5188

-1,6629

-1,8633

-2,0883

-1,8282

y

-49,5718

-48,6437

-48,6823

-49,7406

-48,6085

-49,0494

z

29,7044

29,8099

29,831

29,6693

29,8556

1,4

x

-1,5997

-1,5961

-2,0426

-2,3134

-2,229

y

-56,6384

-56,1252

-56,6595

-56,6771

-55,9564

-56,4113

z

28,3368

28,4563

28,3509

28,3087

28,4423


Een snelle check:

Y-as check.PNG


Trendlijn:

Y-as linear.PNG


Onze functie voor de y-as wordt dus:

y_meters = (-0,0255 * y_gemeten) - 0,0384



Van voor naar achter: X-as

z = 165.0 ( cm)

Voor naar achteren

y = 0 (cm)

x (m)

m1

m2

m3

m4

m5

avg x

-1,4

x

51,8254

51,5863

51,6813

51,6988

51,47

51,65236

y

-0,668

-0,8403

-0,7137

-0,8262

-1,617

z

32,7842

32,7561

32,7701

32,7842

32,749

-1,2

x

44,6674

44,6322

44,5619

44,6146

44,3826

44,57174

y

-0,893

-0,6012

-0,7875

-0,9528

-0,9739

z

32,3272

32,285

32,3166

32,3236

32,3236

-1

x

37,2246

37,02777

36,9187

37,0312

36,8449

37,00943

y

-0,9317

-0,9633

-0,5977

-0,7735

-1,2129

x

32,067

32,0775

31,9826

32,0986

32,0846

-0,8

x

29,6728

29,2931

29,3564

29,5814

29,3599

29,45272

y

1,2235

-1,2797

-1,1496

-0,8332

-1,3219

z

32,0107

32,0002

32,0002

31,9756

32,0107

-0,6

x

22,0683

21,8151

21,6464

21,78

21,7096

21,80388

y

-1,5223

-1,4168

-1,0125

1,1637

-1,3641

z

32,0143

31,9932

32,0213

31,9896

32,0107

-0,4

x

14,3125

13,9223

13,9364

13,5356

13,8801

13,91738

y

-1,2932

-1,3008

-0,8824

-1,2059

-1,2973

z

32,0283

31,9932

31,9721

32,0107

32,0213

-0,2

x

6,4057

6,4057

6,2756

5,6955

6,0822

6,17294

y

-1,0653

-1,2446

-1,4942

-1,1637

-1,1848

z

32,1092

32,0811

32,0811

32,0354

32,1162

0

x

-1,1075

-1,0196

-1,0336

-1,1321

-1,1075

-1,08006

y

-0,8824

-0,791

-0,7418

-0,9141

-0,8367

z

32,1338

32,1162

32,1443

32,1514

32,1373

0,2

x

-8,6311

-8,8632

-8,3288

-8,9229

-8,8702

-8,72324

y

-0,9668

-0,9774

-0,8473

-0,6223

-0,7383

z

32,0283

32,0635

32,0389

31,9404

32,0389

0,4

x

-16,77

-16,8896

-17,2271

-16,7982

-16,6681

-16,8706

y

-1,1602

-1,2551

-1,0055

-0,9457

-1,2164

z

31,7471

31,7119

31,7119

31,6873

31,733

0,6

x

-25,0742

-24,7297

-25,2922

-24,6418

-24,6664

-24,8809

y

-1,4942

-1,3114

-1,0125

-0,9387

-1,4942

z

31,4588

31,501

31,4764

31,4377

31,4658

0,8

x

-34,5139

-32,9776

-32,851

-32,749

-32,749

-33,1681

y

-1,568

-1,8809

-1,4239

-1,7227

-2,0919

z

30,9103

31,0123

31,0123

31,0615

31,0439

1

x

-40,5329

-40,2692

-40,7473

-40,4485

-40,3747

-40,4745

y

-2,5032

-2,4364

-2,2255

-2,454

-2,3942

z

30,499

30,5025

30,499

30,4779

30,5095

1,2

x

-48,2007

-47,8948

-47,8843

-48,4081

-48,3589

-48,1494

y

-3,3575

-3,6986

-3,4208

-3,6845

-3,4454

z

29,606

29,5919

29,613

29,5216

29,5497

1,4

x

-55,8228

-55,538

-55,7525

-55,9353

-55,6259

-55,7349

y

-4,6935

-4,6724

-5,0978

-5,1013

-5,1541

z

28,3368

28,3016

28,2981

28,2102

28,3263

1,6

x

-63,3922

-63,5715

-63,3183

-63,6418

-63,4344

-63,4716

y

-6,4057

-6,5885

-6,5217

-6,694

-6,9506

z

26,5086

26,5051

26,5438

26,4875

26,4946


Een snelle check:

X-as check.PNG


Trendlijn:

X-as linear.PNG


Onze functie voor de x-as wordt dus:

x_meters = (-0,0259 * x_gemeten) - 0,0424


Reflectie

Generieke functie voor waarden?

x_meters = (-0,0259 * x_gemeten) - 0,0424 y_meters = (-0,0255 * y_gemeten) - 0,0384 z_meters = (-0,0316 * z_gemeten) + 2,6957


Kijkend naar de functies die we gegenereerd hebben doet vermoeden dat voor X en Y (die op vergelijkbare manieren tot stand gekomen zijn) de functie neigt naar een generiekere vorm die voor beide geldt. Namelijk:

x_meters = (-0,0254 * x_gemeten) + C y_meters = (-0,0254 * y_gemeten) + C

Dit is namelijk hetzelfde als een conversie van inch naar meters. De extra term erachter is vermoedelijk de fout van positionering van de veld generator, meetfouten en/of ruis op de lijn.

Echter of dit waar is moet nog onderzocht worden.

0 meter ligt buiten bereik?

De datapunten die verzameld zijn voor de Z-as doen ook vermoeden dat 0 meter buiten het bereik van de flock of birds ligt. In de grafiek zie je dat de trendline hevig beinvloed wordt door het data punt op 0 meter.


Coordinaten systemen

Zoals in de paragrafen hierboven al te lezen is hebben we uit onze gelezen waarden kunnen afleiden wat het coordinaten systeem is wat door de Flock of Birds gehanteerd wordt. Deze hebben wij een beetje omgegooid om het logischer voor ons te maken. Wij hanteren liever een rechterhand systeem. Deze is namelijk als volgt:

Coordinate system FOB.png


In de VR Juggler documentatie is te lezen dat zij een andere coordinaten systeem hanteren. Namelijk:


Coordinate system VRJ.png


Wij moeten dus onze FOB coordinaten omzetten naar VRJ coordinaten. Met een beetje gepuzzel kom je op dit uit.

X_vrj = Y_fob; Y_vrj = Z_fob; Z_vrj = -X_fob;


Correcties

De afstand van de vloer tot het midden van de FOB is 2.46 m

De afstand van de voorwand tot het midden van de FOB is 1.70 m