roboforum.ru

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

Нужна Помощь

Нужна Помощь

ALHIMIK » 02 май 2009, 23:00

Доброе время суток
Пролог-
Есть подобие радара - дальнометр на серве , угол обзора сервы(180 градусов) разбиты на 10 частей в которых и снимаются показания дальнометра(пока только 10 разбиений потом доработаю до 20-30) и помещаются в массив
Таким образом в массиве хранятся полярные координаты окружения (которые переводятся в декартовы и выводятся на экран)
И так проблема не могу придумать алгоритм по которуму аппарат будет рационально обходить припятствия
рациональный обезд это НЕ тупое вперёд назад до тех пор пока не отедиш от стенки это(в моём понимании ) обезд припятствий с минимальным отходом от исходной траектории
Спасибо

Re: Нужна Помощь

galex1981 » 02 май 2009, 23:04

Одна пока идея есть: Зная радиус поворота твоего робота, учитывай это при подходе к препятствию, сообтветственно когда робот на минимальное расстояние подъезжает, поворачивай его (учитывая показания с остальных полярных координат) и все тут.

Re: Нужна Помощь

=DeaD= » 02 май 2009, 23:06

Маловато информации. Во-первых что такое исходная траектория? Вдруг мы уже объезжаем чего-то сейчас, исходная тогда какая? Во-вторых как мы определяем своё положение в пространстве? Как возвращаться будем на исходную траекторию?

Re: Нужна Помощь

ALHIMIK » 02 май 2009, 23:20

Начальная траектория пока прямая
Возврат на траекторию элементарно запоминаем направление и угол поворота после скажем 3 "прямых" шагов поварачиваем на заранее заданный угол
Поворот осуществляется на сервах по этому запомнить велечину поворота не проблема

Re: Нужна Помощь

=DeaD= » 02 май 2009, 23:49

Хм, ну, например, можно попробовать реализовать правило правой(левой) руки, если видим у себя на пути препятствие из-за которого не сможем проехать прямо - забираем левее и потом постоянно пытаемся вернуться на исходную траекторию, забирая левее, если не можем двигаться прямо к возвращению на неё.

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

Re: Нужна Помощь

ALHIMIK » 02 май 2009, 23:59

Это не сильно отлечается от вперёд назад ит от "радара" смысла мала но всё равно спасибо
Идея
находить самое длинное и близкое припятсвие сравниваем растояние до него скажем с 3 порогами и в зависимости от порога срабатывания поворачиваем от припятствия на заданный угол запомниить поворот и сново сканировать
Нужна конструктивная критика и предложения

Re: Нужна Помощь

=DeaD= » 03 май 2009, 00:04

ALHIMIK писал(а):Это не сильно отлечается от вперёд назад ит от "радара" смысла мала но всё равно спасибо

Как это не сильно отличается? :) Фигасе :) У меня ощущение, что я не был понят :)

ALHIMIK писал(а):Идея находить самое длинное и близкое припятсвие сравниваем растояние до него скажем с 3 порогами и в зависимости от порога срабатывания поворачиваем от припятствия на заданный угол запомниить поворот и сново сканировать

А вот это как раз и есть - отъехать и повернуть? Где логика? У меня хотя бы все выпуклые препятствия оно будет огибать, объезжая слева, а невыпуклые будут отрабатываться чуть более коряво, но всё равно будут. Можно еще правило левой руки в чистом виде сделать, а то можно проход пропустить...

Re: Нужна Помощь

ALHIMIK » 03 май 2009, 00:19

Видимо не понял :oops:
Если не сложно поподробней пожалуйста :beer:

Добавлено спустя 9 минут 25 секунд:
Кстати кто сказал отехал просто отвернулся
на сколько я понял смысл левой руки - поварачивать на лево на всяком припятствии ?
И где тут логика

Re: Нужна Помощь

=DeaD= » 03 май 2009, 08:55

ALHIMIK писал(а):на сколько я понял смысл левой руки - поварачивать на лево на всяком припятствии ?

Неправильно поняли :) правило левой руки - это идти вдоль препятствия держа на нём левую руку. Так можно выйти из любого лабиринта, если в нём нет "островов" - изолированных от внешней стены препятствий, а если "острова" есть, тогда надо еще запоминать где мы уже побывали и переходить к другой стене.

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

Re: Нужна Помощь

ALHIMIK » 03 май 2009, 11:54

Тогда левая рука не подходит - в поле он не сможет передвигатся (нету стены) а три берёзы обехать надо
С геометрией разбераюсь
СПАСИБО

Re: Нужна Помощь

=DeaD= » 03 май 2009, 12:13

ALHIMIK писал(а):Тогда левая рука не подходит - в поле он не сможет передвигатся (нету стены) а три берёзы обехать надо

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

Re: Нужна Помощь

ALHIMIK » 03 май 2009, 12:44

Разобрался с геометрией :o Тока мне мк жалко стока считать если одна диагностика(не полная) 250 байт весит

Добавлено спустя 11 минут 51 секунду:
Больше суровых алгоритмов не у кого нет?

Добавлено спустя 17 минут 50 секунд:
Буду пробовать волновой алгоритм :Yahoo!:
Всем спасибо

Re: Нужна Помощь

=DeaD= » 03 май 2009, 12:49

Волновой? Жжошь, ты уже построил карту? :) И к тому же волновой алгоритм не возвращает на траекторию, а ищет кратчайшие пути из данной точки во все остальные...

Может быть сформулируешь уже задачу корректно? :)

Re: Нужна Помощь

ALHIMIK » 03 май 2009, 12:58

Карта динамическая - двух мерный массив(получаем с дальнометра полярные умножаем на синус и косинус получаем декартовы)
возврат на траекторию просто - запоминаем "отход"
"конечная" точка - перед ботом(морковка перед ослом)
естественно он немного модернезируется
Конкретно сформулированная задача -
обехать статические(пока) припятствия максимально рационально и вернутся на траекторию

Re: Нужна Помощь

=DeaD= » 03 май 2009, 13:09

Что за траектория? Может задача изначальная - из точки А в точку Б? Или?


cron
Rambler\'s Top100 Mail.ru counter