Я пишу алгоритм для Frontier Based Exploration в c ++ с использованием имитации стадии игрока 2.0, и я застрял на определенной части. Насколько я понимаю, LaserProxy обеспечивает 180-градусное сканирование окружающей среды перед роботом. У меня есть цикл for, который повторяет все 180 лучей робота и анализирует каждый из них.
for (int i = 0; i < lp->GetCount(); i++) {
lp — указатель на LaserProxy.
Я проверил справочное руководство для laserProxy, и предполагается, что GetCount () возвращает количество точек в скане. Я предположил, что это всегда будет 180, так как это то, сколько лучей проецируется роботом, но это не так, иногда GetCount () равен 0, иногда — 90, и другие значения. Кто-нибудь может объяснить, почему это так?
Спасибо
Этот вопрос требует от вас взглянуть на код. Я внедрил лазерный сканер в другой симулятор робота с открытым исходным кодом. Что проще всего сделать, так это наложить лучи и рассчитать пересечение. Линии не обязательно должны пересекаться. Следовательно, может быть понятно, что когда они не пересекаются, точка (пересечения) вообще не будет возвращена. Файлы, которые вы должны посмотреть:
$ grep -lr scan_count . | grep drivers
./server/drivers/laser/laserrescan.cc
./server/drivers/laser/sickLDMRS.cc
./server/drivers/mixed/mricp/src/mricp_driver.cpp
Файл лазерного сканирования всегда возвращает 181 балл, но лазер SICK — нет, см. Код.
Других решений пока нет …