Помощь - Поиск - Пользователи - Календарь
Полная версия: Реализация некого "круиз контроля" или "автопилота"
Форум «Всё о Паскале» > Разработка ПО, алгоритмы, общие вопросы > Алгоритмы
Andrewshkovskii
Суть такова, надо реализовать некий алгоритм действия "автопилота".
Есть начальные данные :
Масса транспорта.
Макс. допустимая скорость транспорта на прохождении пути.
Длина пути в метрах.
Сила двигателя.
Максимальное время прохождения пути транспортом.

Условия простые :
У пользователя есть 3 выбора : газ, не жать газ и тормоз
Автопилот должен регулировать скорость так, что бы она не превышала максимальную и транспорт пришел во время(т.е не превышая указанного макс. времени , раньше - можно).
Если скорость превысила максимальную, то сразу же включается торможения до скорости= 70% от максимальной заданной.

я так понимаю надо в один момент времени обрабатывать 3 задачи, в зависимости от действия пользователя. И просчитывать время прохождения , т.е контролировать скорость каждую, допустим, 0.1 с , и регулировать её, в зависимости от расстояния транспорта до конца и текушего времени прохождения. Т.к в физирке я не очень силен, то обратился сюда. Может у вас есть какие-нибудь мысли по этому поводу? Реализовывать буду на C/C++. Плюс надо будет ещё построить график движения транспорта..
Lapp
Цитата(Andrewshkovskii @ 11.12.2008 0:20) *
Т.к в физирке я не очень силен, то обратился сюда. Может у вас есть какие-нибудь мысли по этому поводу?
Похоже, что тут действительно надо привлекать знание физики..

Круиз-контроль - штука неплохая. Сам им часто пользуюсь. Скажем, когда едешь по Пятому фривею из Лос-Анджелеса в Сан-Франциско (400 миль, примерно как от Москвы до Питера) - нога не то, чтобы устает, но как не своя становится.. Тем более, что дорога на большей части протяжения прямая, как лазерный луч.. Остановка у фаст-фуда кажется просто манной небесной. А с КК - можно хоть немного поерзать на сидении smile.gif.

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

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

Так что ты скажи, каковы твои намерения: спихнуть курсовую или сделать хорошую программу. Если второе - могу помочь в меру наличия времени.
Andrewshkovskii
Ну честно говоря, вначале была идея о метро, а не о машине, т.е "автопилот" регулирует скорость вместо машиниста, а машинисту только и надо что жать газ или тормоз. Отсюда и пошло макс. время прохождения пути. аэродинамическое трение можное не учитывать. Т.е универсальность этой штуки понижается. Отсюда можно взять константную силу двигателя. А трение качения и торможения можно расчитать, в принципе...

Хм..ну хочется и нормальную программу и быстрей отделаться, потому что у меня в этом семестре 3 курсовых, 1 я написал, эта 2ая ,а для 3ей мне надо будет за неделю выучить QT, я же с ума сойдуsmile.gif)
Lapp
Цитата(Andrewshkovskii @ 11.12.2008 11:01) *
Ну честно говоря, вначале была идея о метро, а не о машине,
Какая разница - метро или машина? Разве только рулить не надо smile.gif.

Цитата(Andrewshkovskii @ 11.12.2008 11:01) *
т.е "автопилот" регулирует скорость вместо машиниста, а машинисту только и надо что жать газ или тормоз.
Ты спрашиваешь совета, а прислушаться к нему не хочешь. Похоже как если кто-то спрашивает, как написать прогу, которая складывает 2+2 и получает 5. Ему говорят, что это невозможно, а он отвечает, что ему дескать не нужно заумную прогу, а нужно простую. Ну, какой будет ответ, как ты думаешь? А вот такой:
begin
WriteLn('2 + 2 = 5')
end.

Цитата(Andrewshkovskii @ 11.12.2008 11:01) *
Отсюда и пошло макс. время прохождения пути.
Неверно. Максимальное время "пошло" из расписания движения. Только оно не несет никакого смысла, если не учитывать какой-то фактор, противоположный скарости (например, экономию горючего). Вдумайся и поймешь.

Цитата(Andrewshkovskii @ 11.12.2008 11:01) *
аэродинамическое трение можное не учитывать.
Нельзя. Тогда не будет постоянной скорости практически ни при каких условиях. И потом: ну чем тебя пугает дополнительное слагаемое?.. blink.gif

Цитата(Andrewshkovskii @ 11.12.2008 11:01) *
Т.е универсальность этой штуки понижается.
До нуля smile.gif.

Цитата(Andrewshkovskii @ 11.12.2008 11:01) *
Отсюда можно взять константную силу двигателя.
.. и включать-выключать его каждую секунду..

Цитата(Andrewshkovskii @ 11.12.2008 11:01) *
А трение качения и торможения
??? Что это за термин? Даже не особо разбираясь в физике, не делай таких оговорок.

Цитата(Andrewshkovskii @ 11.12.2008 11:01) *
можно расчитать, в принципе...
Да просто прикинуть..

Цитата(Andrewshkovskii @ 11.12.2008 11:01) *
Хм..ну хочется и нормальную программу и быстрей отделаться, потому что у меня в этом семестре 3 курсовых, 1 я написал, эта 2ая ,а для 3ей мне надо будет за неделю выучить QT, я же с ума сойдуsmile.gif)
Забдуждение, что на нормальную программу нужно много времени. Нужно, да, потратить час, чтобы вникнуть и разобраться - потом все пойдет быстро.
andriano
Очень похоже на то, что задача недоопределена.
В той постановке, что дана, задача может допускать 0, 1 или бесконечность решений.
При этом если абстрагироваться от 1 решения как слишком частного случая и заведомо предположить, что решение существует, нет никакого критерия для выбора оптимального.
Могу предложить алгоритм, который гарантированно будет давать решение, если есть хоть одно, причем не требующий никакого численного моделирования - достаточно предварительных аналитических рачсетов.
1. Давим на газ, пока не наступит первое из событий: (все вычисляется аналитически)
1.1. пройдена часть пути равная отношению силы торможения с сумме сил торможения и разгона (двигателя)
1.2. достигнута максимальная скорость.
2. Отпускаем газ.
3. Двигаемся с отпущенными педалями (при 1.2. естественно, с постояннной скоростью равной максимальной - при отсутствии трения)
4. Вычисляем путь торможения, как только приблизимся к пункту назначения на это расстояние, давим на тормоз.
5. Отпускаем педали после остановки.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.