vjache / r1

Simple, Arduino based, robot.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

R1 - Простейший робот основанный на Ардуино

Железо

  1. Гусеничное шасси с отсеком под 4 AA батарейки
  2. [2 двигателя] (http://amperka.ru/product/dc-motor-12mm)
  3. Конторллер Arduino UNO
  4. Плата расширения управления двигателями (Motor Shield)
  5. Плата расширения для дополнительного оборудования (TroykaShield)
  6. [Малая макетная плата] (http://amperka.ru/product/breadboard-mini)
  7. [Ультразвуковой дальномер (сонар)] (http://amperka.ru/product/hc-sr04-ultrasonic-sensor-distance-module)
  8. Компас
  9. 4 батарейки AA -- питание для двигателей
  10. 1 крона -- питание для "мозгов"
  11. Провода

Софт

Для улучшения структуры программы используется не голый Си, а C++. Таким образом, код представлен следующими классами:

  1. CompassDev -- класс обертка для работы с компасом
  2. SonarDev -- класс обертка для работы с ультразвуковым дальномером
  3. ChassisDev -- класс обертка для работы с шасси, т.е. с двумя двигателями
  4. Algorithm -- класс определяющий поведение робота
  5. Log -- класс обертка для последовательного порта (удобно при тестировании)

Поведение робота определяется методом Algorithm::run(), и заключается в следующем:

  1. Старт (нажимаем резет)
  2. Сон 15 сек -- этот шаг сделан для удобства, чтобы можно было успеть поставить робота в исходную позицию.
  3. Калибровка компаса -- робот при этом вращается и измеряет максимум и минимум магнитного поля по X и Y (в собственной системе координат). Это необходимо для того что бы учесть эффект от искажений вносимых магнитным полем собственных электродвигателей.
  4. Сканирование -- робот вращается и измеряет расстояния до препятствий внося данные в массив размером 12 (на момент написания). То есть 360 градусов поделены на 12 секторов (по 30 градусов каждый) и каждый сектор содержит усредненное расстояние до препятствия). Процесс сканирования, тем самым, снимает показания с компаса и сонара по мере вращения.
  5. Выбор направления движения -- состоит в поиске направления для которого расстояние до препятствия оказалось максимальным, на основе массива данных из предыдущего шага. Если выбранное направление менее критического (< 50 см), то переходим к шагу 2.
  6. Поворот -- робот вращается до тех пор пока не примет нужное положение соответствующее выбранному направлению.
  7. Движение вперёд -- робот движется до тех пор пока не сблизится с препятствием на расстояние менее 30 см.
  8. Переход на шаг 4.

Цели у робота как таковой нет кроме быть может той чтобы ездить в сторону самой длинной обнаруженной размерности при этом вовремя останвливаясь перед препятствием.

Ближайшие планы

  1. Выложить видео с роботом в действии.
  2. Выложить фотографии с деталями устройства робота.
  3. Немного усложнить алгоритм. 3.1. Например не выбирать после сканирования того направления откуда только что приехал робот. 3.2. Поворачивать не в одну сторону а в ту сторону в которую короче поворот.

About

Simple, Arduino based, robot.


Languages

Language:Arduino 100.0%