roboforum.ru

Технический форум по робототехнике.

Робот объезжающий препятствия

Наше хобби — конструировать и программировать.
Демонстрация готовых роботов и устройств построенных своими руками.

Робот объезжающий препятствия

Сообщение CyberLab » 27 май 2013, 16:35

Так как мне предстоит заниматься новым проектом, роботом которого мне безвозмездно отдал demon333, за что ему огромный респект!
По этому я решил опубликовать свой старый проект, так и не получивший в свою комплектацию Веб камеру с роутером Nexx wt3020
Проект получился достаточно бюджетным и простым, думаю что сынишка подрастет и доведет его до ума.

plat9_mid.jpg
plat9_mid.jpg (28.86 КиБ) Просмотров: 20134


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

Робот состоит из следующей комплектации
Роутер Nexx wt3020
Платформа
Arduino Nano v.7
Ультразвуковой датчик
Драйвер двигателей
Инструкция по сборке

Сборка робота заняла 10-15мин.
Код программы робота получился тоже простым, но он выполняет то что мне требуется
Робот обходит препятствия, даже с неподвижным дальномером. Мне так и не удалось создать такую ситуацию из которой бы он не смог выбраться
Для управления роботом и для стабильной работы дальномера, я использовал библиотеку CyberLib

Схема робота
Cyberbot3.png


Видео того что получилось


Исходник
Код: Выделить всёРазвернуть
#include <CyberLib.h>
#include <avr/wdt.h>

#define motors_init {D4_Out; D5_Out; D6_Out; D7_Out;}
#define robot_go {D4_Low; D5_High; D6_High; D7_Low;}
#define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;}
#define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;}
#define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;}

#define size_buff 5 //размер массива sensor
uint16_t sensor[size_buff]; //массив для хранения замеров дальномера
uint8_t stat=0;

void setup() 
{
  motors_init;  //инициализация выходов моторов
  D11_Out; //динамик
  D14_Out; D14_Low; //пин trig ультразвукового сонара
  D15_In; //пин echo  ультразвукового сонара
  for(uint8_t i=0; i<12; i++) beep(50, random(100, 1000)); //звуковое оповещение готовности робота
  wdt_enable (WDTO_500MS);    //Сторожевая собака 1сек.
}

void loop()
{Start 
  uint16_t dist=GetDistance(); //производим замер

    if( dist < 10) {rotation(stat, 255);} else   
    if( dist < 20) {rotation(stat, 200);} else
    if( dist < 40) {rotation(stat, 130);} else
                   {robot_go; stat=~stat;}           //поехали!!!
     
     wdt_reset(); //покормить собаку
End;}

//***************************************************
void rotation(uint8_t arr, uint8_t dur)
{
    switch (arr)
    {
    case 0:    robot_rotation_right;
      break;
    case 255:    robot_rotation_left;
      break;   
    }
    delay_ms(dur);   
    robot_stop;
}
//***************************************************
uint16_t GetDistance()
{
uint16_t dist;
for (uint8_t i = 0; i < size_buff; ++i) //производим несколько замеров
  {
    D14_High; delay_us(10);  D14_Low;  //запустить измерение
   dist = pulseIn(15, HIGH, 2400); //считываем длительность времени прохождения эха, ограничить время ожидания
   if(dist==0) dist=2400; 
   sensor[i]=dist;
   delay_ms(40); //задержка между посылками
   wdt_reset(); //покормить собаку, что бы она не сбежала
  }
  dist=(find_similar(sensor, size_buff, 58))/58; // //фильтруем показания датчика и переводим в см
  return dist;
}
//*************************************************** 
void beep(uint8_t dur, uint16_t frq)
{
  dur=(1000/frq)*dur;  //расчет длительности бипа
  for(byte i=0; i<dur; i++)
  {
    D11_High;
    delay_us(frq);
    D11_Low;
    delay_us(frq);
  }
}


Хотелось бы выслушать Вашу критику.
Последний раз редактировалось CyberLab 20 мар 2017, 03:21, всего редактировалось 9 раз(а).
Аватара пользователя
CyberLab
 
Сообщения: 319
Зарегистрирован: 02 фев 2013, 12:50
Откуда: Москва

Re: Робот объезжающий препядствия

Сообщение Artem » 27 май 2013, 21:35

Интересная вещь, но я бы использовал ИК радар, там программа проще, ещё неплохо было бы установить несколько датчиков, чтобы робот лучше всё видел или сделать так чтобы датчик вращался и снимал показания с разных угллв. А вобще класно получилось.
Artem
 
Сообщения: 7
Зарегистрирован: 27 май 2013, 15:48

Re: Робот объезжающий препятствия

Сообщение CyberLab » 28 май 2013, 00:52

Я пробовал с ИК радаром, к него есть недостаток, он сильно зависим от напряжения питания.
Учитывая тот факт что питаю робота напрямую от аккумуляторов, без стабилизатора, то получается полная лажа
Также при использовании ИК, потребуется источник опорного напряжения для АЦП и делитель на входе АЦП. К тому же ИК радар узконаправленный в отличии от УЗД и для него уж точно пришлось бы использовать сервомотор. Так что я бы не сказал что ИК радар в данном роботе был бы лучше и проще
А вот с УЗ дальномером как раз нет никаких проблем
Роль сервомотора выполняет сам робот, за счет дистанции 40см и широкого угла дальномера, робот своевременно обнаруживает препятствия как перед собой, так и сбоку и соответственно начинает разворачиваться и сканировать допустимое расстояние
Даже если он зацепится за какое нибудь препятствие которое он не увидел, то за счет круглой формы его начинает разворачивать лицом к препятствию, ну и соответственно он детектирует его и разворачивается пока не найдет выход
Несколько УЗД датчиков будут конфликтовать
Последний раз редактировалось CyberLab 30 май 2013, 00:24, всего редактировалось 1 раз.
Аватара пользователя
CyberLab
 
Сообщения: 319
Зарегистрирован: 02 фев 2013, 12:50
Откуда: Москва

Re: Робот объезжающий препядствия

Сообщение Artem » 28 май 2013, 07:52

Я не знаю что у вас там за схема с этим ИК датчиком, но у меня всё работает намного проще и без помех, вне зависимости от напряжения питания. Просто ШИМ на мк генерирует несущую, которая отражается от препятствия и возвращается на ТСОП, который подключён через транзисторный ключ к другой ноге МК и при возникровении сигнала на нём он передаётся на мк.
Если ставить много датчиков то при правильно постановки программы они не будут конфликтовать, я также проверял на ИК датчиках, ставил несколько по кругу, и они отлично взаимодействовали. Я попробую его обратно собрать (этого робота), и видео выложу
Artem
 
Сообщения: 7
Зарегистрирован: 27 май 2013, 15:48

Re: Робот объезжающий препядствия

Сообщение robovan » 28 май 2013, 08:39

неплохо)) а что за робота тебе демон отдал? прямо из Канады выслал что ли))))
Самое важное в жизни- найти человека , который смотрит на мир, так же как и ты:)
Аватара пользователя
robovan
 
Сообщения: 1536
Зарегистрирован: 04 сен 2012, 00:39
Откуда: Украина
ФИО: Владимир

Re: Робот объезжающий препядствия

Сообщение noonv » 28 май 2013, 09:03

Код: Выделить всёРазвернуть
{Start 

Код: Выделить всёРазвернуть
End;}

- это вообще компилируется? :)
Аватара пользователя
noonv
 
Сообщения: 600
Зарегистрирован: 21 май 2007, 22:57
Откуда: Калининград
прог. языки: C++

Re: Робот объезжающий препятствия

Сообщение CyberLab » 28 май 2013, 12:43

robovan писал(а):неплохо)) а что за робота тебе демон отдал? прямо из Канады выслал что ли))))

Робот находился в Москве
Изображение

Добавлено спустя 1 минуту 42 секунды:
noonv писал(а):
Код: Выделить всёРазвернуть
{Start 

Код: Выделить всёРазвернуть
End;}

- это вообще компилируется? :)

Компилируется без проблем и как видите работает, а что не нравится? Можно конечно и убрать, в моем коде не тот случай где нужно экономить каждый такт

Добавлено спустя 2 часа 48 минут 45 секунд:
Artem писал(а):Я не знаю что у вас там за схема с этим ИК датчиком, но у меня всё работает намного проще и без помех, вне зависимости от напряжения питания. Просто ШИМ на мк генерирует несущую, которая отражается от препятствия и возвращается на ТСОП, который подключён через транзисторный ключ к другой ноге МК и при возникровении сигнала на нём он передаётся на мк.
Если ставить много датчиков то при правильно постановки программы они не будут конфликтовать, я также проверял на ИК датчиках, ставил несколько по кругу, и они отлично взаимодействовали. Я попробую его обратно собрать (этого робота), и видео выложу

Я извиняюсь, думал что речь идет о дальномерах Sharp
Беспорно с ИК бампером на TSOP будет работать.
Только генерировать хардверным ШИМ-ом 38кГц не получится.
Также этот датчик не сможет измерять дистанцию.
Последний раз редактировалось CyberLab 20 мар 2017, 03:19, всего редактировалось 2 раз(а).
Аватара пользователя
CyberLab
 
Сообщения: 319
Зарегистрирован: 02 фев 2013, 12:50
Откуда: Москва

Re: Робот объезжающий препядствия

Сообщение Artem » 28 май 2013, 13:34

Почему не получиться, нужна только правильная настройка, хотя может дело в ардуино, я никогда им не пользовался поэтому не знаю какая там тактовая частота, но если разогнать хотя бы до 4 мегагерц то можно будет и более 36 килогерц выводить, если хотите могу код программы выложить, но на СИ будет.
А по поводу измерения расстояния: а зачем вам это, робот будет объезжать препятствия и без этого.
Artem
 
Сообщения: 7
Зарегистрирован: 27 май 2013, 15:48

Re: Робот объезжающий препятствия

Сообщение CyberLab » 28 май 2013, 13:50

Artem писал(а):А по поводу измерения расстояния: а зачем вам это, робот будет объезжать препятствия и без этого.

Для данного примера не спорю, измерять расстояние не нужно, но я изначально планировал использовать WR703N и удаленный сервер для навигации и отрисовки карты помещения(SLAM)

Artem писал(а):Почему не получиться, нужна только правильная настройка, хотя может дело в ардуино, я никогда им не пользовался поэтому не знаю какая там тактовая частота, но если разогнать хотя бы до 4 мегагерц то можно будет и более 36 килогерц выводить, если хотите могу код программы выложить, но на СИ будет.

Можно рассматривать не как ардуино , а как Atmega328 с частотой задающего генератора 16мГц
Последний раз редактировалось CyberLab 30 май 2013, 00:25, всего редактировалось 1 раз.
Аватара пользователя
CyberLab
 
Сообщения: 319
Зарегистрирован: 02 фев 2013, 12:50
Откуда: Москва

Re: Робот объезжающий препядствия

Сообщение Nesenin » 28 май 2013, 13:57

для SLAM, мне кажется, надо много точек и желательно угол 360. ждем когда начнут продавать post274181.html#p274181
Аватара пользователя
Nesenin
 
Сообщения: 1341
Зарегистрирован: 26 янв 2012, 03:59
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин

Re: Робот объезжающий препядствия

Сообщение Artem » 28 май 2013, 14:10

Мне кажется, что и для построения карт не нужен измеритель расстояния
Nesenin писал(а):для SLAM, мне кажется, надо много точек и желательно угол 360. ждем когда начнут продавать post274181.html#p274181

Да нет не нужен, можно сделать так чтобы робот крутился на маленьком участке "тыкаясь" в препятствия и записывая информацию
Artem
 
Сообщения: 7
Зарегистрирован: 27 май 2013, 15:48

Re: Робот объезжающий препятствия

Сообщение CyberLab » 28 май 2013, 14:11

для SLAM, мне кажется, надо много точек и желательно угол 360

У робота на платформе есть места для крепления сервы. Большое число точек всегда можно получить используя алгоритм Брезенхэма
Про RP-LIDAR читал, если цена будет адекватная, то популярная вещь получится у роботостроителей. Ждем начала продаж
Последний раз редактировалось CyberLab 30 май 2013, 00:26, всего редактировалось 1 раз.
Аватара пользователя
CyberLab
 
Сообщения: 319
Зарегистрирован: 02 фев 2013, 12:50
Откуда: Москва

Re: Робот объезжающий препядствия

Сообщение Nesenin » 28 май 2013, 16:42

эм. во-первых это какое то извращение заставлять робота крутиться\кататься чтобы добавить точек в карту.
во-вторых картостраительство для того и нужно что бы нивелировать ошибки расчета перемещений по одометрии методом проверки растояний до объектов с известными координатами.
может мы по разному понимаем SLAM
для меня ето

без всякой одометрии))только Lidar+IMU

Добавлено спустя 3 минуты 29 секунд:
PS я делаю подобие этого робота

и до полного счастья не хватает упомянутого сканируещего дальномера
Изображение
остальное все в продаже есть по адекватным ценам
Аватара пользователя
Nesenin
 
Сообщения: 1341
Зарегистрирован: 26 янв 2012, 03:59
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин

Re: Робот объезжающий препядствия

Сообщение robovan » 29 май 2013, 11:21

лидар рулит))) простота и точность. а платформу классную ты отхватил, аж жаба задавила)))))))))
Самое важное в жизни- найти человека , который смотрит на мир, так же как и ты:)
Аватара пользователя
robovan
 
Сообщения: 1536
Зарегистрирован: 04 сен 2012, 00:39
Откуда: Украина
ФИО: Владимир

Re: Робот объезжающий препятствия

Сообщение CyberLab » 29 май 2013, 20:11

robovan писал(а):Платформу классную ты отхватил, аж жаба задавила)))))))))

Согласен! Сам бы такую платформу не собрал, нет возможности
Последний раз редактировалось CyberLab 30 май 2013, 00:27, всего редактировалось 2 раз(а).
Аватара пользователя
CyberLab
 
Сообщения: 319
Зарегистрирован: 02 фев 2013, 12:50
Откуда: Москва

След.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10