Алгоритм упреждающего планирования для автономного транспортного средства

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

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

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

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


person Austin    schedule 24.10.2016    source источник


Ответы (1)


Использование RTOS здесь — излишество. Что вам нужно подумать, так это:

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

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

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

  • если вы используете аналоговые датчики расстояния, используйте прерывание готовности к преобразованию АЦП. Затем, если у вас есть датчики, смотрящие по сторонам, вы можете использовать возвращаемое значение, чтобы поддерживать постоянное расстояние от стены и, в результате, двигаться прямо (посмотрите на роботов-микромышей)

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

person mactro    schedule 24.10.2016
comment
Спасибо за все советы. Меня интересует обработка для датчиков расстояния. Я думал, что датчик присутствия будет прямым аппаратным прерыванием, но датчики расстояния будут обрабатываться, а затем использоваться как программное прерывание. Это неправильно? Я планирую использовать датчики расстояния, но мой микроконтроллер не имеет программных прерываний напрямую. - person Austin; 25.10.2016
comment
Предполагая, что вы используете Arduino с Atmega328 - у вас есть прерывание ISR(ADC_vect). Если ваша обработка не займет много времени, просто поместите ее здесь. Или просто прочитайте здесь значения ADC и обработайте их в основном цикле, как только они поступят. - person mactro; 25.10.2016