{"id":9159,"date":"2020-04-29T18:41:43","date_gmt":"2020-04-29T16:41:43","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=9159"},"modified":"2025-05-07T11:56:22","modified_gmt":"2025-05-07T09:56:22","slug":"dmi-robot-wersja-druga-po-liftingu","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/dmi-robot-wersja-druga-po-liftingu\/","title":{"rendered":"DMI Robot \u2013 wersja druga \u201epo liftingu\u201d"},"content":{"rendered":"\n<p>DMI Robot jest urz\u0105dzeniem, kt\u00f3re zosta\u0142o zbudowane na potrzeby automatyzacji test\u00f3w ekran\u00f3w dotykowych. Dotychczas testy wykonywane by\u0142y manualnie i polega\u0142y na aktywacji odpowiednich kontrolek pojawiaj\u0105cych si\u0119 na ekranie w danym momencie, zgodnie ze scenariuszem testowym. Zadaniem testera by\u0142a odpowiednia reakcja na pojawiaj\u0105ce si\u0119 zdarzenia. Automatyzacja test\u00f3w polegaj\u0105ca na wpi\u0119ciu si\u0119 mi\u0119dzy magistral\u0119 komunikacyjn\u0105 systemu a wy\u015bwietlacz nie by\u0142a mo\u017cliwa, z powodu wymaga\u0144 bezpiecze\u0144stwa. Dzia\u0142o si\u0119 tak, poniewa\u017c wy\u015bwietlacz jest urz\u0105dzeniem ko\u0144cowym, kt\u00f3re informuje operatora o stanie pracy systemu. Dlatego przechwytywanie informacji bezpo\u015brednio z magistrali, w tym przypadku, mog\u0142oby spowodowa\u0107, \u017ce test zosta\u0142by zaliczony, mimo np. uszkodzonego wy\u015bwietlacza. Urz\u0105dzenie to symuluje zatem operatora wy\u015bwietlacza.<\/p>\n\n\n\n<p>Pierwsza, <a href=\"https:\/\/forbot.pl\/blog\/robot-z-raspberry-pi-ktory-zautomatyzowal-testy-pociagow-id29128\" rel=\"nofollow\" >prototypowa wersja DMI Robota<\/a> wymaga\u0142a ulepsze\u0144, kt\u00f3re przedstawione s\u0105 ju\u017c na poni\u017cszym wideo.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Zobacz nowego robota DMI w akcji \/ See a new DMI robot in action\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/QtobnNN0Tvw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Modyfikacje prototypu<\/h2>\n\n\n\n<p>DMI Robot doczeka\u0142 si\u0119 drugiej wersji. Opisane poni\u017cej zmiany, kt\u00f3re zosta\u0142y wprowadzone do pierwotnej wersji urz\u0105dzenia, wynikaj\u0105 bezpo\u015brednio z analizy pracy pierwszego prototypu.<\/p>\n\n\n\n<p>Urz\u0105dzenie sta\u0142o si\u0119 mniejsze, mimo zwi\u0119kszonego obszaru roboczego. Zmienili\u015bmy po\u0142o\u017cenie silnik\u00f3w nap\u0119dowych g\u0142owicy, kt\u00f3re zosta\u0142y umieszczone w korpusie robota z ty\u0142u p\u0142yty g\u0142\u00f3wnej. Zmiana ta pozwoli\u0142a na \u0142atwiejsze zarz\u0105dzanie przestrzeni\u0105 wok\u00f3\u0142 robota.<\/p>\n\n\n\n<p>Podobny zabieg zastosowali\u015bmy dla ramienia kamery. W pierwszej wersji prototypu rami\u0119 znajdowa\u0142o si\u0119 na zewn\u0119trznej, bocznej \u015bciance urz\u0105dzenia. Aktualnie rami\u0119 kamery znajduje si\u0119 w obrysie bry\u0142y urz\u0105dzenia. Spos\u00f3b wykonania oraz sterowania r\u00f3wnie\u017c uleg\u0142 zmianie. Rami\u0119 porusza si\u0119 liniowo tzn. w g\u00f3r\u0119 i d\u00f3\u0142 za pomoc\u0105 \u015bruby trapezowej. Dla przypomnienia, w poprzedniej wersji prototypu ruch ramienia odbywa\u0142 si\u0119 po okr\u0119gu za pomoc\u0105 serwomechanizm\u00f3w. Zastosowanie \u015bruby trapezowej zredukowa\u0142o koszt oraz znacznie zwi\u0119kszy\u0142o precyzj\u0119 oraz powtarzalno\u015b\u0107 po\u0142o\u017cenia.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-2.png\"><img decoding=\"async\" width=\"1366\" height=\"768\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-2.png\" alt=\"\" class=\"wp-image-9186\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-2.png 1366w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-2-300x169.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-2-1024x576.png 1024w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/figure>\n\n\n\n<p>G\u0142owica z rysikiem z racji pe\u0142nionej funkcji zosta\u0142a r\u00f3wnie\u017c przeprojektowana. Zmniejszyli\u015bmy jej rozmiar oraz wysun\u0119li\u015bmy rysik poza g\u0142owic\u0119, poprawiaj\u0105c tym samym widoczno\u015b\u0107 na ekranie z perspektywy kamery. Ca\u0142kowicie odmiennie rozwi\u0105zali\u015bmy zasilanie g\u0142owicy. Podczas u\u017cytkowania pierwszego prototypu okaza\u0142o si\u0119, \u017ce przew\u00f3d zasilaj\u0105cy jest do\u015b\u0107 problematyczny dla operatora, poniewa\u017c w niekt\u00f3rych przypadkach zas\u0142ania\u0142 widok. Odpowiednie prowadzenie przewodu zasilaj\u0105cego stanowi\u0142o wyzwanie ze wzgl\u0119du na jego d\u0142ugo\u015b\u0107 i dost\u0119pno\u015b\u0107 w ka\u017cdym po\u0142o\u017ceniu g\u0142owicy. Aktualne rozwi\u0105zanie postanowili\u015bmy zrealizowa\u0107, bazuj\u0105c na pr\u0119tach pozycjonuj\u0105cych. To w\u0142a\u015bnie w nich przekazywane jest zasilanie do cewki rysika.<\/p>\n\n\n\n<p>Urz\u0105dzenie dodatkowo wzbogacone zosta\u0142o o wy\u015bwietlacz LCD, kt\u00f3ry pe\u0142ni funkcj\u0119 informacyjn\u0105 (np. wy\u015bwietla adres IP urz\u0105dzenia).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI.png\"><img decoding=\"async\" width=\"1915\" height=\"1071\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI.png\" alt=\"\" class=\"wp-image-9185\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI.png 1915w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-300x168.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-1024x573.png 1024w\" sizes=\"(max-width: 1915px) 100vw, 1915px\" \/><\/a><\/figure>\n\n\n\n<p>Przeprojektowaniu uleg\u0142 r\u00f3wnie\u017c spos\u00f3b pracy z robotem. Urz\u0105dzenie mo\u017ce by\u0107 wykorzystywane przez system testowy podczas automatycznych test\u00f3w oraz jako urz\u0105dzenie do pracy manualnej. Wprowadzili\u015bmy przejrzysty schemat pracy z urz\u0105dzeniem. W tej chwili statusy pracy urz\u0105dzenia s\u0105 ustalone i sygnalizowane przez wbudowane o\u015bwietlenie LED. Przej\u015bcia pomi\u0119dzy kolejnymi stanami pracy s\u0105 nadzorowane i ukierunkowane na bezpiecze\u0144stwo ludzi znajduj\u0105cych si\u0119 w bezpo\u015brednim otoczeniu robota.<\/p>\n\n\n\n<p>Elektronik\u0119 urz\u0105dzenia przeprojektowali\u015bmy w taki spos\u00f3b, aby u\u0142atwi\u0107 jego serwisowanie. W nowej wersji robota obw\u00f3d drukowany zosta\u0142 powi\u0119kszony, a zaciski do podzespo\u0142\u00f3w umieszczone na zewn\u0119trznych stronach p\u0142ytki. W przeciwie\u0144stwie do poprzedniej wersji obwodu, kt\u00f3ry by\u0142 nak\u0142adk\u0105 na Raspberry Pi 3, nowa p\u0142ytka jest komponentem zamontowanym poza mikrokomputerem.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-3.png\"><img decoding=\"async\" width=\"1366\" height=\"768\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-3.png\" alt=\"\" class=\"wp-image-9187\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-3.png 1366w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-3-300x169.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot-3-1024x576.png 1024w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/a><\/figure>\n\n\n\n<p>Wej\u015bcia oraz wyj\u015bcia zosta\u0142y zmienione zgodnie z zapotrzebowaniem, m.in. wyeliminowali\u015bmy linie&nbsp;serwomechanizmu kamery, kt\u00f3re zamienili\u015bmy na linie niezb\u0119dne do sterowania silnikiem krokowym i obs\u0142ug\u0119 enkodera. Do istotnych zmian nale\u017cy r\u00f3wnie\u017c modyfikacja sposobu sterowania cewk\u0105 rysika. Zrealizowali\u015bmy je za pomoc\u0105 sterowanego \u017ar\u00f3d\u0142a pr\u0105dowego, kt\u00f3re w stanach ustalonych redukuje zak\u0142\u00f3cenia. Poprzednie rozwi\u0105zanie bazowa\u0142o na sygnale PWM.<\/p>\n\n\n\n<p>Do\u015b\u0107 nietypowym rozwi\u0105zaniem, kt\u00f3re wprowadzili\u015bmy, jest brak mo\u017cliwo\u015bci wy\u0142\u0105czenia urz\u0105dzenia w spos\u00f3b programowy (wy\u0142\u0105cznie przycisk mechaniczny). Funkcjonalno\u015b\u0107 t\u0119 wyeliminowali\u015bmy ze wzgl\u0119du na ch\u0119\u0107 zapewnienia wi\u0119kszej dost\u0119pno\u015bci urz\u0105dzenia w fabrykach np. na wypadek zaniku zasilania lub przy przypadkowym wy\u0142\u0105czeniu urz\u0105dzenia (zdalnym lub fizycznym). Konsumpcja energii w czasie spoczynku nie zwi\u0119kszy\u0142a si\u0119, poniewa\u017c wszystkie urz\u0105dzenia, kt\u00f3re pobieraj\u0105 wi\u0119ksz\u0105 moc, s\u0105 wy\u0142\u0105czane. Jakakolwiek akcja, czy to ruch g\u0142owicy, czy pod\u015bwietlenie, powoduje uruchomienie zasilacza.<\/p>\n\n\n\n<p>Wprowadzili\u015bmy r\u00f3wnie\u017c zmiany do obudowy elektroniki, kt\u00f3ra obecnie jest wi\u0119ksza, u\u0142o\u017cona poziomo z ty\u0142u robota. Zmiany wymiar\u00f3w wp\u0142yn\u0119\u0142y pozytywnie na wentylacj\u0119 obudowy, obni\u017caj\u0105c temperatur\u0119 pracy. Dodatkowo zyskali\u015bmy wi\u0119cej miejsca na prowadzenie przewod\u00f3w.<\/p>\n\n\n\n<p>Usprawnienia i modyfikacje wprowadzili\u015bmy tak\u017ce w oprogramowaniu. W sk\u0142ad oprogramowania wchodzi firmware, znajduj\u0105cy si\u0119 na mikrokontrolerze na zaprojektowanym PCB, oraz cz\u0119\u015b\u0107 wysokopoziomowa uruchomiona na Raspberry Pi 3. Firmware zrealizowali\u015bmy za pomoc\u0105 j\u0119zyka C z wykorzystaniem koncepcji bare metal. Program bazuje g\u0142\u00f3wnie na przerwaniach oraz sprz\u0119cie takim jak np. timery do obs\u0142ugi encoder\u00f3w, PWM, I2C, itd. Dzi\u0119ki poprzedniej wersji i przeprowadzonym testom, wyeliminowali\u015bmy zidentyfikowane b\u0142\u0119dy, dzi\u0119ki czemu firmware jest stabilniejszy. Podczas prac nad oprogramowaniem sterownika robota, wprowadzili\u015bmy dodatkowe funkcjonalno\u015bci zwi\u0105zane bezpo\u015brednio z dodatkowym sprz\u0119tem, takim jak LCD czy pod\u015bwietlenie RGB. Dodatkowo, udoskonalili\u015bmy algorytmy sterowania ruchem g\u0142owicy, detekcji kolizji oraz zarz\u0105dzania energi\u0105, a ABI firmware\u2019u wzbogaci\u0142o si\u0119 o nowe funkcjonalno\u015bci do obs\u0142ugi wy\u017cej wymienionych urz\u0105dze\u0144. W zwi\u0105zku z szeregiem wprowadzonych zmian, wersja najnowsza i prototypowa nie s\u0105 ze sob\u0105 kompatybilne.<\/p>\n\n\n\n<p>Oprogramowanie znajduj\u0105ce si\u0119 na mikrokomputerze Raspberry Pi 3 jest zrealizowane w wi\u0119kszo\u015bci przy u\u017cyciu j\u0119zyka programowania Python 3. Zastosowali\u015bmy architektur\u0119 typu klient-serwer, kt\u00f3ra umo\u017cliwi\u0142a nam stworzenie odr\u0119bnych modu\u0142\u00f3w komunikuj\u0105cych si\u0119 ze sob\u0105 za pomoc\u0105 slot\u00f3w. Takie rozwi\u0105zanie niesie ze sob\u0105 benefit zwi\u0105zany z tworzeniem oprogramowania w spos\u00f3b rozproszony. Inaczej m\u00f3wi\u0105c, poszczeg\u00f3lne modu\u0142y aplikacji mog\u0105 by\u0107 zrealizowane przy u\u017cyciu dowolnego j\u0119zyka programowania nawet jako samodzielne programy. Architektura ta okaza\u0142a si\u0119 pomocna w przypadku gotowych, dost\u0119pnych w repozytorium program\u00f3w, kt\u00f3re w oczywisty spos\u00f3b nie mog\u0142y si\u0119 komunikowa\u0107 z reszt\u0105 aplikacji. Na ich potrzeby by\u0142y tworzone wrappery, kt\u00f3re t\u0142umaczy\u0142y polecenia aplikacji na specyficzne parametry dla danego programu.<\/p>\n\n\n\n<p>Aplikacja jest odpowiedzialna za zapewnienie komunikacji robota ze \u015bwiatem za pomoc\u0105 po\u0142\u0105czenia TCP\/IP przy pomocy protoko\u0142u ATP oraz za pomoc\u0105 serwera webowego. Protok\u00f3\u0142 ATP zosta\u0142 zaprojektowany na potrzeby maszyn testuj\u0105cych przez klienta, w celu ujednolicenia kontroli na tego typu urz\u0105dzeniach. Natomiast interfejs webowy s\u0142u\u017cy do pracy manualnej, ale zdalnej. Opr\u00f3cz wy\u017cej wymienionych modyfikacji, aplikacja zosta\u0142a wyposa\u017cona w tryby pracy takie jak: stan bezczynno\u015bci, praca manualna, praca zdalna. Tryby te znacznie u\u0142atwiaj\u0105 prac\u0119 z robotem, a ponadto informuj\u0105 osoby, kt\u00f3re znajduj\u0105 si\u0119 w okolicy, w jakim trybie pracy jest urz\u0105dzenie. Obecnie sygnalizacja odbywa si\u0119 za pomoc\u0105 kolor\u00f3w pod\u015bwietlenia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Niespodziewane wyzwania<\/h2>\n\n\n\n<p>Najwi\u0119kszymi wyzwaniami, z kt\u00f3rymi si\u0119 zmierzyli\u015bmy, a kt\u00f3re na pierwszy rzut oka wydawa\u0142y si\u0119 banalne, by\u0142o rami\u0119 kamery oraz przekazywanie pr\u0105du do g\u0142owicy za pomoc\u0105 pr\u0119t\u00f3w pozycjonuj\u0105cych.<\/p>\n\n\n\n<p>W przypadku ramienia kamery, trudno\u015bci\u0105 by\u0142o wykonanie mocowania o odpowiedniej sztywno\u015bci. Nawet minimalne ruchy pojawiaj\u0105ce si\u0119 w uchwycie powodowa\u0142y znaczne odchylenia na kamerze. Ruchy te by\u0142y spowodowane niedoskona\u0142o\u015bciami wykorzystanych element\u00f3w. Wystarczy\u0142o lekkie wypaczenie \u015bruby trapezowej, \u017ceby podczas zmiany pozycji uchwytu zaobserwowa\u0107 ruch kamery na boki. Problem ten uczuli\u0142 nas na nawet minimalne niedoskona\u0142o\u015bci komponent\u00f3w. W wielu przypadkach nie przynosz\u0105 \u017cadnych negatywnych efekt\u00f3w, ale w szczeg\u00f3lnych rozwi\u0105zaniach mog\u0105 stanowi\u0107 powa\u017cny problem.<\/p>\n\n\n\n<p>Podobnie by\u0142o z przekazywaniem pr\u0105du do g\u0142owicy. W teorii wystarczy\u0142o zastosowa\u0107 szczotki grafitowe, niestety rzeczywisto\u015b\u0107 szybko to zweryfikowa\u0142a. W celu poprawy styku i zwi\u0119kszenia pewno\u015bci dzia\u0142ania, zastosowali\u015bmy dwukrotnie wi\u0119cej szczotek ni\u017c pocz\u0105tkowo zak\u0142adali\u015bmy. Mimo to, pierwsza pr\u00f3ba okaza\u0142a si\u0119 nieudana. Po analizie problemu okaza\u0142o si\u0119, \u017ce zastosowane szczotki grafitowe nie nadaj\u0105 si\u0119 do tego z powodu zbyt du\u017cych spadk\u00f3w napi\u0119cia. Kolejnym pomys\u0142em, bardziej skutecznym by\u0142o zastosowanie szczotek metalowych. Nie by\u0142o to jednak rozwi\u0105zanie idealne, poniewa\u017c po pewnym czasie nast\u0119powa\u0142a korozja materia\u0142u, kt\u00f3ra przyczyni\u0142a si\u0119 do zwi\u0119kszenia rezystancji. Robot co prawda klika\u0142, ale si\u0142a nacisku z czasem s\u0142ab\u0142a. Aktualnie pracujemy nad kolejnym rozwi\u0105zaniem dotycz\u0105cym szczotek, planujemy wykorzystanie grafitowych metalizowanych. Obecnie po\u0142\u0105czenie jest znacznie pewniejsze, a rezystancja por\u00f3wnywalna ze szczotkami metalowymi. Czas poka\u017ce, jak to rozwi\u0105zanie si\u0119 sprawdzi.<\/p>\n\n\n\n<p>Jak wida\u0107, to co na etapie projektowania wydawa\u0142o si\u0119 zasadne, pewne i proste, w rzeczywisto\u015bci okaza\u0142o si\u0119 znacznie trudniejsze. Trudno\u015b\u0107 ta wynika z faktu, \u017ce zastosowane rozwi\u0105zania musz\u0105 by\u0107 niezawodne przez d\u0142ugi okres, co powoduje, \u017ce rzeczy pozornie nieskomplikowane staj\u0105 si\u0119 nieraz z\u0142o\u017conym wyzwaniem. Wed\u0142ug nas na tym w\u0142a\u015bnie polega prototypowanie \u2013 poszukiwaniu rozwi\u0105za\u0144 przez wymy\u015blanie i badanie r\u00f3\u017cnych wariant\u00f3w, a\u017c do uzyskania zadawalaj\u0105cych wynik\u00f3w.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;9159&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;4&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 4)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;DMI Robot \u2013 wersja druga \u201epo liftingu\u201d&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 4)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>DMI Robot jest urz\u0105dzeniem, kt\u00f3re zosta\u0142o zbudowane na potrzeby automatyzacji test\u00f3w ekran\u00f3w dotykowych. Dotychczas testy wykonywane by\u0142y manualnie i polega\u0142y &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/dmi-robot-wersja-druga-po-liftingu\/\">Continued<\/a><\/p>\n","protected":false},"author":248,"featured_media":9190,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1316],"tags":[1512,563,911],"class_list":["post-9159","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-miekko","tag-poradnik","tag-embedded","tag-robot-dmi"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2020\/04\/DMI-robot.jpg","category_names":["Development na mi\u0119kko"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/9159"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/248"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=9159"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/9159\/revisions"}],"predecessor-version":[{"id":25088,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/9159\/revisions\/25088"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/9190"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=9159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=9159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=9159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}