В продолжении развития проекта работаем над одометрией (будь она не ладна!), и задумались над тем, как уменьшить слепую зону впереди робота создаваемую сенсором KINECT. Я имею в виду то, что, как известно, сенсор начинает "видеть" объекты с расстояния от 80 см и до 3,5 метров. Дальность три с половиной метра в условиях помещения вполне достаточно для робота, а вот 80 см слепой зоны спереди это очень много! Одним из первоначальных решений было установить сенсор как можно ближе к задней части робота, это сократило слепую зону на 20 см., но и этого в реальности не достаточно. И вот одному из нас в голову приходит идея развернуть сенсор вертикально. Как известно угол обзора сенсора составляет по горизонтали - 57 градусов, по вертикали - 43 градуса, т.е. теоретически развернув сенсор можно получить больший угол обзора. Мы провели эксперимент. Поставили рябом с роботом на подставке еще одни сенсор, но развернули его на 90 градусов:
Результаты эксперимента обнадежили. Действительно в таком положении сенсор захватывал по вертикали бОльшую зону, правда, естественно, обзор сузился по горизонтали, но это особо не является проблемой, т.к. такого угла зрения, по горизонтали, вполне достаточно для одометрии. Таким образом, у нас появилась надежда расширить угол обзора по вертикали и еще немного сократить слепую зону впереди робота.
Но возникла новая трудность - картинка возвращаемая сенсором тоже повернулась на 90 градусов. Нет проблем с видео, средствами OpenCV все это быстро приводится в порядок, а вот с картой глубины, которая как раз и используется в одометрии все намного сложнее. Пришлось написать алгоритм пересчета данных из линейного потока в структуру cvMat. Сложность была в том, что строки должны были стать столбцами, а столбцы напротив строками, и эту информацию (о строках и столбцах) нужно было извлечь из прямолинейного потока кадра, который изначально не представляет из себя ничего общего с видео кадром. Кроме того нужно было сохранить самое главное - данные о глубине сцены. В общем, после некоторых мучений, наконец добились положительного результата. Теперь угол зрения по горизонтали стал больше, а главное еще почти на 10 см. сократилась слепая зона и теперь составляет чуть больше 50-ти см. Конечно и это еще большое значение, но здесь помогают инфракрасные датчики и механический бампер установленные в передней части робота.
Для установки сенсора в тело робота пришлось немного видоизменить конструкцию туловища. Теперь робот с вертикальным KINECT-ом выглядит вот так:
А вот первые результаты печати на 3D принтере. Нарисовали и распечатали прототипы шестеренок для рук-манипуляторов робота: