Skocz do zawartości

Pozycjonowanie 2D/3D - jaki czujnik?


ranma1988

Pomocna odpowiedź

Witam potrzebuję określić położenie względne 2obiektów w przestrzeni.

problematyka:

*obiekty (nadajnik i odbiornik) poruszają się w 3D,
*szukam wektora wytyczanego przez te 2 obiekty

*dokładność 50cm

*max dystans 10m

Czy ktoś z was spotkał się z jakimś rozwiązaniem?

Czy muszę zdać się na GPS?

Link do komentarza
Share on other sites

Na necie można znaleźć ultradźwiękowe radary domowej roboty zrobione dość tanim kosztem przy pomocy serwa mikrokontrolera i czujników ultradźwiękowych. Pewnie dało by radę też zrobić podobne urządzenie wykorzystujące fale elektromagnetyczne zamiast dźwiękowych.

Link do komentarza
Share on other sites

Ultradźwięki się nie nadają, tutaj potrzeba rozdzielczości kątowej rzędu 2.5-3 stopni (przy maksymalnym zasięgu).

Podaj fundusze i cel. GPS nie da Ci takiej dokładności w każdych warunkach i dodatkowo tylko 2D.

Możliwe rozwiązanie: kamera i badanie rozmiarów znacznika na drugim obiekcie.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Podaj więcej szczegółów. Gdzie znajdują się te obiekty (wolna przestrzeń czy pomiędzy przeszkodami), czy możesz oprócz tych 2 obiektów umieścić coś np na skrajach przestrzeni po której się poruszają itd? Jak wyglądają same obiety? - jak najwięcej szczegółów

Generalnie przy pewnych obostrzeniach jest to do zrobienia, ale nie jest to z pewnością łatwe.

Link do komentarza
Share on other sites

Witam, mnie tez interesuje ten temat i zastanawiam się jak to zrobić aby określać położenie urządzenia na większym obszarze np. podwórku (chciałem zrobić automatyczną kosiarkę haha) z wykorzystaniem fal radiowych, ktoś przerabiał ten temat??

Serdecznie pozdrawiam

Link do komentarza
Share on other sites

Nie przerabiałem, ale na modułach radiowych marnie to widzę. Możesz czytać RSSI, ale nie dokładność lipna.

Pomyśl raczej o Wysyłaniu ultradźwięków i pomiarze czasu pomiędzy kosiarką a kilkoma ustawionymi stacjami nadawczymi. O ile na podwórku nie masz przeszkód to ultradźwięki powinny działać fajnie.

Link do komentarza
Share on other sites

Dużo łatwiej chyba stworzyć jakąś elektroniczną granicę, której ta "kosiarka" nie może przekroczyć. Jak masz duużo wolnego czasu to pomaluj kosiarkę na bardzo kontrastowy kolor, kamerka gdzieś wysoko np.: na budynku i analizuj obraz - ale to już raczej zajęcie dla PC i przesyłanie danych do urządzenie bezprzewodowo.

Zwróć też uwagę na takie gotowe urządzenia, były chyba na Diodzie jakieś newsy o takich kosiarkach.

Link do komentarza
Share on other sites

Trochę trudny temat, moje przemyślenia:

- fale radiowe odpadają, są bardzo szybkie a nasze procesory nawet z rodziny ARM są za wolne,
-gdy by to była kosiarka spalinowa i byśmy chcieli użyć ultradźwięków to by tez nie działało bo kosiarka swoim hałasem by tłumiła nasz sygnał,
-kosiarka elektryczna to ciągnięcie za sobą kabli i na takie samodzielne urządzenie to jest nie bezpieczne, zasilanie akumulatorowe to ciężar, przerobienie mechanizmu tnącego trawę, mała wydajność w czasie, możliwość zamontowania czujników ultradźwiękowych, częste ładowanie.

-czujniki ultradźwiękowe mają zasięg do 15m nawet 18m, dokładność chyba 5% albo 0,5%, super sprawa ale czym więcej przeszkód to więcej trzeba czujników.

Sam sobie częściowo odpowiedziałem na pytanie które napisałem wyżej ale nadal szukam ciekawego, praktycznego i taniego pomysłu.

Serdecznie pozdrawiam.

Link do komentarza
Share on other sites

Może enkodery na kołach kosiarki i wpisać całą trasę jaką ma przejechać do pamięci. No i w razie jakiegoś błędu porobić bariery za które nie może kosiarka wyjechać. Może mało dokładne i eleganckie ale mogłoby zadziałać 😉

Link do komentarza
Share on other sites

Enkodery nie zadziałają. Nawet gdyby robot jeździł po równym podłożu, szybko powstaną błędy, których nie będzie można pominąć, co dopiero kiedy robot ma się poruszać w terenie. Już prędzej zadziałają ultradźwięki: Silnik kosiarki wydaje dźwięki o zdecydowanie innej częstotliwości niż ultradźwięki, więc myślę, że będzie je można odfiltrować.

Aha, danych z enkoderów można oczywiście wykorzystać, ale nie jako jedyne źródło pomiarów. Zazwyczaj chwilowe przesunięcie dodaje się do znanej wcześniej pozycji, a następnie uzyskany wynik koryguje się na podstawie pomiarów z systemu zewnętrznej odometrii.

Link do komentarza
Share on other sites

Witam!

Tak się składa, że porwałem się na zrobienie podobnego robota. Mam już trochę planów i część zakupów zrobionych, czekam na wakacje akademickie, żeby ruszyć z robotą.

Również mam ten problem co autor tematu. Jak na razie mam dwa typy.

1. Pozycjonowanie typu IR beacon - nie sprawdzałem jak to się spisze w ostrym słońcu, ale u mnie trawnik jest zacieniony więc nie powinno być z tym problemów. Wada - taki IR Beacon lubi pociągnąć trochę prądu, zwłaszcza jak musi nadawać sygnał ciągle i naokoło siebie pod kątem 360°.

2. Pozycjonowanie na radiolatarnię. To trochę trudniejsza sprawa, bo tu wchodzi fizyka fal i elektronika analogowa z którą mam problem. Pozwolę sobie wyłuszczyć problem.

Popatrzmy na rysunek:

Widzimy tam zaznaczony niebieskim kółkiem nadajnik. Roboczo niech to będzie popularny RFM01 na częstotliwość 868MHz, pozostałe dwie kropki czerwone to anteny odbiorcze. Anteny te umieszczone są na belce obrotowej (vide radar okrętowy) obracającej się wokół własnej osi przebiegającej przez środek odległości między antenami odbiorników.

Odległość między antenami wynosi 1/2λ, co jest połową długości fali w naszym przypadku 17,5 cm (znośnie). Oznacza to, że jeśli ustawimy nadajnik współliniowo z antenami odbiorczymi, to między antenami będziemy mieli przesunięcie fazowe o kąt Π. W dowolnym innym położeniu przesunięcie to będzie mniejsze. Ale nie porwę się na mierzenie przesunięcia fazowego metodą klasyczną poprzez zliczenie czasu między punktami przejścia sinusoid na sygnałach z obu anten. Przy przebiegu o częstotliwości 868MHz, bo żeby uzyskać sensowną dokładność trzeba by zastosować timer zliczający czas między owymi punktami z rozdzielczością kilkudziesięciu pikosekund (kilkaset GHz). Nie wiem jak Wy ale moim zdaniem w warunkach amatorskich to niewykonalne. Wziąwszy pod uwagę jeszcze zakłócenia.

Proponuję wobec tego wykonać następujący trik. Sygnał z obu anten odbiorczych po dodaniu podać na wzmacniacz w. cz. i przepuścić przez demodulator AM. (Tylko jeszcze nie wiem czy lepiej najpierw wzmocnić sygnał, czy może po dodaniu patrz rysunek poniżej) Dodane sygnały będą się w zależności od przesunięcia fazowego wzmacniać lub wygaszać, a obracając głowicą z antenami z łatwością ustalimy kierunek rozchodzenia fal radiowych.

Napięcie na wyjściu demodulatora jest na tyle wolnozmienne, aby można je było próbkować przetwornikiem A/C mikrokontrolera (najlepiej ARM).

Teraz wystarczyłoby obracać głowicę ze znaną prędkością kątową silnikiem krokowym, a najlepiej prądu stałego z enkoderem absolutnym, znając rozdzielczość kątową enkodera/krokowca. I w locie wyznaczać charakterystykę siły sygnału radiowego od kąta obrotu.

Wykres powinien wyglądać tak, że gdy belka jest prostopadła do kierunku nadawania sygnału, mamy maksimum siły sygnału, a gdy jest współliniowa to minimum.

Zadaniem mikrokontrolera byłoby wyliczenie gdzie są maksima/minima i pod jakim kątem względem kąta przyjętego jako 0.

No dobra, ktoś powie co z tego że mam kąt jak z samego kąta odległości nie będzie?

Ano nie będzie, ale są dwa wyjścia:

I. Wersja droższa i bardziej pracochłonna fizycznie, łatwiejsza w oprogramowaniu - dwa układy podwójnych anten w znanej odległości od siebie. Wyznacza się dwa kąty, po jednym dla każdego układu anten. Przy znanej długości jednego boku i dwóch kątów jesteśmy w stanie szybko wyznaczyć pozostałe dwa, a stąd już prosta droga do pozycji, albo

II. Wersja trudniejsza programistycznie i obliczeniowo, ale mniej pracochłonna fizycznie - jest pojedyncza belka z antenami i dokonujemy pomiaru w taki sposób:

1. Robot przed ruszeniem obraca głowicę z antenami do napotkania kierunku, z którego nadawany jest sygnał radiowy.

2. W tym momencie mikrokontroler zapisuje kąt, pod którym wykrył nadajnik i pozycję robota jako 0.

3. Robot nie przestając obracać głowicą jedzie i znów natrafia na kierunek nadawania sygnału.

4. Mikrokontroler zapisuje kąt pod którym wykrył nadajnik i pozycję robota wyznacza na podstawie odczytów z enkoderów układu napędowego. I zeruje liczniki enkoderów.

5. Mikrokontroler ma już komplet danych. Dwa kąty, pozycję poprzednią i pozycję obecną. Po odjęciu pozycji poprzedniej od obecnej mamy odległość. Czyli jest komplet danych do określenia dość dokładnej pozycji z tego samego warunku co poprzednio.

Mam nadzieję, że piszę zrozumiale, jeśli nie to krzyczeć głośno.

Teraz kilka uwag końcowych.

- do pomiaru przetwornikiem A/C - jak wiedzą koledzy elektronicy, automatycy i inni inżynierowie z branży, żeby poprawnie wykreślić sinusoidalny przebieg wystarczy, więcej niż 2 punkty na tej krzywej, czyli u nas ponad 2 pomiary na obrót. Nazywa się to częstotliwością Nyquista. W praktyce jednak dobrze jest, żeby częstotliwość pomiarów była większa. Dobrze jest robić przynajmniej 10 pomiarów na obrót, a jeśli robot może szybko skręcać to nawet więcej. Ale nie można popadać w drugą skrajność i wyciskać siódme poty z przetwornika, bo sinusa można na podstawie tych kilkunastu/kilkudziesięciu punktów aproksymować z dużą dokładnością, a nam chodzi tylko o wyznaczenie punktów maksimów i zerowych.

- do algorytmu obliczania pozycji - założe się, że nie mamy wiele miejsca w robocie, a te 17,5 cm dla obrotowej belki to już jest dużo, więc będziemy raczej stosować wersję drugą wyznaczania pozycji robota. Jest jednak coś na co musimy koniecznie zwrócić uwagę. Otóż jeżeli zdarzy się, że robot między pomiarami kątów, pojedzie po torze krzywoliniowym, to odległość od punktu poprzedniego pomiaru będzie większa niż faktyczna. Oznacza to sporą omyłkę w obliczeniach. Wobec tego przedsięwziąć trzeba uwzględniać zakręty w obliczeniach (rachunek wektorowy/całkowy). Precyzję pomiaru można zwiększyć biorąc pod uwagę jeszcze wcześniejsze pomiary, kąty i odległości (rachunek różnicowy).

W efekcie powinno to zredukować błąd pomiaru i zmniejszyć czas obliczeniowy mikrokontrolera. Ale trzeba to sprawdzić w praktyce. Może już niebawem.

Tymczasem życzę powodzenia w projektowaniu robokosiarki i pozdrawiam.

DonQuijote88

P.S. Jakby coś było niezrozumiałe, to postaram się rozjaśnić, jednak trochę się tego nazbierało.

Link do komentarza
Share on other sites

Jestem laikiem w sprawach robotów, więc proszę o litość 🙂

Ja zabrałbym się do tego projektu nieco inaczej. Zakładając, że obszar po którym ma się poruszać robot, jest prostokątny (dla łatwiejszego zrozumienia), to w dwóch jego sąsiadujących rogach umieściłbym dwa nadajniki/odbiorniki A i B, a trzeci na robocie.

Jak rozumie, krytycznym jest czas który ze względu na szybkość rozchodzenia się fal i małą odległość jest krótki. Czyli aby zwiększyć dokładność trzeba, by znacznie wydłużyć proporcjonalnie obie odległości robota od obu czujników. Ponieważ dokładniej będzie można zmierzyć 2km niż 2m.

No to wydłużmy odległość pokonywaną przez sygnał w sztuczny sposób. Robot zaczyna od połączenia z A. Wysyła do A sygnał, A odpowiada, robot ponownie wysyła, A odpowiada, i tak 1.000 razy, a pomiarem jest łączny czas jaki zajęła cała ta wymiana zdań - i to jest mierzalne z dużą dokładnością 🙂

Następnie to samo z B.

Oczywiście istotne w takiej sytuacji jest szybkość reakcji na wykryty sygnał, a właściwie na jego koniec, ale pobieżnie na to patrząc sądzę, że da się to zrobić, wykorzystując przerwania i tryb IDLE w AVR-rach (na przykład).

Mam nadzieję, że napisałem zrozumiale.

I błagam o litość ponownie ...

Link do komentarza
Share on other sites

Dobrze dobrze 😉 Nie ma co się gorączkowa i błagać o litość 🙂 to jest koncepcja. Każdy może jakąś mieć, prawda? Jest ona dokładna przy odległościach mniejszych niż metr i niewiele mniej dokładna przy kilkudziesięciu metrach:) a przy kilkuset już będzie rozjazd.

Ale wracając do sedna, rozrysowałem sobie Twój koncept dondu i jeśli dobrze rozumiem to chcesz to zrobić tak:

wysłanie żądania do A->przelot fali do A-> generowanie odpowiedzi-> przelot spowrotem->odczyt odpowiedzi

W identyczny sposób komunikacja z B.

Żeby wydłużyć proporcjonalnie długość, to musisz ją znać... a przecież nie znasz 😖

Wszystko jest cacy, ale przy założeniu że żądanie, generowanie odpowiedzi i odczyt zajmują dokładnie tyle samo, różnica będzie tylko w przelocie fali, a to jest wielkość praktycznie niemierzalna. W taki sposób można by zrobić ultradźwiękowo, wtedy miałoby to sens. Są przetworniki nadające/odbierające w pełnym zakresie wokół. Dźwięk podróżuje znacznie wolniej co ułatwia sprawę i zwiększa dokładność. No i da się łatwo zastosować w AVR. Wszystko jest to samo, zmienia się tylko i wyłącznie sposób przesyłu. No i jest wrażliwe na odbicia niestety.

Link do komentarza
Share on other sites

Rozważań teoretycznych ciąg dalszy ... podzielę na punkty:

1. "Rozjazd"

.... przy kilkuset już będzie rozjazd?

Dlaczego miałby być? Odległości odlA i odlB są tak samo proporcjonalne jak 1000 x odlA i 1000 x odlB.

czyli: odlA/odlB = (1000 x odlA) / (1000 x odlB)

A co daje 1000 razy dłuższy czas pomiaru?

Dzięki któremu jesteśmy go w stanie zmierzyć 🙂

2. Nie znam odległości.

Żeby wydłużyć proporcjonalnie długość, to musisz ją znać... a przecież nie znasz

Nie zrozumiałeś mojej intencji lub nie napisałem wystarczająco jasno. Więc może przykład.

Jeżeli mam miarkę na której są tylko metry, a chcę zmierzyć pudełko zapałek, to co mogę zrobić?

Ustawiam w rządku 1000 pudełek i mierzę je moją linijką metrową, a pomiar dzielę przez 1000.

Prędkość rozchodzenia się fali znamy, a nawet jeżeli nie to jesteśmy w stanie ją wyliczyć podczas kalibracji.

Pisząc, że umieszczam punkty A i B miałem na myśli, że znam ich współrzędne ponieważ projekt dotyczy kosiarki. Jeżeli znam współrzędne to jestem w stanie wyznaczyć położenie kosiarki na podstawie zmierzonych odległości.

Jak zmierzyłem odległość - podobnie jak działa GPS, z tym, że licząc czas całej operacji a nie odczytując ramki z czasem. Znając czas reakcji odbiorników i nadajników, oraz fakt iż zrobiły to 1000 razy jestem w stanie policzyć z dużą dokładnością odległość do A i do B, a stąd już wystarczy zastosować zadanie geodezyjne odwrotne i mamy punkt położenia kosiarki:

http://www.7dak.com/pages/artykuly/zrozumiec_artylerie

Innymi słowy jesteśmy w stanie policzyć czas samego przelotu fali z robota to A lub B, a znając jej prędkość wyznaczymy odległość.

W końcu na podobnej zasadzie działają dalmierze czy radary 🙂

3.

Wszystko jest cacy, ale przy założeniu że żądanie, generowanie odpowiedzi i odczyt zajmują dokładnie tyle samo, różnica będzie tylko w przelocie fali, a to jest wielkość praktycznie niemierzalna.

Co do pierwszej części, napisałem jak to zrobić. IDLE + przerwanie. Uważam, że da się to zrobić.

Co do drugiej części, jest mierzalna. Zależy tylko czy zastosujesz 1000 pomiarów czy 10.000, a może 100.000 pomiarów. Oczywiście trzeba to na papierze policzyć. Być może kosiarka będzie musiała na czas pomiaru stanąć na 2-3 sek a może więcej.

Papier. ołówek, kalkulator, itp.

4. Budowa urządzeń i Kalibracja

Przy takim podejściu sposób budowy układów, programu i kalibracji będzie stanowił (podobnie jak w GPS) kluczowy element który wpłynie na końcowy efekt.

Bez tego może się okazać, że błąd także narośnie i dokładność pomiaru będzie niezadowalająca. Ale częściowo zlikwiduje to kalibracja. Oczywiście kalibracja będzie musiała być bardzo dokładna i obejmować wszystko, co może wpłynąć na różnice szybkości działania poszczególnych jego elementów.

Dlatego już na etapie projektowania trzeba myśleć w cały czas o kalibracji.

Ba nawet przy doborze elementów być może trzeba będzie je selekcjonować, np. kwarce, źródła zasilania, itp.

Na pewno nie jest to prosty projekt, ale uważam, że da się go zrealizować.

Pytanie z jaką dokładnością - to trzeba na papierku policzyć, by się nie okazało, że dokładność to 100m 🤣

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.