2024-11-13 17:08:31 +01:00
2024-11-13 17:08:31 +01:00
2024-11-13 17:08:31 +01:00
2024-11-13 17:08:31 +01:00
2024-11-13 15:51:02 +00:00
2024-11-13 17:08:31 +01:00
2024-11-13 17:08:31 +01:00

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

Logo

Klasterovanje podataka

Pristup klasterovanja već korišćen od strane ostalih

Logo

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

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

Description
No description provided
Readme 531 KiB
Languages
C++ 95.5%
CMake 4.5%