Как отследить какое расстояние преодолел робот или повернуться на 360°?

ich
Offline
Зарегистрирован: 10.06.2012

Здравствуйте.

 

Хочу научить моего робота разворачиваться на нужный мне градус 90°, 180°, 45° и так далее.
Мой робот имеет два (ведущих) колеса (Servo) по середине и одно поддерживающее сзади.

Я подумал что это всё дело можно провернуть следующим образом:

1. Научить определять робота сколько сантиметров он проехал. (Точнее каждое колесо по отдельности.)
2. Наклеить на каждое колесо по кругу бело-чёрные полоски и с помощью инфрокрасного сенсора считать количество полосок и в результате высчитывать проеханое расстояние.
3. Высчитать исходя из размеров робота и расположения колёс, сколько сантиметров должно каждое колесо и в каком направлении прокрутится чтобы достичь определённого разворота. Например в 360°.

Теперь знатоки, внимание Вопросы:

1. Оптимальный ли это вариант? (Что если одно из колёс стартонёт с "буксами" прокрутами на месте?)
2. Как добиться наиболее точной информации? (делать расстояние между полосками меньше, чтобы было больше полосок?)
3. Пойдут ли для этой идеи сенсоры из старой, компьютерной мышки с шариком? (Там как-раз два сенсора, вытащить их от туда и переделать под моего робота.)
4. Хотел сделать вообще хитро, разобрать оптическую мышь и воспользоваться оптикой для определения расстояния. (Принцип компьютерной мыши.) Но для этого оптика должна практически ёрзать по полу. А это уже кака! (Робот теряет манёвренность)
5. Может быть есть другие, более элигантные способы повернуть робота на нужный градус? Если да то какие? (Компас юзать, очень дорогое удовольствие)
 

PS.: Пробовал играться с временем Сервы, то есть крутить колесо определённое время. Но как не старался точных, чётких поворотов не получил.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

ich пишет:

 

1. Оптимальный ли это вариант? (Что если одно из колёс стартонёт с "буксами" прокрутами на месте?)
2. Как добиться наиболее точной информации? (делать расстояние между полосками меньше, чтобы было больше полосок?)
3. Пойдут ли для этой идеи сенсоры из старой, компьютерной мышки с шариком? (Там как-раз два сенсора, вытащить их от туда и переделать под моего робота.)
4. Хотел сделать вообще хитро, разобрать оптическую мышь и воспользоваться оптикой для определения расстояния. (Принцип компьютерной мыши.) Но для этого оптика должна практически ёрзать по полу. А это уже кака! (Робот теряет манёвренность)
5. Может быть есть другие, более элигантные способы повернуть робота на нужный градус? Если да то какие? (Компас юзать, очень дорогое удовольствие)
 

PS.: Пробовал играться с временем Сервы, то есть крутить колесо определённое время. Но как не старался точных, чётких поворотов не получил.

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

2-чем больше полосок , тем лучше разрешение

3-возможно что и подойдут,  все зависит от мощности ИК светодиода

4-можно добавить линзу и настроить фокус в ручную

5-энкодер и компас, это самый простой способ и всех. Если не нравится то могу предложить использовать WiFi+Webcam+OpenCV

На серву нужно подавать ШИМ сигнал частотой 50Гц и с длительностью импульса от 0.6 до 2.3 мс, длительность еще зависит от сервы

ich
Offline
Зарегистрирован: 10.06.2012

:-D "могу предложить использовать WiFi+Webcam+OpenCV", в током случае это вылезет мене ещй дороже чем компас. Я строю моего робота на "борахле", так сказать: "я его слепила из того что было".

"3-возможно что и подойдут" А если я воспользуюсь CNY70 для этих целей, какой тогда ширеной, минимально, должны быть полоски? Хватит по 1-мм или это слишком узкие?

carduino.ru
Offline
Зарегистрирован: 06.12.2011

1мм этого будет мало , по тому что у ИК диода световое пятно будет не меньше 3мм

Можно использовать готовые варианты

 

ich
Offline
Зарегистрирован: 10.06.2012

Спасибки. Я вот такое себе нарисовал:

Надеюсь подойдёт. А что на счёт CNY70, можно его для этого использовать или есть какин-нибудь "противопоказания"?

Вот к стати Wheel гениратор, может кому и пригодится.

ich
Offline
Зарегистрирован: 10.06.2012

carduino.ru пишет:

На серву нужно подавать ШИМ сигнал частотой 50Гц и с длительностью импульса от 0.6 до 2.3 мс, длительность еще зависит от сервы

Не ужели возможно обойтись только сервами? А возможно это сделать с помощью библиотеки "Servo.h"?

Т.е при аттачи сервов, мне нужно выбирать пины с ШИМ? Я вроде так и делаю 9 и 10 "Arduino Uno".

P.S. Может у кого есть другие предложения по поводу движения "2х-Колёсного" робота на задонное расстояние. Мне бы хотелось как можно меньше сенсоров использовать. Т.е. сказал мотору крутись на 30° и всё тут. Прокруты "-Пробуксовку" пока решил игнорировать. Может что-нибудь со степерами?

 

leshak
Offline
Зарегистрирован: 29.09.2011

>Не ужели возможно обойтись только сервами

Ну, теоретически возможно. Только гиморойно крайне. Либо использовать обычные сервы и монстрячить какой-то кривошипно-шатунный механизм (видели видео паравозов? как у них колеса крутятся?)

Либо использовать сервы непрерывного вращения (у них вы углом задаете направление и скорость вращения). Откалибровать ее.... только неизвестно насколько она "стабильна" будет в этом отношении. Серву непрерывного вращения можно готовую купить, а можно обычную переделать (гугл подскажет как).

 Если желание "поменьше датчиков" то степеры это IMHO именно то что вам нужно. Вообщем-то предназначение степера и состоит "повернутся на заданное количество градусов-оборотов. Минусы степера - маломощные (возможно потребуется редуктор, а значит потеря скорости) . Второй минус - стандартная библиотека "останавливает скетч" пока крутит степер. Поэтому крутить "сразу два" - несколько гиморойно. Нужно будет либо "крутить порциями по очереди" (шагнули одним, шагнули другим). Либо искать альтернативные библиотеки которые умееют не блокировать скетч ( например AccelStepper)

Starpom
Offline
Зарегистрирован: 06.03.2011

Кстати, для уменьшения погрешностей на "пробуксовке" нужно останавливать и разгонять серву/шаговик плавно, а не сразу всю скорость давать.

 

 

ich
Offline
Зарегистрирован: 10.06.2012

leshak пишет:

Серву непрерывного вращения можно готовую купить, а можно обычную переделать (гугл подскажет как)

Это я в курррсе, ррребята. Я именно так и сделал, обычную серву раскавырял. Пытался с помощью "Servo.h" исходя из дата-шит и размеров робота крутить сервы определённое время. Но всё это закончилось не очень-то желанно. Точного разварота на нужный угол так и не получил, то чётко повернётся, то (не до)/(пере)крутится. Вообщем погрешность не большая, для лабиринтов и поездок по полоске должно хватить. А вот о запоминании пройденного пути и возврате по запомненым данным уже можно забыть.

Есть право на жизнь у такой идеи? : С помощью ультрозвукавого сенсора находить какой-нибудь обьект и по нему ориентироваться. (Хотя звучит как то сложновато)

А что с компасами? Есть какие-нибудь дешовые варианты, а то 20€ как-то пока не готов отдать за такую игрульку.

leshak пишет:
... Минусы степера ...
ух, что-то меня это всё спугнуло. Для новичка как-то уж всё замудрённо. Хотя как говориться: "Волков боятся в лес не ходить". Если не чё проще не получится, буду пробывать этот вариант.

Starpom пишет:
разгонять серву/шаговик плавно, а не сразу всю скорость давать.

Для этого прейдётся ещё больше со временем колдовать (если без дополнительных сенсоров), а это преведёт к ещё большей погрешнасти.

Если всётаки с сенсорами. Можно как-нибуть при 2, 4 и более сенсорах сделать так, чтобы у Arduinы только один или максимум два пина занято было. Что-то вроде Буса/адресации? (Возможно буду для этого варианта CNY70 юзать)

leshak
Offline
Зарегистрирован: 29.09.2011

 

ich пишет:

пройденного пути и возврате по запомненым данным уже можно забыть.

Не хочу вас пугать, но... я скептик в этом отношении. Не могу подтвердить это четкими доводами-расчетами или опытом, но мне кажется что слишком быстро будут накапливатся ошибки (при любом походе). Только как-то "определять свои координаты", а это тоже задача которая, в общем виде,  "стоит открытой" и не одна фирма над ней бъется (есть какие-то первые ласточки, но как правило требуют доп. оборудования и хороших вычислений). Из того что видел "воспроизводимого дома" - только частные случаи какие-то (специально подгтовленная трасса, маркеры на полу, внешний комп с камерами и т.п.) Поищете, уже обсуждали тут, но кроме "теоретических общих подходов", насколько помню так ни к чему и не пришли.

ich пишет:

А что с компасами? Есть какие-нибудь дешовые варианты, а то 20€ как-то пока не готов отдать за такую игрульку.

В условиях квартиры компас может безбожно врать. Причем местами. Так что еще гироскопы могут потребоватся (которые тоже имеют свойство "ухода"). И нужно будет их как-то "взаимно компенсировать".

 

ich пишет:

leshak пишет:
... Минусы степера ...
ух, что-то меня это всё спугнуло. Для новичка как-то уж всё замудрённо. Хотя как говориться: "Волков боятся в лес не ходить". Если не чё проще не получится, буду пробывать этот вариант.

Ну замените слово "минусы" на слово "особенности". Любая железка имеет свои особенности. Та же серва стандартная - только на 180 градусов крутится умеет. Это же вас не испугало? Просто учитывать их при планировании да и все. А степеры... мне кажется проще тут уж ничего не придумаешь. Лишь бы силы-скорости хватило. Ваша задача "повернуть колесо на определенный градус" - степер для этого и придуман был. Редукторы - бывают степеры которые уже с редукторами идут. Как правило их визуально отличить можно по тому что "выглядит как моторчик", только вал у него не по центру, а смещен немного относительно оси (именно из-за того что внутри редуктор).

Вообщем IMHO вас испугало то чего меньше всего стоит боятся. 

ich пишет:
Для этого прейдётся ещё больше со временем колдовать (если без дополнительных сенсоров), а это преведёт к ещё большей погрешнасти.

Колдовать прийдется в любом случае. Но в этом же и синус строить своего робота :) Ну и не факт что пробуксовки будут. Вам просто указали "это возможно" и сразу подсказали куда копать в этом случае. Но не факт что это потребуется.

 

ich пишет:

Если всётаки с сенсорами. Можно как-нибуть при 2, 4 и более сенсорах сделать так, чтобы у Arduinы только один или максимум два пина занято было. Что-то вроде Буса/адресации? (Возможно буду для этого варианта CNY70 юзать)

Да у ардуины есть аппаратный SPI, I2C (самое близкое к тому что вы описали. Он же TWI), софтверный OneWire (вообще один проводок). Осталось только найти датчики работающие по этим шинам. Но я бы "экономить ноги" начинал не с "входов", а с "выходов". Как правило это проще.

 

ich
Offline
Зарегистрирован: 10.06.2012

Спасибо за талчёк и за доброе напутствие. Как говориться: "Глаза боятся, а руки делают!". А на счёт прокрутов эта тема была в самом первом моём посту под вопросом 1 спрошена, так как наблюдался этот феномен пока не натянул ризинавае "галоши" на калёса.

На счёт OneWire я в курсе, но как Вы уже указали "Осталось только найти датчики работающие по этим шинам".

Вообщем возможно буду рыть в сторону степеров. Не могли бы Вы мне ссылачку на степеры с редуктаром бросить, а то я как-то коряво ищу. Одни простые степеры, либо за 130€.

leshak
Offline
Зарегистрирован: 29.09.2011

 Ну вот например, памятная ветка :) Там споры о наличие редуктора в конкретной модели степера довели до раздачи банов ;)

http://arduino.ru/forum/apparatnye-voprosy/voprosy-novichka-podklyucheni...

Только вы опять, прежде чем решать проблему - убедитесь что она есть :) Вначале нужно убедится что "обычного степера не хватает" (и заодно научится им рулить). Может хватит и его силы. А если нет - тогда уж искать с редукторами. То же самое и "экономии ног дуины". Вы найдите хоть какой-то датчик. Который решает вашу проблему.

Да и "степпер с редуктором" - не обязательно искать. Можно и обычный а редуктор отдельно найти. От детских игрушек, у моделистов, просто две шестеренки взять, "ременную передачу",  колесо не на "ось шаговика садить", а передавать вращение на колесо роликом резиновым. Соотношнеие ролика и диаметра колеса и будет вам "редуктором".

Подбирая редуктор нужно еще помнить что на дуине разогнать степпер до 300-400 RPM уже немного проблемно. А выше "шаманство". Так что смотрите какая вам скорость нужна. А то можно взять "с очень сильным редуктором" только ездить будет очень медленно :) Зато пробуксов точно не будет ;)

А еще, по документации, ориентироваться с "с редуктором он или без" можно по тому сколько шагов на оборот они обещают (или сколько градусов в шаге). Если там десятки - скорее всего без редуктора. Если там тысячи и десятки тысяч шагов на оборот- явно редуктор имеется.

ich
Offline
Зарегистрирован: 10.06.2012

Спасибки за ссылачку, очень много полезной информации. В начале даже доля интриги ...

Как к кокому результату прийду, обязательно отпишусь.