mid360_avoidance — это ROS-пакет для фильтрации данных лидара Livox Mid-360 и построения вектора избегания препятствий на основе разбиения передней полусферы на сектора.
Пакет состоит из двух основных узлов:
- livox_plane_filter — фильтрует облако точек по геометрическим и дальностным критериям, а также выполняет прореживание для оптимизации производительности.
- 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| Параметр | Описание |
|---|---|
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 |
Зерно генератора случайных чисел для воспроизводимости. |
| Параметр | Описание |
|---|---|
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. |
Рекомендации по основным параметрам
Что делает:
- Определяет длину временного окна (в секундах) для накопления точек перед публикацией.
- При
0.0публикуются только точки текущего кадра лидара. - При >0 — все точки за последние
window_secсекунд суммируются и отправляются одним облаком.
Зачем менять:
- Малое значение (0–0.1 с) — минимальная задержка, но облако разреженное.
- Большое значение (0.5–1 с) — облако плотнее, но возрастает задержка реакции и нагрузка на CPU.
- Полезно, если дрон медленно летит и тебе нужна более плотная карта для анализа.
Что делает:
- Прореживает облако точек, оставляя каждую
decimation-ю точку (или по случайной маске, еслиkeep_probзадан). - Прямая оптимизация нагрузки.
Зачем менять:
- Малое значение (1–5) — почти все точки остаются → точнее, но тяжелее для CPU.
- Большое значение (15–30) — меньше точек → быстрее работает, но теряется мелкая детализация.
- Нужно балансировать, чтобы и избежать лагов, и не потерять критично важные препятствия.
Что делает:
- Делит переднюю полусферу (по
fov_deg) на заданное количество секторов. - В каждом секторе считается «опасность» по ближайшим точкам.
Зачем менять:
- Мало секторов (5–7) — простое избегание, меньше вычислений, но грубое направление.
- Много секторов (15–20) — более точное «объезжание» препятствий, но возможны рывки, если дрон реагирует на очень локальные точки.
Что делает:
- В секторе выбирает не одну, а
k_nearestближайших точек. - Опасность считается по ним (обычно усреднение или минимум).
Зачем менять:
- Малое значение (1–2) — реакция на отдельные точки, чувствительно к шуму.
- Большое значение (5–10) — более устойчивая оценка опасности, игнорирует случайный шум, но может «размазывать» мелкие препятствия.
Что делает:
- Дистанция, начиная с которой сектор считается опасным.
- Опасность растёт, если точка ближе, чем
d_safe.
Зачем менять:
- Малое значение (1–1.5 м) — дрон подлетает ближе к препятствиям, экономит место.
- Большое значение (3–5 м) — избегает заранее, но может мешать лететь в узких коридорах.
Что делает:
-
Степенной коэффициент функции опасности:
danger = (1 - dist/d_safe)^beta -
Чем больше β, тем резче возрастает сила отталкивания при приближении.
Зачем менять:
- Малое значение (1.0–1.5) — плавное увеличение реакции → мягкие обходы.
- Большое значение (3–5) — дрон будет резко «отпрыгивать» при близких помехах.
Что делает:
- Максимальный модуль вектора избегания.
- Ограничивает силу реакции, даже если опасность очень высокая.
Зачем менять:
- Малое значение (0.5–0.7) — дрон реагирует мягко, не делает резких манёвров.
- Большое значение (1.0–1.5) — сильные отвороты, быстро уходит от помех, но может дёргаться.
Что делает:
-
Коэффициент сглаживания по экспоненциальному скользящему среднему:
filtered_vec = alpha * new_vec + (1 - alpha) * old_vec -
Убирает дрожание вектора из-за шума.
Зачем менять:
- Малое значение (0.1–0.3) — сильное сглаживание, плавные движения, но реакция чуть запаздывает.
- Большое значение (0.5–0.8) — почти мгновенная реакция, но больше тряски.
Для визуализации:
- Добавьте
MarkerилиMarkerArrayдля отладочных векторов. - Используйте
debug_enable:=trueдля активации публикации. - Масштаб и цвет регулируются через
debug_scale,debug_alpha.