Scorpio, обязательно постараюсь создать новую тему по KINECT-у, с радостью поделюсь теми наработками которые имею, единственная проблема, это катасторофическое отсутствие времени, но я все же постараюсь выложить инфу по кинекту. Касаемо вашего вопроса про старый XBOX360. К сожалению, как говорят об этом производители, KINECT под XBOX и KINEKT под Windows действительно отличаются, и не только наличием у последнего переходника и адаптера питания (это действительно не является проблемой, спаять всегда можно), самое главное отличие в том, что в кинекте под винду можно включить "NEAR MODE", или по русски "ближний режим". Именно в этом режиме сенсор "видит" объекты на расстоянии от 40 см. и может отслеживать фигуру сидящего человека. По этому, я думаю вы сможете использовать в проекте свой KINECT, но с большими ограничениями по дальности. Двигатели сенсора установленного в голове нашего робота не используются, да их и нет, в том смысле, что сенсор стоящий в голове робота разобран и из него удалено все не нужное (двигатели в том числе), а вот сенсор в теле робота скорее всего будет использовать двигатели для изменения угла зрения. По поводу использования линз для сенсора ничего сказать не могу, мы этим не пользовались, но подозреваю, что для использования в SLAM этот фокус может не пройти. Линзы скорее всего исказят реальную картину расстояний и сенсор будет выдавать не верную информацию. Хотя, если попытаться построить таблицу соответствия измерений сенсора с линзами и без, то, наверное, можно будет вывести формулу зависимости.
Давеча взялся за реализацию SLAM. Нагуглил массу информации по этому вопросу. Как совершенно верно писал Nesenin, заморочки есть, и попыхтеть придется, но, как говорит моя мамочка - "головой нужно не только кушать", иногда еще и думать. Вот подумал я и решил, что все же самостоятельно справиться с реализацией SLAM вполне возможно, но сложно. И так, начну с того, что нужно получить карту глубины сцены от сенсора KINECT, это уже имеется. Далее два варианта: 1. нужно вытащить из этой карты все точки глубины и должным образом их обработать; 2. используя OpenCV искать на карте глубины, по градациям серого, находящиеся в поле зрения сенсора объекты. Кажется оба метода вполне приемлемы, но второй более простой. Дело в том, что в OpenCV, как вы знаете, реализовано масса нужных нам функций, в данном случае нас интересует детектирование объектов по цвету. Затем, привести данные о цвете объекта в соответствие с таблицей расстояний и получить глубину сцены с расстояниями до препятствий. Далее на основании полученных метрических данных построим карту помещения, ну, а алгоритм A* позволит нам построить маршрут передвижения в пределах полученной карты. Вот так, с первого взгляда кажется все просто, посмотрим как будет реализовываться. Попробуем реализовать. Процесс буду описывать по мере получения результатов.
Хочу немного подытожить проделанную работу и обозначить перспективу. Наша команда стремится к совершенству - создаем робота способного стать start-up проектом с возможностью интеграции его компонентов в другие проекты. Если кому интересно, то я еще раз перечислю все возможности которые мы уже смогли заложить в наш проект: 1. создана универсальная, трехколесная платформа 2. платформа оснащена IR датчиками спереди и сзади 3. платформа оснащена механическим бампером с контактными датчиками прикосновения 4. на платформу установлена голова робота в которую встроен Microsoft KINECT 5. робот обучен детектированию и трекингу фигуры человека 6. робот обучен детектированию и трекингу лица человека 7. в тело робота встроен второй KINECT для реализации SLAM 8. получена трёхмерная карта глубины сцены позволяющая построить карту помещения в 3D проекции Сейчас ведутся подготовительные работы для реализации SLAM. В дальнейшем планируется следующее: 1. реализовать SLAM 2. приладить к роботу манипуляторы 3. научить робота распознавать человеческую речь 4. научить робота моделировать человеческую речь 5. научить робота более-менее адекватно общаться с человеком 6. научить робота брать и переносить с помощью манипуляторов всевозможные предметы 7. научить робота узнавать людей с которыми он когда то уже общался 8. сделать возможным интеграцию робота в существующие системы (охрана, умный дом, удаленное присутствие и т.п.) Ну и самое главное, повторюсь, робот создается как открытая платформа, это значит что любые модули, как программные так и механические, можно будет использовать в других проектах. В свою очередь, мы готовы поделиться своими наработками со всеми кому это будет интересно. Вот, как то так!
Последний раз редактировалось lorry 24 фев 2014, 23:15, всего редактировалось 1 раз.
Вот и сделан первый шаг в реализации SLAM. Из полученной от сенсора KINECT карты глубины сцены (на рисунке окно справа внизу "depth_body") вдоль вертикальной "линии сканирования" глубины, что по центру окна, считываются данные о глубине и записываются в массив. Для визуализации, прочитанные данные выводятся в окно "Depth" (слева внизу). В этом окне вид по "линии сканирования" представлен сбоку, т.е можно видеть соответствие коробок в окне "depth_body" вертикальным линиям в окне "Depth" с указанием расстояния в мм. от сенсора до коробок (цифры зеленым цветом). В окне "video_body" (слева вверху) изображение видео-камеры сенсора с видом на те же коробки. Хочу обратить внимание на преимущества и недостатки такого сканирования по сравнению с другими сканерами (к примеру со сканирующим лазерным дальномером forum10/topic12095.html Лазерный дальномер сканирует сразу всю область вокруг робота на котором он установлен, т.е. мы можем мгновенно получать карту препятствий с разворотом в 360 градусов, это бесспорно преимущество, ведь при быстрой смене сцены в помещении (к примеру, зашел человек) робот сможет так же быстро отреагировать на ситуацию. Недостаток этого метода состоит в том, что лазер сканирует в одной плоскости. Нашему роботу, оснащенному сенсором KINECT для того чтобы получить общую картину помещения придется развернуться на 360 градусов самому. Но за то, значительное преимущество в том, что KINECT видит не в одной плоскости (как лазер), а сразу строит картинку в 3D проекции на высоту до 2,5 метров от пола. Конечно это не важно, если робот сам высотой 15-20 см, но если платформа имеет рост до полутора метров этот вопрос становится критичным. Ведь если лазерный сканер детектировал, к примеру, ножку стола как препятствие то робот такой высоты как наш, не оснащенный подобным устройством как KINECT, посчитает что подъехать к этому препятствию можно, но как правило столешница стола выдается дальше ножки стола и конечно, неизбежно, произойдет столкновения робота со столешницей. Возможны и другие подобные ситуации. Кроме того лазерный дальномер не в состоянии детектировать объекты, будь то человек или какой то предмет интерьера, KINECT это может. Вот скриншот по описанию:
С манипуляторами выбор пока не сделан, есть два варианта 1. купить готовые 2. изготовить самостоятельно Оба варианта имеют свои плюсы и минусы. Пока думаем на каком остановимся.
сочувствую. уже б давно робот сам ездил, а не под управлением человека.
Да уж, легко видео с инета разместить, а вы пробовали хотя бы запустить ROS? Не так то это и просто как кажется. По ссылкам на "робокрафт" ровным счетом ничего не сделаешь, описание все на старые версии ROS, да и те от статьи к статье разные версии рассматривают. Народ, может кто научит как работать с этим росом?
Будем. В общем сборка из исходников у меня не получилась, обычно пользуюсь дебианом, тут пришлось поставить убунту. Тут forum87/topic11877-15.html#p293264 А на убунту все стало из пакетов, причем сразу. Поставил иксы - и черепашка начала ползать.
сочувствую. уже б давно робот сам ездил, а не под управлением человека.
Да уж, легко видео с инета разместить, а вы пробовали хотя бы запустить ROS? Не так то это и просто как кажется.
дык у меня дела еще хуже. я вообще не могу образцы нормального кода на c\C++ юзать. вот смотрите post279976.html#p279976
в LabVIEW программирую используя те инструменты, которые 1 человек сделал. а как че другое заюзать уже не могу(например звук с микрофонов вывести). а Вас, коль вы все примеры освоили, мотивирую другое готовое ПО освоить. ибо не благодарное это дело изобретать свой велосипед, который к тому же по сложности на уровне научных разработок.
Наконец, есть немного новостей для публикации по нашему проекту. Так как наша команда разработчиков увеличилась в составе, то пришлось подыскивать новое помещение для размещения проекта, прежде весь проект находился в моем рабочем кабинете (было тесно и не удобно работать). В итоге, выделили площадь, в основном офисе фирмы, не очень большую (около 18 кв.м.), но имеющую перспективу расширения. В помещении размещены рабочие столы, приобретен ПК, измерительные приборы, блоки питания, прочая оснастка, приспособления и инструмент. Рядом имеется мастерская оснащенная слесарным инструментом, верстаком, а так же токарным, сверлильным и заточным станками, в общем проект обзавелся собственной "жилой площадью". Новое помещение назвали громко - "Лаборатория робототехники". Так что в последние три недели почти все время уходило на оснащение лаборатории. Теперь уже закончили, возвращаемся к проекту. Нужно сказать, что параллельно с созданием лаборатории, кое какие работы по самому проекту, все же велись: В последнее время, по большей части пытался найти подход к реализации одометрии и SLAM. Но наткнулся на грабли. Как уже отмечалось раньше, для одометрии будет использован второй KINECT. Для подключения двух сенсоров к одному компьютеру необходимо чтобы у последнего было два USB хаба. Т.е. каждый KINECT должен работать с собственным USB-контроллером 2.0 или выше. Это связано с тем, что поток данных от сенсора идет непрерывно и занимает более 50% пропускной способности протокола USB 2.0. Но оказалось, что наш новый ПК, специально приобретенный для лаборатории и на котором предполагается отлаживать софт робота имеет только один встроенный USB hub, так что можно подключить только один KINECT. Казалось бы - не проблема, в свободный слот ставим внешний USB контроллер и вперед! Да не тут то было! Оказываются не все контроллеры могут корректно работать с KINECT-ом. Перебрали три штуки, разных производителей, с разными чипами. Только третий от NEC заработал как нужно, остальные, обнаруживают сенсор и тут же его теряют, работает не стабильно, хотя, при этом другие USB устройства (флэшки, диски, принтеры, камеры) работают вполне корректно. В общем, народ, имейте в виду, что сенсор работает не со всеми внешними USB хабами. Кроме этого, командой был написан код, с использованием OpenCV, для распознавания лиц людей. Как вы знаете, наш робот умеет детектировать и отслеживать, поворотом головы (а в перспективе и тела), фигуру и лицо человека. Теперь он научится еще и узнавать людей с которыми когда то уже встречался, или знакомиться с человеком которого робот еще не знает. Программный код по распознаванию лица пока еще сыроват, но вполне стабильно работает, безошибочно узнает знакомые лица, правда с незнакомыми трудности возникают, но работы ведутся и думаю скоро все будет в порядке. Пока такие новости по проекту.
Последний раз редактировалось lorry 18 мар 2014, 02:58, всего редактировалось 1 раз.