0

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

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

Я узнал немного о алгоритмах планирования RTOS во встроенном системном курсе и упреждающей очереди в сетевом курсе производительности, поэтому мне было интересно, не выиграю ли от применения каких-либо из этих концепций к этой задаче при программировании микроконтроллера, или если я его переутомлю? Основная цель состоит в том, чтобы развить его таким образом, чтобы автомобиль ехал как можно быстрее без столкновения, но я также хотел бы помешать ему стать нервным как вторичная цель.

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

ответ

1

Использование RTOS здесь является излишним. То, что вы должны думать о том:

  • Какого типа датчиков вы будете использовать: расстояние (которое возвращает расстояние до объекта) или наличие (которое будет указывать, только если есть препятствие или нет)? Датчики расстояния потребуют некоторых для обработки (либо выполнить преобразование АЦП, либо прочитать I2C), в то время как датчики присутствия могут быть напрямую подключены к внешнему прерыванию UC.
  • Как обеспечить, чтобы ваш автомобиль действительно ездил прямо? Вы обнаружите, что это может немного измениться, даже если в теории вы приказали ему идти прямо.

В зависимости от ответов на поставленные выше вопросы:

  • если использовать датчики присутствия, обрабатывать их как можно быстрее. Даже если у вас есть какой-либо другой алгоритм управления (например, некоторый PID), прерывание его не будет проблемой.

  • Если вы используете аналоговые датчики расстояния, используйте прерывание преобразования ADC. Тогда, если у вас есть датчики, глядя по сторонам, вы можете использовать возвращаемое значение для поддержания постоянного расстояния от стены, и в результате вождения прямо (проверить MicroMouse роботов)

Итог: если вы хотите идти быстро и избегать удара по стенам - как можно быстрее обработать датчики.

+0

Спасибо за все советы. Мне интересно, как обрабатывать датчики расстояния. Я думал, что датчик присутствия будет прямым аппаратным прерыванием, но датчики расстояния будут обрабатываться, а затем использоваться в качестве программного прерывания. Это неправильно? Я планирую использовать датчики расстояния, но у моего микроконтроллера нет программных прерываний. – Austin

+1

Предполагая, что вы используете Arduino с Atmega328 - у вас есть прерывание ISR (ADC_vect). Если ваша обработка не займет много времени, просто введите ее здесь. Или просто прочитайте значения ADC здесь и обработайте их в основном цикле, как только они прибудут. – mactro