Určení kratší dráhy při otáčení robota na daný azimut

Kamil2001
Příspěvky: 11
Registrován: 12 led 2024, 20:17

Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od Kamil2001 »

Ahoj a dobrý rok 2025.

Řeším pro svého robota otáčení z azimutu, kde právě stojí, na azimut nově zadaný. Chci, aby točil vpravo nebo vlevo podle toho, kde ho čeká kratší dráha. Zjistil jsem, že to není vůbec jednoduché, možností kombinací je značné množství, hlavně kolem azimutu 0. Mám kód v Pythonu, který vyhovuje možná v 99% případů, občas ho ale načapám, jak točí na druhou stranu. Zdroják zatím nepřipojuju, nejde mi o opravu kódu, ale o nějakou jinou myšlenku. Už jsem zkoušel "rozvinout" kružnici azimutů do přímky a tam nějak kombinovat nebo posouvat obě možné dráhy, aby to bylo přehlednější, ale nic nového jsem nevymyslel.
Nemáte, prosím, někdo zkušenosti s tímto problémem? Nešlo by to nějak jednodušeji?

Díky za radu či jiný pohled na věc.
Jirka
E-Ryc
Příspěvky: 101
Registrován: 07 bře 2013, 15:51

Re: Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od E-Ryc »

A proste

Kód: Vybrat vše

(cilovy - soucasny) modulo 360
a pak resit jestli je vysledek 0-180 nebo 180-360 nestaci? Mozna s nejakym osetrenim, abych se zbavil zapornych cisel, treba

Kód: Vybrat vše

(cilovy - soucasny + 720) modulo 360
DavidO
Příspěvky: 1194
Registrován: 01 kvě 2013, 21:27

Re: Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od DavidO »

Kód: Vybrat vše

if (start - cíl) % 360 > 180
  zvyšuj úhel
else 
  snižuj úhel
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
E-Ryc
Příspěvky: 101
Registrován: 07 bře 2013, 15:51

Re: Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od E-Ryc »

Pokud chceme neotrele reseni, co treba MonteCarlo? Nastrilim hromadu vzorku s otocenim o nahodny uhel (-180 az 180) a vezmu smer toho, co se trefi nejbliz cilovemu azimutu ;)
HonzaD
Příspěvky: 39
Registrován: 17 bře 2020, 11:39

Re: Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od HonzaD »

Monte Carlo je už dávno out, kdo jde s dobou použije AI. Vstupy budou výchozí a cílový azimut, feedback bude podle doby otáčení. Výhoda je v tom, že pokud z nějakého důvodu bude točení na jednu stranu jednodušší, robot se to naučí zohlednit ;-)
E-Ryc
Příspěvky: 101
Registrován: 07 bře 2013, 15:51

Re: Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od E-Ryc »

Nojo, ja jsem ze stare skoly ;)

Jinak jsem zapatral v archivu, tohle je kod (resp. jeho relevantni cast pro rizeni smeru), ktery pred spoustou let vyhral Roboorienteering:
https://github.com/krezac/robot-irena-o ... tor.py#L35

Pokud by se v tom nekdo touzil hrabat, tak to repo obsahuje ruzne kousky z ruznych soutezi, jen jsem pred lety odzalohoval adresar z pocitace na github. Popravde ani nevim, jestli je to vubec spustitelne ;)
MartinL
Příspěvky: 281
Registrován: 24 úno 2013, 13:13
Kontaktovat uživatele:

Re: Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od MartinL »

Tak jsem kouknul jak jsem to v rychlosti napsal pro toho malého robůtka, co jsem ukazoval na Vánočním robodoupěti (návrat po zapamatované cestě).

Kód: Vybrat vše

  // vypocet zmeny natoceni robota (v da pozadovana zmena)
  da = cilovyAzimut - aktualniAzimut;
  if (da > 180) da -= 360;
  if (da < -180) da += 360;
Kamil2001
Příspěvky: 11
Registrován: 12 led 2024, 20:17

Re: Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od Kamil2001 »

Ahoj. Děkuji všem za účast v diskuzi, netušil jsem, jakou lavinu příspěvků to vyvolá. Místo mých dvou desítek řádků kódu jsem použil kód DavidaO, a nestačil se divit, jak mohou být věci jednoduché, když se to umí. S operátorem "modulo" jsem se při programování setkal jen u kontrol IČO, rodných čísel apod, kde princip fungování chápu, v nejkrásnějším programátorském snu by mě ale nenapadlo, jak s ním lze elegantně vyřešit můj problém s pohybem robota.
Mohl by mi, prosím, někdo z pánů odborníků alespoň naznačit, co má zbytek po celočíselném dělení společného s kružnicemi a azimuty? Pakliže tedy můžete naznačovat... :D

Díky a mějte se!
Jirka

P.S.
Moudrost mě pronásleduje, ale já jsem rychlejší.
E-Ryc
Příspěvky: 101
Registrován: 07 bře 2013, 15:51

Re: Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od E-Ryc »

Modulo - vzhledem k periodicke vlastnosti azimutu s periodou 360 (azimut 10 je stejny jako azimut 370, nebo -10 je stejny jako 350), tak se hodi operace, co me vrati do zakladniho rozsahu - max jedna (resp. plus minus pul) otacka. A to je prave zbytek po celociselnem deleni.
Napr. muj azimut je 270 (zapad) a vypocet rika "otoc se o 180". Vysledek je 450, ale to je neprakticke, takze ho operaci modulo 360 vratim do zakladniho rozsahu, tedy na hodnotu 90 (vychod).
Je to takhle jasnejsi?
Kamil2001
Příspěvky: 11
Registrován: 12 led 2024, 20:17

Re: Určení kratší dráhy při otáčení robota na daný azimut

Příspěvek od Kamil2001 »

Naprosto, díky.
Odpovědět