roboforum.ru

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

Пришло время убирать !!!

Re: Пришло время убирать !!!

Radist » 29 июн 2011, 08:31

Vovan писал(а):1. ни при одном алгоритме не добился 100% уборки территории


А можно кратенько описания алгоритмов, чтоб не ходить по одним и тем же граблям, и модифицировать алгоритмы, основываясь на чем-то? В теле темы было кое-что про алгоритмы, но если это будет в одном месте и в объеме, достаточном для понимания - это будет хорошо.

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

Re: Пришло время убирать !!!

Vovan » 29 июн 2011, 11:23

Основные алгоритмы:
1. Случайное блуждание (алгоритм случайности на asm построен по принципу взятому в книге Дж.Мортона).
Результат уборки - никуда не годится, робот может вылизать небольшой участок комнаты несколько раз, а остальную часть практически не коснуться...
2. "Квадратная спираль" - результат лучше, но препятствия (ножки стола, тумбочки, диван...) сбивают со спирали и в результате опять пропуски...
3. Движение вперед прямо и разворот у препятствия на 180град со смещением на корпус робота поочередно вправо\влево. Хорошо рекомендует себя при больших площадях и даже между препятствий кое что убирает... но не всё...
4. Езда вдоль плинтуса (взято из видео от yak-40). Хорошо убирает вдоль плинтуса, но и только... Когда и как переключиться на другой алгоритм - неизвестно...
5. Под управлением ИК с пульта - да проще большим пылесосом пройтись и не париться :crazy: . А вот вкл\выкл\перекл - точно с пульта удобнее :)
6. Пробовал ещё квадратно-гнездовой алгоритм :oops: (т.е. выбрал минимальный размер участка между "препятствиями" 600ммХ600 и двигаясь взад вперед пылесосил его, затем смещение на 600мм в одну сторону и снова квадрат пылесосим, затем в другую сторону от этих двух и снова квадрат, а четвертый в сторону от этих трех - получается квадрат 1200х1200)...
Но опять же - как попадет, может ваще только пару квадратов вычистить, а из-за мебели (препятствий) следующую пару-тройку - далеко от первых :(

Я думаю что без привязки (навигации) качественно квартиру (комнату) с таким "вооружением" победить не удастся - пока это просто игрушка :roll:

По поводу управления ИК - это чисто мои заморочки, хотелось ваще в сон МК вгонять... Но не хочет почему-то... Но думаю разберусь :wink:

ЗЫ: радует меня работа всей механики и качество уборки пройденной робо-пылесосом территории :), электроника - проста как сапог - это тоже хорошо :) ...
Огорчает что собсно на этом и все преимущества заканчиваются - т.к. конечный результат - чистота в квартире\комнате, оставляет желать лучшего :( а пылесосить денно и нощно, дабы перекрыть всю площадь, мягко говоря, нерационально... Подумываю над:
определить пылесосу "место жительства", поставить "виртуальные стены" и пусть себе убирает один кусок помещения... Мождь я и не прав в чем-то, тогда извиняюсь за свои мысли, но оправдывает то, что они по теме :wink:

Re: Пришло время убирать !!!

Radist » 29 июн 2011, 12:02

Есть у меня одно предложение, самому им воспользоваться пока недосуг. Есть такая программа-язык программирования ЛОГО. Там рабочий инструмент - черепашка с фломастером. Язык прост даже для детей, команды все на русском. Но самое главное - на черепашке есть датчик цвета под ней. То есть рисуем комнату, границу комнаты, предметы в комнате. Программируем алгоритм, опускаем на черепашке фломастер и наблюдаем в ускоренном режиме как она комнату закрашивает. Ее можно ставить в разные места. Этими программами можно обмениваться для достижения лучшего результата. В общем вот. Если предложение заинтересовало и нужна программа - пишите, дам ссылку. Найти программу не проблема, слово для гугля Game Logo, первая же ссылка. Там же есть примеры программ, мне нравится как черепашка проходит лабиринты методом правой руки.

Re: Пришло время убирать !!!

Michael_K » 29 июн 2011, 12:15

Да, мне кажется, не нужно ориентирваться на "станочные" методы. Больше случайностей.
Почему бы, например, уперевшись в препятствие, просто не поворачиваться на случайный угол? Или угол похожий на угол "отражения"+-30 градусов. И может быть сделать отдельно езду "по стенке". Тоже время от времени случайно включать и выключать такой режим.

Ну покатается по центру комнаты больше, чем по углам - ну и фиг с ним.

Зато и вылазить из тупиков будет... рано или поздно.

Re: Пришло время убирать !!!

yak-40 » 29 июн 2011, 12:57

У меня так: по четыре минуты чередуются случайное блуждание и езда вдоль плинтуса, если выезжает на середину комнаты, включается квадратная спираль.
Michael_K писал(а):Почему бы, например, уперевшись в препятствие, просто не поворачиваться на случайный угол?
Именно так при свободном блуждании.
Vovan писал(а):Подумываю над:
определить пылесосу "место жительства", поставить "виртуальные стены" и пусть себе убирает один кусок помещения...
Я это делаю закрывая пылесос в одной из комнат :D
Michael_K писал(а):Зато и вылазить из тупиков будет... рано или поздно.
Это точно. Во время свободного блуждания бывает и застрянет, а как включается езда вдоль плинтуса, обязательно выбирается.

Re: Пришло время убирать !!!

Vovan » 29 июн 2011, 19:19

yak-40 писал(а):если выезжает на середину комнаты, включается квадратная спираль.
а как робот определяет что это середина комнаты? Есть дальномер? или просто "долго" нет срабатывания бамперов?
Ваще если поставить на робота сканер\дальномер (по кругу или головой или роботом), энкодеры и ОС может и можно что-то улучшить, но ИМХО это неоправдано сложно в единичном исполнении :wink:

Re: Пришло время убирать !!!

yak-40 » 29 июн 2011, 21:36

Vovan писал(а): или просто "долго" нет срабатывания бамперов?

Да, именно так. Просто и сердито :)

Добавлено спустя 5 минут 47 секунд:
По поводу навигации. У меня база находится в холле. Их холла есть двери в каждую комнату. После заряда (зная точно где он находится) можно легко доехать до любой комнаты даже на временных задержках. Типа 3сек вперёд, 1сек налево, ну и т. д.

Re: Пришло время убирать !!!

Vovan » 01 июл 2011, 00:04

А это в реале применяется?
Или в планах? :roll:

Re: Пришло время убирать !!!

yak-40 » 01 июл 2011, 00:40

Vovan писал(а):А это в реале применяется?
Или в планах?

Пробовал. Пылесос доезжает до нужной цели.
Но... пока как-то руки не доходят до реализации.

Добавлено спустя 15 минут 7 секунд:
В реалии всё происходит очень даже банально. Жена объявляет: "Нужно навести порядок в такой-то комнате". Я быстренько бросаю пылесос в нужную ей комнату, закрываю его там, после того как он успокоится(разрядятся аккумы)вытряхаю начинку(пыль) и пускаю в сторону зарядки(поесть). Всё! Все довольны, все смеются :)

Re: Пришло время убирать !!!

Radist » 01 июл 2011, 11:53

2 Vovan: начал обдумывать ПО робота, а именно управление по RC-5. Сама программа (AVR410) вопросов не вызывает. Вопрос у меня скорее философский. Подпрограмму детектирования RC-5 видимо надо поместить в главный цикл и постоянно ждать команд. Нет команды новой - ждем, получили команду - выполнили, снова ждем. Времени на опрос датчиков, подсчет времени безударной работы и прочего не остается - можно же проспать команду. А если робот в автономной работе? Ему и работать надо и команду от пульта не пропустить. Как этот момент у вас решен?

Re: Пришло время убирать !!!

yak-40 » 01 июл 2011, 12:29

Radist писал(а):Подпрограмму детектирования RC-5 видимо надо поместить в главный цикл и постоянно ждать команд
Я использую внешнее прерывание. Нет команды с пульта, нет прерывания, а значит не тратятся ресурсы.

Re: Пришло время убирать !!!

Vovan » 01 июл 2011, 12:37

В главном цикле я постоянно слежу только за:
1. напряжением питания
(если нормальное - работаем, низкое - перехожу в подпрограмму где есть только поиск станции при этом и турбину и щетки и опрос RC5 выключаю)
2. RC5 действует только в главном цикле во время работы (причем как и говорил, оставил только вкл\выкл робота, а возможно вообще от RC5 откажусь, что-то с него толку мало)

Бамперы сидят на внешних прерываниях и не зависят ни от чего, т.к. имеют высший приоритет. АЦП тоже на прерываниях и тоже не зависит ни от чего, работает само по себе.
Во время поиска станции RC5 не задействовано, т.к. в это время задействованы такие же ТСОПы на "глазах", а строить поочередный опрос - чисто влом и считаю не нужно...
Все остальное - подпрограммы (вдоль плинтуса, спираль, объезд препятствий, подход к станции и отъезд от нее, включают себя всякие ШИМы, временные задержки, всякие маневры, дополнительные опросы датчиков, в т.ч. и RC5 если это нужно и т.д.) вызываются условным переходом. Вобщем программа проста как топор, только на асм очень длинный листинг. Что касается совмещения работы с RC5 - чё-то не вижу проблемм, потому что можно в любом действии (подпрограмме) отслеживать сигнал (за исключением обработчиков прерываний).
ИМХО:
Ваще, иду щас по пути максимального упрощения всего :wink: чем сложнее всё происходит, тем, в данном случае, хуже :crazy:
а стоит упростить всё - как работа робота начинает радовать - да и с листингом программы проще работать :)
Всю программу пока не рискну выкладывать, т.к. считаю что она создана дилетантом (возможно конечно занижаю самооценку :oops: ), а кроме того постоянно меняется и дорабатывается...

Re: Пришло время убирать !!!

Radist » 01 июл 2011, 12:43

2 yak-40:У меня предусмотрено, что сигнал от тсопа идет на внешнее прерывание. То есть перепад из 1 в 0 я поймаю. Но обработка прерывания должна быть короткой, а команда RC-5 занимает 25 мс. То есть декодировать в обработчике не хорошо. Вы наверное ставите флажок, который в главном цикле опрашиваете? Если флаг встал - вызвать подпрограмму детектирования?
2 Vovan: мне хочется чтобы робот реагировал на пульт в любой момент и с одного нажатия, то есть команду упускать нельзя. Буду много думать. Сейчас в студии симулирую - что-то пока плохо идет.

Re: Пришло время убирать !!!

yak-40 » 01 июл 2011, 13:05

В обработчике внешнего прерывания у меня всего лишь следующее:
1. Отфильтровывается помеха путём маленькой задержки.
2. Определяется фаза сигнала.
3. Запускается таймер.
ПотОм работает ужЕ таймер.
Всё на прерываниях. В основном цикле ничего нет.
Могу листинг функций выложить. только он на С.
Последний раз редактировалось yak-40 01 июл 2011, 13:08, всего редактировалось 1 раз.

Re: Пришло время убирать !!!

Radist » 01 июл 2011, 13:34

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

ЗЫ: мы мыслим в одном направлении :)

Добавлено спустя 20 минут 9 секунд:
Кажется до меня дошло. AVR410 мне не подойдет. Процедура детектирования будет простой.
Сперва срабатывает внешнее прерывание (+задержка для фильтра). Запуск таймера, чтоб он переполнялся на 3/4 битового интервала, при прерывании от таймера просто смотрим что на ноге, 0 или 1. И весь RC-5 в прерываниях. А поскольку пульт у меня самодельный, то можно не 14 бит использовать, а поменьше, кнопок у меня всего 6.

Добавлено спустя 7 минут 14 секунд:
поправка - первый раз сдвиг на 3/4 периода, остальные разы на целый период.


Rambler\'s Top100 Mail.ru counter