Skocz do zawartości

Dobór silników i enkoderów do mobilnego robota z zaawansowanym systemem czujników.


bidnystudnt24

Pomocna odpowiedź

Przychodzę z pewnym problemem z którym borykam się już od jakiegoś czasu, związanym z mobilnym robotem. Ma to być robot wyposażony w wiele czujników, w tym:

  • 4 czujniki odległości HC-SR04P,
  • listwa z czujnikami odbiciowymi QTR-8A,
  • IMU ICM-20948,
  • 4 przyciski ("ala czujniki dotyku"),
  • LIDAR,
  • kamera,
  • enkodery kwadraturowe.

Do odbierania danych z czujników oraz do sterowania silnikami chcę wykorzystać Arduino Mega lub giga r1(niby jest szybyszy ale nie wykorzystuje się jego potencjału jak ię tworzy kod na arduino ide). Dane z Arduino będą przekazywane poprzez kabel usb do Raspberry Pi 4, na którym będzie ROS, oraz do którego podłączone będą LIDAR i kamera.

Mam problem głównie z doborem silników do tego robota z powodu konieczności wyposażenia każdego silnika w enkoder. Wszystkie silniki, na jakie natrafiłem, były wyposażone w enkodery inkrementalne (co wymaga 2 pinów do obsługi jednego enkodera).

Z tego, co sprawdziłem, aby obsłużyć enkodery, potrzebne są przerwania a arduino potrzebuję czasu aby wszystkie obsłużyć. Poniżej znajduje się kod, który napisałem, aby pomóc sobie przy doborze silników . Orientacyjna masa robota będzie wynosić  około 6 kg(dla 4 kół), a koła, które chcę wykorzystać, mają średnicę 10 cm. Ilość kół wpłynie na moment potrzebny do silnika oraz ilość enkoderów. Ma być to robot autonomiczny a więc jeśli zastosuję 4 silniki, zamierzam użyć kół mecanum; jeśli 2, to zwykłe koła i jedno z przodu swobodne; jeśli 3, to koła omnikierunkowe. Dla 4 zwykłych kół nie znalazłem macierzy.

#include <stdio.h>

int main() {
    // Deklaracja zmiennych
    double V, M, N, X=1.5 /* odwrotnosc sprawnosci */, D, g=9.81, u=0.9 /* wspolczynik tarcia */, a=1 /* przyspieszenie liniowe */, t, O;

    // Wprowadzanie wartości zmiennych
    printf("Podaj wartość M: "); // masa
    scanf("%lf", &M);

    printf("Podaj wartość N: "); // Ilosc kol
    scanf("%lf", &N);

    printf("Podaj wartość D :"); // Srednica kola
    scanf("%lf", &D);
    
    printf("Podaj wartość V: "); // Predkosc liniowa
    scanf("%lf", &V);

    // Obliczenia zgodnie z podanymi wzorami
    t = (X * (((u * M * g) + (M * a)) * D) / (2*N)) * 10.19716; // Wymagany moment(z przelicznkiem z Nm na kgfcm) 
    O = X*(2 * V / D) * 9.5493; // Predkosc obrotowa(z przelicznikiem z rad/s na rpm)

    // Wyświetlenie wyników
    printf("Wartość t wynosi: %lf\n", t);
    printf("Wartość O wynosi: %lf\n", O);

    return 0;
}

W kodzie nie uwzględniłem kąta równi pochyłej bo robot ma się poruszać po płaskiej powierzchni.Mam także wątpliwości co do współczynnika tarcia, - czy mam wziąć pod uwagę  tarcie toczene, czy statyczne.Jeżeli macie także jakieś  porady do innych rzeczy związanych z tym robotem będe wdzięczny za podpowiedź i  pomoc.

  • Lubię! 1
Link do komentarza
Share on other sites

18 godzin temu, bidnystudnt24 napisał:

Wszystkie silniki, na jakie natrafiłem, były wyposażone w enkodery inkrementalne (co wymaga 2 pinów do obsługi jednego enkodera).

To proponuję zbudować  enkodery w oparciu o układ AS5600 - dostaniesz pozycję absolutną i zużyjesz 2 nóżki Arduino na wszystkie 4 silniki.

 

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!

Gość
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.