Стол помощник

Тема в разделе "Глядите, что я сделал", создана пользователем zelanru, 14 июн 2013.

  1. zelanru

    zelanru Нерд

    Добрый вечер !
    Мой первый arduino только летит ко мне почтой, так что я его ещё ни разу не трогал и не видел в живую, но многое уже прочитал.
    Проект этот для людей "любящих" подумать.
    Нужен скетч для "двух-колёсной каталки".
    Как заставить кататься на двух колёсах и держать баланс, я так понял не проблема, но вот проблема заключается в следующем:
    -как заставить его преследовать хозяина ? (воткнуть в столик Wi-Fi шилд и заснуть в карман какой-то брелок за которым он будет следовать ? А на основе каких данных он будет понимать что хозяин ушёл и к нему надо пододвинуться ?)
    -какие нужны моторы что бы двигаться метровую-полтора метровую конструкцию + груз сверху ?
    Результат: за мной двигается столик на двух колёсах, я отдаляюсь на метр и он начинает преследование, при этом когда я захожу за угол срабатывает "парктроник" и он поворачиватся на ~20градусов и пытается найти другой путь ко мне, при этом я нажимаю кнопку на "брелке" и он пододвигается на 20 см и так каждый раз пока "парктроник" не поймёт, что он подъехал впритык.
    С уважением, Сергей.
     
  2. Mitrandir

    Mitrandir Гуру

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

    пеленговать по одной точке тоже сложно(если возможно).
    Да и 20 см, слишком близко по сигналу вайфая не заметить разницу особо..
     
  3. Mitrandir

    Mitrandir Гуру

    Как вариант преследования:
    1. на столе стоит серво мотор, который крутится то в одну, то в другую сторону, к плечу сервы привинчен ультразвуковой дальномер достаточной точности.
    2. ардуино, с помощью эхолота получает кадр расстояний по векторам в радиусе 180 градусов перед собой.
    3. так как стены неподвижны, то сравнивая изменения двух кадров сканирования пространства можно сделать вывод о перемещении хозяина
     

    Вложения:

    • table.jpg
      table.jpg
      Размер файла:
      81,3 КБ
      Просмотров:
      437
    zelanru нравится это.
  4. zelanru

    zelanru Нерд

    Mitrandir, большое спасибо за ответы, но всё же есть вопросы.
    1. Хорошая поправка по поводу баланса, всё же два колеса плохая идея. А вот серво мотор, который будет управлять эхолотом не будет ли он медленный ? А что произойдёт если я сверну за угол и он меня не увидит, поедет где в последний раз было препятствие(т.е. я) там побыстрей осмотреться, что успеть увидеть меня в первый раз, а потом уже второй раз "захватить" и следовать ?
    2. Может быть изготовить какую-либо другую систему поиска пути ? Например разбросать по квартире пару кнопок(как их соединить между собой ?) и на каждую кнопку забить свой маршрут. Например, я на кухне нажимаю кнопку и он по запланированному маршруту туда едет, конечно уже сильно ограничивается функционал, но этот скетч будет для меня намного проще, чем Вы предложили. Я думаю Вашу идею я просто не оформлю, ещё совсем рано для меня.
    2.1. А может сделать следование на основе "термовидения" ? Где-то видел такую тему, как сделать термокамеру для arduino.
    Буду рад Вашим ответам.
     
  5. Mitrandir

    Mitrandir Гуру

    Почему нет?
    отследить горизонтальное перемещение можно, и тем самым предугадать поворот

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

    Термокамера стоит приличных денег)
    и имхо сложнее чем мой вариант с эхолотом

    еще возникает проблема динамических препятствий, типа кот, тапок, чемодан или еще какой мусор на пути..
     
    zelanru нравится это.
  6. zelanru

    zelanru Нерд

    У меня могут быть всего-лишь несколько препятствий:собака(маленькая), кот, небольшие пороги(макс. 1.5см) ну и стены. Животных можно отпугнуть(тот же эхолот только наблюдает активность снизу и если что включает динамик) или же алгоритм 20 градусов влево\вправо проехать вперёд вернуться обратно и пробовать найти меня по эхолоту сверху.
    Всё же скетч с эхолотом для меня будет очень сложным.
    Прошу Вас помочь мне с этим, а именно я так понимаю эхолотом будет UltraSonic ?(http://arduino.cc/en/Tutorial/Ping)
    А вот какие программы применять для
    Или поставить не эхолот, а камеру, которая будет делать снимки и сравнивать их ? (куда сохранять и как сравнивать, я так понимаю это невозможно)
     
  7. Mitrandir

    Mitrandir Гуру

    Перед тем как писать скетч, лучше на бумаге продумать алгоритм, сам я так сходу скетч не напишу)

    эхолот перед столом охватывает полусферу 180 градусов( не знаю есть ли сервы на 360)
    но то что сзади пока не важно

    разбиваем нашу полусферу на сегменты, сколько -определяем опытным путем, чем больше - тем точнее но и дольше считать

    далее считаем градусы середины сегментов, и заводим массив:
    Вот пока несколько набросков:
    Код (C):

    // количество секторов(определить опытным путем)
    #define SECTORS_N  4
    //глубина буффера проходов, сколько снимков мы храним(определить опытным путем, или в ходе составления алгоритма)
    #define BUFF_LEV
    //вспомогательный макрос для вычисления угла на который поворачивать серву
    #define SECTOR_ANGLE(N)   ( (N) * SECTOR_WIDTH + SECTOR_WIDTH / 2 )
    //скорость сервы, сколько секунд надо на поворот на 180 градусов, взять из описания
    #define SERVO_SPEED 0.48
    //ширина
    const int SECTOR_WIDTH = 180 / SECTORS_N;

    Servo radarServo;
    float buffer[BUFF_LEV][SECTORS_N];
     
    далее определим функцию сканирования, которая нам заполнит текущий обзор

    Код (C):

    void scan(int level)
    {
      radarServo(0);

      for(int i = 0; i < SECTORS_N;i++)
      {
          radarServo.write(SECTOR_ANGLE(i));
          delay(1000 * SERVO_SPEED / (180/SECTORS_N)));//ждем пока серва повернется
          buffer[level][i] = getDistance();
      }
    }
     
    функция getDistance получает растояние с датчика, можно сделать по аналогии с примером по ссыке или с даташита на сенсор

    ну и основной цикл


    Код (C):

    void loop()
    {

     for(int i=0;i<BUFF_LEV;i++)
     {
         memset(buffer[i],0,SECTORS_N);
     }
     for(int i=0;i<BUFF_LEV;i++)
     {
        scan(i);
     }
      //обработка
    }
     
    после коммента обработка, берем учебник по геометрии и думаем что делать с данными растояний по секторам

    не выйдет
    1)у ардуино не хватит вычислительной мощи
    2) очень сложные алгоритмы по обработке картинки
     

    Вложения:

    • echo.jpg
      echo.jpg
      Размер файла:
      15 КБ
      Просмотров:
      469
    zelanru нравится это.
  8. zelanru

    zelanru Нерд

    Ух, Вы потрудились. в ближайшее время буду учить команды и разбираться в них, а вот с геометрией это дело пугает, с детства мы с ней не подружились =(
    Спасибо Вам.
    UPD: нашёл вот такую штуку http://robocraft.ru/shop/index.php?route=product/product&path=54&product_id=229 может попробовать что-то с ней придумать ?
     
  9. Mitrandir

    Mitrandir Гуру

    бесполезно, он тебе покажет есть или нет человек в угле 120 градусов, очень грубая оценка..
     
  10. zelanru

    zelanru Нерд

    Ну не стоит так сразу =)
    Я вроде днём немного подумал и нарисовал алгоритм, вроде все "теоретические" баги убрал, попозже (наверное днём) переведу в электронный вид и выложу.
    Надеюсь Вы посмотрите и оцените ;)
    Единственное проблема это время измерения http://digitalchip.ru/datchik-dvizheniya-pir-motion-sensor-hc-sr501 , где то ещё видел видео, там и вправду тормознуто, но говорят пайка решает xD
    UPD:ещё на другом веб-ресурсе предложили использовать Bluetooth и приложили следующее видео, но я пока плохо понимаю как сделать "понимание" BT где хозяин

     
  11. Mitrandir

    Mitrandir Гуру

    и как там предлагают блютус использовать?
    Оценивать силу сигнала и из этого рассчитывать дальность?

    Насчет этого датчика, его в принципе можно использовать, но при этом он будет очень инерционен
     
  12. zelanru

    zelanru Нерд

    Просто предложили и всё, да там походу не такие "продвинутые" xD

    Вот алгоритм, вроде все должно работать.
    Идея такая - включился,проверил заряд,посмотрел есть ли движение,если да и что-то близко значит стоит на месте(хозяин рядом с ним и просто двигается), если есть движение и нету преграды,тогда едем вперёд (хозяин ушёл и пока в поле зрения).
    Теперь вернёмся к началу, если нету движения - смотрит преграду, если есть (значит он рядом с хозяином и мои движения не в поле зрения,например наверху руками что-то достаю) тогда стоим на месте. Если нету преграды поворачивает PIR на Х влево,если появилось движения,тогда возвращает камеру на место и поворачивается сама конструкция где была камера, если нету движения тогда конструкция поворачивается вслед за камерой и повторяется цикл, пока не обнаружится движение.
    Есть баг в виде того, если я вдруг быстро уйду и он вообще потеряет меня из виду, тогда будет крутится на месте, но можно например сделать Z проверок(Z - в зависимости сколько циклов пока он полностью не повернётся,для 360 градусов по 30 градусов поворот это 6(?) раз),тогда он пищит и ждёт,пока к нему не подойдут и не нажмут,например, кнопку, типо я вернулся и следуй за мной.
    Сама конструкция наверное высотой будет 80-120 см (желательно, придумать механизм, что бы он мог подниматься и опускаться), крышка стола не более радиус 38см, материал наверное будет в основном дерево,а шасси из ПКЛ(http://robocraft.ru/blog/mechanics/583.html), вес наверное будет около 3-5кг + вес на самом столе.
    algorithm.PNG
     
    karagad и Mitrandir нравится это.
  13. Mitrandir

    Mitrandir Гуру

    Неплохо, только учти, датчик имеет угол 120 градусов,
    и регистрирует событие вошел-вышел, а не движется внутри зоны
     
  14. Mitrandir

    Mitrandir Гуру

    коричневый круг - столик, зеленый сектор- зона действия PIR датчика
    Оранжевая - зона действия датчика препятствия. Голубой круг - человек.
    По вашему алгоритму, стол будет ехать вперед, пока в оранжевой зоне нет препятствия и человек находится в зеленой зоне.

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

    т.е. стол будет наматывать "круги" вокруг человека.

    З.ы. За ссылку на материальчик (ПКЛ) спасибо, Вы с ним уже работали?
     

    Вложения:

    • radar.jpg
      radar.jpg
      Размер файла:
      30,2 КБ
      Просмотров:
      156
    zelanru нравится это.
  15. zelanru

    zelanru Нерд

    Угол я хотел урезать и сделать уже. Например 90 градусов,тогда при поворотах 30 градусов, он всегда будет подъезжать ко мне сбоку или спереди, т.е за первые разы он ко мне максимально приблизиться, а потом при очередной потере начнёт крутится и сразу уткнётся в меня. Но всё же "круги" вполне реальны, но мне кажется это всё излечится найдя идеальную пропорцию угла PIR'a и поворота.
    К, сожалению не работал, но попозже как появится побольше времени или если меня всё же увлечёт arduino, то я думаю придётся познакомиться =)
    А вот ещё не маловажные вопросы, всё забываю спросить про моторы и сервопривод.
    Сервопривод я посмотрел в одном магазинчике и там есть которые делают 85 об\с, т.е в секунду 1.4 оборота,а это более чем достаточно. А успеет ли arduino так быстро обрабатывать код ? Т.е. в среднем он вообще быстро работает ?
    А так же сами моторы на колёса, ведь если он будет за мной вполне быстро ездить, тогда он будет очень быстро меня терять и находить и это "увеличит" его точность. Какие самые быстрые моторы и какие лучше купить цены\качество ? Может быть в дальнейшем можно "болид" собрать xD
    UPD:вообще наверх можно вставить 3 PIR(спереди,слева,справа),а дальше на основе их сравнений точно определять где хозяин и подъезжать(на ebay по 50р стоят с бесплатной доставкой). А код исполняется только на микроконтроллере или например запуск с SD карты можно сделать ? Просто ко всему к этому хотелось бы ещё управление с телефона прикрутить, а сейчас стало интересно, а основной код влезет ?