РЕКЛАМА НА ФОРУМХАУС @Patison, Cпасибо, интересно, но я нахожусь на очень низком образовательном уровне программирования, потому вопросов даже не созрело. Могу только накапливать информацию.
Давненько я не писал здесь ничего. Но все это время ни на минуту не прекращалась моя работа над роботом. Основная работа идет над программным обеспечением. Но и железо нужно не забывать. Некоторое время назад установил на робота бортовой контроллер, написал программные тесты и проверил как робот может двигаться.
Занимаясь зрением робота, я установил, что камерам, установленным на нем, мешает сама роборука. Временно расположил стереокамеру на отдельной конструкции. Вот что пока получается: стереокамера получает карту глубины, которую потом программа преобразует в облако точек с реальными расстояниями до них от камеры. Каждую точку я окрашиваю цветом, который имеется в реальном изображении. И затем произвожу визуализацию полученной сцены, чтобы можно было и мне понаблюдать за полученным результатом. Видео я получил качественное, но Youtube при сжатии все перепортил. Но все равно кое-что видно:
Я реальное разрешение не измерял пока что, т. к. позже включу камеры на более высокое разрешение. Расстояние до предметов очень небольшое, так что, думаю, моему роботу точности хватит.
Пожалуйста, хорошо хоть кто то успел изучить Жалко что вы только часть моего сообщения процитировали, а то мне уже вкатили очередное предупрежление за эту ссылку и удалили пост, но уверен что кому то это интересно.
Вот кое-какие результаты моего использования ROS (Robot Operating System): Я написал простейший секвенсор и с клавиатуры теперь могу выставлять положение захвата в нужную точку пространства. Затем записываю эти координаты в файл. И делаю то же самое для других положений роборуки. После записи можно воспроизвести движение робота по записанным контрольным точкам. Движения робота порывистые потому, что в драйвер серв не успел добавить плавности движений. Это - довольно тривиальная программная система, но без таких простых тестов мне невозможно двигаться далее.
Все последнее время я работал над доработкой ROS - операционной системы роботов. Оказалось, что обработка изображений там довольно сильно отстала от жизни. Я заметил, что в основном демонстрируются экспериментальные роботы с Кинектом или чем-то похожим в качестве основного источника получения карты глубины наблюдаемого пространства. И обычное стереозрение там часто играет вспомогательную роль, особенно если учесть низкое качество получаемого результатата от стереокамер. В ROS используется версия OpenCV 2.4.8 без аппаратного ускорения. Мои попытки добавить внешний OpenCV 3.0 не привели к успеху. Два варианта библиотек компьютерного зрения мешались друг другу по крайней мере в моей ОС. Может быть кто-то их скрестил или смог заменить на 3.0 ? Мне пришлось сделать хак ROS, заменив ее библиотеку OpenCV 2.8 на 2.9 потому, что 2.8 почему-то отсутствует в официальньм хранилище. И, конечно, в ней появилась скомпилированная либа для GPU размером 420 мб. Кроме того, SDK CUDA от Nvidia пришлось понизить от 7.5 до 6.5 для совместимости с OpenCV 2.9 После этого мои приключения не закончились. Ноды ROS, предназначенные для стереозрения, были расчитаны на специальную стереокамеру, способную аппаратно синхронизировать левый и правый кадр по времени. Иначе при движении камеры происходило бы расстройство стереораспознавателя из-за слишком больших раличиях в кадрах стереопары. Я нашел прототип нужной мне ноды, но исходники оказались устаревшими. Прилось их допиливать. Далее, нода, способная выдавать облако точек в 3D пространстве со стереокамеры, не включала в себя возможность работать с графическим ускорителем. Я ее доработал. Кроме того, она брала файл, полученный от калибровки аппаратной стереокамеры. Пришлось дорабатывать и это. и последнее, один из алгоритмов с аппаратным ускорением получения карты глубины на основе стереопары мог работать как с черно-белым, так и с цветными изображениями, что приводит к существенному улучшению кчества результата. Это также было добавлено мною. Ниже представлен результат этой части моей работы по зрительной системе робота. Была достигнута скорость около 100 кадров в секунду для алгоритма CSBP с цветными стереопарами - довольно ресурсоемкого. Для меня это довольно хороший результат, позволяющий иметь резерв производительности системы.
Я подключил к роботу Kinect XBox One (Kinect 2). Далось это нелегко. Пришлось новенький только что купленный Кинект распоторшить. Я подпаял питающий кабель прямо к плате Кинекта и заменил кабель на обычный USB3. Потом подал питание от простого компьютерного блока питания. Для подключения к компьютеру под Линкус требуется определенный тип чипа USB3 контроллера. Не все они работают с Кинектом. Контроллер USB3 с Кинектом работает только если он установлен в разъем PCI-Ex1 V2. На моем компьютере оказался лишь один разъем такого типа и то PCI-Ex16 V2. Пришлось вытащить из него видеокарту и установить контроллер USB3, который занял только часть разъема. Видеокарту я поставил в разъем PCI старенькую, выпуска 2009 года, которая поддерживает только OpenGL 3. а для программного подключения Кинекта требовалась более свежая версия OpenGL. Пришлось поковыряться в коде драйвера, поставить множество экспериментов и, вот чудо, все заработало. Но т. к. вся нагрузка по получению и обработке огромного потока информации от Кинекта легла на процессор, то мой двухъядерный Интел на 3 ггц стал работать с полной загрузкой на оба ядра. И выдавать не 30, а только 12-18 кадров в секунду. Но и это уже неплохо, т. к. разрешайка камеры у Кинекта 1920х1080 30 кадров в секунду. И еще идет поток от инфракрасной камеры и данные о глубине пространства. Наконец-то теперь можно полноценно заняться другим фунционалом робота, основанным на зрении. Заняться Кинектом меня заставило крайне неравномерное покрытие облаками точек объектов, видимых с помощью стереокамеры. Алгоритмы, основанные на зрении, такие как навигация и др. отказывались работать от такого нестабильного источника зрительной информации. Стереозрение нужно, но его реально использовать совместно с другими источниками зрительной информации, такими как Кинект.
В силу обстоятельств мне пришлось подойти к созданию моего робота немного с другой стороны. В декабре 2015 и начале января 2016 года я занимался и продолжаю заниматься аватарной технологией. Основные элементы у меня уже работают, но предстоит их соединить вместе. В результате эта подсистема должна будет состоять из двух частей. Первая - это робоголова с камерой. Предполагается ее поворот по трем осям с помощью сервоприводов. Вторая - пользовательский модуль, основной частью которого будут очки виртуальной реальности с отслеживанием положения головы человека. Работать это должно просто: в какую сторону пользователь повернул голову, туда должна немедленно повернуться робоголова. При этом должна обеспечиваться бесперебойная передача потокового видео с минимально возможными задержками. Робоголова может быть основной на роботе, либо дополнительной, наблюдательной, не мешающей роботу выполнять свои автономные функции. Вот такой макет робоголовы я начал делать сегодня вечером. На фото виден бортовой компьютер Raspberry PI 2, USB хаб, WiFi свисток для беспроводной связи. Еще я добавлю литиевую батарею и преобразователи напряжения до 5 в. Камера пока обычная USB Logitech C270. Позже планирую заменить ее на родную камеру Raspberry PI, т. к. она работает быстрее благодаря отдельной параллельной шине. Такая система обеспечивает потоковое видео 30 к/с в H. 264 по сети с очень маленькой нагрузкой на процессор благодаря использованию GPU. В качестве клиентского процессора также выбран Raspberry PI. К нему я подключил платку гироскопа-акселерометра GY-521. Правда, в ней нет компаса. Но учитывая его большую шумность, надеюсь, что смогу обойтись без него. Нужно лишь будет почаще калиброваться. Еще я подключил к клиентскому компьютеру 7 дюймовый экран. Макет очков я еще не начал делать, но на столе основные составные части работают.
Вот результат моих трудов: С виду все простенько, но потребовалось много усилий, чтобы заставить все это работать. В макете желательно заменить камеру на родную Raspberry PI, т. к. через USB сейчас подключена и видеокамера и сеть. Здесь самое узкое место в макете камеры. Частично поэтому при высоком разрешении изображения не всегда передается нужное количество кадров. Есть и еще кое-что, над чем нужно потрудиться. Но это уже дело дальнейшей разработки. Видео озвучивает программный синтезатор речи.
Извиняюсь за офтоп, но пр моему это первая и единственная тема относящаяся к термину "умный". Такие автары смогут помогать во время пожаров и других спасательных операций, сохраняя жизни людей. Автор просто гений!
Вчера мне удалось сделать стековый Soft - процессор J1 https://www.excamera.com/sphinx/fpga-j1.html внутри FPGA и запустить простую тестовую программу - при нажатии кнопки гасить светодиод на отладочной плате. Попытаюсь продвнуться в сторону аппаратноаго AI путем реализации в FPGA моей Мегатронной сети.