{"id":2832,"date":"2021-05-06T17:31:00","date_gmt":"2021-05-06T17:31:00","guid":{"rendered":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=2832"},"modified":"2021-05-07T13:23:26","modified_gmt":"2021-05-07T13:23:26","slug":"sterowanie-serwem-za-pomoca-joysticka-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-2-2-2-2-2-2-2-2-3-2-3-3-2-3-2-2-2-2-2-2","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=2832","title":{"rendered":"Wojny robot\u00f3w: sterowanie + pr\u0119dko\u015b\u0107 serw"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Wojny robot\u00f3w <\/h2>\n\n\n\n<p>Pan Rafa\u0142 przygotowuje drugi pojazd do pracy + co\u015b tam programuje ze sterowaniem&#8230; Pewnie w nast\u0119pnym tygodniu zobaczymy efekty tej pracy. Por\u00f3wnamy te\u017c sklepowe ko\u0142a z naszymi &#8211; wydrukowanymi w 3D.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u0119dko\u015b\u0107 serw<\/h2>\n\n\n\n<p>Pan Tomasz wykorzysta\u0142 sw\u00f3j uk\u0142ad mierz\u0105cy liczb\u0119 obrot\u00f3w na minut\u0119 do zbadania zale\u017cno\u015bci zmiany tej pr\u0119dko\u015bci od wype\u0142nienia sygna\u0142u steruj\u0105cego serwem. Serwem pracy ci\u0105g\u0142ej sterujemy podaj\u0105c sygna\u0142 PWM z wype\u0142nieniem z przedzia\u0142u 1000-2000 us (metoda writeMicroseconds() z klasy Servo), gdzie warto\u015b\u0107 1500 us odpowiada zatrzymaniu serwa, a warto\u015bci 1500-2000 przek\u0142adaj\u0105 si\u0119 na coraz szybsze obroty serwa w jedn\u0105 stron\u0119 (1500-1000 us w przypadku obrot\u00f3w w przeciwn\u0105 stron\u0119). Tyle teorii. A praktyka? <\/p>\n\n\n\n<p>No w\u0142a\u015bnie &#8211; serwo serwu nie r\u00f3wne, a tanie serwa dlatego s\u0105 w\u0142a\u015bnie tanie, bo nie trzymaj\u0105 si\u0119 \u015bci\u015ble tym teoretycznym wymogom. Okazuje si\u0119, \u017ce pozycja STOP jest &#8222;gdzie\u015b w okolicy&#8221; sygna\u0142u 1500. Obroty w prawo i w lewo te\u017c nie s\u0105 r\u00f3wne &#8211; pomimo r\u00f3wnego odej\u015bcia od pozycji STOP. Na poni\u017cszym wykresie wida\u0107, \u017ce odej\u015bcie wype\u0142nieniem PWM o 100 us skutkuje pr\u0119dko\u015bci\u0105 117 rmp (warto\u015b\u0107 1600 us) oraz 99 rpm (warto\u015b\u0107 1400 us). Wykres nie jest idealnie symetryczny wzgl\u0119dem osi x=1500.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"384\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/04\/serwo2-1.png\" alt=\"\" class=\"wp-image-2871\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/04\/serwo2-1.png 640w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/04\/serwo2-1-300x180.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Wyniki pomiar\u00f3w pierwszego przebiegu testu pr\u0119ko\u015bci. Pomiar trwa 1s a sygna\u0142 PWM zmienia wype\u0142nienie co 50 us.<\/figcaption><\/figure>\n\n\n\n<p>Oczywi\u015bcie jeden pomiar to za ma\u0142o, wi\u0119c procedura zosta\u0142a powt\u00f3rzona dla kolejnych przebieg\u00f3w, a wyniki zapisane w kolejnych plikach tekstowych. Wniosek &#8211; rezultaty s\u0105 powtarzalne.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/serwo3.png\" alt=\"\" class=\"wp-image-2872\" width=\"640\" height=\"384\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/serwo3.png 640w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/serwo3-300x180.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Kolejne pomiary tego samego serwa &#8211; wyniki s\u0105 ca\u0142kiem powtarzalne.<\/figcaption><\/figure>\n\n\n\n<p>Maj\u0105c wi\u0119cej pomiar\u00f3w, mo\u017cna policzy\u0107 odchylenie standardowe i doda\u0107 s\u0142upki b\u0142\u0119d\u00f3w&#8230; ale nie przesadzajmy \ud83d\ude09 Dla pewno\u015bci pomiar\u00f3w jeden raz dwukrotnie zwi\u0119kszyli\u015bmy czas zliczania pr\u0119dko\u015bci (czyli dla ka\u017cdej warto\u015bci wype\u0142nienia czekamy 2s i zliczamy impulsy) &#8211; wyniki s\u0105 zgodne.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"384\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/serwo4.png\" alt=\"\" class=\"wp-image-2873\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/serwo4.png 640w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/serwo4-300x180.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Poprzednie pomiary plus nowa seria &#8211; pomiar 2s dla ka\u017cdego wype\u0142nienia.<\/figcaption><\/figure>\n\n\n\n<p><strong>Wnioski: <\/strong><br>1) pr\u0119dko\u015b\u0107 nie ro\u015bnie liniowo ze zmian\u0105 wype\u0142nienia sygna\u0142u steruj\u0105cego, <br>2) STOP dla serwa jest &#8222;gdzie\u015b&#8221; w okolicach 1500 us, ale drobna zmiana sygna\u0142u mo\u017ce ju\u017c poruszy\u0107 serwo w jednym kierunku, podczas gdy ta sama warto\u015b\u0107 wype\u0142nienia nie wystarczy by ruszy\u0107 serwo w przeciwnym kierunku,<br>3) pr\u0119dko\u015b\u0107 nasyca si\u0119 oko\u0142o ~200 us warto\u015bci skrajnych (1000-1200 us -&gt; prawie jedna warto\u015b\u0107 pr\u0119dko\u015bci, tak samo jak 1800-2000 us),<br>4) ruch w lewo i prawo nie jest symetryczny.<\/p>\n\n\n\n<p><strong>Dalsze prace:<\/strong><br>Mo\u017cna kontynuowa\u0107 spraw\u0119 testowania serw, poddaj\u0105c tym samym pr\u00f3bom inny egzemplarz tego samego serwa &#8211; aby przekona\u0107 si\u0119, czy widoczne tu zachowanie jest typowe dla ka\u017cdego serwa, czy jednak trafi\u0142o si\u0119 nam wyj\u0105tkowy egzemplarz a inne s\u0105 inne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">gnuplot<\/h2>\n\n\n\n<p>Do stworzenia wykres\u00f3w &#8222;na szybko&#8221; wykorzysta\u0142em program <strong><a rel=\"noreferrer noopener\" href=\"http:\/\/www.gnuplot.info\/\" target=\"_blank\">gnuplot<\/a><\/strong> &#8211; \u015bwietny w takich sytuacjach (wykresy na szybko, dane z numeryki, dane z Arduino). &#8222;Surowe&#8221; dane wypisywane w oknie <em>Monitora porta szeregowego<\/em> wygl\u0105da\u0142y nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Servo: 1200 Predkosc: 163.00\nServo: 1250 Predkosc: 160.00\nServo: 1300 Predkosc: 141.00\nServo: 1350 Predkosc: 124.00\nServo: 1400 Predkosc: 99.00\nServo: 1450 Predkosc: 8.00\nServo: 1500 Predkosc: 0.00\nServo: 1550 Predkosc: 87.00\nServo: 1600 Predkosc: 177.00\nServo: 1650 Predkosc: 134.00<\/pre>\n\n\n\n<p>Wystarczy przekopiowa\u0107 te dane do pliku tekstowego (np. serwo.txt) a nast\u0119pnie uruchomi\u0107 <strong>gnuplot<\/strong> i wyda\u0107 polecenie wykresu danych z pliku:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>plot 'serwo.txt&#8217; using 2:4<\/li><\/ul>\n\n\n\n<p>Polecenie to ka\u017ce wykorzysta\u0107 plik 'serwo.txt&#8217; oraz kolumn\u0119 <strong>2<\/strong> dla x-\u00f3w, kolumn\u0119 <strong>4<\/strong> dla warto\u015bci y-k\u00f3w. Jak wida\u0107 nie trzeba kopiowa\u0107 danych do arkusza kalkulacyjnego, usuwa\u0107 niepotrzebne napisy (tutaj: &#8222;Servo:&#8221;, &#8222;Predkosc:&#8221;) czy te\u017c tworzy\u0107 wykres z zaznaczonych tam kom\u00f3rek. Wystarczy pos\u0142u\u017cy\u0107 si\u0119 prost\u0105 komend\u0105 <strong>plot<\/strong> podaj\u0105c kolumny do wykorzystania (dyrektywa <strong>using<\/strong>).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"674\" height=\"482\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/gnuplot-serwa.png\" alt=\"\" class=\"wp-image-2877\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/gnuplot-serwa.png 674w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/gnuplot-serwa-300x215.png 300w\" sizes=\"auto, (max-width: 674px) 100vw, 674px\" \/><figcaption>gnuplot w akcji &#8211; druga widoczna komenda rysuje dwie krzywe (z dw\u00f3ch plik\u00f3w) jednocze\u015bnie na jednym wykresie.<\/figcaption><\/figure><\/div>\n\n\n\n<p>Gnuplot ma<a href=\"http:\/\/www.gnuplotting.org\/\" target=\"_blank\" rel=\"noreferrer noopener\"> bardzo du\u017co mo\u017cliwo\u015bci <\/a>&#8211; ale tutaj wspomn\u0119 tylko o <strong>s\u0142upkach b\u0142\u0119d\u00f3w<\/strong> &#8211; gdyby by\u0142y gdzie\u015b w pliku, np. w si\u00f3dmej kolumnie, to by wystarczy\u0142o wpisa\u0107 nast\u0119puj\u0105ce polecenie do ich wy\u015bwietlenia:<\/p>\n\n\n\n<p>plot 'serwo2.txt&#8217; using 2:4:<strong>7 with yerror<\/strong><\/p>\n\n\n\n<p>ale c\u00f3\u017c &#8211; my nie mamy si\u00f3dmej kolumny&#8230; zamiast tego niech wykre\u015blone b\u0119d\u0105 10% b\u0142\u0119dy, czyli ponownie wykorzystamy czwart\u0105 kolumn\u0119, dziel\u0105c j\u0105 przez 10:<\/p>\n\n\n\n<p>plot 'serwo2.txt&#8217; using 2:4:<strong>($4\/10)<\/strong> with yerror<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"492\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/gnuplot-serwa1.png\" alt=\"\" class=\"wp-image-2887\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/gnuplot-serwa1.png 660w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/gnuplot-serwa1-300x224.png 300w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><figcaption>gnuplot ze s\u0142upkami b\u0142\u0119d\u00f3w na osi y (<strong>with yerror<\/strong>). Komenda plot 'serwo2.txt&#8217; using 2:4:($4\/10) with yerror<\/figcaption><\/figure>\n\n\n\n<p>A mo\u017ce s\u0142upki na osi x i y? czemu nie!<\/p>\n\n\n\n<p>plot 'serwo2.txt&#8217; using 2:4:($2\/50):($4\/10) with <strong>xyerror<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"384\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/gnuplot-serwa3.png\" alt=\"\" class=\"wp-image-2888\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/gnuplot-serwa3.png 640w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/gnuplot-serwa3-300x180.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>No i powsta\u0142a dygresja o gnuplocie&#8230; \ud83d\ude09<\/p>\n\n\n\n<p class=\"has-text-align-right\">(c) K.G. 2021<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wojny robot\u00f3w Pan Rafa\u0142 przygotowuje drugi pojazd do pracy + co\u015b tam programuje ze sterowaniem&#8230; Pewnie w nast\u0119pnym tygodniu zobaczymy efekty tej pracy. Por\u00f3wnamy te\u017c sklepowe ko\u0142a z naszymi &#8211; wydrukowanymi w 3D. Pr\u0119dko\u015b\u0107 serw Pan Tomasz wykorzysta\u0142 sw\u00f3j uk\u0142ad mierz\u0105cy liczb\u0119 obrot\u00f3w na minut\u0119 do zbadania zale\u017cno\u015bci zmiany tej pr\u0119dko\u015bci od wype\u0142nienia sygna\u0142u steruj\u0105cego [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":2873,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[422,409,408,71,307],"class_list":{"0":"post-2832","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-fibot","8":"tag-gnuplot","9":"tag-predkosc","10":"tag-rpm","11":"tag-serwo","12":"tag-wojny","14":"post-with-thumbnail","15":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/2832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2832"}],"version-history":[{"count":10,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/2832\/revisions"}],"predecessor-version":[{"id":2889,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/2832\/revisions\/2889"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/2873"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}