Цель написания данной статьи — показать, как на реальном оборудовании реализовывать системы сканирования объектов и создавать их трехмерные модели выносным сканером профильного типа.
Существует несколько различных подходов к сканированию, но мы рассмотрим только облака точек. Набор точек, полученных в результате сканирования, описывает поверхность сканируемого объекта, которая легко поддается обработке (фильтрация, удаление выбросов, т. д.). Однако при использовании выносных сканеров, как правило, возникают проблемы искажения получаемых моделей в связи с движением сканера над поверхностью исследуемого объекта. Решение данной проблемы мы и рассмотрим в рамках этой статьи.
Постановка задачи
Разработать подход к пересчету координат точек из системы координат сканера в абсолютную систему координат выносного узла
Сихронизовать импульсы сканера с тактом движения выносного узла
В качестве методологической базы были использованны сканер профильного типа Gocator-2380A и манипулятор Mitsubishi-RV-2FB-D, который выступает в качестве выносного узла для транспортировки датчика сканера над поверхностью объекта. Основная идея, лежащая в основе решения, заключается в реализации единного источника правды, который должен синхронизировать такты движения робота со сканирующим импульсом и пересчетом системы координат сканера в систему координат робота.
Описание процесса взаимодействия
Процесс обмена данными построен на принципе взаимодействия между сервером на Python и роботом. Данный сервер позволяет удаленно управлять движением робота посредством передачи команд на управляющий контроллер по протоколу TCP/IP. Сам же процесс работы системы состоит в приеме управляющей программой команды и точки, а передвижение завершается установкой высокого уровня напряжения на логический выход для запуска процесса сканирования. Схематично система с установленным сканером в схват робота может быть изображена в следующем виде:
Такт движения робота равен 0,5 мм, а завершение такта сопряженно с установкой высокого уровня на контактном разъеме контроллера робота.
В качестве объекта для сканирования выбрана деталь, напечатаная на 3D-принтере, изображенная ниже:
Во время сканирования робот будет передвигать сканер вдоль оси абсолютной системы координат. Запустив процесс, получим модель поверхности:
Теперь повернем сканер вокруг оси Z на 15°, в результате чего получим следующую модель:
Как видно, объект искажен. Это вызвано тем, что в системе не учтены повороты сканера. Для решения данной проблемы необходимо каждый раз производить пересчет координат точек из связанной системы координат сканера в абсолютную систему координат робота, чем мы и займемся ниже.
Преобразование координат
Для преобразования искаженных моделей к эталоному виду необходимо будет решить две задачи:
Поворот с помощью матрицы направляющих косинусов
Смещение облака
Рассмотрим эти этапы поподробнее. C начала опишем вращение вектора вокруг трех ортогональных осей. Для описания сложного поворота используется матрица, равная произведению трех матриц, соответствующих этим поворотам.
Матрицы поворота вектора вокруг каждой из осей выглядят следующим образом:
Для оси X:
Для оси Y:
Для оси Z:
Так как используется сканер профильного типа, то для отображения высоты каждой точки и ее расположения вдоль оси X вектор фиксируемых значений можно представить в виде:
Для совпадения направления осей с направлением осей абсолютной системы координат необходимо инвертировать ось и развернуть систему координат на +90°. Таким образом вектор примет вид:
Так как умножать матрицы нужно строго в порядке совершения поворота вектором сканера в абсолютной системе координат, то следует обратится к документации к роботу для определения порядка поворотов. Порядок поворотов для использованного робота определяется как поворот вокруг оси Z на угол C, затем вокруг оси Y на угол B и вокруг оси X на угол A. Таким образом, результирующая матрица поворота примет вид:
В результате транспонирования матрицы М получается матрица, позволяющая преобразовать координаты вектора из связанной системы координат сканера в абсолютную систему координат робота.
Также следует учесть смещение точки, относительно которой сканер производит снятие профиля. Эта величина является смещением излучателя лазера относительно центра сканера и равна 97 мм. Вектор смещений тогда можно записать как:
где = 97мм
Таким образом, для расчета координат повернутого вектора сканера в абсолютной системе координат робота необходимо умножить транспонированную матрицу обобщенного поворота на вектор сканера с учетом смещения излучателя:
А результирующие варажения для X, Y, Z будут выглядеть следующим образом:
Для X:
Для Y:
Для Z:
В результате применения описанных выше преобразований скан объекта с поворотом по оси Z на 15° изменится следующий образом:
Как видно, искажение пропало, а значит пересчет выполнен корректно. Но все же проверим это, наложив сканы моделей при различных углах поворота сканера:
Как можно заметить, сканы почти совпадают, а отклонение от эталонного измерения связано с неточностью крепления сканера в схвате робота и составляет 1,4 мм по оси X и 0,9 мм по оси Y.
Для решения этой проблемы будем использовать метод ICP.
Метод ICP является итеративным и позволяет определить поворот и смещение между облаками точек. В его основе лежит принцип нахождения такой трансформации точек одного облака, что квадрат ошибки расстояния до соответствующих точек другого облака будет минимальным.
Итеративность метода заключается в том, что в процессе решения ошибка постепенно сводится к локальному минимуму. Как и другие оптимальные методы, например метод наискорейшего спуска, ICP хорошо работает в случае, когда начальные условия заданы наиболее удачно.
Применение алгоритма IPC выполняется в 6 основных шагов:
Расчет начального смещения и поворота между парой выбранных точек (Point Selection)
Для успешного выбора пар точек существует несколько методов, и использовать их нужно в зависимости от типа данных. Например, для RGB-D отлично подходит метод Henr2010, а для определения совпадений точек, содержащих выпуклости и вогнутости, лучше использовать метод Rusi2001.
Объедение точек в пары (Matching Points)
Процесс состоит в нахождении двух соответствующих друг другу точек и представляет собой нахождение общих точек облаков либо их пересечений итерационно, что не очень опитимально и на больших объемах данных может работать довольно медленно. Поэтому процесс нахождения общих точек может быть ускорен путем представления облака точек в виде k-d дерева.
Оценка точности найденных пар (Weighting of Pairs)
Производится путем оценки множества совпадающих точек и проставления весов для каждой из найденных пар. Для этого так же существует несколько способов. Один из них заключается в том, чтобы дать большую оценку тем точкам, которые наиболее близки друг к другу. Другой способ заключается в оценке близости точек в соответствии с заданным пороговым значением.
Оторжение несовпадающих точек (Rejecting of Pairs)
Большинство проблем при использовании ICP возникают из-за наличия шумов измерений либо неполного перекрытия облаков. Основной подход к их решению заключается в том, чтобы отклонить пары точек, в которых одна из точек лежит на границе облака. Данный шаг основан на пороговом значении оценки расстояния, как было описано выше.
Расчет ошибки (Error Metric)
Для этого задается начальная величина ошибки, которая должна быть минимизирована. В рамках данной статьи используется сумма квадратов расстояний между каждой парой точек, что может быть представлено в виде двух множеств A и B, принадлежащих множеству Rn:
Задача нахождения ошибки будет состоять в поиске вектора , который будет минимизировать функцию ошибки , где функция ошибки имеет вид:
где является функцией, которая обеспечивает ближайшего соседа точек a точкам b в множестве B.
Минимизация ошибки (Minimization Algorithm)
Пусть изначально t = 0, а ближайшие пары определены. Расчитаем производную dt и сведем ее к нулю в соответствии с методом наименьших квадратов. Затем сдвинем все точки множества A на dt и начнем процесс сначала, то есть найдем новые пары точек и для них рассчитаем новую производную dt. Процесс будем продолжать до тех пор, пока не будет достигнут локальный минимум.
Применение метода ICP
Отсканируем модель с различной ориентацией сканера и совместим модели на одном графике:
Эталонной будет являться модель, полученная при нулевом угле отклонения сканера и на графике выше изображенная желтым цветом.
Далее, применяя алгоритм описанный выше, получим наложение облаков точек друг на друга:
Полученный результат говорит о том, что метод ICP успешно справился с поставленной задачей и позволил найти трансформацию между двумя облаками точек, полученными при сканировании поверхности под различными углами ориентации сканера. Облака точек полностью совместились, даже несмотря на то, что модели содержали в себе шумы.
Вместо выводов
В результате рассмотрения описанной проблемы можно сказать, что использование комбинированных подходов к совмещению результатов сканирования может дать вполне неплохой результат, который может быть полезен в оценке дефектов исследуемого объекта програмными средствами.