Синхронизация Intel D455 и лидара Livox Mid-360 на STM32
Зачем нужна синхронизация? Она позволяет совместить облака точек не только геометрически, но и по времени. Без этого движущиеся объекты оставляют на воксельной карте шлейфы из вокселей, а при движении самого аппарата искажаются и неподвижные объекты. Готовые внешние устройства синхронизации существуют, но они избыточны. Автор предлагает реализовать всё на одной плате STM32, которая уже управляет моторами, используя только периферию микроконтроллера — таймеры, независимо от основного ядра.
Почему выбрана частота 30 Гц? Камера RealSense может выдавать 5, 15, 30, 60 или 90 Гц. Но все эти частоты имеют собственные временные сдвиги: реальная частота 30 Гц — это 30.015 Гц из-за внутренних часов. Если подавать ровно 30 Гц, кадры будут дропаться. Поэтому Intel рекомендует использовать одну камеру как ведущий генератор. Из доступных режимов именно 30 Гц оптимально кратны 10 Гц сканирования лидара.
Почему нельзя просто отправлять кадры на воксельную карту по мере поступления? Временной конвейер показывает, что камера с глобальным затвором захватывает кадр почти мгновенно, а лидар сканирует постепенно, по мере вращения шпинделя. При частоте 30 Гц между кадрами камеры проходит 33.3 мс, а лидар тратит 100 мс на полный оборот. Из-за этого рассинхронизация между кадром и сканом нарастает: первый кадр отстаёт на 15 мс, второй уже на 18.3 мс, а третий — на 51.6 мс. Если аппарат движется, ошибка становится критической. Синхронизация должна обеспечить постоянный и минимальный временной сдвиг.
Дополнительная сложность — случайный азимут лидара. Из-за физических ограничений моторов и дрейфа кварцевых часов точка начала сканирования постоянно плавает. Мотор не может поддерживать идеально точные обороты, поэтому облако точек каждый раз начинается с произвольного места. Всё это делает аппаратную синхронизацию необходимой для корректного объединения данных в единую карту занятости.
Источник: habr.com
Поделиться