Skocz do zawartości

AE

Użytkownicy
  • Zawartość

    93
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    7

Wszystko napisane przez AE

  1. Kojarzę tylko jedną firmę w Polsce, która sprzedaję powiedzmy, "swoje roboty przemysłowe" - jest to firma WOBIT, ale też nie wiem czy to ich projekt czy sprowadzają jakiegoś chińczyka. Mają w ofercie roboty kartezjańskie i robota typu SCARA, ale osobiście nigdzie ich nie widziałem. Oczywiście pomijam przedstawicielstwa w Polsce takich firm jak KUKA, FANUC czy ABB. Może też znajdą się jakieś firmy, które na zamówienie zrobią jakiś manipulator pod konkretne zastosowanie. Co do funduszy. Polecam stronę www.polakpotrafi.pl albo podobne.
  2. Znalazłem niszę na naszym rynku. W takim razie czas to naprawić i stać się światowym potentatem w dziedzinie robotyki
  3. U mnie w pracy rozgorzała burzliwa dyskusja nt. polskich robotów przemysłowych, których tak na dobrą (a raczej złą) sprawę nie ma. Postanowiłem trochę pogrzebać w otchłaniach internetu i w najdalszym zakątku udało mi się znaleźć ciekawy artykuł. Forum, co prawda o tematyce robotyki amatorskiej, ale myślę, że kilka osób może zainteresować. Miłej lektury! http://www.konstrukcjeinzynierskie.pl/inne/82-zyczenie-internautow/na-zyczenie-internautow-2013/986-polskie-roboty-przemysowe227.html?showall=&limitstart= Swoją drogą, wiedziałem, że coś tam robiliśmy w latach siedemdziesiątych, ale nie spodziewałem się, że tak to wszystko wyglądało. Od jakiegoś czasu nasuwa mi się pytanie. Dlaczego w Polsce nic się nie opłaca i wolimy sprowadzać wszystko z zagranicy? Pomimo tego, że mamy spory potencjał, odpowiednie zaplecze kadrowe i zapewne wszystko było by o wiele tańsze i nie koniecznie gorszej jakości, a nawet tej samej albo wyższej. Pozdrawiam
  4. Uruchomiłem wszystko bez problemu na płytce Discovery z mikrokontrolerem STM32L152. W końcu mogę zabrać się za ARM-y Proponuję w opcjach wyłączyć sprawdzanie pisowni, aby nie denerwowały czerwone podkreślenia oraz włączyć opcję auto zapisu po naciśnięciu przycisku BUILD. W przeciwnym razie IDE będzie próbowało skompilować tylko to, co było wcześniej zapisane. Często o tym zapominałem po dodaniu kilku linii kodu, a później robiła się kaszana. Miłego kodzenia!
  5. Po obejrzeniu ostatniego filmu "siostra Dextera" dalej może siać spustoszenie...
  6. Tak jak podpowiada kolega post wyżej. 1. Ustaw timer, gdy doliczy do 20 ms uruchomi się przerwanie 2. W przerwaniu ustaw stan wysoki na zainteresowanych portach 3. Ustaw drugi timer, który będzie uruchamiał przerwanie np. co 10 us (chodzi o rozdzielczość) 4. W przerwaniu drugiego timera sprawdzaj czy porty są już odpowiednio długo w stanie wysokim, jeśli tak to ustaw stan niski 5. Możesz teraz nacieszyć oczy jak wszystko pięknie działa Poniżej przykład: //--------------------------PRZERWANIA------------------------------ ISR(TIMER1_COMPA_vect) //przerwanie co 20ms { PORTC |= (1<<PC0) | (1<<PC1) | (1<<PC2) | (1<<PC3) | (1<<PC4); //ustawienie stanu wysokiego dla serw TCCR2B |= (1<<CS20); //start Timer 2 } //------------------------------------------------------------------ ISR(TIMER2_COMPA_vect) //przerwanie co 0.01ms { counterT2++; T2_flag = 1; //tutaj możesz sprawdzać czas stanu wysokiego, ale zrobimy tak, aby przerwanie trwało jak najkrócej } while(1) { if(T2_flag) { if(counterT2 >= serwo1) { PORTC &= ~(1<<PC0); } //sprawdzanie czy impuls trwa odpowiednio długo if(counterT2 >= serwo2) { PORTC &= ~(1<<PC1); } //jesli tak, ustaw stan niski if(counterT2 >= serwo3) { PORTC &= ~(1<<PC2); } //maksymalna wartosc to 250 -> 2.5ms if(counterT2 >= serwo4) { PORTC &= ~(1<<PC3); } if(counterT2 >= serwo5) { PORTC &= ~(1<<PC4); } if(counterT2 >= 250) { //zatrzymaj Timer2, gdy counterT2 odliczy od 0 do 250 TCCR2B &= ~(1<<CS20); counterT2 = 0; } T2_flag = 0; } Proste, prawda?
  7. Przewiń na 4:39. To będzie najlepsze rozwiązanie: https://www.youtube.com/watch?v=9qCbCpMYAe4
  8. Można jeszcze wysyłać duże liczby w postaci kodów ASCII. Przykładowo liczbę 5357 można wysłać jako 4 bajty (znaki). Cyfra 5 to 0x30 (czyli zero) + 5 co daję 0x35 czyli kod cyfry 5 w kodzie ASCII Cyfra 3 to 0x30 + 3 co daję 0x33 itp. Dekodowanie tego też jest bardzo proste, bo wystarczy od odebranego bajtu odjąć zero czyli 0x30 i mamy już interesującą nas cyfrę, a z cyfr można już uzyskać liczbę. odebrana_liczba = pierwsza_cyfra*10000 + druga_cyfra*1000 + trzecia_cyfra*10 + czwarta_cyfra Nie jest to może jakoś super optymalne, ale zawsze jakiś inny sposób wysyłania danych.
  9. Link do mojego stwora: https://www.forbot.pl/forum/topics7/kroczacy-r4pod-vt11030.htm Czteronożny robot kroczący wykorzystujący Bluetooth do komunikacji z PC. Na bieżąco jest obliczane zadanie kinematyki odwrotnej dla każdej nogi. Serwokontroler własnej konstrukcji wbudowany w płytę główną robota, który obsługuje 12 serwomechanizmów. Serwokontroler przygotowany tak, że może wysterować znacznie więcej serw, ograniczeniem jest tylko ilość portów mikrokontrolera. Projekt w dalszym ciągu rozwijany.
  10. Zakup 12 serw to już wydatek, a w szczególności, gdy musisz kupić taki zestaw 2x, a gdzie 18 serw Muszę mocno popracować nad ruchami, na dywanie idzie mu znacznie lepiej. Po za tym ostatni człon nogi jest do przeprojektowania i wykonania od nowa, aby porządnie zainstalować tam czujniki. Planuję zrobić szerszy opis, coś na kształt pracy dyplomowej. Może kiedyś się przyda:P Co do cynowania. Jest na to bardzo prosty przepis. Nocka w pracy w weekend + dużo cyny + lutownica + odsysacz na powietrze
  11. Chciałbym zaprezentować owoc mojej długiej pracy. Jest to czteronożny robot kroczący, który wykorzystuje m.in. komunikację bezprzewodową oraz odwrotne zadanie kinematyki (niestety nie bezpośrednio na pokładzie robota). Robot powstał, ponieważ chciałem skonsolidować w jednym projekcie kilka ważnych zagadnień związanych z robotyką, elektroniką, programowaniem. Dużo rzeczy można było zrobić inaczej, lepiej, ale głównym założeniem było połączenie wiele aspektów z w/w dziedzin. Kilka rzeczy należy jeszcze poprawić, m.in. płynność ruchów, ale ogólnie jestem zadowolony z efektów. To co prezentuję jest drugą wersją robota. 1. Konstrukcja mechaniczna W konstrukcji nie ma niczego zaskakującego. Robot (R4pod) ma budowę symetryczną. Posiada 4 nogi, a każda noga ma 3 stopnie swobody (3 serwa na nogę), czyli 12 serwomechanizmów. Zastosowane serwomechanizmy to Tower Pro SG 5010 (pierwsze i drugie licząc od stopy) oraz HITEC HS322HD (łącznik nogi z korpusem). Pierwotnie wykorzystałem Tower Pro MG995, ale okazały się chińską podróbka i wysterowanie ich wiązało się z stanami samobójczymi (pisałem o tym na forum). Projekt konstrukcji wykonano w Inventorze. Wzorowałem się na wielu konstrukcjach oraz na elementach ogólnie dostępnych na serwisach aukcyjnych czy sklepach internetowych i w pewnym stopniu modyfikowałem je dla własnych potrzeb. Pierwsza wersja było wykonana z laminatu FR4, co okazało się niezbyt dobrym pomysłem. Druga wersja, czyli aktualna, wykonana jest z aluminium (nogi 1,5 mm, korpus 2 mm). Za pomocą imadła i argumentu siły ukształtowałem odpowiednie elementy. Wszelkie części zostały wycięte na WaterJet`ie przez jednego z kolegów z naszego forum, za co bardzo mu dziękuję. Pierwotnie nie planowałem wykorzystać czujników krańcowych w stopach, ale życie zweryfikowało to i stały się niezbędne. Niestety nie przygotowałem elementów stopy, aby takie czujniki zastosować, stąd taka partyzantka jak widać na zdjęciach. 2. Elektronika PCB zaprojektowałem w programie Eagle. Samą płytkę wykonałem termotransferem wykorzystując laminator. Nie bawiłem się w osobne moduły, ma to swój minus, ale jeszcze nic się nie spaliło. Wszystko znajduję się na jednej PCB, udało się to dzięki zastosowaniu elementów SMD (pojedyncze komponenty są THT). Na PCB znajduję się: - tor zasilania dla układu sterowania, czyli stabilizator napięcia +5VDC oraz +3,3VDC - tor zasilania serwomechanizmów z odpowiednia baterią kondensatorów na wejściu i wyjściach - 2 mikrokontrolery ATmega88PA taktowane częstotliwością 20MHz - moduł ATB-BTM222 - akcelerometr MMA8452 - gniazdo programatora - 4 przyciski - gniazdo do podłączenia sygnałów z krańcówek w stopach - wyjścia sygnałów sterujących dla serw - komparator mierzący napięcie na akumulatorze Robot zasilany jest z dwóch akumulatorów litowo-polimerowych. Do zasilania układu sterowania +7,4V 500mAh oraz +7,4V 2200mAh przez UBEC do zasilania serwomechanizmów. Moduł ATB-BTM222 służy do komunikowania się z PC za pomocą BT. Komunikacja w obie strony za pomocą jednego modułu wprowadza spore opóźnienia (plus opóźnienia wynikające z innych procesów ) dlatego nie udało mi się jeszcze uzyskać pełnej płynności ruchów. ATmega Master pobiera wszelkie informacje z otoczenia, tj. - komunikacja z PC za pomocą ATB-BTM222 (UART) - czujniki w stopach - akcelerometr (I2C) - komunikacja z drugą ATmega za pomocą SPI Po za tym komponuje ramki danych do wysłania oraz dekomponuje i interpretuje odebrane dane. ATmega Slave działa w zasadzie jak serwokontroler. Odbiera dane z układu Master, dekomponuje ramkę danych i odpowiednio wysterowuje 12 serwomechanizmów. 3. Sterowanie Do sterowania robotem napisałem aplikację wykorzystując WinApi. Aplikacja służy do ustanowienia połączenia z robotem za pomocą Bluetooth, odbieranie danych, przetwarzanie ich i wysyłanie do robota. Aby komunikacja była bezawaryjna i wszystkie pakiety kompletne, napisałem swój protokół (chociaż to zbyt duże słowo) wzorując się na ModBus`ie. Na przetwarzanie danych składa się dekompozycja danych, odpowiednie ich zinterpretowanie, wykonanie obliczeń dla zadania odwrotnego kinematyki uwzględniając dane z czujników (muszę zająć się jeszcze akcelerometrem, chociaż dane z niego są wysyłane do PC) oraz kompozycja ramki do wysłania. Dodatkowo widoczna jest animacja obrazująca stan czujników w stopach oraz trójkąty podparcia. Stan jest aktualizowany w czasie rzeczywistym. Przede mną jeszcze wiele pracy. Jest dużo rzeczy do poprawy czy modyfikacji. Należy poprawić płynność ruchów oraz sam sposób chodzenia (na razie traktowałem go po macoszemu, skupiając się na stabilnej komunikacji, samej aplikacji oraz obliczeniach kinematyki odwrotnej). Należy przeprojektować ostatni człon nogi, gdzie znajdują się czujniki krańcowe. Partyzantka jaką zrobiłem sprawia wiele kłopotów. Kolejnym ważnym aspektem jest uwzględnienie w obliczeniach danych z akcelerometru i poziomowanie korpusu. Może w przyszłości powstanie kolejna wersja sterownika, która podoła wykonać obliczenia związane z zadaniem odwrotnym kinematyki (jakiś ARM? Niestety na to ciągle brakuje czasu...) Pozdrawiam
  12. Napisz do Siemensa, że interesujesz się tematem to wyślą ci książki nt. swoich sterowników itp. Ja dostałem obszerną książkę o LOGO!, S7-1200, STEP7 (S7-300 i 400), S7-1500, do tego Profinet, Safety Integrated i WinCC. Przysłali mi to kurierem na następny dzień. Oczywiście wszystkie te materiały są dostępne na stronie Siemensa w formacie PDF.
  13. Wygodniejsze od obliczania macierzy (chyba, że masz matlaba albo inny wynalazek) jest wyznaczenie wzorów na poszczególne współrzędne konfiguracyjne za pomocą metody geometrycznej. Później odstawiasz tylko x, y, z, kilka acos i asin do obliczenia i wyniki gotowe:P
  14. Ostatni raz takie zadanie rozwiązywałem bardzo dawno temu, ale z tego co pamiętam to suma spadków napięć w oczku musi wynosić 0. I1 = I2 + I3 E1 - Rw2*I2 = 0 <--- I oczko Rw2*I2 - R*I3 = 0 <---- II oczko I2 = 140A I3 = 2,8A I1 = 142,8A Do zweryfikowania!
  15. Przyszedł czas na przeprowadzkę wraz z rodziną do Poznania, która daje więcej możliwości niż Piła - miasto emerytów, eks-lotniska wojskowego pamiętającego wujka Adolfa i jego ferajne, monopolu Philipsa oraz patronatu Henia Stokłosy Zna ktoś jakiś firmy, które są godne polecenia? Jeśli chodzi o korpo to wiem, że jest VW, NIVEA, UNILEVER, BRIDGESTONE, WRIGLEY, ale po przejściach w "pilskim korpo", interesują mnie też mniejsze firmy, a najlepiej jeśli są położone w okolicach Gądek, Kórnika, bądź mniej więcej w tej lokalizacji. Zainteresowany jestem stanowiskiem: automatyk, programowanie robotów przemysłowych, bądź pokrewne. Chodzi mi tylko o rozeznanie się w sytuacji na rynku pracy, bo w bardzo nieodległej przyszłości trzeba rozsyłać CV. Pozdrawiam
  16. Wtrącę coś jeszcze nt. grzania się stabilizatora napięcia. Będzie się on grzał nawet przy małym prądzie, ale i tak wszystko zależy od mocy jaka na nim jest tracona. P = U * I Zakładając, że zasilasz z akumulatora 12VDC i za stabilizatorem chcesz uzyskać np. 5VDC, to mamy 7V spadku napięcia i jeszcze przepuścisz przez niego 1A to moc wynosi P = 7V * 1A = 7W. Standardowa obudowa TO-220 rozprasza chyba ok. 1,5W. Za długo wtedy nie pożyje taki stabilizator
  17. Tutaj jest dokładniejszy opis: http://sklep.abook.com.pl/product_info.php?products_id=140&osCsid=b48e7cb05488f1991237777d96e8d Ogólnie nie czuć ich jakoś tragicznie. Jeśli chodzi o mnie to czuć dalikatnie zapach jak przyłoże do nosa i się sztachnę
  18. Przy pracach z obracającymi się elementami lepiej nie używać rękawiczek. Jak frez, tarcza je wciągnie to może być jeszcze gorzej niż bez nich. Jeśli chodzi o same rękawiczki to w pracy używamy takich jak te poniżej (nie wiem czy konkretnie tej firmy, ale są bardzo podobne i oczywiście ESD):
  19. W kodzie wszystko chyba jest ok. Zastanawia mnie tylko czy ta linia jest potrzebna: ADCSRA |= _BV(ADIF); Flaga i tak jest zerowana sprzętowo po zakończeniu konwersji. Wpisywanie tam jedynki już jest nie potrzebne (czyli kończenie aktualne trwającej konwersji). Może jeszcze to: Zamiast if(Wart_IR[1]<200 && Wart_IR[2]<200) dodać nawiasy: if( (Wart_IR[1]<200) && (Wart_IR[2]<200) )
  20. Zajrzyj tutaj: http://www.robotyka.com/teoria.php/teoria.74 Musisz tylko odpowiednie wartości podstawić do macierzy. Jeśli nie w matlabie (i czymś podobnym) to pozostaje liczenie na piechotę. Myślę, że warto poświęcić kilka godzin nad tutorialem do matlaba. Jest specjalny toolbox dla robotyki, gdzie te obliczenia wykonuje się za pomocą kilku komend. Jeśli studiujesz (a tak zakładam) to nie opanowanie go może odbić się czkawką.
  21. Spróbuj ustawić ADLAR na 0. INT jest 16 bitowy, a pomimo tego, że rejestr ADC jest 10 bitowy to z justowaniem w lewo, najmłodsze bity (od 0 do 5) nadpisywane są domyślnie zerami. Z justowaniem w prawo, wyzerowane bity od 10 do 15 nie będą miały wtedy znaczenia. Tak przynajmniej mi się zdaje
  22. Jak dla mnie to chyba będzie wyglądać tak jak na obrazku poniżej. Czerwone strzałki to osie Z, a zielone (grotem skierowane do nas) to osie X. Osie Y pominąłem dla czytelności. Notacja mi wyszła jak poniżej. theta | d | a | alfa 0 | 0 | 0 | 0 theta1| d1 | 0 | alfa 0 | l1 | 0 | pi/2 0 | d2 | 0 | 0 theta2| l2 | 0 | 0 Warto to jeszcze sprawdzić w matlabie albo czymś takim, bo nigdy nie wiadomo
  23. Wprowadziłem tę zmianę i działa. Nieźle się zawiesiłem na takiej głupocie Ta tabela mnie zmyliła. Wielkie dzięki!
  24. Skończyły mi się pomysły co z tym fantem zrobić. Mam problem z obsługą akcelerometru przez i2c. Jaki rejestr nie chciałbym odczytać, cały czas otrzymuje wartość 0x3C. Próbowałem już na ATmega32 i ATmega88PA. Korzystałem z konwertera napięć "samoróbki", jak i gotowego konwertera jaki można kupić. Próbuje obsłużyć MMA8452. Początkowo myślałem, że go uszkodziłem i kupiłem drugi LSM303D (ma już wbudowany stabilizator oraz konwerter napięć) i efekt jest ten sam. W MMA8452 ustawiam rejestr 0x2A na 0x03, czyli bit FREAD oraz ACTIVE. W LSM303D rejestr 0x20 na 0x17, czyli uruchomienie osi x,y,z oraz wyjście z trybu power-down mode. Korzystam z biblioteki Mirka Kardasia do obsługi i2c. Poniżej jest kod do obsługi LSM303D. #include <avr/io.h> #include "LCD/lcd44780.h" #include "i2c_twi.h" int main(int argc, char **argv) { unsigned char i2cInitBuf = 0x17; unsigned char bufor; i2cSetBitrate(100); lcd_init(); TWI_write_buf(0x3A, 0x20, 1, &i2cInitBuf); TWI_read_buf(0x3B, 0x0F, 1, &bufor); //tutaj chcę odczytać rejestr WHO AM I lcd_hex(bufor); while(1) { } } Oraz plik i2c.c #include <avr/io.h> #include "i2c_twi.h" void i2cSetBitrate(uint16_t bitrateKHz) { uint8_t bitrate_div; bitrate_div = ((F_CPU/1000l)/bitrateKHz); if(bitrate_div >= 16) bitrate_div = (bitrate_div-16)/2; TWBR = bitrate_div; } void TWI(void) { TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); while ( (TWCR&(1<<TWSTO))); } void TWI_write(uint8_t bajt) { TWDR = bajt; TWCR = (1<<TWINT)|(1<<TWEN); while ( !(TWCR&(1<<TWINT))); } uint8_t TWI_read(uint8_t ack) { TWCR = (1<<TWINT)|(ack<<TWEA)|(1<<TWEN); while ( !(TWCR & (1<<TWINT))); return TWDR; } void TWI_write_buf( uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf ) { TWI(); } void TWI_read_buf(uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf) { TWI(); }
  25. 1. Polecam ten link -> http://kursc.forbot.pl/ , bądź każdy inny o podobnej tematyce. 2. Palecam ten link -> http://cpp0x.pl/kursy/Kurs-C++/1 3. Może jeszcze warto zainwestować w zestaw ewaluacyjny dla AVR (jest ich dość sporo). Jak opanujesz te podstawowe zagadnienia to myślę, że reszta problemów sama się rozwieje
×
×
  • Utwórz nowe...