Projekty robotów: Projekt rękawicy do sterowania ruchem robota TWIN-CATT / cz.5z7


Projekty robotów: Projekt rękawicy do sterowania ruchem robota TWIN-CATT / cz.5z7

Łukasz Przystalski
www.przystalski.pl

Artykuł opisuje sposób realizacji projektu rękawicy sterującej ruchem robota z wykorzystaniem akcelerometru. Rękawica stanowi nietypowe urządzenie sterujące ruchem robota mobilnego, ukazując jak wyobraźnia może pomagać w projektowaniu urządzeń mechatronicznych.

Spis treści:

1. Wstęp – rozwiązanie problemu sterowania urządzeniami przenośnymi
2. Koncepcja sterowania rękawicą
3. Projekt oraz realizacja płytki elektronicznej rękawicy
4. Oprogramowanie układu ATmega32
5. Podsumowanie

1. Wstęp – rozwiązanie problemu sterowania urządzeniami przenośnymi

Robot mobilny TWIN-CATT to z założenia robot do celów inspekcyjnych. Człowiek dokonujący inspekcji posiada obraz z obu kamer zamontowanych na robocie i sam widząc, co się dzieje wokół, podejmuje decyzje o kolejnym ruchu robota. Z wielu możliwości urządzeń sterujących wybrano urządzenia przenośne, takie jak: telefon, laptop, lecz także nietypowe urządzenie, jakim jest bezprzewodowa rękawica z akcelerometrem.

Zastosowanie telefonów daje szerokie grono potencjalnych odbiorców. Spośród wielu producentów oprogramowania dla telefonów wybrano system operacyjny firmy Google o nazwie Android. Jest to nowy i cieszący się coraz większym uznaniem system, dający wiele możliwości programistycznych dla zwykłych użytkowników. Opis implementacji oprogramowania zawarto w artykule 4 pt. Projekty robotów: Projekt oprogramowania sterującego ruchem robota TWIN-CATT na telefony z systemem operacyjnym Google Android.

Niemożliwością jest realizacja zagadnienia sterowania bez realizacji komunikacji. W przypadku robota TWIN-CATT zdecydowano się na łatwą w implementacji komunikację bezprzewodową przy pomocy technologii Bluetooth. Bluetooth to darmowy standard połączeń między urządzeniami elektronicznymi krótkiego zasięgu, opisany w specyfikacji IEEE 802.15.1. Rozróżnia się 3 klasy technologii Bluetooth, które determinują zasięg pracy:
> klasa 1 (100mW) ma największy zasięg do 100m,
> klasa 2 (2,5mW) jest najpowszechniejsza w użyciu zasięgu do 10m,
> klasa 3 (1mW) rzadko używana, z zasięgiem do 1m.

2. Koncepcja sterowania rękawicą

Na rysunku 1 przedstawiono pomysł sterowania rękawicą w zależności od wykonanego ruchu. Ogólnie pozycja rękawicy jest statyczna, ale w przypadku wykorzystania akcelerometru należy zrozumieć, że również ruch zostaje zinterpretowany jako sygnał sterujący.

W zależności od sposobu ułożenia dłoni (akcelerometru), robot wykonuje ruch – z prędkością tym większą, im większy jest kąt wychylenia. Układ pomiarowy jest bardzo szybki i cechuje go duża czułość. Już delikatne wahania powodują zmianę prędkości jazdy. Dane z rozkazami wysyłane są od razu po zakończeniu obsługi przetwornika analogowo-cyfrowego układu ATmega32. Lekkie kołysanie rękawicą w lewo i prawo powoduje delikatny ruch robota w tych kierunkach. Tak jak zakładano, maksymalny kąt związany z największą zadaną prędkością nie powoduje uczucia dyskomfortu dla użytkownika.

3. Projekt oraz realizacja płytki elektronicznej rękawicy

Schemat elektryczny płytki przedstawiono na rysunku 2.

Elementem głównym płyty rękawicy jest układ ATmega32, 8 bitowy mikrokontroler posiadający 32 kilobajtów pamięci programowalnej flash. Jego wielką zaletą jest zainstalowany 8-bitowy szybki moduł przetwornika A/C, który był decydujący w doborze układu pod wymogi projektowe. Dodatkowym atutem jest wbudowany, sprzętowy układ odpowiadający za komunikację USART, a także I2C.

Układ zasilany jest z koszyka składającego się z czterech akumulatorków niklowo-metalowo-wodorkowych o rozmiarze AAA. Każde z nich posiada pojemność 1000mAh. Są one powszechnie używane w urządzeniach przenośnych, takich jak aparaty cyfrowe czy odtwarzacze MP3. Jeden akumulatorek wytwarza napięcie 1,2V, co łącznie daje 4,8V na wyjściu z koszyka. Napięcie to jest dodatkowo stabilizowane przez układ LM1117T-3.3, na wyjściu którego otrzymano napięcie o wartości 3.3V. Służy ono do zasilania akcelerometru MMA7361L.

Mikrokontroler ATmega32 stanowi główny układ logiczny, odpowiadający za odczytywanie stopnia odchylenia rękawicy, sygnalizację łączności oraz komunikację bezprzewodową. Do wyjść układu podłączone są dodatkowe trzy diody informacyjne oraz dwa przyciski. Do wejścia PA0, PA1 i PA2 podłączone są wyjścia analogowe osi X, Y, Z akcelerometru MMA7361L. Sposób podłączenia oraz elementy dodatkowe akcelerometru zostały zaczerpnięte z noty katalogowej producenta. Schemat podłączenia układu MMA7361L przedstawiono na rysunku 3, który znaleziono w nocie katalogowej.

Akcelerometr stanowi urządzenie pomiarowe rękawicy. Mikrokontroler odczytuje w sposób pośredni odchylenie rękawicy. Oznaczenie osi przedstawiono na rysunku 4. Rysunek jest modyfikacją oryginału, znalezionego w nocie katalogowej.

Ważnymi elementami, decydującymi o dokładnym działaniu akcelerometru i prawidłowych odczytach przez mikrokontroler, są kondensatory ceramiczne o pojemności 3.3nF. Ich obecność powoduje minimalizację szumów. Zgodnie z zaleceniami producenta, zostały umieszczone jak najbliżej wejść analogowo-cyfrowych mikrokontrolera. W projekcie płytki wykorzystano także informacje zamieszczone w nocie katalogowej układu ATmega32, dotyczące technik unikania problemów z szumem pomiarowym.

Schemat pokazuje sposób połączeń elementów elektronicznych na płytce PCB. Po prawidłowym zaprojektowaniu schematu, należy utworzyć nową płytkę drukowaną oraz nanieść na nią elementy. Zadecydowano się na wykorzystanie elementów w technologii SMD w celu minimalizacji wymiarów płytki. Wszystkie elementy zostały wyeksportowane do projektu płytki PCB i odpowiednio uszeregowane. Wynik ustawienia elementów na płytce drukowanej widoczny jest na rysunku 5.

Podstawową jednostką projektowania płytek elektronicznych jest mils. Wartość 40mils opowiada długości 1mm. Płytka ma wymiary 44x44mm. Najwyższym punktem jest moduł BTM-222. Na powierzchni miedzi, pod modułem Bluetooth, położono powierzchnię zwaną "POLYGON", w celu uniknięcia powstawania zakłóceń w obwodach cyfrowych układu.
Widoczna na rysunku 5 płytka posiada rozmiar pozwalający na łatwy montaż na ręku. Jest lekka i nie wystaje poza szerokość nadgarstka. Na rysunku 6 pokazano wygląd całego układu rękawicy.

Rękawica składa się dodatkowo z płytki z przylutowanym akcelerometrem oraz z koszyka baterii. Wszystkie elementy dobrano w sposób ułatwiający wszycie elementów w rękawicę skórzaną. Wygląd rękawicy z zamocowaną elektroniką sterującą przedstawiono na rysunku 7.

Płytkę z akcelerometrem oraz płytkę sterującą wraz z modułem Bluetooth zamocowano po zewnętrznej stronie dłoni. Koszyk do baterii został wyposażony w dłuższy przewód, pozwalający na wygodne zakładanie rękawicy, a następnie dokonanie czynności ukrycia koszyka po wewnętrznej części dłoni.

4. Oprogramowanie układu ATmega32

Do oprogramowania rękawicy wykorzystano pakiet programów WinAVR, w którego skład wchodzi darmowy kompilator języka C (AVG GCC) wraz z kompletem narzędzi do tworzenia programów dla 8-bitowych mikrokontrolerów AVR Atmel. W skład pakietu wchodzi prosty program o nazwie Programmers Notepad, który pozwala na utworzenie, edycję i kompilację kodu źródłowego.

Głównym problemem sterowania przy pomocy pomiarów pochodzących z akcelerometru jest odpowiednia akwizycja danych. Wybrany akcelerometr MMA7361L firmy Freescale posiada napięciowe wyjścia analogowe. Zapisany program, działający na mikrokontrolerze ATmega32, operuje bezpośrednio na wartościach cyfrowych. Układem zmieniającym sygnał analogowy na odpowiadający mu sygnał cyfrowy jest przetwornik analogowo-cyfrowy, zwany dalej przetwornikiem A/C. W większości mikrokontrolerów grupy ATmega wbudowany jest 10-bitowy przetwornik A/C sukcesywnej aproksymacji i wielowejściowy multiplekser analogowy. Dopuszczalny błąd wynosi +/-2 jednostki kwantyzacji. Modułowi przyporządkowane są następujące wyprowadzenia: wejście napięcia zasilającego, wejście napięcia odniesienia oraz wejścia sygnałów analogowych (współdzielone z liniami portów wejścia-wyjścia). Do pracy modułu A/C niezbędne jest napięcie odniesienia. Wykorzystać można wbudowane źródło (o wartości 2,56V), napięcie zasilające lub zewnętrzne źródło napięcia odniesienia podłączone pod wyprowadzenie AREF.

Pierwszy tryb działania rękawicy jest identyczny jak w przypadku telefonu z wykorzystaniem akcelerometru. Ten tryb uruchamiany jest poprzez naciśnięcie przycisku szarego, znajdującego się na płytce.

Pierwszym badanym elementem działania układu przetwornika A/C było zarejestrowanie szumu pomiarowego. Wyniki pomiarów przedstawiono na rysunku 8.

Wyjście analogowe osi y akcelerometru połączone jest z wejściem przetwornika A/C. Osie akcelerometru opisano w rozdziale 3.8. Przetwornik zamienia wartość sygnału na wartość cyfrową. Następnie wartość liczbową uśrednia po 10 pomiarach. Uśredniona wartość zostaje wysłana przez port szeregowy (RS-232). Wyniki przedstawiono na wykresach. Nawet jeśli rękawica jest poziomo wysyłana wartość waha się pomiędzy 1,79V a 1,83V. Następnie zbadano wyniki otrzymane podczas przechylania rękawicy. Wartość napięcia w zależności od wychylenia akcelerometru przedstawiono na rysunku 9 i 10.

Podczas zwiększania kąta przechyłu zauważono zwiększanie się napięcia do wartości 2,6V. Podczas projektowania oprogramowania rękawicy, wykorzystano zakres pomiarowy do wartości 2,22V. Jest to spowodowane nienaturalnym i bolesnym ugięciem dłoni, co negatywnie wpływa na komfort użytkowania rękawicy. Podczas wykonywania ruchu do tyłu, napięcie maleje do wartości 0,97V.

Oprogramowanie rękawicy po skompilowaniu zajmuje 2788 bajtów, co stanowi 8.5% całej pamięci mikrokontrolera. Poniżej przedstawiono fragmentarycznie program wraz z komentarzami. W celu prawidłowej komunikacji z robotem, rękawica musi automatycznie łączyć się z modułem Bluetooth robota. Pierwszą sprawą jest prawidłowa implementacja komunikacji szeregowej. Poniższy kod przedstawia funkcję, odpowiedzialną za inicjację układu USART.

void USART_Init( unsigned int baud )
{
/* Ustawienie baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Pozwolenie na odbieranie oraz nadawanie */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Ustawienie polaczenia: 8 bit data, 1stop bit */
UCSRC = (1<<URSEL)|(3<<UCSZ0);
}

Funkcja ta przyjmuje wartość całkowitą prędkości połączenia (baud rate – liczba b/s). Jednak nie wolno podać bezpośredniej wartości, a jedynie jej odpowiednik. Spowodowane jest to wpisaniem wartości zmiennej ‘baud’ do rejestru UBRR. Rejestr ten jest 16-bitowy, dlatego podzielono go na dwie 8-bitowe części: UBRRH oraz UBRRL. Na tablicy 1 (grafika nr 9) przedstawiono tablicę 71 z strony 168 noty katalogowej Atmel ATmega32, przedstawiającą zależności wpisanych wartości do rejestru UBRR od prędkości transmisji dla danej częstotliwości oscylatora taktującego.

W projekcie płytki rękawicy wykorzystano oscylator kwarcowy o częstotliwości 16MHz. Wpisując do rejestru wartość 51, otrzymano prędkość transmisji 19.200 b/s. Błąd związany z przesyłem informacji jest na poziomie 0.2%. Wartość bitu U2X decyduje o podwojonej prędkości transmisji. W przypadku tego oprogramowania ustawiono go na stan niski (0). Kolejnym krokiem jest pozwolenie na odbieranie i wysyłanie danych przez układ USART mikrokontrolera. W przypadku nadchodzącej transmisji zostaje zainicjowana obsługa przerwania, czyli sygnału, który powoduje zmianę przebiegu programu i jego natychmiastową obsługę przez podprogram, niezależnie od realizowanej czynności.

Następnie po zakończeniu obsługi, układ wraca do poprzednio wykonywanego kroku. Przykład obsługi jednego z przerwania wykorzystywanego w programie rękawicy przedstawiono poniżej.

ISR(INT0_vect) // Przerwanie przycisk brązowy
{
USART_Init(51);
tryb=1;
}

W chwili gdy przycisk typu ‘micro-switch’ zostanie wciśnięty, wejście INT0 zostanie zwarte do masy. Spowoduje to uruchomienie obsługi przerwania od wejścia INT0. Wejście to związane jest, zgodnie ze schematem, z przyciskiem koloru szarego. Wykonany zostaje podprogram inicjujący moduł USART oraz do zmiennej globalnej ‘tryb’ zostaje przypisana wartość 1. Gdy moduł asynchronicznej komunikacji szeregowej został już prawidłowo uruchomiony, należy połączyć się przy pomocy modułu Bluetooth BTM-222 z modułem robota. W tym celu zaczerpnięto informacje z noty katalogowej modułu BTM-222 [9]. Do konfiguracji modułu producent zalecił użycie komend AT. Jest to zestaw komend, które rozumie każdy modem i które po raz pierwszy zastosowała w swoich produktach firma Hayes. Nazwa komendy AT wzięła się stąd, że każda komenda wysyłana do modemu zaczyna się od liter AT.

Zastosowano zgodnie z specyfikacją techniczną układu następujące komendy konfiguracyjne:
– ATD=00:12:6F:09:98:28 – ustawienie domyślnego adresu MAC urządzenia, z którym należy ustalić połączenie; domyślnie podano adres modułu robota; działa nawet gdy urządzenie jest w trybie niewykrywalnym,
– ATE0 – ustawienie braku echa komunikacyjnego; zwiększa prędkość transmisji, zmniejsza opóźnienia,
– ATK0 – przyporządkowanie jednego bitu stopu dla transmisji szeregowej,
– ATL2 – ustawienie prędkości transmisji szeregowej na 19.200 bitów na sekundę,
– ATN=REKAWICA – przyporządkowanie modułowy nazwy REKAWICA,
– ATP0 – wyłączenie obsługi kodu PIN w celu autoryzacji połączenia,
– ATR0 – ustawienie modułu w tryb ‘master’ pozwala na wyszukiwanie innych urządzeń Bluetooth i nawiązywanie połączenia.

Po zapisaniu konfiguracji i ponownym uruchomieniu, moduł rękawicy automatycznie szuka modułu robota, automatycznie nawiązuje połączenie. Następnym elementem koniecznym do prawidłowego działania rękawicy, jako elementu sterującego pracą robota, jest odczyt danych pomiarowych z akcelerometru. Poniżej przedstawiono funkcję odpowiedzialną za inicjację modułu przetwornika analogowo-cyfrowego.

void vADCInit(void)
{
ADCSRA= _BV(ADEN)| _BV(ADIE)|_BV(ADATE)| _BV(ADSC)|_BV(ADPS0)|_BV(ADPS1)|_BV(ADPS2);
}

Głównym rejestrem odpowiedzialnym za działanie układu jest rejestr ADCSRA, oznaczający ADC Control Status Register A. Oznaczenie _BV przywołuje funkcję ustawiający dany bit w stan wysoki. Bit ADEN powoduje uruchomienie układu A/C. ADIE powoduje zezwolenie obsługi przerwania od zakończenia przetwarzania wyniku przez przetwornik. Bit ADATE uruchamia procedurę automatycznego przetwarzania wyniku na wejście multipleksera w momencie pojawienia się jakiejkolwiek wielkości dodatniej względem masy układu. ADCS uruchamia pierwszą konwersję danych pomiarowych. Ustawienie bitów ADPSx powoduje wybranie dzielnika częstotliwości zegara taktującego. W przypadku ustawienia stanów wysokich wszystkich bitów, wybrano dzielnik równy 128. Zegar taktujący układ posiada częstotliwość równą 16MHz. Dzielnik 128 powoduje, że taktowanie układu przetwornika A/C wynosi 125kHz. W nocie katalogowej odczytano, iż czas konwersji wyników zajmuje mikrokontrolerowi 13 cykli. Obsługa przerwania wywołanego zakończeniem procesu konwersji przedstawiono w poniższym fragmencie kodu źródłowego.

ISR (ADC_vect)
{
uint8_t odczyt_rejestru;
odczyt_rejestru=ADCL;
fConvResult = (float) (odczyt_rejestru | (ADCH <<8 )) /1024*VREF;

Pierwszym etapem jest prawidłowe odczytanie wartości mierzonej i jej zamiana z wartości 10-bitowej (0-1024) na wartość napięcia. W tym celu skorzystano ze wzoru (1) na grafice nr 9. Wartość Vref została zdefiniowana jako 3,3V. Aby odczytać napięcie wejściowe, należy przekształcić wzór do postaci (2) na grafice nr 9.

Wartość napięcia na wejściu przetwornika pochodząca z osi akcelerometru zapisana jest w zmiennej fconvResult. Następnie, jeśli przyciśnięto szary przycisk, następuje obsługa wyniku, co przedstawiono na fragmencie kodu poniżej.

if(tryb==0)
{
if (bit_is_set(ADMUX,MUX0))
{
fMeasSensor[0]=fConvResult;
ADMUX&=~(1<<MUX0);
//Oś X – w lewo i prawo
if(fMeasSensor[0]>1.80 && fMeasSensor[0]<2.25 && flaga_kierunku!=1 && fMeasSensor[0] != fMeasSensor_old[0])
{
float posredni=fMeasSensor[0]*100-170+64;// Pominięcie 10 pierwszych stropni //180
char znak=(char)posredni;
USART_Transmit(znak);
flaga_kierunku=2;
posredni=fMeasSensor[0]*100-170+128;
znak=(char)posredni;
USART_Transmit(znak);
}
if(fMeasSensor[0]<1.50 && fMeasSensor[0]>0.98 &&flaga_kierunku!=1 && fMeasSensor[0]!=fMeasSensor_old[0])
{
flaga_kierunku=2;
float posredni2=155-fMeasSensor[1]*(100)+128;
char znak=(char)posredni2;
USART_Transmit(znak);
posredni2=155-fMeasSensor[1]*(100)+64;
znak=(char)posredni2;
USART_Transmit(znak);
}
fMeasSensor_old[0]=fMeasSensor[0];
}
//Oś y – do przodu i do tyłu
else
{
fMeasSensor[1]=fConvResult;
ADMUX=(1<<MUX0);
if(fMeasSensor[1]>1.70 && fMeasSensor[1]<2.22 && flaga_kierunku!=2 && fMeasSensor[1]!=fMeasSensor_old[1])
{
flaga_kierunku=1;
float posredni=fMeasSensor[1]*100-165+64;
char znak=(char)posredni;
USART_Transmit(znak);
USART_Transmit(znak);
}
if(fMeasSensor[1]<1.50 && fMeasSensor[1]>0.99 && flaga_kierunku!=2 && fMeasSensor[1]!=fMeasSensor_old[1])
{
flaga_kierunku=1;
float posredni2=155-fMeasSensor[1]*(100)+128;
char znak=(char)posredni2;
USART_Transmit(znak);
USART_Transmit(znak);
}
fMeasSensor_old[1]=fMeasSensor[1];
}
if(fMeasSensor[0]>=1.50 && fMeasSensor[0]<=1.80 && fMeasSensor[1]>=1.50 && fMeasSensor[1]<=1.70 && flaga_kierunku!=0)
{
flaga_kierunku=0;
USART_Transmit(serial_on);
}}

W zależności od ustawionych bitów multipleksera przetwornika A/C wynik zostaje zapisany do zmiennej fMeasSensor. Rejestr odpowiedzialny za wybrany kanał multipleksera nosi nazwę ADMUX. Pierwszy kanał odpowiada pomiarowi z osi x, drugi z osi y. W zależności od napięcia danej osi, następuje wysłanie stosownego komunikatu z trybem jazdy oraz prędkością w zależności od kąta pochylenia rękawicy.

Zależność odczytanej wartości od wysłanego rozkazu z rodzajem wysterowania ruchem robota przedstawiono na grafice nr 9.

Należy zwrócić uwagę na fakt, że zrezygnowano z jazdy po łuku. Taki typ jazdy jest niepożądany z punktu widzenia gąsienicowego układu napędowego. W przypadku robota inspekcyjnego, zdolność jazdy po łuku jest tylko zbędnym dodatkiem. Fragment funkcji głównej programu przedstawiono poniżej.

int main(void)
{
/* Linie portu C będą wejściami z podciągnięciem do VCC */
DDRD = 0x00;
PORTD=0x0f;
DDRB=0x0f;
PORTB=0xff;
MCUCR |= 1<<ISC01; //konfiguracja przerwania INT0
MCUCR |= 1<<ISC11; //konfiguracja przerwania INT1

GICR |= 1<<INT0; //włączenie przerwania INT0 // BRĄZOWY
GICR |= 1<<INT1; //włączenie przerwania INT0 // SZARY
vADCInit();
sei(); // uruchomienie globalnych przerwań
while(1) // Pętla nieskończona programu głównego
{

if(!(PIND & 0x04)) // Sprawdzenie stanu przycisku brązowego
{ }
if(!(PIND & 0x08)) // Sprawdzenie stanu przycisku szarego
{ }

PORTB=0x00;
}
return(0);
}

Rolą programu głównego jest wyłącznie odpowiednia inicjacja portów wejść-wyjść. Porty wejścia, do których dołączono przycisk, muszą zostać podciągnięte wewnętrznie do zasilania mikrokontrolera, tak aby zachodziła reakcja na przyciśnięcie i tym samym zwarcie wejścia do masy układu. Zostaje także wywołana funkcja vADCInit(), uruchamiająca moduł przetwornika A/C. Polecenie sei() powoduje uruchomienie globalnych (wszystkich) przerwań. Wyłączenie odbywa się przy pomocy funkcji cli().

5. Podsumowanie

Po budowie mechanicznej robota najtrudniejszym zagadnieniem jest zdecydowanie się na sposób sterowania. W przypadku robota TWIN-CATT zdecydowano się na sterowanie przy pomocy urządzeń przenośnych, takich jak: telefon, laptop. Zaprojektowano i wykonano dodatkowe urządzenie – podkreślające nabyte umiejętności inżynierskie – jakim jest rękawica bezprzewodowa. Składa się na nią: wykonana z materiału skóropodobnego rękawica, odpowiednio przygotowana do montażu elementów elektronicznych, takich jak: płyty głównej, płyty z akcelerometrem, modułu Bluetooth oraz koszyka z bateriami.

Oprócz wymienionych fizycznych elementów, należy pamiętać o istnieniu odpowiedniego oprogramowania zapisanego wewnątrz pamięci mikrokontrolera, odpowiedzialnego za przekształcanie pomiarów o przyśpieszeniu i wysyłania sygnałów sterujących do robota. Sterowanie przy pomocy rękawicy jest nie tylko praktyczne, ale pokazuje pewien trend – integrację elektroniki codziennej z odzieżą. W kolejnym artykule opisane zostanie wykorzystanie robota jako mobilnego wykrywacza metali. Zapraszam do lektury.

Łukasz Przystalski
tel. 517-19-20-90
lukasz@przystalski.pl
www.przystalski.pl
gg: 1248364

Źródło: Copyright by Łukasz Przystalski. Kopiowanie treści tylko za formalną zgodą autora.

Zobacz też:


Roboty coraz bliżej ludzi dzięki mięśniom inspirowanym naturą
ModuBot – elastyczna robotyka modułowa od MultiProjekt
Największe Targi Automatyki Przemysłowej i Robotyki w Polsce!
Czy roboty przewyższają koszty zatrudnienia?
Dlaczego pasta lutownicza często sprawia problemy techniczne?
Grupa RENEX na stoisku Yamaha podczas targów MOTEK 2024
Sztuczne oko zrewolucjonizuje widzenie robotów
Stwórz przedsiębiorstwo przyszłości z naszym audytem technologicznym – wywiad z MultiProjekt Automatyka