elmot писал(а):Господи, делать здоровую штуку на таком убогом МК
![Sad :(](http://roboforum.ru/images/smilies/sad.gif)
Упасть-то не пытается?
Господа, я понимаю ваш флуд по поводу выбора нами контроллера Arduino,
![Sorry :sorry:](http://roboforum.ru/images/smilies/sorry.gif)
мы прекрасно понимаем, что этот МК "игрушка для детей", но как раз в этом то и состоит его привлекательность. Дело в том, что, решение любой задачи должно быть адекватно поставленной цели, мы не шли путем "цель оправдывает средства", т.е. покупаем дорогущий профессиональный МК и используем его возможности на 10%, а остальные аппаратные и программные ресурсы просто простаивают, но за то ЭТО БУДЕТ КРУТО!!!
![Cool 8)](http://roboforum.ru/images/smilies/dirol.gif)
в данном случае выбор именно этого контроллера был обусловлен несколькими иными факторами, а именно:
1. низкая стоимость контроллера, проект сам по себе большой и цена комплектующих играет не малую роль;
2. как вы верно сказали в посте ниже, мы легко перейдем на любой другой МК при необходимости в этом (пока такой необходимости нет);
3. при этом Arduino обладает достаточно удобной средой программирования;
4. большим количеством портов;
5. легкостью адаптирования в любую программно-аппаратную среду;
и 6. самое главное - в первом посте знакомства я написал, что данный робот конструируется как прототип для создания других робото-устройств, это как стартовая площадка для конструирования, а там уж на сколько фантазии и денюжков хватит!
Единственное, что на сегодняшний день планируется это переход на Arduino DUE, в нем и шина 32 разряда против 8-ми в MEGA, и частота 84 МГц против 16 в MEGA. Только планируем переход, а когда он будет осуществлен еще не известно.
Добавлено спустя 43 минуты 17 секунд:сочувствую. уже б давно робот сам ездил, а не под управлением человека.
Дело в том, что такую тривиальную задачу, как просто ездить не натыкаясь на препятствия мы давно решили, при этом решена она была именно на Arduino, без привлечения ПК. Не нужен здесь монстр ROS на Linux, не нужен KINEKT, это как раз то, когда используются аппаратные и программные средства совсем не адекватно поставленным целям. Если создается машинка которая будет кататься по комнате объезжая кресла и табуретки, при этом на борту у нее Core-i7, то все основное время этот процессор просто будет простаивать, а стоимость его совсем не адекватна решенной задачи.
Мы пошли другим путем:
Наш робот программно и аппаратно разделен на несколько уровней:
1. На самом низком уровне находится сама платформа, это металлическая рама, корпус головы и рук, крепеж, винтовые соединения, кабель каналы и прочее. Это вроде как скелет у человека;
2. Выше находятся двигатели, все возможные приводы, датчики. Это как мышцы и нервные окончания;
3. Далее микроконтроллер, который считывает данные с датчиков, делает их предварительную обработку и подготовку для передачи в компьютер, а так же принимает от компьютера команды и формирует управление на двигатели и привода платформы. Это как бы нервная система у человека;
4. И выше всех стоит ПК, именно он и производит окончательную обработку всей полученной от сенсоров информации, принимает решения о дальнейших действиях и выдает МК управляющие команды. Это высшая нервная деятельность т.е. мозг.
Именно такой иерархией обусловлен выбор всех аппаратных и программных средств робота. Это позволило нам снизить стоимость оборудования равномерно распределив функции между всеми устройствами и возложить на каждый модуль именно те задачи которые он может решить.
К вопросу о ROS. К сожалению, мы не смогли разобраться с ним, хотя имеется компьютер с Linux и установленным ROS. Просто среди нас нет специалиста по этой ОС, а изучать заново нужно время. Да и запуск ROS не простая задача. Мы застряли на том, что сборку пакетов при каждом старте программы нужно делать заново и все это вручную, а это куча команд и открытых терминальных окон, в общем мы оставили ROS на потом. Может кто и сможет нам помочь из roboforuma?!
Добавлено спустя 39 минут 12 секунд:Хотелось бы поделиться наработками по OpenCV и KINECT.
Это действительно отличные штуки! Особенно при применении их в паре. OpenCV как библиотека компьютерного зрения имеет огромные возможности в обработке видео потока, это распознавание лиц, распознавание объектов, выделение движущихся объектов, текинг и прочее, прочее, прочее. А KINEKT может выдавать не только видео ряд для обработки в OpenCV, но и карту глубины сцены и скелетон детектированного человека и трекинг лица и еще аудио поток с четырех направленных микрофонов. В общем, в связке, эта парочка может заставить вашего робота жить и адекватно реагировать на окружающую среду. Чем мы успешно в нашем проекте и пользуемся.
Приобрели сенсор KINECT:
![s6987106.jpg](./download/file.php?id=31210)
- s6987106.jpg (11.33 КиБ) Просмотров: 13502
Подключили к ПК и получили следующую картинку:
![s5552886.jpg](./download/file.php?id=31211)
- s5552886.jpg (11.88 КиБ) Просмотров: 14014
Это и есть карта глубины сцены, получить которую мы так долго мечтали. Чем ярче объект, тем он ближе находится к сенсору. Теперь нужно перехватить поток данных от Kinect-а и можно будет научить робота ориентироваться в пространстве. Использовать эти данные можно будет для реализации SLAM.
Метод одновременной навигации и построения карты (SLAM от англ. Simultaneous Location and Mapping) — метод, используемый роботами и автономными транспортными средствами для построения карты в неизвестном пространстве или для обновления карты в заранее известном пространстве с одновременным контролем текущего местоположения и пройденного пути.
Т.е. наш робот сможет свободно перемещаться в любом помещении не натыкаясь на предметы и обходя их. Кроме того Kinect умеет детектировать фигуру человека и отслеживать движения рук, ног, головы, туловища, а значит мы сможем научить робота отличать человека от любого другого предмета интерьера. И еще сенсор имеет встроенные микрофоны с помощью которых робот сможет поворачиваться на источник звука и распознавать речь.
В общем эта очень крутая штучка!!!
Начинаем с ней разбираться.
Вот, к примеру, полученная от сенсора трехмерная картинка моего кабинета. Картинка получена с IR камеры с наложением текстур цветной камеры сенсора:
![s5814034.jpg](./download/file.php?id=31212)
- s5814034.jpg (11.13 КиБ) Просмотров: 13882
Вот полученные мной скелетоны от KINECT-а:
1. картинка с видео-камеры сенсора -
![s0335376.jpg](./download/file.php?id=31213)
- s0335376.jpg (10.92 КиБ) Просмотров: 14049
2. картинка с картой глубины от IR-камеры сенсора -
![s1934746.jpg](./download/file.php?id=31214)
- s1934746.jpg (8.11 КиБ) Просмотров: 13485
3. ну и собственно то, что я получил на выходе - два человека стоят перед сенсором, KINECT возвращает скелетоны и мы отрисовываем их в окне. Самое главное это то, что известны координаты всех узлов (суставов), таким образом можно четко детектировать движения и жесты человека, и жестами управлять роботом. Кстати, эту функцию можно применять и не только в робототехнике. Это как SmartTV с управлением жестами! там конечно не кинект, но идея та же, можно сделать устройство которым управлять при помощи жестов.
![s7471359.jpg](./download/file.php?id=31215)
- s7471359.jpg (7.05 КиБ) Просмотров: 13491
Разобрались с отслеживанием лица в KINECT. Пришлось очередной раз (скорее всего не в последний) полностью переписать программный код робота, за то, теперь все работает так как планировалось, и даже немного лучше. Теперь код устроен так, что имеется три функции при помощи которых детектируется фигура, голова или лицо человека, это делается несколькими способами: алгоритмами KINECT производится поиск фигуры или лица, а так же дополнительно была введена функция поиска лица человека методами библиотеки компьютерного зрения OpenCV. При таком функционале вероятность обнаружения человека увеличилась почти в двое, значительно уменьшились ошибки детектирования и ложные срабатывания, которые имели место быть раньше. Но все же еще программу стоит немного доработать, но это уже мелочи, которые будут доведены в процессе.
Вот скриншот работы программы:
![s5781925.jpg](./download/file.php?id=31216)
- s5781925.jpg (8.85 КиБ) Просмотров: 13222
В открытых окнах можно видеть: 1) детектированный скелетон, 2) в окне видео наложенная на детектированное лицо маска, 3) в левом верхнем углу окна с видео - координаты x, y и z лица, 4) а также методы которыми был детектирован человек (в данном случае faceKINECT и skeletonKINECT). Методы faceKINECT и skeletonKINECT являются основными методами детектирования фигуры и лица, а метод faceOpenCV дополнительный метод работающий на близких расстояниях, т.е. когда дистанция от сенсора до лица человека менее 40 см. Это расстояние является критичным для KINECT, ближе сенсор не видит объекты, но в реальности вполне возможна ситуация когда человек окажется в этой слепой зоне сенсора, вот тут то и включается метод faceOpenCV, который позволит роботу видеть нахала пытающегося заглянуть LUM-у (так зовут нашего робота) прямо в глазки. Хотя, надо сказать, что при включенном NEAR_RANGE (ближний режим), если KINECT захватывает лицо, то держит его до совсем близкого расстояния между лицом и сенсором, когда уже и само лицо не помещается в кадр. Вот пример того как это выглядит. На фотографии ниже я приблизился к сенсору на расстояние менее 20 см. Сенсор достаточно стабильно удерживает маску на лице, более того, прорисовывает мимику.
![s1371990.jpg](./download/file.php?id=31217)
- s1371990.jpg (14.93 КиБ) Просмотров: 13390