memristor / mep3

Memristor Eurobot Platform based on ROS 2
https://memristorrobotics.com
Apache License 2.0
32 stars 8 forks source link

PreciseNavigateToAction + IR readings subtree #125

Closed lukicdarkoo closed 2 years ago

lukicdarkoo commented 2 years ago

Za ovakve situacije name treba PreciseNavigateToAction:

https://user-images.githubusercontent.com/2135826/159018342-44f3c2d1-5512-4d33-928f-75ce25005eb9.mp4

ali postoji mogucnost da nam se pojavi protivnik.

Moj prijedlog (mislim da je i @angstrem98 spominjao) je da napravimo subtree koji ce definisati ponasanje robota kada IR senzor detektuje nesto ispred robota. Recimo, robot moze u tom slucaju da stane, saceka 2s, ako i dalje postoji onda fejluje.

angstrem98 commented 2 years ago

Treba smisliti kako obraditi to. Ako se robot krece napred a senzori nazad okinu, onda ne treba da stane, dok pri rotaciji mislim da treba da stane ako bilo koji okine (ali ako se rotira blizu ivice terena mozda detektuje osobe van terena). Mozemo citati trenutnu brzinu robota iz /big/odom pa na osnovu toga zakljuciti mozda. Ovo je predlog za ovu godinu, tu svakako mislim da moramo reorganizovati stvari za narednu.

lukicdarkoo commented 2 years ago

@angstrem98 To je dobra ideja, samo sto bih ja prije citao Twist, manje suma ima i manje kasni od Odometry.

Treba nam BT uslov koji provjerava da li postoji prepreka:

Zatim, treba napraviti BT podstablo (recimo skill_safe_precise_navigate_to) koje bi koristilo BT uslov:

angstrem98 commented 2 years ago

@VladimirVincan Predlog je da se vecina koda ne piše unutar BT. Napisati zaseban cvor koji obradjuje senzore, za lidar slusati temu /big/scan_inflated jer su tu vec uklonjene tacke van terena i neprijateljski roboti su uvecani (ovde postoji neki mali bag da taj cvor puca, ali resicu ubrzo). U tom cvoru predlazem da se TF transformacije obradjuju u posebnom thread-u, imas ovde primer: https://github.com/memristor/mep3/blob/4586e95cf3665b4e4a9416c492b23a175e9f71bb/mep3_navigation/src/distance_angle/distance_angle_regulator.cpp#L177-L184

Dakle tacke lidara van terena su resene (trenutno sve sto se nalazi na 10 cm ili blize ivici terena se uklanja, zbog tornja npr.), kad se tacka dobijena sa range senzora transformise u map frame onda je izbaciti na slican nacin.

Moj predlog za jednostavnu detekciju prepreka lidarom jeste da gledas tacke ispred i iza robota i prebrojis koliko tacaka je na distanci manjoj od neke konstante safe_distance. Ako imamo ispred robota vise od min_number tacaka na distanci manjoj od safe_distance znaci imamo prepreku ispred.

Na osnovu citanja Twist, sto mozes dobiti sa teme /big/cmd_vel dobijas da li ce doci do kolizije. Ovaj podatak objavljujes na neku temu, moze neka bool ili int poruka. Unutar BT je dovoljno samo prijaviti se na temu i videti da li treba stati ili je bezbedno nastaviti.

lukicdarkoo commented 2 years ago

Skroz sam zaboravio da /big/scan_inflated ne sadrzi tacke van terena. Ovo pojednostavljuje implementaciju, ne moras da racuns pozicije preko TFa, samo provjeris udaljenosti

angstrem98 commented 2 years ago

Skroz sam zaboravio da /big/scan_inflated ne sadrzi tacke van terena. Ovo pojednostavljuje implementaciju, ne moras da racuns pozicije preko TFa, samo provjeris udaljenosti

Za lidar nece morati, ali za range swnzore hoce :(

lukicdarkoo commented 2 years ago

@angstrem98 Mozes li ubaciti u ROS cvor za filtriranje lidara i filtriranje IR senzora? S obzirom na poziciju IR senzora msm da nam nece trebati inflacija, samo izbacivanje statickih prepreka

lukicdarkoo commented 2 years ago

Implementirano u #168.

Doduse fale IR senzori. Treba iskoristit IR Webots drajvere iz #145 ako se odlucimo za koriscenje IR senzora