Создайте 2d карту, если каждый узел знает только расстояния до 3 ближайших узлов

Я ищу библиотеку C ++ или комбинацию библиотек.

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

Мое решение было бы построить треугольники на расстоянии (есть ли библиотека для этого), а затем сделать карту из этих треугольников (библиотека?)

2

Решение

Если это приложение реального мира, график никогда не будет согласованным. Я имею в виду, если вы начнете строить треугольники с одного конца, когда вы закроете цикл, он никогда не будет совпадать. «Замкнуть петлю» — горячая тема исследования в робототехнике. Ваша проблема как-то проще, чем в общем случае, но вам может повезти, просто выбрасывая расстояния в нелинейном решателе наименьших квадратов. Погуглил именно то, что вернуло это Церера-решатель.

При использовании нелинейного решателя наименьших квадратов общего назначения вам необходимо определить вектор решения и целевую функцию. В вашем случае, скажем, у вас есть 100 узлов. Это означает, что вы ищете 200 значений; значения x и y для каждого узла. Этот 200-элементный длинный вектор является вашим вектором решения. Ваша целевая функция — это назначение этих 200 сотен элементов, так что расстояния известных пар в назначении максимально соответствуют вашим доступным данным. Для 100 узлов по 3 известных расстояния у вас есть 300 уравнений, для которых вы хотите минимизировать ошибку. Боюсь, вам придется выяснить API-интерфейс ceres, чтобы применить это решение к вашей проблеме, поскольку у меня нет личного опыта с ним.

Как примечание, переход от бесшумного решения, основанного на том, что данные будут согласованы с тем, который связан с шумом, по существу будет начинаться с нуля …

1

Другие решения

Других решений пока нет …