74 lines
2.3 KiB
Markdown
74 lines
2.3 KiB
Markdown
# Lidar-Scanner
|
|
|
|
# Obrada Lidar podataka
|
|
|
|
Obradu koordinata sam radio po ovom principu. Za kooridnate od lidara sam koristio simulator, taj deo možeš i da preskočiš.
|
|
|
|
1. Učitavanje lidar podataka
|
|
2. Klasterovanje podataka
|
|
3. Proveravanje dimenzija klastera
|
|
4. Računanje brzine i ubrzanja
|
|
|
|
|
|
# Učitavanje lidar podataka
|
|
Simulator predstavlja jenostavnu puthon skriptu koja ima centralnu tačku i prati njene projekcije na svaku oblast u njenoj okolini.
|
|
Fomrat učitavanja podataka je (x, y) što bi trebalo da se izmeni da odgovara pravim lidar podacima.
|
|
Pretpostavke za lidar tačke
|
|
- Tačke se ciklično prosledjuju
|
|
- Dve tačke ne mogu imati isti ugao od centra do sebe tj. ne može jedna tačka biti iza druge
|
|
|
|

|
|
|
|
# Klasterovanje podataka
|
|
|
|
Pristup klasterovanja već korišćen od strane ostalih
|
|
|
|

|
|
|
|
|
|
```c++
|
|
bool arePointsInSameCluster(const Point& p1, const Point& p2, double thresholdAngle, double radiusMultiplier)
|
|
{
|
|
double angleDifference = std::fabs(p1.angle - p2.angle);
|
|
if (angleDifference > M_PI)
|
|
angleDifference = 2 * M_PI - angleDifference;
|
|
|
|
double adaptiveThreshold = std::min(p1.r, p2.r) * std::sin(angleDifference) / std::sin(thresholdAngle - angleDifference);
|
|
double distance = std::sqrt(std::pow(p2.x - p1.x, 2) + std::pow(p2.y - p1.y, 2));
|
|
|
|
return distance <= adaptiveThreshold* radiusMultiplier;
|
|
}
|
|
```
|
|
|
|
Moj pristup samo ne koristimo ugao već razdaljinu
|
|
|
|
```c++
|
|
bool arePointsInSameCluster2(const Point& p1, const Point& p2, double thresholdAngle)
|
|
{
|
|
|
|
double distance = std::sqrt(std::pow(p2.x - p1.x, 2) + std::pow(p2.y - p1.y, 2));
|
|
|
|
return distance <= thresholdAngle;
|
|
}
|
|
```
|
|
|
|
|
|
|
|
# Proveravanje dimenzija klastera
|
|
|
|
Posle toga odredjujemo da li selektovana erija pripada odredjenom području.
|
|
U suštini proveravano najdalj tačke u sva četiri smera da li se nalaze u odredjenom pravugaoniku kako bi bili sigurni da se radi o protivniku.
|
|
|
|
# Računanje brzine i ubrzanja
|
|
|
|
Za računanje ubrzanja i brzine prvo pronalazimo centar kruga i čuvamo ga sa trenutnim vremenom.
|
|
Treba proveriti na pravom primeru kako radi.
|
|
Čuvamo trenutnu i 2 prošle tačke koje su nam dovoljne da izračunamo ubrzanje i vektor kretanja.
|
|
|
|
|
|
|
|
# Pokretanje
|
|
|
|
colcon build
|
|
source install/setup.bash
|
|
ros2 run lidarProject subscriber_node |