Робот объезжающий препятствия
- Войдите на сайт для отправки комментариев
В данной статье хочу поделится, как можно быстро и не дорого собрать робота.
Пилить и сверлить я конечно люблю, но нет такой возможности, так как у меня нет мастерской, гаража и даже балкона, по этой причине я купил готовый комплект деталей для робота.
Комплект выглядит так же как на фото
Робот состоит из следующей комплектации:
* Набор для сборки механики робота
* Arduino Nano v.7
* http://carduino.ru/product_info.php?products_id=1938Драйвер двигателей
* http://carduino.ru/product_info.php?products_id=1925Ультразвуковой дальномер
* http://carduino.ru/product_info.php?products_id=1959Материнская плата робота
Сборка робота занимает 10-15мин.
Инструкция по сборке
Код программы робота получился тоже достаточно простым, но он выполняет то что от него требуется на все 100%
Робот обходит препятствия, даже с неподвижно установленным на него дальномером. Мне так и не удалось создать такую ситуацию из которой бы он не смог выбраться
Для управления роботом и для стабильной работы дальномера, я использовал <a href="http://cyber-place.ru/showthread.php?t=550">библиотеку CyberLib</a>
Вращение колес можно выравнять при помощи оптических энкодеров, но это уже тема для другой статьи.
Планировал выравнивать вращение колес при помощи ШИМ, но мне не пришлось этого делать, так как у меня они примерно одинаково вращаются
Схеиа робота CyberBot
Исходник для Arduino Nano v.7
#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сек. robot_go; } void loop() {Start uint16_t dist=GetDistance(); //производим замер if( dist < 40 && stat==255) //если дистанция меньше 40см { robot_rotation_left; delay_ms(140); robot_stop; } else if( dist < 40 && stat==0) //если дистанция меньше 40см { robot_rotation_right; delay_ms(140); robot_stop; } else if( dist > 39) {robot_go; stat=~stat;} //поехали!!! wdt_reset(); //покормить собаку, что бы она не сбежала End;} //*************************************************** 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(byte dur, word frq) { dur=(1000/frq)*dur; //расчет длительности бипа for(byte i=0; i<dur; i++) { D11_High; delay_us(frq); D11_Low; delay_us(frq); } }
#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сек.
robot_go;
}
void loop()
{Start
uint16_t dist=GetDistance(); //производим замер
if( dist < 40 && stat==255) //если дистанция меньше 40см
{
robot_rotation_left;
delay_ms(140);
robot_stop;
} else if( dist < 40 && stat==0) //если дистанция меньше 40см
{
robot_rotation_right;
delay_ms(140);
robot_stop;
} else if( dist > 39) {robot_go; stat=~stat;} //поехали!!!
wdt_reset(); //покормить собаку, что бы она не сбежала
End;}
//***************************************************
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(byte dur, word frq)
{
dur=(1000/frq)*dur; //расчет длительности бипа
for(byte i=0; i<dur; i++)
{
D11_High;
delay_us(frq);
D11_Low;
delay_us(frq);
}
}
На видео можно посмотреть то, что у меня получилось
<video>http://www.youtube.com/watch?v=0k1C0chtScs</video>
Следующий этап, это подключение <a href="http://cyber-place.ru/showthread.php?t=1046">Wi-Fi роутера</a> и видеокамеры
Случайно опубликовал черновой вариант, теперь не могу отредактировать
классный зверек
понятно, что скрытая (или даже не скрытая :) ) рекламма, но тем не менее
Мда, рекламой изрядно попахивает...
Мда, рекламой изрядно попахивает...
немного сбалансирую рекламу))
вот тут похожая платформа http://www.buyincoins.com/item/34695.html, сенсор http://www.buyincoins.com/item/6968.html, драйвер один http://www.buyincoins.com/item/11952.html второй http://www.buyincoins.com/item/11205.html и ардуинка http://www.buyincoins.com/item/10178.html
это для тех кто готов ждать но дешевле
Китайская платформа сделана из прозрачного и хрупкого акрила
Наша же платформа сделана из черного и глянцевого полистирола, он не такой хрупкий как акрил
Наша платформа шире китайской и имеет форму круга, что позволяет ей разворачиваться в любом направлении и не цепляться за рядом стоящие предмеры.
На нашей платформе есть отверстия для крепления севомоторов разного калибра, в разных положениях
Диски энкодеров больше в диаметре, они работают без ложных срабатываний
Китайские энкодеры работают через раз, так как у них оптический элемент на половину закрыт краем диска
Для нашей платформы есть материнская плата, на которую можно подключать дополнительные модули расширения и оптические элементы энкодера
У нас робот комплектуется вершней крышкой
Мы заказываем платформы в Москве, но Вы же понимаете что цены на услуги в Москве не Китайские
Поэтому итоговая цена немного выше Китайской
Китайская платформа может приехать к Вам расколотой, так как упаковывают они ее в бумажный конверт
С удовольствием отвечу на все Ваши вопросы
Внешний вид Китайского робота
чем этот отличается от предложенного выше?
http://carduino.ru/product_info.php?products_id=1942
Ну так я выше раписал все отличия, а этот я для сравнения выложил
Ну так я выше раписал все отличия, а этот я для сравнения выложил
вы в своем магазине не ориентируетесь???
круто! я дал ссылку на платформу за 400р, а вы выше дали ссылку на платформу за 800р, обе на вашем сайте, обе по фото и описанию одинаковые
Когда я читал Ваше сообщение ссылки небыло, возможео что Вы ее добавили позже
По Вашей ссылке только нарезаные из полистирола детали
Там же, описание того что входит в комплект
хорошая платформа для робота, у меня самого такая же(китайская) как carduino.ru выше писал - акрил очень хрупкий.. в момент сборки второй этаж на две части развалился..
У меня Китайская акриловая платформа, треснула при сверлении отварстия, если найду ее сфотографирую обязательно и выложу здесь
да наверно ваша платформа крепче, но она и дороже в два раза. Так что и тот и тот вариант имеет право на жизнь. У меня китайская платформа лежала без дела пока не увидил ваш пост, за что вам спасибо. Благодаря посту вдохновился запустить свой смарт кар.
Сегодня запустил. Сделал некоторые корректировки в логику работы - при долгом движении вперед сделал откаты назад и повороты, при длительных разворотах сделал откаты назад и смену направления. Это позволило избавиться от попадания в ловушки. не смотря на то, что такой смарт кар с одним неподвижным ултрасоником весьма слеп.
Кстати не могу понять почему если машина едет к препятствию под углом, она его в упор не видит. Иногда даже пытается лесть на стенку хотя датчик находится к стенке перпендикулярно. Можно как-то програмно обыграть?
На видео скитания по кухне, где основная посдтава - ножки стульев за которые кар цепляется не видя их. Думаю поставить акселерометр, чтобы ловить такие цепляния с кружением по кругу вместо движения вперед. Имеет смысл?
Все покупал в китае. Платформа по ссылке выше за примерно 460р, ултрасоник за 66р, шилд для управления моторами 165р, вольтметр 52р, отсек для батарей заменил на 2x18650 за 30р. Понадобились еще винты и две детали с 3д принтера.
скетч
видео http://www.youtube.com/watch?v=sgUKik5Yuj4
Для развития планирую поставить пару датчиков (может по периметру еще ултрасоники, акселерометр), возможно голосовой модуль
Для питания спаяю buck-boost который будет давать стабильные 8в вне зависимости от напряжения батареи и сделать нормальный buck для питания 5в ардуины и серв (может поставлю одну или несколько серв), сейчас питание через 7805 на UNO, но это расточительно для батареи
возможно проапгрейджю motor shield или заменю. L293D греется прилично, их можно усилить припаяв сверху еще одну или несколько микросхем. Этот шилд от адафрутс со своей библиотеков и не просто позволяет управлять четырьмя моторами постоянного тока, но и регулирует их отдачу через ШИМ. Вместо двух DC можно включить два шаговика. Кроме того еще две сервы можно воткнуть
я думаю с таким же успехом он у вас и без ултрасоника препятствия объезжал бы :)
Если Вы заметили, на моем роботе УЗ датчик стоит в глубине, это дает много приемуществ
1-У датчика есть мертвая зона 2-4см, он не может определить такое маленькое расстояние
2-Чем глубже на платформе датчик тем шире его зона срабатывания перед роботом
Для измерения дистанции нужно не усреднять , а фильтровать ложные срабатывания.
У меня установлен 1 УЗ датчик и робот не натыкается на стены. На видео видно что в ловушки он тоже не попадает
я думаю с таким же успехом он у вас и без ултрасоника препятствия объезжал бы :)
ну не совсем, все таки ултрасоник когда срабатывает позволяет быстрее находить решение
так дело в том, что мое виде в реальнои окружении, а не в искуственном как видео выше. разве не в этом разница?
про мертвую зону тоже подумал, надо бампер сделать
чем рьянее вы рекламируете себя, тем хуже о вас впечатление, не перестарайтесь, тут все же не рекламный щит, а обмен опытом
по какому признаку идет фильтрация?
Я специально сниму видео со стульми и стенами, раз Вы не верите
Я всего лишь пытаюсь Вам доказать что разница в цене с лихвой компенсируется
Считываю 5 замеров, потом из этих 5 замеров берутся только те замеры которые чаще всего повторяются
Ложными замерами так же считаются, замеры меньше 5 см и больше 4метров
я не про веру писал, вы не слышите, да ладно
ответьте лучше на вопрос про фильтрацию
...
я не про веру писал, вы не слышите, да ладно
Извиняюсь был не внимателен
Про фильтры выше ответил
ясно, спасибо
видимо ваша библиотека сама не фильтрует, у меня другая библиотека и при отладке я не вижу ложных срабатываний
Библиотека как раз и фильтрует
Вот я вызываю фильтр из библиотеки
dist=(find_similar(sensor, size_buff, 58))/58; // //фильтруем показания датчика и переводим в см
этот кусок кода я видел, но что толку если не известно, что делает find_similar
для невнимательных - еще раз:
Для управления роботом и для стабильной работы дальномера, я использовал <a href="http://cyber-place.ru/showthread.php?t=550">библиотеку CyberLib</a>
гляньте, хорошая библиотека, много полезного
гляньте, хорошая библиотека, много полезного
упорное всучивание всего что имеет отношение к вашему магазину выдает вас с головой даже не смотря на другой ник :))))))))))))))))))))))))))))
Я бы попросил не выдвигать не обоснованые обвинения.
Вот мне больше заняться нечем, как другие ники регистрировать и самому себя нахваливать.
Прям детский сад какой то
P.S.
Попросите админа проверить мой IP адрес и com
ахтунг! параноики на форуме!
axill, вы и впрямь думаете, что искреннее предложение посмотреть на полезную библиотеку ( и ликвидировать пробел в знаниях, вообще-то) - это закамуфлирование желание магазина "всучить" вам что-то? большего бреда не встречал, у вас чсв зашкаливает
carduino, не спорьте с больными, ведь если даже если у нас ипы разные, это же не доказывает, что мы разные люди :)
Я подозреваю, что axill опять будет думать, что это я написал.
Вопрос для axill , а Вас е смущает то что дата регистрации у com 06.09.2013 ?
Логично предположить, что я бы для того что бы похвалить себя, зарегистрировался 21.12.2013
carduino.ru я подазреваю что вы уже все заранее спланировали наверно уже в 2012 был план как обмануть axill`a.. показывая ему библиотеку с другого ника. Вирус в библиотеке при распаковке автоматически заказывает Робота объезжающего препятствия с вашего магазина. axill человек осторожный умный(посмотрите с какой легкостью робот препятствие обижает, код точно гений писал) и не повелся на вашу удавку.
axill, вы и впрямь думаете, что искреннее предложение посмотреть на полезную библиотеку ( и ликвидировать пробел в знаниях, вообще-то) - это закамуфлирование желание магазина "всучить" вам что-то? большего бреда не встречал, у вас чсв зашкаливает
раз ошибся, прошу извинить. Я не просил вас мне рассказывать про библиотеку, оттого и была такая реакция. Меня интересовал лишь один кусок кода в скетче, не более.
carduino, не спорьте с больными, ведь если даже если у нас ипы разные, это же не доказывает, что мы разные люди :)
ну ошибся, с кем не бывает. Однако вы со своей стороны с легкостью клеймите человека не разобравшись. Бог вам судья
раз ошибся, прошу извинить. Я не просил вас мне рассказывать про библиотеку, оттого и была такая реакция. Меня интересовал лишь один кусок кода в скетче, не более.
кхм.... а это что тогда?
ответьте лучше на вопрос про фильтрацию
этот кусок кода я видел, но что толку если не известно, что делает find_similar
или вы сами с собой разговариваете, вопрос был риторический и отвечать не надо было? типа , не знаю и знать не хочу, и не дай бог мне кто-нибудь расскажет, как там действительно делается фильтрация ложных измерений
:)
еще раз со всей ответственностью заявляю, что к carduino и его магазину не имею никакого отношения, и мой акцент на библиотеке вызван всего лишь желанием разьяснить, как же именно происходит фильтрация ложных замеров у дальномера
давайте лучше про самих роботов
axill, он у вас так смешно бегает по кухне - как хомяк какой-то! не надо бампер, так веселее :)
Прошу прощения.
К сожалению снять видео не ролучилось, так как не нашел УЗ сенсора
В магазине дальномеры тоже закончились :(
Сейчас они уже на таможне, надеюсь до нового года приедут
На видео скитания по кухне, где основная посдтава - ножки стульев за которые кар цепляется не видя их.
Добрый вечер. Мысли по платформе. Поставить дальномер с другой стороны (если есть такая возможность) и изменить направление движение платформы. Дуги не дадут цепляться колёсам за ножки стульев.
На видео скитания по кухне, где основная посдтава - ножки стульев за которые кар цепляется не видя их.
Добрый вечер. Мысли по платформе. Поставить дальномер с другой стороны (если есть такая возможность) и изменить направление движение платформы. Дуги не дадут цепляться колёсам за ножки стульев.
спасибо. Тоже думал об этом. Они не полностью прикрывают колеса, но полтолщины будут "обтекаемы", а за вторую половину цепляться будет явно меньше
Я вот думаю городить ли поворот датчика сервой как на многих видео которые я видел или же просто несколько датчиков поставить? Угол обзора у них на удивление очень узкий
Если разместить сенсор в глубине платформы на расстоянии 10-15 см от морды, то одного сенсора будет достаточно. К томуже ничто не мешает в программном коде настроить минимально допустимой расстояние
Диаграмма направленности датчика
Можно использовать 2 сенсора
Я вот думаю городить ли поворот датчика сервой как на многих видео которые я видел или же просто несколько датчиков поставить? Угол обзора у них на удивление очень узкий
По датчикам затрудняюсь сказать. Опыта и знаний у меня пока нет. Но тема платформы интересна. Читаю форум, изучаю код. В планах либо собрать свою платформу, либо купить готовую и проводить на ней так сказать эксперименты. Датчик хочу поставить самодельный.
Датчик хочу поставить самодельный.
А что за датчик если не секрет? LIDAR?
Нет, намного проще. Датчик на ИК-лучах. Работает просто. Есть препятствие - на выходе 1, нет препятствия - 0.
Вот собрал макет, работает так: http://youtu.be/hc6w7kAhdpg
Схему датчика (подробное описание) взял отсюда: http://www.getchip.net/posts/094-datchik-priblizheniya-na-ik-luchakh-attiny13/
а какая логика будет движения? у этого датчика разве настраивается расстояние срабатывания?
Логика движения такая же как и у carduino.ru. Есть препятствие - платформа разворачивается, нет - прямо едет. По программированию - с датчиком который я собираюсь использовать, получается примитивно, потому как замеров делать не нужно (расстояние срабатывания можно настроить на датчике). Меня пока это устраивает, потому как я уже писал, только начинаю. Придёт понимание - буду усложнять.
У ИК бампера есть недостаток, ИК луч не отражается или плохо отражается от тканевых поверхностей
Дистанция срабатывания датчика будет зависить от типа отражаемой поверхности.
Случайно опубликовал черновой вариант, теперь не могу отредактировать
вы watchdog использовали. Под него нужно бутлоадер другой прошивать?
У Arduino Nano v.7 он уже есть в прошивке
Спасибо за отклик и с Наступающим!
watchdog к прошивке не имеет отношения, он в железе
но у многих ардуино есть баг в бутлоадере из за которого ардуину колбасит от бесконечных перезагрузок в случае срабатывания watchdog. Как я понял в вашей Nano баг исправлен. Со своей тоже разобрался по этой статье http://habrahabr.ru/post/189744/
Вы сами себе противоречите
watchdog к прошивке не имеет отношения, он в железе
и
но у многих ардуино есть баг в бутлоадере из за которого ардуину колбасит от бесконечных перезагрузок в случае срабатывания watchdog.
Это все равно как написать что таймеры к прошивке не имеют отношения, так как они в железе
Стоит не забывать что, любое железо конфигурируется и взаимодействует с програмной частью контроллера
Я не ищу повода поспорить) я себе не противоречу
но что касается вочдога, он в бутлоадере не настраивается, просто бутлоадер глючит если в бутлоадере нет отключения вачдога
но что касается вочдога, он в бутлоадере не настраивается, просто бутлоадер глючит если в бутлоадере нет отключения вачдога
А отключение и включение , это не настройка?
Что касается Arduino Nano V.7 то исправления вносились в сам bootloader
А вы ищите способ поспорить) у вас крутая прошивка, не сомневаюсь
на голом МК вачдог работает, а с прошивкой ардуино не работает. Стоит ли при этом говорить, что прошивка ардуино "настраивает" вачдог? По моему нет, но не суть, спорить нет смысла