forked from Dan4ick/Lidar_Muxa
126 lines
11 KiB
YAML
126 lines
11 KiB
YAML
# Параметры ноды FlyGuard.
|
||
# Меняются при запуске: ros2 launch flyguard detect.launch.py fov_deg:=35.0
|
||
|
||
flyguard:
|
||
ros__parameters:
|
||
# --- вход -------------------------------------------------------------
|
||
# В предоставленных записях встречаются оба имени топика, поэтому нода
|
||
# подписывается и на основной, и на запасные: какой появится, с тем и работает.
|
||
input_topic: /lidar_points
|
||
fallback_topics:
|
||
- /sensing/lidar/hesai128/pointcloud
|
||
- /points_raw
|
||
# Кадр лидара весит до 24 МБ и уходит по UDP десятками тысяч фрагментов.
|
||
# При BEST_EFFORT потеря одного фрагмента отбрасывает всё сообщение целиком,
|
||
# поэтому по умолчанию надёжная доставка.
|
||
best_effort: false
|
||
queue_depth: 10
|
||
# Сырые байты CDR вместо сборки Python-объекта sensor_msgs: на 24 МБ она
|
||
# стоит дороже всей обработки. Разбор идёт своим парсером, без копирования.
|
||
raw_subscription: true
|
||
# Обработка в колбэке, а не в отдельном потоке: поток боролся за GIL
|
||
# с приёмом и ронял выработку с 10 до 2 Гц при такте конвейера 32 мс.
|
||
async_worker: false
|
||
frame_id: "" # пусто — берётся из заголовка сообщения
|
||
|
||
# --- габарит и зона поиска -------------------------------------------
|
||
# Полуширина габарита: так его задают организаторы в синтетике 24.09
|
||
# («у края» — до 1.13 м от оси, «вне, но близко» — с 1.14). Было 1.6:
|
||
# ложная тревога на предмете вне габарита. EXPERIMENTS п. 18.4.
|
||
half_width: 1.2 # полуширина габарита приближения, м
|
||
h_lo: 0.28 # нижняя граница над головкой рельса, м
|
||
h_hi: 2.3 # верхняя граница, м
|
||
# Верхняя секция: от h_hi до h_top, но уже, |u| < half_width_top, и не
|
||
# дальше top_d_max — то, что свисает со свода в путь вагона. У стен на этой
|
||
# высоте кабели и светильники, поэтому основной ширины там нет. 0 — выкл.
|
||
h_top: 3.3
|
||
half_width_top: 1.0
|
||
top_d_max: 90.0
|
||
# Пол между рельсами (|u| <= 0.85 м) опущен, но только дальше core_from:
|
||
# лежащий человек высотой 0.30 м при поле 0.28 м виден верхушкой в два
|
||
# сантиметра. Ближе пол прежний — там в полосу 0.16…0.28 м попадают
|
||
# головки рельсов, рельс собирается в одну компоненту от кабины, и
|
||
# предмет выбрасывается вместе с ней. EXPERIMENTS п. 16.3.
|
||
h_lo_core: 0.16 # пол в колее, м
|
||
core_from: 30.0 # с какой дальности он опускается, м
|
||
# Кластеризация ведётся по области выше габарита, чтобы увидеть, что колонна
|
||
# или рама крепи продолжается до свода: без этого срез конструкции по верхней
|
||
# границе сам выглядит компактным предметом ростом с габарит.
|
||
ctx_up: 4.0 # насколько контекст поднимается выше h_hi, м
|
||
# Разделение фигуры и фона по скорости сближения вдоль луча. Стена,
|
||
# параллельная движению, вдоль луча не приближается; предмет приближается
|
||
# ровно на пройденный путь. Поднимает рабочую дальность с 62 до 80 м, но
|
||
# вчетверо увеличивает ложные тревоги — в тоннеле много поверхностей,
|
||
# обращённых к поезду. 0 — выключено, рабочее значение 0.6.
|
||
split_adv: 0.0
|
||
# Разделение фигуры и фона по контрасту ламины. Гладкая стена даёт нулевой
|
||
# центр-окружение по построению, предмет на стене — ступеньку. Разрезаются
|
||
# только компоненты, растёкшиеся вдоль стены (глубже max_depth), и только
|
||
# по лучам, торчащим из своего окружения дальше этого порога, м.
|
||
# 0 — выключено.
|
||
split_gap: 6.0
|
||
split_near: 55.0 # ближе этого не резать: там предмет виден и так, м
|
||
# Сколько фигур выносить из одной компоненты. Разрез отрезает фон, и
|
||
# протяжённость кандидата вдоль пути падает с 6.9 до 0.8 м — вместе с ней
|
||
# пропадает множитель компактности, давивший конструкции вдесятеро. Поэтому
|
||
# каждая лишняя фигура дорога: без ограничения 9.4 ложных трека на км, при
|
||
# двух 7.4, при одной 6.4 — и дальность обнаружения при этом одна и та же.
|
||
split_top: 1
|
||
|
||
# --- привыкание внутри проезда (кратковременная память) -------------
|
||
# Замысел: гасить формы, встретившиеся в нескольких разных точках пути, без
|
||
# единого прошлого проезда. ВЫКЛЮЧЕНО: измерено, что избирательности нет —
|
||
# при неснасыщающейся ёмкости механизм не меняет ничего (7.5 против 7.5
|
||
# ложных треков на км), а видимый эффект маленькой популяции был насыщением,
|
||
# которое давит предмет сильнее обстановки. EXPERIMENTS п. 10.
|
||
enable_habituation: false
|
||
hab_rate: 0.25 # депрессия KC→MBON за одно новое место
|
||
hab_place_m: 5.0 # разнос, с которого место считается другим, м
|
||
hab_recover_m: 800.0 # путь, за который привыкание сходит наполовину, м
|
||
|
||
# --- накопление слабых улик (веерное тело) --------------------------
|
||
# Предмет неподвижен в мире, тоннель проплывает мимо: лучи из габарита
|
||
# складываются в сетку, привязанную к пути. На дальностях, где локальный
|
||
# контраст структурно равен нулю (кольцо окружения упирается в стену той
|
||
# же дальности), это единственная доступная улика. Удваивает рабочую
|
||
# дальность ценой роста ложных треков с 5.2 до 9.1 на километр.
|
||
enable_accumulator: true
|
||
acc_near: 55.0 # ближе этого покадровый тракт справляется сам, м
|
||
acc_gain: 1.5 # опора, засчитываемая за полный контраст
|
||
# --- обученное считывание MBON ---------------------------------------
|
||
# Те же слои грибовидного тела, другой учитель: веса KC→MBON обучены
|
||
# различать предмет и обстановку на метках, изготовленных физикой
|
||
# (tools/make_training_set.py). Заменяет ручную формулу веса улики.
|
||
# Путь подставляется launch-файлом (artifacts/mbon_readout.npz в пакете);
|
||
# пустой — работает прежняя ручная формула.
|
||
mbon_path: ""
|
||
enable_mbon: true
|
||
# Резкость вероятности: вес наблюдения p**1.5. Ложных на незнакомой линии
|
||
# 23.5 → 14.7 на км почти без потери дальности (EXPERIMENTS п. 17.4).
|
||
mbon_power: 1.5
|
||
mbon_blend: 1.0 # 1 — только модель, 0 — только ручная формула
|
||
# --- вычисления ----------------------------------------------------------
|
||
# Сетчатка, ламина и кластеризация — на видеокарте, если PyTorch её видит
|
||
# (контейнер с --gpus all), иначе и при любом сбое — на процессоре.
|
||
# Результат одинаков: те же операции в тех же типах (EXPERIMENTS п. 21).
|
||
# Видеокарта поднимается в фоне: пока греются ядра CUDA, кадры считает процессор.
|
||
device: auto # auto | cuda | cpu
|
||
d_min: 4.0 # ближе этого не смотрим, м
|
||
d_max: 220.0 # дальше физического предела прибора смысла нет, м
|
||
fov_deg: 30.0 # полусектор обработки по азимуту, °
|
||
min_rays: 4 # минимум лучей на кандидата
|
||
|
||
# --- память тоннеля ---------------------------------------------------
|
||
# Без неё штатные конструкции тоннеля не подавляются и ложных тревог заметно больше.
|
||
memory_path: "" # путь подставляется launch-файлом
|
||
|
||
# --- вывод ------------------------------------------------------------
|
||
publish_markers: true
|
||
publish_debug_cloud: false
|
||
brain_view: false # вид мозга: для демонстрации, не для замеров задержки
|
||
# scheme — нарисованная схема нейропилей;
|
||
# cloud — 139 255 нейронов коннектома FlyWire на своих местах;
|
||
# hybrid — панели решётки сверху и облако нейронов снизу (по умолчанию).
|
||
brain_style: hybrid
|
||
brain_period: 0.2
|
||
brain_scale: 1 # масштаб вида мозга: 2–3 — картинка для 2K/4K (атласы x2, x3)
|