2

Я получаю pointcloud от моего лидара, который в основном представляет собой множество массивов точек в 2D декартовых координатах. Есть ли эффективный способ обнаружения углов, образованных такими двумерными точками?Угловое обнаружение в массиве точек

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

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

Вот визуализация данных я получаю: enter image description here

ответ

0

Есть много много способов сделать это. Первое, что я попробую в вашем случае, это связать с допустимым порогом расстояния для разрывов, используя естественное лидовое сканирование порядка точек. Тогда это становится проблемой либо оценки локальной куратуры, либо, как вы это делали, роста и слияния линейных сегментов.

+0

На самом деле я забыл о естественном упорядочении точек сканирования лидара. То, что я пробовал сейчас, - это сглаживание, чтобы уменьшить шум, обнаружение всех минимумов, которые меньше, чем, по крайней мере, n соседних точек, затем слить минимумы, которые слишком близки друг к другу, наконец, извлечь кластеры точек вокруг каждого минимума и выполнить обнаружение линии и проверить, являются ли обнаруженные строки ортогональными. – Mehdi

+0

Hum, имеет смысл, любопытный. Шаг сглаживания кажется мне подозрительным - зачем выбрасывать информацию, прежде чем вы точно знаете, что это «шум»? У вас есть модель для шумового процесса? Кроме того, если при помощи «определения линии» вы подразумеваете установку прямой линии соседних точек, помните, что вам понадобится роумистеризатор (например, LMedS, переходящий полный RANSAC/MLESAC, вероятно, является избыточным). Роубизатор - это то место, где правильно вводить модель шума, так как вы делаете свою модель явной (т. Е. Прямую) на этом этапе. Наконец, пожалуйста, поддержите/принимайте, если вы найдете ответ полезным. –