Редактор Хабрахабра
71,9
рейтинг
15 февраля в 11:12

Разработка → Как это — быть разработчиком ПО для автомобилей. Часть 1/2 перевод



Сталкиваясь с реалиями машиностроительной промышленности, большинство разработчиков программного обеспечения не справляются – уж очень узкоспециализированы продукты, с которыми приходится работать. Это вам не создание программ для интернет-пользователей, компьютеров и даже не мобильные приложения, а потому новички чувствуют себя, как Томас из фильма «Бегущий в лабиринте». Посмотрите, примерно, 50 секунд трейлера – и вы поймете, какой шок испытывают те, кто имеет дело с разработкой ПО для автомобилей впервые.

Все, что у вас есть — это множество терминов и инструментов, о которых вы понятия не имеете. Когда во время собеседования в одной автомобильной компании я поинтересовался, какую IDE они используют, интервьюеру мой вопрос, мягко говоря, не понравился. Я привык к Visual Studio, и наивно надеялся, что здесь для разработки встроенного программного обеспечения понадобится что-то аналогичное. Я даже не представлял, что меня ожидало! Просто море мелких и серьезных (по сложности) инструментов, которым нужна была очередная жертва.

Причем, когда речь идет о разработке программного обеспечения для автомобилей, инструменты отнюдь не единственная проблема. Практически невозможно найти литературу для новичков или просто обучающие материалы, касающиеся библиотек или архитектуры соответствующих программ. Термин «учебное пособие» и вовсе звучит неуместно, ведь сфера автомобилестроения – весьма закрытое сообщество. Да и сообществом ее вряд ли назовешь, ведь при такой конкуренции никто не должен догадаться, как вы создаете ту или иную программу. Чтобы узнать хоть что-то об отдельных инструментах и механизмах этого сегмента программирования, вы можете записаться на запредельно дорогие курсы, но ваша компания должна быть готова выложить немалую сумму и потребуется не меньше нескольких недель, чтобы получить опыт, который вам нужен уже сейчас. Очень жаль, что разобраться в специфике программирования для автомобилестроения так сложно, а потому я решил посвятить свою статью именно этой теме.

Поскольку мне неоднократно приходилось переключаться с создания приложений для интернет-пользователей/компьютеров на разработку встроенных программ и обратно, мне не понаслышке известно о проблемах, с которыми сталкиваются новички, имеющие дело, в основном, с первым блоком продуктов. Аналогичные сложности возникают и у программистов, которые никогда не сталкивались со спецификой автомобильной промышленности.

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

Какие темы мы рассмотрим?

  • Как встроенное программное обеспечение повышает производительность автомобиля?
  • Как встроенные приложения позволяют управлять автомобилем?
  • Какие существуют типичные ограничения CPU?
  • Как благодаря встроенным программам осуществляется процесс непрерывной обработки данных с датчиков?
  • Как это программное обеспечение структурировано и как отдельные приложения взаимодействуют между собой для управления автомобилем?

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

Вы можете посмотреть видео, посвященное разработке электронной системы рулевого управления. Кстати, я тоже работал в этой команде.



Данная модель частично управляется программно. Частично означает, что специализированное ПО лишь помогает водителю, но полный контроль над системой имеет именно он.

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

Работу ПО обеспечивает крошечный процессор или, если говорить точнее, микроконтроллер, по сети подключенный к датчику.

image

Когда водитель поворачивает руль, благодаря датчику, который постоянно передает информацию о текущем угле поворота, ПО получает соответствующий сигнал. Например, если водитель поворачивает руль на 90 ° вправо, в течение секунды сигнал датчика обрабатывается по следующему принципу:

image

Помимо этого, ПО также управляет работой электрического двигателя, который перемещает зубчатую рейку слева направо и в обратном направлении, а, значит, изменяется угол поворота передних колес автомобиля. Соответственно, ПО может направить машину влево или вправо. Связь между микроконтроллером, запускающим ПО, и электродвигателем обеспечивается благодаря электронному блоку управления (ECU), в состав которого входит собственно микроконтроллер и усилитель мощности, регулирующий систему питания двигателя. Таким образом, наша программа варьирует подачу тока в двигателе и положение зубчатой рейки изменяется в нужном направлении.

image
Электронный блок управления (ECU)

При условии, что встроенное программное обеспечение работает корректно, при повороте руля почти мгновенно изменяется положение зубчатой рейки.

image
Руль — синий, рулевая рейка — розовый (прим.)

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

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

Часть 2/2

Перевод: Viktor Schepik
Александр @ragequit
карма
128,7
рейтинг 71,9
Редактор Хабрахабра
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (49)

  • +7
    Становится понятно, что даже обработка информации здесь не подчиняется ни логике событийно-ориентированного программирования

    Простите, с какого момента это становится понятно? Поворот руля — вполне себе событие, вопрос просто в скорости его обработки и выдачи команды на исполнительные механизмы.
    • +1
      просто это система реального времени, как в самолетах или космических кораблях. тут замедление — фатальная ошибка. А всякие там мобильные телефоны или ПК общего назначения могут и подождать.
      • +7
        Вообще-то само определение "системы реального времени" даётся как-раз по её поведению и времени реакции на события.
    • 0
      Тем, что событие может быть обработано позже, попав в очередь событий например, согласно классическим event-driven приложениям. А тут по сути триггерная система — по должно срабатывать как триггер как можно быстрее.
    • 0
      Тут нет реакции на само событие.
      По таймеру берётся значение сенсора и пересчитывается в управляющий сигнал.
      Во второй части это становиться более очевидным.
      • 0
        это чем-то принципиально отличается от верхней/нижней части обработчика прерывания?
    • +2
      Да, я даже перечитал абзац выше, чтобы попытаться найти, что мне должно было стать понятно.
    • +3
      Поворот руля это событие только оно в данном контексте совершенно бесполезное. Нам не нужно отслеживать поворот руля, нам нужно знать точное положение руля в любой момент времени, и чтобы положение колёс соответствовало положению руля в ЛЮБОЙ момент времени а не по событию.
      Иначе, пока не повернёшь руль положение колёс может не соответствовать положению руля, если обрабатывать по событию! Управление должно быть непрерывным.
  • +14
    Автор несколько сгущает краски относительно закрытости и сложности.
    Есть достаточное количество документации на этот счет и все инструменты и IDE хорошо известны: ARM RealView, Tasking, Multi, Keil, IAR и т.д.
    И технология Time-triggered architecture хорошо описана.
    Есть подробные модели в Matlab относительно рулевой системы.
    У производителей микроконтроллеров, например у NXP есть подробные описания проектов фирмваре ECU на базе time-triggered архитектуры.
    Да и не везде в автомобилях нужна time-triggered архитектура, гораздо чаще используется обычные RTOS.

    А можно почитать отчеты по происшествиям с автомобильной электроникой. Там без всяких секретов по мелочам описывается что, как и с чем взаимодействует.
  • +3
    Известен ли вам термин ПИД-регулятор? А передаточная функция из теории автоматического управления?
    Я это к тому что есть специальность инженера по автоматизации в автомобильной отрасли, и это отличается от специальности программиста, хотя и там и там есть место программированию.
  • –1
    Забавно, но Time Triggered Communication поддерживается даже в CAN модулях микроконтроллеров STM32, которые применяются в проекте Arduino.
    Т.е. даже ардуинщики легко могут сделать time-triggered архитектуру управления машиной.
  • –2
    Меня одного совершенно не радует отсутствие физической связи между рулем и колесами? То есть если на ходу вдруг произойдет замыкание какое-нибудь, или программный сбой — машина останется без управления вообще?
    Помню были новости про сбои в ЭУР на некоторых машинах, приводивших к ДТП, так как там тоже при отключении усилителя руль становится бесполезной круглой штуковиной, никак не влияющей на направление движения.

    Зачем оно вообще нужно? Чем оно лучше чем прекрасный, отказоустойчивый (при отказе связь руля с колесами остается, просто усилие надо будет большее прилагать, будто усилителя нету), информативный, десятилетиями проверенный ГУР?
    • +2
      Зачем оно вообще нужно?

      К сожалению статистика говорит что 99% ДТП не связаны со сбоями компонентов автомобиля. (в случае регламентного прохождения ТО)
      • +1
        Это сейчас, когда 100% автомобилей имеют механическую связь между рулём и колёсами. А вот что будет с сервоприводами — неизвестно. Я бы такую машину себе не купил.
        • +3
          Связь то они имеют но благодаря ESC (DCS, ESP, etc.) движение автомобиля зависит не только от дороги и направления руля, и то что эти системы предотвращают тысячи аварий неоспоримый факт.

          В самолётах уже давно используются всевозможные "приводы" и всё ОК.
          Другой вопрос как снизить стоимость и увеличить надёжность подобных систем.
          • +1
            Другой вопрос как снизить стоимость и увеличить надёжность подобных систем.

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

            image
        • +1
          Как-то мне страшно осознавать, что в случае отказа двигателя рулевой рейки я не смогу отвернуть со встречки просто за счет усилия рук.
          Брррр
          • +5
            Ну если у вас карданчик рулевой развалится на классическом механическом приводе, то повернуть тоже не удастся. Другое дело, что в схеме с ЭУРом (пускай даже без прямой связи между рейкой и рулем) стоит куча датчиков и контролируется туева хуча параметров. По хорошему электроника отследит приближающуюся смерть мотора (например по возросшему потребляемому току, увеличению/уменьшению сопротивления и т.д.) и нагло заявит об этом собственнику, но от «ойблин, провод отвалился» тут оно увы бессильно будет, как и от «ойблин, вал лопнул/шлицы слизало» в классической схеме.
            • +5
              В случае с карданчиком, обратная связь от приближающейся смерти узла будет еще явственнее. Люфты в рулевом механизме очень четко чувствуются на руках. Например, когда ШРУСу начинает приходить конец, при маневрировании заметно дрожание руля. Потом характерные хрусты на вывернутом до упора руле и только потом все разваливается. А то, что в сервоприводе все разболталось я могу узнать только непосредственно в момент разрушения.

              Но так-то, конечно, я с Вами согласен. При должном уровне надежности — это взлетит.
              • +2
                Обратная связь будет понята, если приёмник понимает, что она ему сообщает. А если за рулём будет сидет «анекдотическая блАндика», то ей лампочка «всё плохо» ей будет понятнее, чем какое-то дрожание и постукивание (хотя и лампочку она может не понять, но тут хотябы проще будет объяснить «милая, загорелась эта перечеркнутая окружность — остановись и вызови бибику-эвакуатор»). Разболтанность тоже можно впринципе контролировать, но надо будет навесить ещё больше датчиков.
                • 0
                  Ненене, лампочка — это нифига не обратная связь. Обратная связь — это тычок шилом в задницу. Это дрожание руля в повороте, это скрежет, это что-то страшное. А лампочка… ну горит там она. Мало ли что… А потом хренакс, и вылет на встречку, гора трупов. Ну да, водитель дурак, лампочку проигнорировал. И что? Если бы у него руль колбасило, он бы не ездил до последнего.

                  Так что обратная связь, даже в случае электронного руля — это его раскачивание. Вместо лампочки. Тогда важность сигнала будет ощутимой.
                  • +1
                    В случае с рулём нормальной обратной связью будет сначала лампочка, чуть позже отключение бензонасоса.
                  • 0
                    Кхем, как ниже написали, если ошибка будет критичной — машина просто не даст запустить двигатель. Ну и если-бы вы знали, с какими неисправностями у нас вёдра ездят периодически (чо, рулевая колонка отвалилась — та пофигу, пускай руль хоть на коленях лежит — поеду, чо, тормозит одно заднее левое колесо — пофик, поеду, у меняж ручни ещё есть, чо, в салоне дымовая завеса от дырявого глушкака — пофиг, я привык, поеду). Такчто руль должен не дрожать, а ломать пальцы, чтобы такие личности всётаки поехали на эвакуаторе в сервис/гараж.
            • +3
              Карданчик просто так еще никому на голову не падал без предупреждений не разваливался.
              А вот если мы рвем механическую связь между рулём и колёсами, то будьте добры сделать аналог BSCU с картинки выше, потому как разрыв шины человек отработает, значит и электроника должна. Дальше начинается контроль давления в шинах, дальше это все надо увязать с ABS/TC/ESP, потом придёт осознание о необходимости дублирования систем, и в итоге получается Airbus A320 с соответствующим ценником.
              • 0
                А оно к этому и идёт, (кроме двойных/тройных дублирований) уже много чего, ранее авиационного, перекочевало в премиум сегмент, а оттуда в массовый. Поначалу и ABS стоила как крыло самолёта и стояло только в премиуме, сейчас торчит из каждого нового ведра, более того — уже и ESP-подобные отовсюду торчат.
              • 0
                Со знакомым был случай, на Kia Mohave на ровной дороге, просто так, еще и внезапно оторвался рычаг передней подвески. Как потом выяснилось, похоже один болт выкрутился, второй не выдержал и его срезало. Соответственно все было без люфтов, стуков, скрежетов и без предупреждений, просто колеса уехали в разные стороны.
    • 0
      А если у вас сбойнёт гидроусилитель руля, так что вам надо будет его пересилить? Тоже останетесь без управления, особенно на большой скорости.
      • 0
        Я на газоне ездил со сломаным усилителем, ничего, заодно и руки прокачивает :)
        • 0
          Одно дело когда усилитель отключен, другое дело когда он отключается в процессе езды либо внезапно начинает с усилием 10...20кг крутить в одну сторону(с самолётами уже такое бывало). Пока сообразите что случилось будет уже поздно.
          • 0
            Слушайте, да случалось. Словил на ~90км/ч разрыв ГРМ на ВАЗ-2112. Сразу сцепление и тормоза (мягко, зима была), и рулём в сторону обочины. Ничего особо страшного, кроме счёта за ремонт двигателя....
      • 0
        У меня на моем сорокете гидроусилитель пару раз на скорости прекращал усиливать (и продолжает иногда делать это внезапно). Неприятно, но жить можно, хотя вызывает острое желание насос поменять уже.
    • +2
      Если пойти по ссылке из статьи, то там же видно, что есть сцепление, которое отключается электроникой и если что-то с электроникой/электрикой не так, то оно механически свяжет руль и колёса.

      А вот "зачем оно вообще нужно" из статьи совсем не понятно.
      • +1
        Автопилот сделать и все сиденья пассажирскими.
        • 0
          Когда будет полностью беспилотный режим — это понятно.
          Могу лишь предположить, что сделать разрыв вала руля и два мотора, было проще чем подвесит параллельно на вал руля мотор для продвинутого круиз контроля.
    • 0
      ЭУР точно так же обеспечивает механическую связь руля с колёсами при отключении электроники, как и ГУР. Но другое дело, что с непривычки водителю будет весьма сложно повернуть колёса при внезапно выключившемся усилителе любого типа, особенно учитывая, как рулит большинство водителей – одной рукой, чуть ли не двумя пальцами.
    • 0
      ЭУР как правило отключается на скорости больше 30-40 кмч. Толку от него не большой скорости нет, только вред.
  • +8
    "начинающие разработчики встроенных приложений для автомобилей " — после этой фразы становится страшно садиться за руль :)
    А то чем пугает автор в статье в примере про руль, называется "теория управления", она достаточно сложна, зато хорошо проработана и изучена. Конечно, программист интерфейсов в нее въезжать будет долго, для этого есть специальные отделения в ВУЗах где пару лет учат этому.
  • +4
    мм, таак, Ниссан вычеркиваем нафиг из списка претендентов на следующую машину
    • +2
      Так то оно так, но по факту нужно выкинуть все авто с ЭУР, АБС, ЕСП. По факту это 100% автомобилей.
      • 0
        Да почему это? отказ *УР, АБС, ЕСП, Трекшн контрол приведёт к ожидаемым и предсказуемым последствиям, и управление автомобилем останется. Отказ необратимой ЭДСУ колёсами приведёт клиента прямиком на стол в морге. Более того, смею утверждать, что даже без отказа этой самой ЭДСУ в том виде, в котором она изложена, приведёт клиента на тот же стол.
        • 0
          А это смотря что означает "отказ", если ЭУР, АБС, ЕСП просто выключиться, то да, какое-то управление будет. А если сглючит, то не будет. Прямая задача ЭУР — крутить руль, так что он покрутит, то в столб приедем ещё быстрее чем с электронным рулём (и такие реальные примеры есть). Прямая задача АБС — отключать тормоза, вот оно их и отключит. ЕСП — тормозить колёса по-одному.

          А обсуждаемый электрический руль тоже имеет механический бэкап

          But Nissan’s upcoming steer-by-wire (SBW) system includes a fail-safe clutch in its column. In ­normal driving situations, this clutch is disengaged, but if one of the three control modules detects a fault, the clutch snaps shut and the steering acts as a conventional, electrically assisted rack-and-pinion system
          • 0
            Тут обсуждается концепт. Ниссан — не самоубийцы, они оставят механическую связь.
            ЭУР все-таки усилитель, а не сервопривод, случись что — его можно пересилить руками. По-моему уход в столб — это не ЭУР, а именно сервопривод рулевого управления, для всяких автоматических парковок.
            Отказ АБС имел место у меня однажды, чуть не увел на 5км/ч под КАМАЗ. Причина — выход из строя одного из колёсных датчиков. Результат — сработка АБС при торможении на абсолютно сухом асфальте и на маленькой скорости. Конечно, после этого машина зажгла лампу, и АБС отключился, но до этого я уже успел понервничать.
            • 0
              ЭУР все-таки усилитель, а не сервопривод, случись что — его можно пересилить руками

              Не согласен, к тому моменту как вы поймёте, что его надо пересилить, уже будете во встречном кювете.

              Отказ АБС имел место у меня однажды, чуть не увел на 5км/ч под КАМАЗ.

              Ну вот, даже на 5кмч.
              • 0
                Я не понял, как это "пока пойму"? Вы что, без рук на руле машиной управляете? А если с руками, то в яму никогда не влетали, что руль дергается? По-моему, аргумент не очень подходящий, особенно в свете обсуждаемой необратимой электро-дистанционной системы рулевого управления.
                • 0
                  Не думаю что это будет похоже на яму. После ямы никакого усилия на руле нет, его нужно просто удержать.

                  http://www.zr.ru/content/articles/398726-sboj_v_elektrousilitele_usilitel_straha/

                  Вечером 10 октября 2011 года я отпраздновал свой второй день рождения: руль редакционного универсала «Лада-Приора» на скорости 40 км/ч самопроизвольно дернулся влево. Я ехал в крайней левой полосе и едва успел затормозить, остановившись в считаных сантиметрах от ограждения. А если бы скорость была выше?..

                  http://www.nn.ru/community/auto/main/?do=read&thread=694326&topic_id=13595576&year=2009

                  Руль вырвало из рук и машина проехала по встречке, т.к. колеса выровнялись прямо
  • +4
    Да-да-да, теория управления, теория цифровой обработки сигналов, дискретное преобразование Фурье, цифровые фильтры… Это совсем другой мир, и конкретно автомобили тут ни при чем — похожие проблемы возникают при компьютерном управлении любой системой из реального мира — что механической, что химической, что тепловой.
  • +3
    Исходя из своего небольшого опыта реверс-инжиниринга ECU немецких авто (боши, на сименсе), могу сказать что кода там не так уж и много. ~10% от ROM'а. Всё остальное это разные таблицы. 2х, 3х, 4х, даже 5ти мерные массивы. Вот и ответ на то, как быстро делать все расчеты — загонять в заранее подготовленные карты.
    А-ля data-driven программирование.

    Кстати, тем кто опасается by-wire управления вместо прямого, следует задаться вопросом о тормозах, педели акселератора (кто-то ездит на машине с тросиком к дроссельной заслонке?), акпп, пневмо-подвеске, и т.д.

    Ах да, датчик угла поворота руля ставят уже очень давно, и на нём завязано множество систем. И да, если он откажет, то ездить будет совсем не весело. И ЭУР тоже регулируется данными с этого датчика, поэтому поднимать хай, если вы ездите на более-менее современной машине D+ класса довольно странно.
    • 0
      Да, я опасаюсь управления по проводам. Да, у моей машины дроссельная заслонка управляется тросом, а из систем активной безопасности только АБС. Уж это за тридцать лет отладили более-менее.
      Из электроники — мозги двигателя, блок управления подушками, собственно АБС и все. И абсолютно счастлив, и машину с этими всякими ЕСП, ЭУР, TSI и DSG я не хочу, спасибо.
      • 0
        Уж это за тридцать лет отладили более-менее.

        То есть вопрос только в длительности отладки?
        Забыл еще упомянуть что ECU может и двигатель вывести из строя, тоже будет весьма неприятно получить отказ мотора во время движения.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.