Niniejsza rozprawa doktorska stanowi podsumowanie dotychczasowego wkładu autora w projekt rozwojowy „Mechatroniczne projektowanie robotów do diagnostyki i konserwacji
zbiorników z cieczą” NR03 0057 10 finansowanego przez NCBiR. .
W pracy można wyróżnić trzy zasadnicze części – analizę odtwórczą (rozdział 3), analizę twórczą ze względu na kinematykę robotów gąsienicowych (rozdział 4) oraz analizę twórczą ze względu na inne rozwiązania związane z projektem (rozdział 5). Wszystkie z tych części przedstawiają zagadnienia mające kluczowy wpływ na konstrukcję robota inspekcyjnego. Analiza odtwórcza przyniosła wnioski w postaci zbioru istniejących modeli kinematyki pojazdów gąsienicowych, rozwiązań technicznych robotów inspekcyjnych oraz metod inspekcji. Propozycje tych rozwiązań są fundamentem dla poszukiwań własnych oryginalnych koncepcji. Temu służy analiza twórcza, w ramach której opracowano oryginalny model matematyczny kinematyki robotów gąsienicowych oparty na modelu dwukołowym oraz przedstawiono inne autorskie rozwiązania o charakterze technicznym. Należy podkreślić, że najważniejszą częścią tej pracy jest rozdział 4. Opisuje on autorską metodę opisu kinematyki pojazdów gąsienicowych za pomocą modelu dwukołowego. Na podstawie teorii tego modelu sformułowano tezę główną pracy (podrozdział 1.3). Teza została udowodniona doświadczeniami opisanymi w podrozdziałach 4.5 i 4.6. Celem identyfikacji położenia
OSI V pojazdu gąsienicowego dokonano analizy jego trajektorii za pomocą metod wizyjnych. Pomiary przeprowadzono na trzech podłożach o różnych współczynnikach tarcia. Dla każdego
podłoża z osobna zbadano ruch z obciążeniem zamontowanym z przodu oraz z tyłu pojazdu i wykazano istnienie wyraźnego wpływu zmian obciążenia na położenie OSI V. Dla pewności
wszystkie pomiary powtórzono trzykrotnie. . Wykazano również istnienie zależności pomiędzy poślizgiem gąsienic a rozstawem kół wirtualnych
modelu zastępczego co potwierdzono pomiarami podczas jazdy po łuku okręgu. Ostatecznie zweryfikowano model symulując ruch pojazdu po łuku z zadanymi zestawami prędkości
par kół napędowych i porównując trajektorie tego ruchu z rzeczywistymi trajektoriami. Wykazano, że w granicach 5% błędu model dwukołowy poprawnie opisuje ruch pojazdu gąsienicowego. Potwierdzono w ten sposób słuszność tezy pracy doktorskiej. Jako konsekwencję tego faktu należy stwierdzić, że poprawnie zidentyfikowany zastępczy model dwukołowy może służyć do aplikacji w układach sterowania ruchem pojazdów gąsienicowych (w obszarze objętym założeniami). Zaproponowany przez autora model matematyczny stwarza możliwość tzw. autokalibracji. Parametry modelu (czyli położenie OSI V i rozstaw kół wirtualnych) mogą zostać ustalone w zależności od podłoża przez układ pomiarowy zainstalowany na pojeździe podczas jazdy
115 kalibracyjnej. Po określeniu parametrów zostaje zbudowany dwukołowy model zastępczy, który można wykorzystać do sterowania pojazdem na tym podłożu. Dalsze prace należy skoncentrować na skonstruowaniu układów realizujących te funkcje na pokładzie robota, ponieważ dotychczas analiza trajektorii odbywa się za pomocą systemów wizyjnych tak jak to opisano w podrozdziale 4.4.1. Ponadto należy przeprowadzić badania z robotem z zamkniętym układem sterowania napędu. W pracy opisano eksperyment na pojeździe z układem otwartym co ma wyraźny wpływ na stabilność
prędkości kół napędowych a w efekcie na dokładność otrzymanych wyników. . Można również przeprowadzić pomiary na podłożach anizotropicznych pod względem współczynnika
tarcia. Interesujące mogą być też wyniki identyfikacji modelu dwukołowego, gdy obciążenie na jednej
gąsienicy jest inne niż na drugiej. .
. Autor zwraca także uwagę na możliwość rozwoju konstrukcji mechanizmu dokowania, którego rozwiązanie przedstawiono w podrozdziale 5.3. Na bazie opisanego tam prototypu można dokonać potrzebnych modyfikacji i przeprowadzić szereg testów pod wodą celem zbadania jego funkcjonalności.
116
Literatura
[1] Buratowski T..: Modelowanie i identyfikacja mobilnych robotówkołowych, Praca Doktorska, 2003
[2] Burdziński Z.: Teoria ruchu pojazdu gąsienicowego, WKŁ, Warszawa 1972
[3] Cassinis R., Tampalini F., Bartolini P., Fedrigotti R., Docking and charging system for
autonomous mobile robots, Dept. of Electronics & Automation, University of Brescia, 2005
[4] Chen Ning, i inni, The Motion Attitude Analysis of High-Speed Tracked Vehicle Climbing over
Vertical Wall, Advanced Materials Research, Vol. 852,pp 515-519, January 2014
[5] Chodkowski A. W.: Badania modelowe pojazdów gąsienicowych i kołowych, Wydawnictwa Komunikacji i Łączności, Warszawa 1982.
[6] Chodkowski A. W.: Konstrukcja i obliczanie szybkobieżnych pojazdów gąsienicowych, Wydawnictwa Komunikacji i Łączności, Warszawa 1990.
[7] Coulson R., Lambiotte J.C., Grenon G., Pantelakis T., Curran J., An A., Development of a
modular docking sub-system for 12" class autonomous underwater vehicles, OCEANS '04.
MTTS/IEEE TECHNO-OCEAN '04, vol. 3, 1745 – 1749, 2004
[8] Dar Tehmoor M., Longoria Raul G., Slip Estimation for Small-Scale Robotic Tracked Vehicles, 2010 American Control Conference Marriott Waterfront, Baltimore, MD, USA June 30-July 02, 2010
[9] Drobiec Ł., Jasiński R., Piekarczyk A.: Metody lokalizacji wad konstrukcji betonowych –
metoda ultradźwiękowa , Politechnika Śląska, Gliwice
[10] Endo Daisuke, Okada Yoshito, Nagatani Keiji, Yoshida Kazuya, Path Following Control for
Tracked Vehicles Based on Slip-Compensating Odometry, Proceedings of the 2007 IEEE/RSJ
International Conference on Intelligent Robots and Systems San Diego, CA, USA, Oct 29 - Nov 2, 2007
[11] Feezor M.D., Yates Sorell F., Blankinship P.R., Bellingham J.G., Autonomous underwater
vehicle homing/docking via electromagnetic guidance, Oceanic Engineering, IEEE Journal,
vol. 26, issue 4, 515-521, October 2001
[12] Ferrer F., Faure T., Goudiakas J., Andres E., Corrosion Science, 44 (7), 2002
[13] Fierro R., Lewis F. L., Control of a nonholonomic mobile robot: backstepping kinematics into
dynamics, Proceedings of the 34th Conference on Decision & Control, New Orleans, LA -
117 [14] Fukasawa T., Noguchi T., Kawasaki T., Baino M., "MARINE BIRD", a new experimental
AUV with underwater docking and recharging system, OCEANS 2003 Proceedings, 2195-2200,
vol.4, 2003
[15] Giergiel J., Hendzel Z., Żylski W., Modelowanie i sterowanie mobilnych robotów
kołowych,PWN, Warszawa, 2002
[16] Giergiel M., Majkut K., Introduction to the project of tank inspection robot-constructive
analysis, Wybrane Zagadnienia Szkoły Analizy Modalnej Konstrukcji Mechanicznych, ITEE,
Radom 2010
[17] Giergiel M., Małka P. : Mobile robot assigned for diagnostic and maintenance reservoirs with
liquid, MODELLING AND OPTIMIZATION OF PHYSICAL SYSTEMS, Gliwice 2009
[18] Gonzalez R., Rodriguez F., Guzman J.L., Berenguel M., Localization and Control of Tracked
Mobile Robots under Slip Conditions, Proceedings of the 2009 IEEE International Conference
on Mechatronics. Malaga, Spain, April 2009
[19] Hartsell D. R., Putting the Maverick fuel-tank inspection robot to the test, IEEE Robot. Autom. Mag., vol. 6, no.3, Feb. 1999, pp. 54–64.
[20] Hendzel Z., Sterowanie ruchem nadążnym mobilnych robotów kołowych, Ofic. Wydaw. Politechniki Rzeszowskiej, 1996
[21] Hughes, G., and Gittleman,M.M., A Robotic End Effector for Visual and Electromagnetic
Inspection of Waste Storage Tank Walls, Proceedings of the ANS 6th Topical Meeting on
Robotics and Remote Systems, 347-354. American Nuclear Society, Inc. La Grange Park, IL, 1995
[22] Kitano M., Kuma M., An analysis of horizontal plane motion of tracked vehicles, J. Terramechanics, vol. 14, pp. 211 - 225, 1977
[23] Krakowiak S., Darowicki K.: Nieniszczące badania materiałów, zakopane 2007
[24] La Rosa G., Messina M., Muscato G., Sinatra R.: A low-cost lightweight climbing robot for the
inspection of vertical surfaces, Mechatronics, Volume 12, Issue 1, Feb. 2002, pp. 71-96
[25] Le Anh Tuan, Rye David.C., Durrant-Whyte Hugh.F., Estimation of Back-soil Interactions for
Autonomous Tracked Vehicles, Proceedings of the 1997 IEEE International Conference on
Robotics and Automation Albuquerque, New Mexico - April 1997
[26] Madsen J., Heyn T., Negrut D., Methods of tracked vehicle system modeling and simulation, Based Engineering Lab Technical Reports, 2010
[27] Majkut K., Giergiel M., Dynamics of small caterpillar robot, Wydawnictwo PolitechnikiŚląskiej, Gliwice 2011
118 [28] Małka P.: Pozycjonowanie i nadążanie minirobota kołowego, Praca Doktorska, 2008
[29] Marsh C. P., Siddique A., Temple B., Hock V. M., Robb F.: Fury: Robotic in-situ
inspection/condition assessment system for underground storage tanks, US Army Corps of
Engineers, Washington, Tech. Rep., 2005.
[30] Martínez J. L., Mandow A., Morales J., Pedraza S., García-Cerezo A., Approximating
Kinematics for Tracked Mobile Robots, The International Journal of Robotics Research 2005
24: 867, DOI: 10.1177/0278364905058239
[31] Martínez J.L., Mandow A., Morales J., Garcia-Cerezo A., Pedraza S., Kinematic Modelling of
Tracked Vehicles by Experimental Identification, Proceedings of 2004 IEEORSJ International
Conference on Intelligent Robots and Systems September 28. Oclokr 2,2004. Sendal. Japan [32] Mężyk A., i inni, Modelling and Investigation of Dynamic Parameters of Tracked Vehicles,
Mechanics and Mechanical Engineering Vol. 15, No. 4 (2011) 115-130.
[33] Miller D.P., Wright A., Autonomous spacecraft docking using multicolor targets, Proceedings of the 6th Topical Meeting on Robotics and Remote Systems, Monterey, California, February 5-10, 1995, ISBN: 0-89448-602-0
[34] Moosavian S. Ali .A., Kalantari Arash, Experimental Slip Estimation for Exact Kinematics
Modeling and Control of a Tracked Mobile Robot, 2008 IEEE/RSJ International Conference on
Intelligent Robots and Systems Acropolis Convention Center Nice, France, Sept, 22-26, 2008 [35] Morecki A., Knapczyk J.: Podstawy robotyki: teoria i elementy manipulatorów i robotów,
Wydawnictwo Naukowo-Techniczne, Warszawa, 1994
[36] Murakami H., Watanabe K., Kitano M., A mathematical model for spatial motion of tracked
vehicles on soft ground, J. Temmechanics, vol. 29, no. 1, pp. 71 - 81, 1992
[37] Nagabło T., Modelowanie i symulacja pojazdu gąsienicowego w programie MSC ADAMS, Czasopismo Techniczne Mechanika, zeszyt 7, strona 375-382, Wydawnictwo Politechniki Krakowskiej, 2011
[38] Pack R. T., Christopher J. L. Jr., Kawamura K.: A Rubbertuator-based structure-climbing
inspection robot, Proceedings of the 1997 IEEE International Conference on Robotics and
Automation, Volume 4, 1997
[39] Ping Haijun Mo, Wu Huang Shaowei, Study on Dynamic Stability of a Tracked Robot
Climbing over an Obstacle or Descending Stairs,
[40] Portree D.S. , Mir hardware heritage, NASA Reference Publication 1357, Houston, March 1995
[41] Schempf H., Chemel B., Everett N., Neptune: above-ground storage tank inspection robot
119 [42] Schempf H.: Houdini: Locomotion analysis-driven design of an in-tank mobile cleanup robot, Proceedings of the Transactions of the American Nuclear Society volume 73, 1995, pp. 466-468 [43] Shiller, Z., Serate, W., Hua, M. 1993. Trajectory planning of tracked vehicles, Proceedings of
the IEEE International Conference on Robotics and Automation, Atlanta, GA, Vol. 3, pp. 796–801
[44] Sim R., Griffin M., Shyr A., Little J.J., Scalable real-time vision-based SLAM for planetary
rovers, IEEE IROS 2005 Workshop on Robot Vision for Space Applications, Edmonton ,
Canada , 5 Aug. 2005, pp 4-9
[45] Singh H., Bellingham J.G., Hover F., Lemer S., Moran B.A., von der Heydt K., Yoerger D.,
Docking for an autonomous ocean sampling network, Oceanic Engineering, IEEE Journal, vol.
26, issue 24, 498-514, October 2001
[46] Sogi T., Kawaguchi Y., Morisaki H., Ohkawa K., Kai N., Hayakawa H.: Inspection Robot for
Spherical Storage Tanks, 26th Annual Conference of the IEEE Industrial Electronics Society,
Volume 1, 22-28 Oct. 2000, pp. 393 - 398
[47] Sotiropoulos P., Grosset D., Giannopoulos G., Casadei F., AUV docking system for existing
underwater control panel, OCEANS 2009 – EUROPE, 1-5, 2009
[48] Stokey R., A docking system for REMUS, an autonomous underwater vehicle, OCEANS '97. MTS/IEEE Conference Proceedings, 1132 - 1136 vol.2, 1997
[49] Unterreiner M., Schramm D., Modelling of a Twin-Track Vehicle Model with Modular Wheel
suspensions, Applied Mechanics and Materials, Vol. 165, pp 214-218, April 2012
[50] Unver O., Sitti M., Tankbot: A Miniature, Peeling Based Climber on Rough and Smooth
Surfaces, Proc. of the 2009 IEEE Int. Conference on Robotics and Automation (ICRA), Kobe,
Japan, May 12-17, 2009
[51] Wang, G. G., Wang, S. H., Chen, C. W. 1990, Design of turning control for a tracked vehicle, IEEE Control Systems Magazine 10(3):122–125
[52] Wong, J. Y. 2001, Theory of Ground Vehicles, 3rd edition, Wiley, New York
[53] Yoshifumi K., Development of an Inspection Robot for Spherical Storage Tanks; Journal of the Robotics Society of Japan; vol: 21, 2003, pp. 770- 775.
[54] www.uprp.pl [55] www.espacenet.com [56] www.solidnydom.pl [57] www.ndt-ed.org [58] www.techcorr.com [59] www.frc.ri.cmu.edu [60] www.osakagas.co.jp
120 [61] http://spaceflight.nasa.gov/gallery/images/shuttle/sts-122/html/s122e006381.html [62] http://spaceflight.nasa.gov/gallery/images/station/crew-17/html/iss016e035627.html [63] http://jimmydoolittlemuseum.org/html/modern.html [64] http://www.nationmaster.com/encyclopedia/Aerial-refueling [65] http://www.patentbuddy.com/Patent/6604711 [66] http://www.google.com/patents/US6926049 [67] https://www.tntech.edu/engineering/research/cesr/welcome/featured-research/robots [68] http://robotik.dfki-bremen.de/en/research/robot-systems/artis-1.html [69] http://www.imagesystems.se/image-systems-motion-analysis.aspx [70] http://www.vision.caltech.edu/bouguetj/calib_doc/ [71] http://www.cnet.com [72] http://www.digi.com [73] http://www.dagurobot.com/
121
Załączniki
Z1. Istota algorytmu cięciw
Istota algorytmu cięciw została przedstawiona na rys.7.1. Znając trajektorię pojazdu, którą można uznać za zbliżoną do okręgu, jest możliwość określenia estymaty średnicy tego okręgu. Wymagana jest znajomość współrzędnych n punktów tworzących tą trajektorię. Niech długość cięciwy pomiędzy punktem Pi a punktem Pj będzie oznaczona jako:
cÎâ) |PÎPâ| (7.1)
W pierwszym kroku algorytmu należy przyjąć i=1. Ze wzoru (7.1) wynika, że:
c˜â) |P˜Pâ| ) e0x•ä1 x•N2 3 0y•ä1 y•N2 (7.2)
gdzie:
(xP1,yP1) – współrzędne punktu P1
(xPj,yPj) – współrzędne punktu Pj
Ze wzoru (7.2) trzeba obliczyć wszystkie c1j dla j=1 .. n
122 W ten sposób powstaje zbiór n długości cięciw c11,c12,…c1n. Analogicznie należy postąpić w kolejnych krokach aż do kroku n. Po wykonaniu tej procedury w każdym z powstałych zbiorów należy znaleźć najdłuższą cięciwę tj.:
cÎåÐh = max 0cΘ, cÎ … cΚ2 (7.3)
W rezultacie otrzymany zostaje inny zbiór – maksimów c1max, c2max .. cnmax. Wynikiem końcowym algorytmu jest wartość średnia maksimów długości cięciw obliczonych z (7.3), którą można traktować jako estymatę średnicy:
dçÍèiå=∑ 0c˜åÐh, cš åÐh . . cšåÐh2 Îê˜
n (7.4)
Ponieważ użyte we wzorze (7.4) najdłuższe cięciwy nie muszą być równe średnicy (zwykle są mniejsze od niej), więc wynik będzie niedoszacowany. Wzór ten jest zatem estymatorem obciążonym. Dokładność estymacji zależy od ilości punktów n tworzących trajektorię. Im większa liczba punktów, tym większa dokładność estymacji. Należy więc określić stosunek pomiędzy estymatą obciążoną a estymatą nieobciążoną w zależności od n. Dokonuje się tego przez wygenerowanie składającego się z n punktów okręgu o znanej wstępnie założonej średnicy Dzałoż. Współrzędne wygenerowanych punktów posłużą do estymacji średnicy destym. Ponieważ znana jest średnica Dzałoż a destym zostaje otrzymane ze wzoru (7.4), następną czynnością jest określenie stosunku średnicy założonej do estymowanej ze wzoru:
@0A2 = ëìíłïż0š2
ñòóÕÁô0š2 (7.5)
W ten sposób można utworzyć bazę danych s(n). Na tej podstawie można później obliczać estymator nieobciążony średnicy Destym(n) dowolnego okręgu:
DçÍèiå = @ 0A2dçÍèiå0n2 (7.6)
Algorytm cięciw autor zrealizował za pomocą przygotowanego przez siebie makra w programie Microsoft Excel (ESTYMATOR_ŚREDNIC, załącznik Z3). Dodatkowo opracowane zostało makro BŁĄD_ESTYMATORA_ŚREDNIC do określenia skali s(n) (załącznik Z4). Dla podanej średnicy
123 Dzałoż oraz liczby punktów n generowany jest okrąg. Generacja okręgu polega na obliczeniu współrzędnych punktów ze wzorów (7.7):
xÎ)ëìíłïżcos 0ϕÎ3 ϕ•2 yÎ)ëìíłïżsin 0ϕÎ3 ϕ•2 (7.7) gdzie: i = <1, n> ϕP – losowy kąt początkowy ϕi = Ë÷ “
Rys.7.2. Wygenerowany przez makro okrąg
Ponieważ w rzeczywistości odległości pomiędzy kolejnymi punktami na obwodzie trajektorii kołowej nie są jednakowe (z powodu niejednostajności ruchu) dlatego wprowadzono losowe zaburzenie wartości kąta ϕi:
ϕÎ) ø0ÎÏùúûüÔ.×× 2
š (7.8)
gdzie:
Rnd – losowa liczba z przedziału <0, 1>
W efekcie powstaje okrąg jak na rys.7.2. W ten sposób dla podanych wartości średnicy Dzałoż oraz n wygenerowanych zostaje 10 okręgów. Dla każdego z nich określona zostaje estymata średnicy Destym
oraz wartość s(n) ze wzoru (7.5), które następnie uśrednia się.
124
Z2. Przybliżenie okręgiem z metody najmniejszych kwadratów
Jak wcześniej wspomniano, trajektoria pojazdu wyznaczona została na podstawie zbioru punktów (xi, yi), który z metody najmniejszych kwadratów można przybliżyć okręgiem O(a_mnk,
b_mnk, r_mnk), gdzie (a_mnk, b_mnk) – współrzędne środka okręgu, r_mnk – promień okręgu. Niech dane będzie równanie tego okręgu:
0. 1 a_mnk2 + 05 − b_mnk2 = r_mnk (7.9) Równanie to można zapisać w innej postaci:
þ = . + 5 + A. + B5 + C = 0 (7.10)
przy czym:
a_mnk = −A2 (7.11)
b_mnk = −B2 (7.12)
r_mnk = Úa_mnk + b_mnk − C (7.13)
Wyrażenie w2 opisujące kwadrat odchylenia zadanej zależności funkcyjnej (równania okręgu) od punktów doświadczalnych (xi, yi) ma postać:
þ = 0.Î + 5Î + A.Î+ B5Î+ C2 š
Îê˜
(7.14)
Odchylenie powinno być jak najmniejsze, więc poszukiwane są minima wyrażenia po prawej stronie równania (7.14) ze względu na współczynniki A, B i C. Wyrażenie to jest więc różniczkowane po wymienionych współczynnikach a następnie pochodne przyrównuje się do zera:
125 þ ) 2.÷ +2.÷5÷ +2.÷ + 2.÷ + 2.÷5÷ = 0 “ ÷ê˜ (7.15) þ = [2. ÷5÷ +2.÷ +25÷ + 02.÷5÷+ 25÷ 2] “ ÷ê˜ = 0 (7.16) þ = 2. ÷ +25÷ +2 + 2.÷ + 25÷ = 0 “ ÷ê˜ (7.17)
W ten sposób powstaje układ trzech równań z trzema niewiadomymi – A, B i C. W celu ich znalezienia wykorzystano metodę wyznaczników, przy czym:
W = 2.÷5÷2.÷ 2.÷5÷2.÷ 2.÷25÷ 2.÷ 25÷ 2 š Îê˜ (7.18) W = − 2.−02.÷÷5÷+ 2.÷5÷+ 25÷2 2.÷2.÷5÷ 2.÷25÷ − 2.÷ + 25÷ 25÷ 2 š Îê˜ (7.19) WY= 2.2.÷÷5÷ − 2.÷−02.÷5+ 2.÷÷+ 255÷÷2 252.÷÷ 2.÷ − 2.÷ + 25÷ 2 š Îê˜ (7.20) W•= 2.÷ 2.÷5÷ − 2.÷ + 2.÷5÷ 2.÷5÷ 2.÷ −02.÷5÷+ 25÷2 2.÷ 25÷ − 2.÷ + 25÷ š Îê˜ (7.21)
Poszukiwane współczynniki można obliczyć ze wzorów:
=WW (7.22)
126
=W•W (7.24)
Po znalezieniu A, B i C należy obliczyć ze wzorów (7.11) i (7.12) współrzędne środka okręgu oraz w szczególności jego promień r_mnk ze wzoru (7.13).
127
Z3. Makro ESTYMATOR_ŚREDNIC
Sub ESTYMATOR_ŚREDNIC() 'DEKLARACJA ZMIENNYCH i = 0 j = 0 roznicax = 0 roznicay = 0 d_max = 0 Dim rng As Range srednia = 0 odch_stand = 0 a = 0 b = 0 c = 0'DEKLARACJA PRZYCISKU MSGBOX
Dim info, styl, pasek
styl = vbOK + vbInformation pasek = "WYNIKI"
'CZYSZCZENIE PÓL POD MACIERZ DŁUGOŚCI CIĘCIW
Do Until Cells(j + 1, 6) = "" j = j + 1 Loop Range("D1").Value = j For licznik2 = 1 To j For licznik = 1 To j Arkusz1.Cells(licznik2, 5 + licznik).Clear Next licznik Next licznik2 For licznik = 1 To j + 4 Arkusz1.Cells(licznik, 7 + j).Clear Next licznik
'OBLICZENIE ILOŚCI PUNKTÓW NA OKRĘGU
Do Until Cells(i + 1, 1) = "" i = i + 1
Loop
'WYŚWIETLENIE ILOŚCI PUNKTÓW NA OKRĘGU W C1
Range("C1").Value = i
'OBLICZENIE POSZCZEGÓLNYCH DŁUGOŚCI CIĘCIW - BUDOWA MACIERZY
For licznik2 = 1 To i
For licznik = 1 To i
roznicax = (Arkusz1.Cells(licznik2, 1).Value) - (Arkusz1.Cells(licznik, 1).Value)
roznicay = (Arkusz1.Cells(licznik2, 2).Value) - (Arkusz1.Cells(licznik, 2).Value)
Arkusz1.Cells(licznik2, 5 + licznik).Value = Sqr(roznicax ^ 2 + roznicay ^ 2)
Next licznik
Next licznik2
'WYZNACZENIE DŁUGOŚCI MAKSYMALNEJ CIĘCIWY (ŚREDNICY) WYPROWADZONEJ Z DANEGO
PUNKTU
For licznik = 1 To i
Set rng = Arkusz1.Range((Arkusz1.Cells(licznik, 5)), (Arkusz1.Cells(licznik, 5 + i)))
d_max = Application.WorksheetFunction.Max(rng) Arkusz1.Cells(licznik, 7 + i).Value = d_max
Next licznik
'OBLICZENIE ŚREDNIEJ WSZYSTKICH ŚREDNIC
srednia = (Application.Sum(Range(Cells(1, 7 + i), Cells(i, 7 + i)))) / i Arkusz1.Cells(licznik + 2, 7 + i).Value = srednia
128
odch_stand = Application.WorksheetFunction.StDev(Range(Cells(1, 7 + i), Cells(i, 7 + i)))
Arkusz1.Cells(licznik + 3, 7 + i).Value = odch_stand
'**********************************************************************************
'OBLICZENIE OKRĘGU OPISANEGO NA TRAJEKTORII METODĄ NAJMNIEJSZYCH KWADRATÓW 'MINIMALIZUJEMY:
' _n
' \
' w^2= /_ (xi^2 +yi^2+Axi+Byi+C)^2; a_mnk=-A/2;b_mnk=B/2;r_mnk=Sqr(a^2+b^2-C) ' i = 1
'POBRANIE WSPÓŁRZĘDNYCH PUNKTU (xi,yi)
wa1 = 0 wb1 = 0 wc1 = 0 wd1 = 0 wa2 = 0 wb2 = 0 wc2 = 0 wd2 = 0 wa3 = 0 wb3 = 0 wc3 = 0 wd3 = 0 For punkt = 1 To i xi = Arkusz1.Cells(punkt, 1).Value yi = Arkusz1.Cells(punkt, 2).Value
'PO OBLICZENIU POCHODNYCH CZĄSTKOWYCH PO A,B,C ORAZ UTWORZENIU UKŁADU
RÓWNAŃ Z WARUNKU EKSTREMUM
'UKŁAD RÓWNAŃ JEST ROZWIĄZANY METODĄ WYZNACZNIKÓW ZE WZGLĘDU NA A,B,C
'PONIŻEJ OBLICZONE SĄ WYRAZY WYZNACZNIKÓW W POJEDYNCZEJ ITERACJI:
' |wa1 wb1 wc1| |wd1 wb1 wc1| |wa1 wd1 wc1| |wa1 wd1 wc1|
'W=|wa2 wb2 wc2| WA=|wd2 wb2 wc2| WB=|wa2 wd2 wc2| WC=|wa2 wd2 wc2| ' |wa3 wb3 wc3| |wd3 wb3 wc3| |wa3 wd3 wc3| |wa3 wd3 wc3|
wa1i = 2 * (xi ^ 2) wb1i = 2 * (xi * yi) wc1i = 2 * xi
wd1i = -2 * (xi ^ 3) - (2 * (xi * (yi ^ 2))) wa2i = 2 * (xi * yi)
wb2i = 2 * (yi ^ 2) wc2i = 2 * yi
wd2i = (-2 * ((xi ^ 2) * yi)) - (2 * (yi ^ 3)) wa3i = 2 * xi
wb3i = 2 * yi wc3i = 2
wd3i = (-2 * (xi ^ 2)) - (2 * (yi ^ 2))
wa1 = wa1 + wa1i wb1 = wb1 + wb1i wc1 = wc1 + wc1i wd1 = wd1 + wd1i wa2 = wa2 + wa2i wb2 = wb2 + wb2i wc2 = wc2 + wc2i wd2 = wd2 + wd2i wa3 = wa3 + wa3i wb3 = wb3 + wb3i wc3 = wc3 + wc3i wd3 = wd3 + wd3i
Next punkt
W = (wa1 * wb2 * wc3) + (wb1 * wc2 * wa3) + (wc1 * wa2 * wb3) - (wa3 * wb2 * wc1) - (wb3 * wc2 * wa1) - (wc3 * wa2 * wb1)
WA = (wd1 * wb2 * wc3) + (wb1 * wc2 * wd3) + (wc1 * wd2 * wb3) - (wd3 * wb2 * wc1) - (wb3 * wc2 * wd1) - (wc3 * wd2 * wb1)
129
wc1) - (wd3 * wc2 * wa1) - (wc3 * wa2 * wd1)
WC = (wa1 * wb2 * wd3) + (wb1 * wd2 * wa3) + (wd1 * wa2 * wb3) - (wa3 * wb2 * wd1) - (wb3 * wd2 * wa1) - (wd3 * wa2 * wb1)
'OBLICZENIE WARTOŚCI A,B,C
a = WA / W b = WB / W c = WC / W
'OBLICZENIE WARTOŚCI a_mnk(x-owa składowa środka okręgu);b_mnk(y-owa składowa
środka okręgu);R_mnk(promień okręgu)
a_mnk = -a / 2 b_mnk = -b / 2
r_mnk = Sqr(a_mnk ^ 2 + b_mnk ^ 2 - c)
'WYŚWIETLENIE WARTOŚCI a_mnk;b_mnk;r_mnk
Arkusz1.Cells(10, 4).Value = a_mnk Arkusz1.Cells(11, 4).Value = b_mnk Arkusz1.Cells(12, 4).Value = r_mnk * 2
'********************************************************************************** 'WYŚWIETLENIE WYNIKÓW W OKNIE MSGBOX
info = "ŚREDNIA WARTOŚĆ ŚREDNICY: " & srednia & vbNewLine & vbNewLine & "ODCHYLENIE STANDARDOWE: " & odch_stand
MsgBox info, styl, pasek
130
Z4. Makro BŁĄD_ESTYMATORA_ŚREDNICY
Sub BŁĄD_ESTYMATORA_SREDNICY()
'OKNO DIALOGOWE Z ZAPYTANIEM O WARTOŚĆ ŚREDNICY, KTÓRA POSŁUŻY DO GENERACJI OKRĘGU
D = InputBox("PODAJ WARTOŚĆ ŚREDNICY TEORETYCZNEJ")
'OKNA DIALOGOWE Z ZAPYTANIEM W JAKICH GRANICACH ILOŚCI PUNKTÓW MAJĄ SKŁADAĆ SIĘ OKRĘGI
min_badana_l_punktow = InputBox("PODAJ MINIMALNĄ LICZBĘ PUNKTÓW OKRĘGU") max_badana_l_punktow = InputBox("PODAJ MAKSYMALNĄ LICZBĘ PUNKTÓW OKRĘGU")
liczbaokregow = 10
'CZYSZCZENIE WYNIKÓW POPRZEDNICH OBLICZEŃ (W ARKUSZU "WYNIKI")
For licznik2 = 1 To 70
For licznik = 1 To liczbaokregow + 6
Arkusz2.Cells(licznik, licznik2).Clear
Next licznik
Next licznik2
'W PĘTLI FOR GENERUJEMY KOLEJNE SERIE N-PUNKTOWYCH OKRĘGÓW (OKRĘGI O CORAZ WIĘKSZEJ LICZBIE PUNKTÓW)
For n = min_badana_l_punktow To max_badana_l_punktow
'KOREKTA ZAWSZE MNIEJSZA O JEDEN OD POCZĄTKOWA LICZBA_PUNKTOW N !!!
korekta = min_badana_l_punktow - 1
'DLA DANEJ LICZBY PUNKTÓW N BĘDZIE WYGENEROWANE TYLE LOSOWYCH OKREGOW ILE WYNOSI LICZBAOKREGOW
'NA PRZYKŁAD DLA LICZBAOKREGOW=10 I N=20 BĘDZIE KOLEJNO WYGENEROWANE 10 20-PUNKTOWYCH OKRĘGÓW Z WYNIKAMI
For numerokregu = 1 To liczbaokregow
'********************************************************************* '**************************** GENERATOR_OKREGU *********************** '*********************************************************************
'DEKLARACJA ZMIENNYCH (RO - LOSOWA FAZA POCZĄTKOWA)
x = 0 y = 0 ro = Rnd() i = 0 j = 0
'CZYSZCZENIE PÓL POD KOLUMNY WYGENEROWANYCH WSPÓŁRZĘDNYCH
Do Until Cells(j + 1, 1) = "" j = j + 1 Loop For licznik2 = 1 To 2 For licznik = 1 To j Arkusz1.Cells(licznik, licznik2).Clear Next licznik Next licznik2
'GENERACJA LOSOWEGO OKRĘGU (LICZBA RAND SYMULUJE ODCHYŁKĘ OD ŚREDNIEJ
ŁUKU 2*PI/N)
For licznik = 1 To n
rand = ((Rnd() - 0.5) / 5)
xi = (D / 2) * Cos((2 * WorksheetFunction.Pi * (ro + licznik + rand)) / n)
yi = (D / 2) * Sin((2 * WorksheetFunction.Pi * (ro + licznik + rand)) / n) Arkusz1.Cells(licznik, 1).Value = xi Arkusz1.Cells(licznik, 2).Value = yi Next licznik '*********************************************************************** '****************************** KALKULATOR_ŚREDNICY ******************** '*********************************************************************** roznicax = 0 roznicay = 0 d_max = 0
131 Dim rng As Range srednia = 0 lewy_offset = 8
'CZYSZCZENIE PÓL POD MACIERZ DŁUGOŚCI CIĘCIW
Do Until Cells(j + 1, lewy_offset) = ""
j = j + 1
Loop
For licznik2 = 1 To j
For licznik = 1 To j
Arkusz1.Cells(licznik2, (lewy_offset - 1) + licznik).Clear
Next licznik
Next licznik2
For licznik = 1 To j + 4
Arkusz1.Cells(licznik, (lewy_offset + 1) + j).Clear
Next licznik
'OBLICZENIE ILOŚCI PUNKTÓW NA OKRĘGU
Do Until Cells(i + 1, 1) = ""
i = i + 1
Loop
'OBLICZENIE POSZCZEGÓLNYCH DŁUGOŚCI CIĘCIW - BUDOWA MACIERZY
For licznik2 = 1 To i
For licznik = 1 To i
roznicax = (Arkusz1.Cells(licznik2, 1).Value) – (Arkusz1.Cells(licznik, 1).Value)
roznicay = (Arkusz1.Cells(licznik2, 2).Value) – (Arkusz1.Cells(licznik, 2).Value)
Arkusz1.Cells(licznik2, (lewy_offset - 1) + licznik).Value = Sqr(roznicax ^ 2 + roznicay ^ 2)
Next licznik
Next licznik2
'WYZNACZENIE DŁUGOŚCI MAKSYMALNEJ CIĘCIWY WYPROWADZONEJ Z DANEGO PUNKTU
For licznik = 1 To i
Set rng = Arkusz1.Range((Arkusz1.Cells(licznik, lewy_offset)), (Arkusz1.Cells(licznik, lewy_offset + i)))
d_max = Application.WorksheetFunction.Max(rng)
Arkusz1.Cells(licznik, (lewy_offset + 1) + i).Value = d_max
Next licznik
'OBLICZENIE ŚREDNIEJ WSZYSTKICH MAKSYMALNYCH CIĘCIW ZADANEGO LOSOWEGO
OKRĘGU Z ARKUSZA1
srednia = (Application.Sum(Range(Cells(1, (lewy_offset + 2) + i), Cells(i, (lewy_offset + 1) + i)))) / i
'ZAPIS POWYŻEJ OBLICZONEJ WARTOŚCI DO ARKUSZA2
'PRZYKŁADOWO W KOLUMNIE "N=20" I DLA LICZBAOKREGOW=10 JEST ZAPISANE 10 WARTOŚCI PONIEWAŻ
'WYGENEROWANYCH ZOSTAŁO 10 20-PUNKTOWYCH OKRĘGÓW, WIĘC I 10 MAKSYMALNYCH CIĘCIW (ŚREDNIC)
Arkusz2.Cells(1, n - korekta).Value = "n=" & n