Робот застрял в углу
- Войдите на сайт для отправки комментариев
Пнд, 20/07/2015 - 20:10
Подскажите пожалуйсто,робот заехал в угол,у него два датчика соприкосновения, касается левым поворачивает на право и тут же касается правым поворачивает на лево ,и так бесконечно не может выбратся из угла,как организовать функцию,если соприкоснулся левым и тут же правым,то надо ехать назад
обычно код показывают, или хотите, чтобы все угадывали?
задать минимальное время между срабатываниями, если меньше - то назад.
вот код,а как задать подскажите,я вот в этом и не могу разобратся,как время задать между срабатываниями датчиков
Самое простое можно попробовать в строках 44 и 57 увеличить паузу, delay(1000),например. т.е. дать ему побольше времени откатить назад.
Мне так кажется.
ну да это проще,но хотелось что бы еще по другому сооброжал
ну да это проще,но хотелось что бы еще по другому сооброжал
Что-то настоящие программисты молчат. Я в программировании не очень силен, но мне кажется надо двигаться всторону "Блинк без делей", т.е. по счетчику миллисекунд фиксировать время между срабатываниями датчиков, и если оно меньше какого-то заданного интервала, то действовать как-то иначе.
Нужно учить матчасть. Например посмотреть как ездють роботы пылесосы. Они едут в одну сторону. И потому не попадают в углы.
Если задать правильный алгоритм, то робот и лабиринты будет проходить.......
Правильного алгоритма я не помню, но где-то он обязательно описан.
Если задать правильный алгоритм, то робот и лабиринты будет проходить.......
Правильного алгоритма я не помню, но где-то он обязательно описан.
Правильный алгоритм прохождения лабиринта всегда идти по правой стене. :)
то что я и написал. Пылесосы всегда в одну сторону поворачивают.
всегда по левой стороне - неправильный алгоритм?
Здесь про алгоритм http://www.myrobot.ru/articles/logo_mazesolving.php Там надо идти всегда направо, но иногда приходится и налево :)
Но там вроде датчик только впереди, а у товарища два боковых. Алгоритм будет несколько иной.
Здесь про алгоритм http://www.myrobot.ru/articles/logo_mazesolving.php Там надо идти всегда направо, но иногда приходится и налево :)
Но там вроде датчик только впереди, а у товарища два боковых. Алгоритм будет несколько иной.
Не будет он иной. Хоть 5 датчиков. Самый простой вариант всегда поварачивай в одну сторону! Не нравится придумывай алгоритмы с запоминанием и лидарами и прочими плюшками. Но судя по вопросу в данной теме, товарищ ожидает что кто то ему сделает просто так.
Не зделать за меня а подсказать как засеч время между срабатываниями одного датчика и другого,не прошу же я весь код за меня написать,простоя думаю что здесь есть люди хорошо понимающие в этом,и им это зделать будет не трудно,каждый в своем силен.
каждый в своем силен.
ой как уже утомили с этой философией, типа каждый должен заниматься своим делом.
ваще не вопрос даже.
вы же тогда в своем деле специалист? Специалист хорошо зарабатывает и хорошо оплачивает работу другого специалиста!
Внимание вопрос!
Где деньги ?
В любом микропроцесоре тикают тактовые часы. Берите их и засекайте.
Не зделать за меня а подсказать как засеч время между срабатываниями одного датчика и другого,не прошу же я весь код за меня написать,простоя думаю что здесь есть люди хорошо понимающие в этом,и им это зделать будет не трудно,каждый в своем силен.
ок. вы научитесь засекать время между срабатыванием датчиков, и шо?
каков алгоритм выхода из угла, если второй датчик сработал через 3секунды, через 15 секунд, одновременно сработали - 0 секунд?
ок. вы научитесь засекать время между срабатыванием датчиков, и шо?
каков алгоритм выхода из угла, если второй датчик сработал через 3секунды, через 15 секунд, одновременно сработали - 0 секунд?
Если 15 секунд, то он не в углу, если секунда, к примеру, значит в какой-то щели, значит подальше задом сдать.
:)))))))))))))))))
Хули Иглессиаса зовёте ? весь форум заточен на то - что задай вопрос нормально - понятный будет ответ !
Человек просил объяснить как время измерить между срабатываниями датчиков. Ну типа Превмиллис-Курентмиллис
я уже кому-то писал аналогию.....
варим яйца кур....
закипела вода... запоминаем время начала варки..... oldTime = скока щас есть время по процессору
каждую секунду следим - не стало-ли Текущее Время больше чем на 7 мин ( варка яиццццц ) от oldTime
меньше - пусть кипит !
больше - сварились ! под холодную воду их !
..робот заехал в угол.....
Ну что там с роботом? Получилось?
Потихоньку разбираюсь
Правильного алгоритма я не помню, но где-то он обязательно описан.
У Вас неверный подход.
Правильного алгоритма пригодного на все случаи жизни в природе не существует.
Значит, нужно его изобретать самому.
Сложно?
Ничего подобного!
Просто представьте, что не робот, а именно Вы оказались в углу, и нужно из него выбраться. Что будете делать? Вы ведь сумеете выбраться из лабиринта? Подробно опишите собственную последовательность действий. По-русски. А потом просто переведите ее на С++. И все, ничего сложного.
Да по русски описать не проблема,а вот на си некоторые функции сделать проблема
Да по русски описать не проблема,а вот на си некоторые функции сделать проблема
вы удивитесь насколько легко переложить алгоритм на любой язык програмирования...
проблема только в том что вы не можете составить алгоритм...
это не типа
уперся
подождал
повернул
уперся
алгоритм это более детально
представляйте что вам нужно осмыслено двигать ногами.
уперся потому что от лба пришел глухой звук в датчики слуха
отключил все
подал сигнал мышче на правой ноге поднять ногу
подал сигнал мышцам переставить ногу назад на 2 градуса..
проверил не пришел ли опять глухой стук от лба :)
Легко опытному программисту,а для чайника тяжеловато
да я и не программист ,так просто заинтересовало,увлекло.
да я и не программист ,так просто заинтересовало,увлекло.
вот тут я не понял
если меня что то заинтересовало и увлекло. я буду сидеть и читать горы книг и вникать и пробывать...
а вас что увлекло и заинтересовало, ожидание что кто то в интернет для вас все сделает? в чем смысл?
так я ни кого и не прошу ,за меня делать,сижу читаю, изучаю.
так я ни кого и не прошу ,за меня делать,сижу читаю, изучаю.
ну ждемс тогда
вот допустим если не трудно вам конечно
сработал левый датчик,запоминаем время начатия,при этом поворачиваем на право,отсчитываем допустим две секунды,если в течении двух секунд не сработал правый датчик едем прямо,вот в отчете времени не могу понять
а чего тут понимать то?
1000millis = 1 second
сработал левый датчик,запоминаем время начатия,при этом поворачиваем на право,отсчитываем допустим две секунды,если в течении двух секунд не сработал правый датчик едем прямо,вот в отчете времени не могу понять
Время можно измерять примерно как зесь http://arduino.ru/tutorials/BlinkWithoutDelay
Время можно измерять примерно как зесь http://arduino.ru/tutorials/BlinkWithoutDelay
то есть, ты добавляешь гавна в вентиляторе?
давай без всяких заумных оптимизаций... пусть пишет как может....
Время можно измерять примерно как зесь http://arduino.ru/tutorials/BlinkWithoutDelay
то есть, ты добавляешь гавна в вентиляторе?
давай без всяких заумных оптимизаций... пусть пишет как может....
Не совсем понял, чем неугодил.
Я имел в виду что замеряемый интервал времени = currentMillis - previosMillis
А дальше проверяй условие какой датчик сработал, сколько времени между срабатываниями, что в данной ситуации делать
Не совсем понял, чем неугодил.
Я имел в виду что замеряемый интервал времени = currentMillis - previosMillis
А дальше проверяй условие какой датчик сработал, сколько времени между срабатываниями, что в данной ситуации делать
тем что путаешь человека.... путь который ты предлагаешь не является очевидным и понятным.. если ты попробуешь сам написать алгоритм по описаному тобой.. то скорее всего получиться такой пирог что окосеешь :)
он научился запоминать время срабатывания датчиков... ему на данный момент осталось сделать всего один не большой шаг...
буквально функция в пару строчек :)
всего один не большой шаг...
буквально функция в пару строчек :)
Т.к. я сам новичок
Интересненько..... Буду ждать результат
вот эти пару строк и не могу понять как зделать
вот эти пару строк и не могу понять как зделать
а чего делать то? после строки где запоминаете время касания
вставьте строчку проверки временикасания с другой кнопки и если оно меньше нужного. то просто сделайте поворот болееееееееееее длинныыыыыыым. плюс потом выполниться еще поворт который у вас дальше по програме выполняется и получиться что робот просто разверулся
тупо одна строчка IF праваясторона-леваясторона<2000 повертаем на180 градусов влево...
Примерно вот так?
Примерно вот так?
угу и дальше добавь ему поворот. на забудь что у тебя там и так дальше поворот уже вписал обычный..
и тоже самое вставить в обработку нажатия другой кнопки.. только наоборот.
Примерно вот так?
Пиши полностью что получилось, может кто-нибудь подскажет где косяк.
Позже
.... то просто сделайте поворот болееееееееееее длинныыыыыыым. плюс потом выполниться еще поворт который у вас дальше по програме выполняется и получиться что робот просто разверулся
тупо одна строчка IF праваясторона-леваясторона<2000 повертаем на180 градусов влево...
Как он сделает более длинный поворот, если воткнулся в угол? Надо сделать более длинный откат назад.
Как он сделает более длинный поворот, если воткнулся в угол? Надо сделать более длинный откат назад.
молча... у него 2 колеса и он поворачивается на месте :)
и он круглый ,так что сможет
и он круглый ,так что сможет
Понятненько :)
зделал вот так,не идет
RightBumper я так понимаю это пин кнопки и вы его используете для сравнения времени??? О_о
да
Да
посмотри пример BlinkWithoutDelay.
А еще отлавливай фронты нажатия кнопки для фиксирования начала замера времени с момента нажатия кнопки.