Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roman Dolejší DU-10 - Distance keeper and calibration framework #58

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

rdolejsi
Copy link

homework_distance_keeper - pokud zdetekuje překážku ve vzdálenosti 50cm, dorovná do 20cm a udržuje, error correction je implementována dopředu i dozadu, slope změny rychlosti je konfigurovatelný. Bohužel při velmi špatných baterkách a zadřených kolech trochu nedrží přímku :-)

homework_gen_wheel_validation_csv - vytvoří tabulku kalibrace, používá wheel_calibrator. V tomto PR je přepnut na aproximační variantu, která najde nejnižší pwm, změří ho a změří i nejvyšší pwm a dopočítá (v tuto chvíli lineárně) ostatní hodnoty. Tato varianta trvá cca 5 sekund. K dispozici je i kompletní kalibrace. Nové tabulky jsem nepřikládal, ale kód umí kompletně spočítat jak multiplikátor, tak shift - bez excelu.

Podpůrné třídy a jejich případné změny ze starších verzí:

  • wheel - ovladač kola, dostává injected multiplikátor (a), tak i shift (b) - ať už konstruktorem nebo kalibrací
  • wheel_speedometer - měří rychlost a poskytuje přepočty jednotek
  • wheel_calibrator - realizuje celou kalibraci a výpočet multiplier a shift (a, b), umí jak všechny rychlosti, tak lineární aproximaci mezi nejpomalejší a nejrychlejší
  • wheel_driver - má připojený calibrator, ale umí ho odpojit (v případě problémů s pamětí)
  • sonar - poskytuje sonarová data

Závěrem bych chtěl přiznat, že kalibraci jsem opravdu ladil dlouho (a opravil hodně, fakt hodně chyb v mém starším kódu, vlastně kompletně přepsal řízení kol na radiány a všechny konverze - byly všechny špatně), ale v samozřejmě vidím nedostatky u distance keeperu:

- kola nejsou navzájem propojena. Sice se snažím držet nějakou referenční cílovou rad_sec rychlost a vybírat pwm podle předem zadaných přepočtů (multiplier, shift), ale už teď vidím, že to není v pořádku. Ve finále by asi bylo lepší počítat odjeté ticky a spřáhnout kola tak, aby se vzájemně ovlivňovala a dorovnávala. To bude můj cíl do budoucna.
- měření rychlosti pokulhává - při zapnutém debugu je vidět, že mi rychlosti hodně, hodně kolísá - přesto, že jedou kola stálým pwm. To musím vyřešit.

.. to ale již v dalších úkolech 😉 ..

Btw.: pokud bude snaha nahrát můj kód do Microbitu, budeš potřebovat minifikaci. Několik řešení bylo prezentováno na Discordu, pro Linux jsem přidal jedno s pomocí Gradle v nedávných dnech, funguje velmi spolehlivě a dělá i merge + upload výsledného souboru.

…rad_sec as primary speed control, pwm_multiplier and pwm_shift are available to use

DU-10: Distance keeper - full implementation, future versions might need to do better wheel-to-wheel compensations
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant