Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mid360_avoidance

Описание

mid360_avoidance — это ROS-пакет для фильтрации данных лидара Livox Mid-360 и построения вектора избегания препятствий на основе разбиения передней полусферы на сектора.
Пакет состоит из двух основных узлов:

  1. livox_plane_filter — фильтрует облако точек по геометрическим и дальностным критериям, а также выполняет прореживание для оптимизации производительности.
  2. sector_avoidance — рассчитывает вектор избегания препятствий, используя ближайшие точки в каждом секторе.

В итоге дрон получает сглаженный вектор для ухода от препятствий и может двигаться в режиме Offboard с минимальным риском столкновения.


Запуск

Перед запуском убедитесь, что:

  • Установлен ROS Noetic.
  • Запущен драйвер livox_ros_driver2 и топик лидара доступен (/livox/lidar).
  • Пакет mid360_avoidance собран в вашем catkin_ws.

Запуск всего пайплайна выполняется одной командой:

roslaunch mid360_avoidance avoidance_full.launch

При необходимости можно переопределить параметры прямо при запуске:

roslaunch mid360_avoidance avoidance_full.launch sectors:=12 d_safe:=3.0 debug_enable:=false

Основные параметры

Параметры фильтра (livox_plane_filter)

Параметр Описание
window_sec Длина временного окна (сек) для накопления точек перед публикацией. 0.0 — только текущий кадр.
decimation Прореживание: оставляется каждая N-я точка. Уменьшает нагрузку на CPU.
angle_deg Угол наклона фильтрующей плоскости вокруг оси Y.
thickness Толщина допуска вокруг плоскости, в метрах.
min_range / max_range Минимальная и максимальная дальность учёта точек.
front_only Если true — учитывать только точки перед дроном.
keep_prob Если <0 — используется 1/decimation. Если >0 — вероятность оставить точку.
ring_len Размер кольца для случайного прореживания (в точках).
seed Зерно генератора случайных чисел для воспроизводимости.

Параметры избегания (sector_avoidance)

Параметр Описание
sectors Количество секторов в передней полусфере.
k_nearest Количество ближайших точек в секторе для оценки опасности.
fov_deg Угол поля зрения, который будет поделен на сектора (по умолчанию 180°).
d_safe Дистанция, начиная с которой сектор считается опасным.
beta Степенной коэффициент функции опасности.
max_avoid Максимальный модуль вектора избегания.
ema_alpha Коэффициент сглаживания (экспоненциальное среднее).
debug_enable Включить публикацию отладочных векторов для RViz.
debug_scale Масштаб отладочных векторов в RViz.
debug_alpha Прозрачность отладочных объектов в RViz.
debug_lifetime Время жизни отладочных маркеров в секундах.
debug_ns Namespace маркеров в RViz.

Рекомендации по основным параметрам

1. window_sec (фильтр)

Что делает:

  • Определяет длину временного окна (в секундах) для накопления точек перед публикацией.
  • При 0.0 публикуются только точки текущего кадра лидара.
  • При >0 — все точки за последние window_sec секунд суммируются и отправляются одним облаком.

Зачем менять:

  • Малое значение (0–0.1 с) — минимальная задержка, но облако разреженное.
  • Большое значение (0.5–1 с) — облако плотнее, но возрастает задержка реакции и нагрузка на CPU.
  • Полезно, если дрон медленно летит и тебе нужна более плотная карта для анализа.

2. decimation (фильтр)

Что делает:

  • Прореживает облако точек, оставляя каждую decimation-ю точку (или по случайной маске, если keep_prob задан).
  • Прямая оптимизация нагрузки.

Зачем менять:

  • Малое значение (1–5) — почти все точки остаются → точнее, но тяжелее для CPU.
  • Большое значение (15–30) — меньше точек → быстрее работает, но теряется мелкая детализация.
  • Нужно балансировать, чтобы и избежать лагов, и не потерять критично важные препятствия.

3. sectors (avoidance)

Что делает:

  • Делит переднюю полусферу (по fov_deg) на заданное количество секторов.
  • В каждом секторе считается «опасность» по ближайшим точкам.

Зачем менять:

  • Мало секторов (5–7) — простое избегание, меньше вычислений, но грубое направление.
  • Много секторов (15–20) — более точное «объезжание» препятствий, но возможны рывки, если дрон реагирует на очень локальные точки.

4. k_nearest (avoidance)

Что делает:

  • В секторе выбирает не одну, а k_nearest ближайших точек.
  • Опасность считается по ним (обычно усреднение или минимум).

Зачем менять:

  • Малое значение (1–2) — реакция на отдельные точки, чувствительно к шуму.
  • Большое значение (5–10) — более устойчивая оценка опасности, игнорирует случайный шум, но может «размазывать» мелкие препятствия.

5. d_safe (avoidance)

Что делает:

  • Дистанция, начиная с которой сектор считается опасным.
  • Опасность растёт, если точка ближе, чем d_safe.

Зачем менять:

  • Малое значение (1–1.5 м) — дрон подлетает ближе к препятствиям, экономит место.
  • Большое значение (3–5 м) — избегает заранее, но может мешать лететь в узких коридорах.

6. beta (avoidance)

Что делает:

  • Степенной коэффициент функции опасности:

    danger = (1 - dist/d_safe)^beta
    
  • Чем больше β, тем резче возрастает сила отталкивания при приближении.

Зачем менять:

  • Малое значение (1.0–1.5) — плавное увеличение реакции → мягкие обходы.
  • Большое значение (3–5) — дрон будет резко «отпрыгивать» при близких помехах.

7. max_avoid (avoidance)

Что делает:

  • Максимальный модуль вектора избегания.
  • Ограничивает силу реакции, даже если опасность очень высокая.

Зачем менять:

  • Малое значение (0.5–0.7) — дрон реагирует мягко, не делает резких манёвров.
  • Большое значение (1.0–1.5) — сильные отвороты, быстро уходит от помех, но может дёргаться.

8. ema_alpha (avoidance)

Что делает:

  • Коэффициент сглаживания по экспоненциальному скользящему среднему:

    filtered_vec = alpha * new_vec + (1 - alpha) * old_vec
    
  • Убирает дрожание вектора из-за шума.

Зачем менять:

  • Малое значение (0.1–0.3) — сильное сглаживание, плавные движения, но реакция чуть запаздывает.
  • Большое значение (0.5–0.8) — почти мгновенная реакция, но больше тряски.

Отладка в RViz

Для визуализации:

  • Добавьте Marker или MarkerArray для отладочных векторов.
  • Используйте debug_enable:=true для активации публикации.
  • Масштаб и цвет регулируются через debug_scale, debug_alpha.

About

simple node for efficient obstacle detection and avoidance with livox mid360

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages