2) Далее массив этих препятствий поступает на вход нашей ноды.
3) Поскольку мы заранее знаем, где должны располагаться лидарные маяки на поле, то сортируем полученные сканы сначала каждый по отдельности. Так мы получаем массив из препятствий, которые с наибольшей вероятностью являются маяками.
4) На следующем шаге мы рассматривали уже группу из трёх препятствий, выбранных на предыдущем этапе. Наиболее вероятная группа - это три точки координаты которых мы знаем относительно карты и относительно робота.
5) Далее решается задача триангуляции - нахождение положения робота по трем точкам.
Точность локализации - примерно 5—10 градусов. Причем, при резком изменении направлении вращения наблюдалось значительное смещение начального угла, под которым был выставлен робот при включении.
Опрос всех датчиков со стороны Raspberry Pi 4 происходил по таймеру c частотой 5 Гц, но сам imu может работать по прерываниям с частотой примерно 90 Гц, если верить статье https://alexgyver.ru/arduino-mpu6050/. Мы же выставили делитель MPU6050_DMP_FIFO_RATE_DIVISOR равный 0x03, что должно было немного уменьшить частоту опроса, но измерения ее не проводилось. По поводу фильтров - применялись средства встроенной библиотеки MPU6050_6Axis_MotionApps_V6_12.h.
По правилам Евробот команда в праве устанавливать на "своих" краях карты лидарные маяки - стойки с цилиндром на уровне лидарного скана.
Вкратце алгоритм локализации по лидару:
1) https://github.com/giuschio/obstacle\_detector\_2 Данный ROS2 пакет обрабатывает лидарные сканы и выделяет группы точек, которые расположены близко друг к другу в препятствия.
2) Далее массив этих препятствий поступает на вход нашей ноды.
3) Поскольку мы заранее знаем, где должны располагаться лидарные маяки на поле, то сортируем полученные сканы сначала каждый по отдельности. Так мы получаем массив из препятствий, которые с наибольшей вероятностью являются маяками.
4) На следующем шаге мы рассматривали уже группу из трёх препятствий, выбранных на предыдущем этапе. Наиболее вероятная группа - это три точки координаты которых мы знаем относительно карты и относительно робота.
5) Далее решается задача триангуляции - нахождение положения робота по трем точкам.
Точность локализации - примерно 5—10 градусов. Причем, при резком изменении направлении вращения наблюдалось значительное смещение начального угла, под которым был выставлен робот при включении.
Опрос всех датчиков со стороны Raspberry Pi 4 происходил по таймеру c частотой 5 Гц, но сам imu может работать по прерываниям с частотой примерно 90 Гц, если верить статье https://alexgyver.ru/arduino-mpu6050/. Мы же выставили делитель MPU6050_DMP_FIFO_RATE_DIVISOR равный 0x03, что должно было немного уменьшить частоту опроса, но измерения ее не проводилось. По поводу фильтров - применялись средства встроенной библиотеки MPU6050_6Axis_MotionApps_V6_12.h.
Да
Спасибо!