{"id":25360,"date":"2025-12-17T12:07:51","date_gmt":"2025-12-17T11:07:51","guid":{"rendered":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?p=25360"},"modified":"2026-01-06T12:14:00","modified_gmt":"2026-01-06T11:14:00","slug":"robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow","status":"publish","type":"post","link":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/","title":{"rendered":"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w"},"content":{"rendered":"\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong><strong>Dzi\u0119ki temu poradnikowi dowiesz si\u0119, jak przy u\u017cyciu j\u0119zyka programowania Python napisa\u0107 program generuj\u0105cy trajektori\u0119 robota edukacyjnego Astorino Kawasaki na podstawie zadanych mu obraz\u00f3w. Napisany kod komunikuje si\u0119 z robotem korzystaj\u0105c z RTC (Real Time Control), pozwalaj\u0105c &nbsp;na sterowanie w czasie rzeczywistym. Aplikacja ma za zadanie namalowa\u0107 kontury analizowanego zdj\u0119cia. Po przetestowaniu w warunkach bezpiecznych stanowisko zostanie zaimplementowane w rzeczywisto\u015bci i poddane weryfikacji.<\/strong><\/strong><\/p>\n\n\n\n<p>Przybli\u017cony czas wykonywania aplikacji:<\/p>\n\n\n\n<p>Symulacja: 45 min<\/p>\n\n\n\n<p>Robot: 30 min<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">1. Potrzebne urz\u0105dzenia oraz oprogramowanie<\/h2>\n\n\n\n<p>W celu wykonania aplikacji potrzebne elementy to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Robot Astorino Kawasaki wraz z oprogramowaniem.<\/li>\n\n\n\n<li>AstorinoIDE.<\/li>\n\n\n\n<li>SimBox.<\/li>\n\n\n\n<li>Aerograf.<\/li>\n\n\n\n<li>Farby odpowiednie do malowania aerografem.<\/li>\n\n\n\n<li>Wydrukowany uchwyt na aerograf.<\/li>\n\n\n\n<li>Rozcie\u0144czalnik do farb (najlepiej nie toksyczny).<\/li>\n\n\n\n<li>Kompresor z przewodem pneumatycznym.<\/li>\n\n\n\n<li>Komputer PC lub laptop z systemem operacyjnym Windows.<\/li>\n\n\n\n<li>IDE (zintegrowane \u015brodowisko) obs\u0142uguj\u0105ce j\u0119zyk programowania Python (w tym projekcie zosta\u0142 u\u017cyty program PyCharm Community Edition).<\/li>\n\n\n\n<li>Biblioteki:<ul><li>Astorino-python-lib<\/li><\/ul><ul><li>Matplotlib<\/li><\/ul><ul><li>Opencv-python<\/li><\/ul>\n<ul class=\"wp-block-list\">\n<li>Numpy<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">2. Analiza obraz\u00f3w<\/h2>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.1 Zapis i odczyt obrazu<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Na potrzeby wygodnego korzystania ze stanowiska, zosta\u0142a zaimplementowana mo\u017cliwo\u015b\u0107 zapisywania zdj\u0119\u0107 prosto z kamery urz\u0105dzenia. Kod funkcji pomocniczej realizuj\u0105cej zapis obrazu:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>def capture_webcam_image(output_filename=\"captured_image.jpg\"):\n    try:\n        # Dost\u0119p do kamerki\n        cap = cv2.VideoCapture(0)  # 0 lub 1 - wbudowana kamerka\n        # 1,2... - dodatkowe kamerki podpi\u0119te do urz\u0105dzenia\n        if not cap.isOpened():\n            raise IOError(\"Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z kamerk\u0105.\")\n        while True:\n            ret, frame = cap.read()\n            if not ret:\n                raise IOError(\"B\u0142\u0105d odczytu z kamerki.\")\n\n            # podgl\u0105d obrazu na \u017cywo\n            cv2.imshow(\"Spacja - zapis obrazu, ESC - anulowanie zapisu\", frame)\n            key = cv2.waitKey(1) &amp; 0xFF\n            if key == 27:  # klawisz ESC\n                print(\"Nie zapisano obrazu\")\n                break\n            elif key == 32:  # spacja\n                cv2.imwrite(output_filename, frame)\n                print(f\"Obraz zapisany jako: '{output_filename}'\")\n                break\n        cap.release()\n        cv2.destroyAllWindows()\n\n    except Exception as e:\n        print(f\"Error: {e}\")<\/code><\/pre>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W przypadku gdy nie chcemy u\u017cy\u0107 naszej kamery do zapisywania obrazu, mo\u017cemy bezpo\u015brednio do folderu z naszym projektem wgra\u0107 plik graficzny z rozszerzeniem <strong>.jpg<\/strong>. Wa\u017cne jest jednak, \u017ceby pami\u0119ta\u0107 jego nazw\u0119 w p\u00f3\u017aniejszym etapie programu.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.2 Przygotowanie obrazu pod analiz\u0119<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W pierwszej kolejno\u015bci potrzebujemy <strong>przewymiarowa\u0107 nasze zdj\u0119cie<\/strong>, poniewa\u017c w projekcie za\u0142o\u017cono, \u017ce jeden piksel odpowiada 1mm w rzeczywisto\u015bci. Z tego powodu potrzebne zadanie obrazowi nowych wymiar\u00f3w, zale\u017cnych od tego, jak du\u017cy ma by\u0107 obraz namalowany przez robota. Dodatkowo, aby zmniejszy\u0107 poziom skomplikowania analizy obraz\u00f3w, nale\u017cy zmieni\u0107 palet\u0119 kolor\u00f3w z RGB na skal\u0119 szaro\u015bci (warto\u015bci poziomu szaro\u015bci od 0 do 255).<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>image = cv2.imread(input_path)\nimage_resized = cv2.resize(image, (target_width, target_height))\nimage_gray = cv2.cvtColor(image_resized, cv2.COLOR_BGR2GRAY)<\/code><\/pre>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.3 Wst\u0119pna analiza obrazu<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Warto zaznaczy\u0107, \u017ce istnieje mo\u017cliwo\u015b\u0107 namalowania obrazu przy pomocy robota w kolorze, jednak\u017ce by\u0142by to proces niezwykle czasoch\u0142onny, skomplikowany i kosztowny. Z tego te\u017c powodu w naszym przypadku u\u017cyjemy tylko jednego koloru, aby przenie\u015b\u0107 zdj\u0119cie na p\u0142\u00f3tno. Odb\u0119dzie si\u0119 to przy malowaniu jedynie kontur\u00f3w (troch\u0119 jak szkic bez cieniowania). Trzeba wi\u0119c w jaki\u015b spos\u00f3b wykry\u0107 wszystkie interesuj\u0105ce nas kontury na obrazie.<\/p>\n\n\n\n<p>Aby by\u0142o to mo\u017cliwe, konieczne jest <strong>progowanie<\/strong>. Polega ono na przyj\u0119ciu dla konkretnego zdj\u0119cia progu jasno\u015bci, a nast\u0119pnie przypisaniu konkretnym pikselom warto\u015bci 0 lub 1, zale\u017cnie od tego, czy s\u0105 one ja\u015bniejsze, czy ciemniejsze od zadanego progu (threshold). Na takim zdj\u0119ciu jeste\u015bmy w stanie w prosty spos\u00f3b wykry\u0107 poszczeg\u00f3lne kontury, a nast\u0119pnie odfiltrowa\u0107 te niechciane (pojedyncze losowe kontury wynikaj\u0105ce z szum\u00f3w).<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>thresh = cv2.adaptiveThreshold(\n    image_gray, 255,\n    cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\n    cv2.THRESH_BINARY_INV,\n    block_size, C\n)\n\ncontours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)\nfiltered = &#091;cnt for cnt in contours if cv2.contourArea(cnt) &gt; max(1, min_area)]\n\nclean = np.zeros_like(image_gray)\ncv2.drawContours(clean, filtered, -1, 255, 1)\ncv2.imshow(\"Edges\", clean)<\/code><\/pre>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Wyja\u015bnienie wsp\u00f3\u0142czynnik\u00f3w:<\/p>\n\n\n\n<p><strong>block_size<\/strong> \u2013 rozmiar obszaru wok\u00f3\u0142 piksela branego do obliczania wyniku dla poszczeg\u00f3lnych pikseli.<\/p>\n\n\n\n<p><strong>C<\/strong> \u2013 sta\u0142a warto\u015b\u0107 dodawana do obliczanej \u015bredniej.<\/p>\n\n\n\n<p><strong>min_area<\/strong> \u2013 minimalny rozmiar (liczba element\u00f3w) konturu wymagana, aby wykry\u0107 go w finalnym zestawie kontur\u00f3w. Pomaga w usuwaniu niechcianych kontur\u00f3w z t\u0142a.<\/p>\n\n\n\n<p>Uwaga: wi\u0119ksze warto\u015bci <strong>min_area<\/strong> powoduj\u0105 usuni\u0119cie detali takich, jak rysy twarzy i w\u0142osy.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"298\" height=\"299\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image2.png\" alt=\"\" class=\"wp-image-25368\"\/><figcaption class=\"wp-element-caption\"><em>Rys 1. Przyk\u0142adowy wynik zdj\u0119cia poddanego progowaniu, z uwzgl\u0119dnionymi konturami. \u0179r\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.4 Wykrywanie \u015bcie\u017cek robota<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Uzyskane w poprzednim punkcie kontury w teorii umo\u017cliwiaj\u0105 nam zadanie konkretnych pikseli jako wsp\u00f3\u0142rz\u0119dnych dla robota, kt\u00f3ry w ich miejscu m\u00f3g\u0142by aktywowa\u0107 aerograf z farb\u0105. By\u0142oby to jednak niezwykle czasoch\u0142onne oraz nieefektywne \u2013 chcemy przecie\u017c, aby robot malowa\u0142 kontury konkretnymi d\u0142u\u017cszymi ruchami, a nie punktowo. W tym celu musimy w jaki\u015b spos\u00f3b pogrupowa\u0107 wszystkie piksele w grupy \u2013 linie, po kt\u00f3rych robot b\u0119dzie si\u0119 porusza\u0107 z stale w\u0142\u0105czonym aerografem, oraz w linie \u2013 miejsca przejazdu robota z wy\u0142\u0105czonym aerografem z ko\u0144ca jednego konturu do pocz\u0105tku drugiego. Do wygenerowania \u015bcie\u017cki robota zosta\u0142 wykorzystany kod:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>def visualize_path(path):\n    if not path:\n        print(\"\u26a0\ufe0f Brak elementu w \u015bcie\u017cce; nie ma co pokazywa\u0107 :(.\")\n        return\n\n    xs = &#091;p&#091;0] for p in path]\n    zs = &#091;p&#091;1] for p in path]\n\n    plt.figure()\n    prev = None\n    for xz_mode in path:\n        if prev is None:\n            prev = xz_mode\n            continue\n        x0, z0, m0 = prev\n        x1, z1, m1 = xz_mode\n        style = '-,g' if m1 == 1 else '-,r'\n        plt.plot(&#091;x0, x1], &#091;z0, z1], style, linewidth=1)\n        prev = xz_mode\n\n    plt.gca().invert_yaxis()\n    plt.axis('equal')\n    plt.title(\"Podgl\u0105d \u015bcie\u017cki robota, aby kontynuowa\u0107 zamknij okno\")\n    plt.xlabel(\"X &#091;mm]\")\n    plt.ylabel(\"Z &#091;mm]\")\n    plt.grid(True, alpha=0.3)\n    plt.show()\n\n\n\npath = &#091;]\nprev_last_point = None\nfor contour in scaled_contours:\n    contour_mm = contour.reshape(-1, 2).astype(float)\n    # mapowanie obrazu na wsp\u00f3\u0142rz\u0119dne X\/Z\n    contour_mm&#091;:, 0] *= scale  # X\n    contour_mm&#091;:, 1] *= scale  # Z \n    resampled_contour = resample_path(contour_mm, step_contour_mm)\n    if len(resampled_contour) == 0:\n        continue\n\n    if prev_last_point is not None:\n        # przejazd robota z wy\u0142\u0105czonym aerografem (mode 2)\n        move_between = resample_path(&#091;prev_last_point, resampled_contour&#091;0]], step_between_mm)\n        for pt in move_between:\n            path.append(&#091;pt&#091;0], pt&#091;1], 2])\n\n    # przejazd robota z w\u0142\u0105czonym aerografem, \"malowanie\" (mode 1)\n    for pt in resampled_contour:\n        path.append(&#091;pt&#091;0], pt&#091;1], 1])\n\n    prev_last_point = resampled_contour&#091;-1]\n\n# d\u0142ugo\u015b\u0107 \u015bcie\u017cki + offsety\ntotal = len(path)\nif total == 0:\n    raise ValueError(\"Nie wygenerowano \u015bcie\u017cki\")\n\nxs = &#091;p&#091;0] for p in path]\nzs = &#091;p&#091;1] for p in path]\nmin_x = min(xs)\nmin_z = min(zs)\nprint(\"Min X:\", min_x)\nprint(\"Min Z:\", min_z)\n\n# Wizualizacja \u015bcie\u017cki\nvisualize_path(path)<\/code><\/pre>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1148\" height=\"606\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image3.png\" alt=\"\" class=\"wp-image-25370\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image3.png 1148w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image3-840x443.png 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image3-768x405.png 768w\" sizes=\"auto, (max-width: 1148px) 100vw, 1148px\" \/><figcaption class=\"wp-element-caption\"><em>Rys. 2. Podgl\u0105d wygenerowanej \u015bcie\u017cki robota. \u0179r\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Nale\u017cy zaznaczy\u0107, \u017ce im wi\u0119ksza rozdzielczo\u015b\u0107 oryginalnego zdj\u0119cia, tym \u0142atwiej b\u0119dzie zastosowa\u0107 identyfikacje kontur\u00f3w. Dodatkowo w przypadku zdj\u0119\u0107 o r\u00f3\u017cnych formatach (16:9, 3:2, 1:1, itp.) trzeba zastosowa\u0107 odpowiednio pasuj\u0105cy format wsp\u00f3\u0142rz\u0119dnych wyj\u015bciowych, aby unikn\u0105\u0107 niechcianego zaburzenia proporcji (rozci\u0105gni\u0119cie b\u0105d\u017a \u015bci\u015bni\u0119cie grafiki, w kt\u00f3rym\u015b z wymiar\u00f3w).<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">3. Komunikacja z robotem Astorino Kawasaki<\/h2>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3.1 Ustanowienie po\u0142\u0105czenia<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Chc\u0105c unikn\u0105\u0107 przepisywania warto\u015bci ogromnej liczby punkt\u00f3w \u015bcie\u017cki robota do pami\u0119ci robota, u\u017cy\u0107 mo\u017cna w tym celu ponownie j\u0119zyka Python. Po wgraniu do naszego projektu specjalnej biblioteki <strong>Astorino-python-lib<\/strong> otrzymujemy mo\u017cliwo\u015b\u0107 wysy\u0142ania polece\u0144 do robota bez wychodzenia poza skrypt w Pythonie.<\/p>\n\n\n\n<p>Pierwszym krokiem jest nawi\u0105zanie po\u0142\u0105czenia z robotem Astorino Kawasaki. Do tego potrzebne b\u0119dzie pod\u0142\u0105czenie si\u0119 do robota za pomoc\u0105 kabla Ethernet (RJ45), zaznaczonego na poni\u017cszym schemacie:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"498\" height=\"419\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image4.jpg\" alt=\"\" class=\"wp-image-25372\"\/><figcaption class=\"wp-element-caption\"><em>Rys. 3. Schemat po\u0142\u0105cze\u0144 elektrycznych robota Astorino Kawasaki. \u0179r\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Do poprawnego po\u0142\u0105czenia potrzebujemy te\u017c adres IP naszego robota. Znale\u017a\u0107 go mo\u017cna w aplikacji <strong>AstorinoIDE<\/strong> w zak\u0142adce <strong>Control<\/strong>.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"707\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image5.jpg\" alt=\"\" class=\"wp-image-25373\"\/><figcaption class=\"wp-element-caption\"><em>Rys. 4. Widok zak\u0142adki <strong>Control<\/strong> w AstorinoIDE. \u0179r\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>UWAGA \u2013 Wykonanie polece\u0144 ruchu zdefiniowanych w j\u0119zyku Python wymaga prze\u0142\u0105czenia robota w tryb <strong>REPEAT<\/strong>! Nale\u017cy zachowa\u0107 szczeg\u00f3ln\u0105 ostro\u017cno\u015b\u0107 podczas wykonywania test\u00f3w i uruchamianiu gotowych aplikacji.<\/p>\n\n\n\n<p>Przy testowaniu podobnych aplikacji zaleca si\u0119 korzystanie z <strong>SimBoxa<\/strong>, aby w pe\u0142ni zasymulowa\u0107 dzia\u0142anie robota bez ryzyka uszkodzenia fizycznego modelu. W celu sprawdzenia, czy wszystkie poprzednie kroki zosta\u0142y poprawnie wykonane, mo\u017cna teraz wykorzysta\u0107 j\u0119zyk Python, aby przes\u0142a\u0107 do robota proste polecenia. Kod do testu po\u0142\u0105czenia:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>import asyncio\nfrom astorino import Astorino\t\t\t  # Importowanie biblioteki\n\nasync def main():\n\n    astorino = Astorino()\n    astorino.connect(IP)\t\t\t\t# Po\u0142\u0105czenie si\u0119 z Astorino\n    astorino.set_motor_on()\t\t\t\t# W\u0142\u0105czenie silnik\u00f3w\n    astorino.Zero()\t\t\t\t\t# Zerowanie\n    astorino.reset()\t\t\n    astorino.set_repeat_once()\n    astorino.run()\n    astorino.HOME(80,40,40)\t\t\t\t# Przejazd do pozycji domowej\n    safety_check = astorino.is_in_motion()\t# Sprawdzenie czy robot \n    print(safety_check.i_val)\t\t\t\t# zako\u0144czy\u0142 ruch\n    astorino.disconnect()\t\t\t\t# Zako\u0144czenie po\u0142\u0105czenia\n \t\t\t\t\t\t\t\t# z Astorino\nif __name__ == \"__main__\":\n    asyncio.run(main())<\/code><\/pre>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3.2 Symulacja malowania<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Dla przejrzystej wizualizacji symulacji w aplikacji <strong>Astorino<\/strong> istnieje mo\u017cliwo\u015b\u0107 \u015bledzenia trajektorii robota. Zapis punkt\u00f3w trajektorii warto przypisa\u0107 pod konkretny sygna\u0142, kt\u00f3ry w skrypcie b\u0119dzie aktywowany w trybie \u201emalowania\u201d. Konfiguracje \u015bledzenia \u015bcie\u017cki mo\u017cna edytowa\u0107 w ustawieniach wizualizacji robota:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1129\" height=\"790\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image6.png\" alt=\"\" class=\"wp-image-25374\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image6.png 1129w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image6-840x588.png 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image6-768x537.png 768w\" sizes=\"auto, (max-width: 1129px) 100vw, 1129px\" \/><figcaption class=\"wp-element-caption\"><em>Rys. 5. Konfiguracja \u015bledzenia trajektorii w aplikacji Astorino. \u0179r\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Dla cel\u00f3w weryfikacji istnieje r\u00f3wnie\u017c mo\u017cliwo\u015b\u0107 zapisu punkt\u00f3w wygenerowanej trajektorii po zako\u0144czeniu programu.<\/p>\n\n\n\n<p>Przyk\u0142ad efekt\u00f3w poprawnie opracowanego programu:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1026\" height=\"713\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image7.jpg\" alt=\"\" class=\"wp-image-25375\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image7.jpg 1026w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image7-840x584.jpg 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image7-768x534.jpg 768w\" sizes=\"auto, (max-width: 1026px) 100vw, 1026px\" \/><figcaption class=\"wp-element-caption\"><em>Rys. 6. Przyk\u0142adowy wynik symulacji programu w aplikacji Astorino. \u0179r\u00f3dlo: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Uwaga: nale\u017cy mie\u0107 na uwadze, \u017ce du\u017ca liczba wygenerowanych punkt\u00f3w mo\u017ce mocno obci\u0105\u017cy\u0107 kart\u0119 graficzn\u0105. Zaleca si\u0119 ustawi\u0107 widok w wizualizacji tak, aby widzie\u0107 efekty pracy robota (jak powy\u017cej) i pozostawi\u0107 go tak do ko\u0144ca trwania programu. Obracaj\u0105c widokiem z wieloma na\u0142o\u017conymi punktami w trakcie trwania procesu malowania ryzykujemy wysokim obci\u0105\u017ceniem systemu i utrat\u0105 wynik\u00f3w.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">4. Wykonanie aplikacji z u\u017cyciem robota Astorino Kawasaki<\/h2>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4.1 Test na fizycznym robocie<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Po potwierdzeniu, \u017ce przygotowany skrypt dzia\u0142a w spos\u00f3b bezpieczny oraz z za\u0142o\u017conymi efektami, mo\u017cna przyst\u0105pi\u0107 do testu z aerografem. Nale\u017cy mie\u0107 na uwadze zasady bezpiecze\u0144stwa opisane w instrukcji u\u017cytkowania Astorino Kawasaki, oraz zasady u\u017cytkowania aerografu opracowane przez producenta.<\/p>\n\n\n\n<p>Przyk\u0142adowe efekty dzia\u0142ania aplikacji:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1117\" height=\"761\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image8.jpg\" alt=\"\" class=\"wp-image-25376\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image8.jpg 1117w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image8-840x572.jpg 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image8-768x523.jpg 768w\" sizes=\"auto, (max-width: 1117px) 100vw, 1117px\" \/><figcaption class=\"wp-element-caption\"><em>Rys. 7. Przyk\u0142adowy efekt malowania przez robota Astorino Kawasaki. \u0179r\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"536\" height=\"425\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/image9.jpg\" alt=\"\" class=\"wp-image-25377\"\/><figcaption class=\"wp-element-caption\"><em>Rys. 8. Przyk\u0142adowy efekt malowania przez robota Astorino Kawasaki. \u0179r\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">5. B\u0142\u0119dy i rozwi\u0105zania<\/h2>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>B\u0142\u0105d wykrycia kamery<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Je\u015bli nasz program nie zapisuje zdj\u0119\u0107 z kamery, b\u0105d\u017a nie jest w stanie si\u0119 z ni\u0105 po\u0142\u0105czy\u0107 (\u201eCamera index out of range\u201d), nale\u017cy zmieni\u0107 warto\u015b\u0107 indeksu dla funkcji <strong>OpenCV VideoCaputre<\/strong>. Najcz\u0119stsza numeracja urz\u0105dze\u0144:<\/p>\n\n\n\n<p>0,1 \u2013 kamery wbudowane w urz\u0105dzenie,<\/p>\n\n\n\n<p>1,2\u2026 \u2013 zewn\u0119trzne kamery podpi\u0119te do urz\u0105dzenia.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>B\u0142\u0105d wczytywania zdj\u0119cia<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Je\u015bli program nie otwiera naszego zdj\u0119cia, nale\u017cy sprawdzi\u0107, czy wprowadzili\u015bmy poprawn\u0105 \u015bcie\u017ck\u0119 do pliku, oraz czy jego rozszerzenie jest kompatybilne z aktualn\u0105 wersj\u0105 <strong>OpenCV<\/strong>.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Robot nie reaguje na skrypt w j\u0119zyku Python<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Je\u015bli robot nie reaguje na skrypt, nale\u017cy upewni\u0107 si\u0119, czy odpowiednio \u0142\u0105czymy si\u0119 z robotem, maj\u0105c w szczeg\u00f3lno\u015bci na uwadze adres IP oraz poprawne u\u017cycie komend.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>B\u0142\u0119dy robota<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W celu wyeliminowania typowych b\u0142\u0119d\u00f3w, kt\u00f3re mog\u0105 si\u0119 pojawi\u0107 w tej aplikacji upewnij si\u0119, \u017ce firmware robota Astorino Kawasaki zosta\u0142 zaktualizowany do najnowszej wersji.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pozosta\u0142e b\u0142\u0119dy<\/strong><\/h3>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W przypadku innych b\u0142\u0119d\u00f3w, nale\u017cy skontaktowa\u0107 si\u0119 z pomoc\u0105 techniczn\u0105 ASTOR:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>telefonicznie: 12 424 00 88&nbsp;<\/li>\n\n\n\n<li>mailowo: <a href=\"mailto:support@astor.com.pl\">support@astor.com.pl<\/a><\/li>\n\n\n\n<li>lub przez stron\u0119 internetow\u0105: https:\/\/www.astor.com.pl\/wsparcie.html<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">6. Dodatkowe materia\u0142y<\/h2>\n\n\n\n<p>Sprawd\u017a nasz bezp\u0142atny kurs:<\/p>\n\n\n\n<p><a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-edukacyjny-astorino-kurs-dla-poczatkujacych\/\">Robot edukacyjny Astorino &#8211; kurs dla pocz\u0105tkuj\u0105cych<\/a>.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"dowiesz-sie\">\n<p>Autor artyku\u0142u:<\/p><\/br>\n<h2 class=\"wp-block-heading\"><strong>Konrad M\u0119do\u0144<\/strong><\/h2>\n<p>Praktykant ASTOR<\/p>\n<p><\/p>\n<\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n            <div id=\"mailerlite-form_9\" data-temp-id=\"69ed82b9c2815\">\n                <div class=\"mailerlite-form\">\n                    <form action=\"\" method=\"post\" novalidate>\n                                                    <div class=\"mailerlite-form-title\"><h3>Newsletter Poradnika Automatyka<\/h3><\/div>\n                                                <div class=\"mailerlite-form-description\"><p>Czytaj trendy i inspiracje, podstawy automatyki, automatyk\u0119 w praktyce<\/p>\n<\/div>\n                        <div class=\"mailerlite-form-inputs\">\n                                                                                            <div class=\"mailerlite-form-field\">\n                                    <label for=\"mailerlite-9-field-email\">Email<\/label>\n                                    <input id=\"mailerlite-9-field-email\"\n                                           type=\"email\" required=\"required\"                                            name=\"form_fields[email]\"\n                                           placeholder=\"Email\"\/>\n                                <\/div>\n                                                        <div class=\"mailerlite-form-loader\">Please wait...<\/div>\n                            <div class=\"mailerlite-subscribe-button-container\">\n                                <button class=\"mailerlite-subscribe-submit\" type=\"submit\">\n                                    Zapisz si\u0119                                <\/button>\n                            <\/div>\n                            <input type=\"hidden\" name=\"form_id\" value=\"9\"\/>\n                            <input type=\"hidden\" name=\"action\" value=\"mailerlite_subscribe_form\"\/>\n                            <input type=\"hidden\" name=\"ml_nonce\" value=\"2588daeba2\"\/>\n                        <\/div>\n                        <div class=\"mailerlite-form-response\">\n                                                            <h4><p>Dzi\u0119kujemy za zapis do newslettera!<\/p>\n<\/h4>\n                                                    <\/div>\n                    <\/form>\n                <\/div>\n            <\/div>\n        <script type=\"text\/javascript\" src='https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/plugins\/official-mailerlite-sign-up-forms\/assets\/js\/localization\/validation-messages.js'><\/script>\n         <script type=\"text\/javascript\"> var selectedLanguage = \"pl\"; var validationMessages = messages[\"en\"]; if(selectedLanguage) { validationMessages = messages[selectedLanguage]; } window.addEventListener(\"load\", function () { var form_container = document.querySelector(`#mailerlite-form_9[data-temp-id=\"69ed82b9c2815\"] form`); let submitButton = form_container.querySelector('.mailerlite-subscribe-submit'); submitButton.disabled = true; fetch('https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-admin\/admin-ajax.php', { method: 'POST', headers:{ 'Content-Type': 'application\/x-www-form-urlencoded', }, body: new URLSearchParams({ \"action\" : \"ml_create_nonce\", \"ml_nonce\" : form_container.querySelector(\"input[name='ml_nonce']\").value }) }) .then((response) => response.json()) .then((json) => { if(json.success) { form_container.querySelector(\"input[name='ml_nonce']\").value = json.data.ml_nonce; submitButton.disabled = false; } }) .catch((error) => { console.error('Error:', error); }); form_container.addEventListener('submit', (e) => { e.preventDefault(); let data = new URLSearchParams(new FormData(form_container)).toString(); let validationError = false; document.querySelectorAll('.mailerlite-form-error').forEach(el => el.remove()); Array.from(form_container.elements).forEach((input) => { if(input.type !== 'hidden') { if(input.required) { if(input.value == '') { validationError = true; let error = document.createElement(\"span\"); error.className = 'mailerlite-form-error'; error.textContent = validationMessages.required; input.after(error); return false; } } if((input.type == \"email\") && (!validateEmail(input.value))) { validationError = true; let error = document.createElement(\"span\"); error.className = 'mailerlite-form-error'; error.textContent = validationMessages.email; input.after(error); return false; } } }); if(validationError) { return false; } fade.out(form_container.querySelector('.mailerlite-subscribe-button-container'), () => { fade.in(form_container.querySelector('.mailerlite-form-loader')); }); fetch('https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-admin\/admin-ajax.php', { method: 'POST', headers:{ 'Content-Type': 'application\/x-www-form-urlencoded', }, body: data }) .then((response) => { fade.out(form_container.querySelector('.mailerlite-form-inputs'), () => { fade.in(form_container.querySelector('.mailerlite-form-response')); }); }) .catch((error) => { console.error('Error:', error); }); }); }, false); var fade = { out: function(el, fn = false) { var fadeOutEffect = setInterval(function () { if (!el.style.opacity) { el.style.opacity = 1; } if (el.style.opacity > 0) { el.style.opacity -= 0.1; } else { el.style.display = 'none'; clearInterval(fadeOutEffect); } }, 50); if( typeof (fn) == 'function') { fn(); } }, in: function(el) { var fadeInEffect = setInterval(function () { if (!el.style.opacity) { el.style.opacity = 0; } if (el.style.opacity < 1) { el.style.opacity = Number(el.style.opacity) + 0.1; } else { el.style.display = 'block'; clearInterval(fadeInEffect); } }, 50); } }; function validateEmail(email){ if(email.match( \/^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$\/ )) { return true; } return false; } <\/script> \n","protected":false},"excerpt":{"rendered":"<p>Dzi\u0119ki temu poradnikowi dowiesz si\u0119, jak przy u\u017cyciu j\u0119zyka programowania Python napisa\u0107 program generuj\u0105cy trajektori\u0119 robota edukacyjnego Astorino Kawasaki na podstawie zadanych mu obraz\u00f3w. Napisany kod komunikuje si\u0119 z robotem korzystaj\u0105c z RTC (Real Time Control), pozwalaj\u0105c \u00a0na sterowanie w czasie rzeczywistym. Aplikacja ma za zadanie namalowa\u0107 kontury analizowanego zdj\u0119cia. Po przetestowaniu w warunkach bezpiecznych stanowisko zostanie zaimplementowane w rzeczywisto\u015bci i poddane weryfikacji.<\/p>\n","protected":false},"author":91,"featured_media":25379,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[234],"tags":[237],"class_list":["post-25360","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automatyka-w-praktyce","tag-astorino"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\r\n<title>Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w | Poradnik Automatyka<\/title>\r\n<meta name=\"description\" content=\"Piszemy program generuj\u0105cy trajektori\u0119 robota edukacyjnego Astorino Kawasaki na podstawie zadanych mu obraz\u00f3w.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/\" \/>\r\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w | Poradnik Automatyka\" \/>\r\n<meta property=\"og:description\" content=\"Piszemy program generuj\u0105cy trajektori\u0119 robota edukacyjnego Astorino Kawasaki na podstawie zadanych mu obraz\u00f3w.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/\" \/>\r\n<meta property=\"og:site_name\" content=\"Poradnik Automatyka\" \/>\r\n<meta property=\"article:published_time\" content=\"2025-12-17T11:07:51+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2026-01-06T11:14:00+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/astorino-malarz-head.jpg\" \/>\r\n\t<meta property=\"og:image:width\" content=\"960\" \/>\r\n\t<meta property=\"og:image:height\" content=\"473\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\r\n<meta name=\"author\" content=\"\u0141ukasz Giza\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u0141ukasz Giza\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minut\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/\"},\"author\":{\"name\":\"\u0141ukasz Giza\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#\\\/schema\\\/person\\\/cd2e7a3880df4d415ae02a8dbadc6452\"},\"headline\":\"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w\",\"datePublished\":\"2025-12-17T11:07:51+00:00\",\"dateModified\":\"2026-01-06T11:14:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/\"},\"wordCount\":1435,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/astorino-malarz-head.jpg\",\"keywords\":[\"Astorino\"],\"articleSection\":[\"Automatyka w praktyce\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/\",\"name\":\"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w | Poradnik Automatyka\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/astorino-malarz-head.jpg\",\"datePublished\":\"2025-12-17T11:07:51+00:00\",\"dateModified\":\"2026-01-06T11:14:00+00:00\",\"description\":\"Piszemy program generuj\u0105cy trajektori\u0119 robota edukacyjnego Astorino Kawasaki na podstawie zadanych mu obraz\u00f3w.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/astorino-malarz-head.jpg\",\"contentUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/astorino-malarz-head.jpg\",\"width\":960,\"height\":473},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Automatyka w praktyce\",\"item\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/category\\\/automatyka-w-praktyce\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#website\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/\",\"name\":\"Poradnik Automatyka\",\"description\":\"Poradnik Automatyka to przydatne kursy, u\u017cyteczne artyku\u0142y i merytoryczne webinary dla ka\u017cdego automatyka i elektryka.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#organization\",\"name\":\"ASTOR\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/ASTOR_zwykly_sam_logotyp.png\",\"contentUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/ASTOR_zwykly_sam_logotyp.png\",\"width\":3322,\"height\":1078,\"caption\":\"ASTOR\"},\"image\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#\\\/schema\\\/person\\\/cd2e7a3880df4d415ae02a8dbadc6452\",\"name\":\"\u0141ukasz Giza\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/lukasz-giza-1.jpg\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/lukasz-giza-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/lukasz-giza-1.jpg\",\"caption\":\"\u0141ukasz Giza\"},\"description\":\"In\u017cynier ds. osprz\u0119tu robotyki.\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/autor\\\/lukaszg\\\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w | Poradnik Automatyka","description":"Piszemy program generuj\u0105cy trajektori\u0119 robota edukacyjnego Astorino Kawasaki na podstawie zadanych mu obraz\u00f3w.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/","og_locale":"pl_PL","og_type":"article","og_title":"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w | Poradnik Automatyka","og_description":"Piszemy program generuj\u0105cy trajektori\u0119 robota edukacyjnego Astorino Kawasaki na podstawie zadanych mu obraz\u00f3w.","og_url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/","og_site_name":"Poradnik Automatyka","article_published_time":"2025-12-17T11:07:51+00:00","article_modified_time":"2026-01-06T11:14:00+00:00","og_image":[{"width":960,"height":473,"url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/astorino-malarz-head.jpg","type":"image\/jpeg"}],"author":"\u0141ukasz Giza","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"\u0141ukasz Giza","Szacowany czas czytania":"9 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/#article","isPartOf":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/"},"author":{"name":"\u0141ukasz Giza","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/cd2e7a3880df4d415ae02a8dbadc6452"},"headline":"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w","datePublished":"2025-12-17T11:07:51+00:00","dateModified":"2026-01-06T11:14:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/"},"wordCount":1435,"commentCount":0,"publisher":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/#primaryimage"},"thumbnailUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/astorino-malarz-head.jpg","keywords":["Astorino"],"articleSection":["Automatyka w praktyce"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/","name":"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w | Poradnik Automatyka","isPartOf":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/#primaryimage"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/#primaryimage"},"thumbnailUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/astorino-malarz-head.jpg","datePublished":"2025-12-17T11:07:51+00:00","dateModified":"2026-01-06T11:14:00+00:00","description":"Piszemy program generuj\u0105cy trajektori\u0119 robota edukacyjnego Astorino Kawasaki na podstawie zadanych mu obraz\u00f3w.","breadcrumb":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/#primaryimage","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/astorino-malarz-head.jpg","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/12\/astorino-malarz-head.jpg","width":960,"height":473},{"@type":"BreadcrumbList","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/robot-astorino-kawasaki-malarzem-analiza-zdjec-i-malowanie-obrazow\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Automatyka w praktyce","item":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/category\/automatyka-w-praktyce\/"},{"@type":"ListItem","position":2,"name":"Robot Astorino Kawasaki malarzem. Analiza zdj\u0119\u0107 i malowanie obraz\u00f3w"}]},{"@type":"WebSite","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/","name":"Poradnik Automatyka","description":"Poradnik Automatyka to przydatne kursy, u\u017cyteczne artyku\u0142y i merytoryczne webinary dla ka\u017cdego automatyka i elektryka.","publisher":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization","name":"ASTOR","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png","width":3322,"height":1078,"caption":"ASTOR"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/cd2e7a3880df4d415ae02a8dbadc6452","name":"\u0141ukasz Giza","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/12\/lukasz-giza-1.jpg","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/12\/lukasz-giza-1.jpg","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/12\/lukasz-giza-1.jpg","caption":"\u0141ukasz Giza"},"description":"In\u017cynier ds. osprz\u0119tu robotyki.","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/autor\/lukaszg\/"}]}},"_links":{"self":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/25360","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/users\/91"}],"replies":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/comments?post=25360"}],"version-history":[{"count":3,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/25360\/revisions"}],"predecessor-version":[{"id":25390,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/25360\/revisions\/25390"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/media\/25379"}],"wp:attachment":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/media?parent=25360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/categories?post=25360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/tags?post=25360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}