【Отслеживание цели】Отслеживание 3D-облака точек
【Отслеживание цели】Отслеживание 3D-облака точек

1. Предисловие

  1. В предыдущем блоге было представлено отслеживание визуального направления. Однако в сегодняшней сфере интеллектуального вождения радарное восприятие по-прежнему занимает основную роль. Сегодня я расскажу о 3D-отслеживании облаков точек.
  2. Визуальное сопровождение вхождения является результатом обнаружения цели. Радарное отслеживание вхождений может быть результатом обнаружения облака точек,Это также может быть результатом кластеризации облаков точек. В дополнение к некоторым структурам данных, соблюдайте расчеты,Алгоритм радиолокационного слежения примерно такой же, как и метод визуального слежения, представленный ранее.
  3. В этой статье в основном обсуждается, как радар выполняет вычисления согласования и корреляции, а также анализируется структура кода. Эталоном является код Аполлона, и общий эффект довольно хорош.

2. Каталог кода

Радар отслеживает все файлы кода

3. Интерпретация кода

3.1. Описание файла.

Здесь много файловых переходов, поэтому новичкам может быть сложно читать код. Лучше всего записать, что делает каждый файл, и составить общее впечатление.

.h-файл

описывать

object_track.h

class ObjectTrackSet class ObjectTrack

object.h

(1) struct Object; (2) struct SensorObjects

tracked_object.h

Кадр типа данных struct TrackedObject, облако точек

hm_tracker.h

struct TrckerParm — это все параметры

kalman.h

Прогнозирование фильтра Калмана, состояние, уравнение движения

hungarian_matcher.h

Соответствие целей

track_object_distance.h

Вычислить соответствующие веса матрицы

geometry_util.h

Вычисление центроидов всех точек, расчет 3D-боксов, преобразование данных и т. д.

feature_descriptor.h

Рассчитать характеристики формы цели

Некоторые дополнения:

геометрический центр облака точек (центр масс)

Состояние угла курса по умолчанию (1, 0, 0)

Размер целевой коробки длина, ширина, высота (длина, ширина, высота)

целевое состояние (x, y, z, vx, vy, vz)

Уравнение состояния Равномерная скорость x = x + v * t

3.2. Структура Кодекса

Общая последовательность чтения кода следующая.

(1) Отслеживание

hm_tracker.cpp

bool HmObjectTracker::Track()

A Инициализация B Входные данные преобразования данных C Прогноз D Сопоставление E Обновление F Результат

Файл hm_tracker.cpp Функция отслеживания, по сути, является основной функцией всей операции.

(2) Матч

hungarian_matcher.cpp

void HungarianMatcher::Match()

A Вычислить корреляционную матрицу B Вычислить связные компоненты C Сопоставить каждый подграф

Существует множество методов сопоставления. Основным из них является метод A для расчета корреляционной матрицы.

(3) Расчет корреляционной матрицы

track_object_distance.cpp

float TrackObjectDistance::ComputeDistance()

Эта функция на этот раз является нашим главным героем. Рассчитайте расстояние между мишенями и затем проведите венгерский матч.


4. Расчет корреляционной матрицы

Эта часть является ядром, давайте ее внимательно изучим. Перехватить часть кода

Язык кода:javascript
копировать
double TrackObjectDistance::s_location_distance_weight_ = 0.6;
double TrackObjectDistance::s_direction_distance_weight_ = 0.2;
double TrackObjectDistance::s_bbox_size_distance_weight_ = 0.1;
double TrackObjectDistance::s_point_num_distance_weight_ = 0.1;
double TrackObjectDistance::s_histogram_distance_weight_ = 0.5;

// измерение нового_объекта track_predictпредсказывать 
float TrackObjectDistance::ComputeDistance(
    ObjectTrackPtr track, const Eigen::VectorXf& track_predict,
    const std::shared_ptr<TrackedObject>& new_object) {
  // Compute distance for given track & object
  float location_distance = ComputeLocationDistance(track, track_predict, new_object);  // медленная скорость быстрый
  float direction_distance = ComputeDirectionDistance(track, track_predict, new_object);
  float bbox_size_distance = ComputeBboxSizeDistance(track, new_object);
  float point_num_distance = ComputePointNumDistance(track, new_object);
  float histogram_distance = ComputeHistogramDistance(track, new_object);

  float result_distance = s_location_distance_weight_ * location_distance +
                          s_direction_distance_weight_ * direction_distance +
                          s_bbox_size_distance_weight_ * bbox_size_distance +
                          s_point_num_distance_weight_ * point_num_distance +
                          s_histogram_distance_weight_ * histogram_distance;
  return result_distance;
}

4.1、ComputeLocationDistance

Вычислите разницу расстояний до центральной точки. Диапазон значений: [0,

+\infty

когдатекущий_объект середина V <= 2m/s Евклидово расстояние

когдатекущий_объект середина V > 2m/s Разложено по направлению скорости Установите систему координат на основе направления скорости и направления вертикальной скорости. Отклонение в направлении скорости проецирования составляет 1/2 отклонения расстояния, Отклонение в направлении проецируемой вертикальной скорости в 2 раза превышает отклонение расстояния. Квадратный корень используется для нахождения окончательного отклонения.

Это можно просто понять так: когда цель движется с высокой скоростью, отклонение смещения в направлении скорости будет немного больше. Чтобы компенсировать это отклонение, вес смещения в направлении уменьшается для расчета окончательного отклонения смещения. (это мое понимание).

4.2、ComputeDirectionDistance

Рассчитайте расстояние в направлении. Диапазон значений [0,2].

Вычислите значение косинуса смещения в направлении скорости cos_theta и, наконец, верните 1-cos_theta.

Это также легче понять. Когда направление разницы смещений между объектом и обнаруженным объектом аналогично направлению прогнозируемой скорости, больше считается, что они являются одной и той же целью. Когда значение cos равно 1, это означает, что отклонение смещения и прогнозируемая скорость находятся в одном направлении, и считается, что два объекта легче сопоставить.

Когда отклонение смещения равно 0, значение cos по умолчанию установлено на 0,994.

4.3、ComputeBboxSizeDistance

Диапазон значений[0,1]

Это немного сложно, позвольте мне объяснить это подробно

old_dir — это направление текущей цели. Если значение отклонения по умолчанию равно 0, значение по умолчанию — (1, 0, 0).

new_idr определяет направление цели

old_size Размер текущей цели (bbox.length, bbox.width, bbox.height)

new_size определяет размер цели

nter&pos_id=img-506WdR2l-1706774251770)

Вычислите dot_00, dot_01. dot_00 можно понимать как угол между двумя целевыми направлениями, dot_01 можно понимать как угол между целью и вертикальным направлением другой цели. Угол, превышающий 90 градусов, здесь не рассматривается, поскольку целевое направление может быть альфа или 180-альфа.

Почему две ситуации? Это можно понимать как выравнивание длины и ширины цели (мы заранее не знаем соответствующую длину и ширину цели) и сначала оценку на основе состояния угла цели. Когда угол меньше 45°, длина цели совпадает с длиной другой цели. В противном случае длина цели выравнивается с шириной другой цели, и окончательно рассчитывается соотношение разницы длины или ширины, а минимальное значение принимается в качестве окончательного значения.

4.4、ComputePointNumDistance

Диапазон значений[0,1]

Эта формула относительно проста

Это легко понять. Чем ближе числа облаков точек, тем легче их сопоставить.

4.5、ComputePointNumDistance

Диапазон значений[0,3]

Расстояние гистограммы: разделите все облака точек цели на 10 интервалов по одной оси координат, а затем разделите их в общей сложности на 30 интервалов по оси xyz.

Если все облака точек расположены равномерно, то характеристики целевой формы shape_features = [0,1] * 30

Конкретный процесс расчета shape_features. Возьмем в качестве примера ось X, то же самое применимо к осям Y и Z.

Рассчитайте максимальное значение оси X целевого облака точек и разделите интервал на 10 равных частей. Запишите количество облаков точек всех точек за 10 интервалов.

Если он расположен совершенно равномерно, то результат

shape_feature_x = [0.1]*10

shape_features = shape_feature_x + shape_feature_y + shape_feature_z

Зная определение характеристик формы цели, мы можем получить

4.6、result_distance

Итоговое расстояние представляет собой сумму пяти расстояний, рассчитанных выше, умноженную на соответствующие коэффициенты.

5. Результаты

потому что rviz Результаты отслеживания облака точек не могут быть отображены, тогда мы помещаем результаты радарного отслеживания topic запиши это,а потом визуализируй。когда然也可以在过程серединасохранить изображение。

Общий эффект отслеживания хороший. хвалить!

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода