Хабрахабр

Управление автомобилем по CAN

Введение

Беспилотный автомобиль StarLine на платформе Lexus RX 450h — научно-исследовательский проект, стартовавший в 2018 году. Проект открыт для амбициозных специалистов из Open Source Community. Мы предлагаем всем желающим поучаствовать в процессе разработки на уровне кода, опробовать свои алгоритмы на реальном автомобиле, оснащенном дорогостоящим оборудованием. Для управления автомобилем было решено использовать Apollo, открытый фреймворк. Для работы Apollo нам необходимо было подключить набор модулей. Эти модули помогают программе получать информацию об автомобиле и управлять им по заданным алгоритмам.

К таким модулям относятся:

  • модуль позиционирование автомобиля в пространстве с помощью GPS-координат;
  • модуль управление рулем, ускорением и торможением авто;
  • модуль состояния систем автомобиля: скорость, ускорение, положение руля, нажатие на педали и т.д.;
  • модуль получения информации об окружении автомобиля. С этим справятся ультразвуковые датчики, камеры, радары и лидары.

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

Теоретическая часть

Что такое CAN-шина

В современных автомобилях управление всеми системами взяли на себя электронные блоки (Рис. 1.). Электронные блоки — это специализированные компьютеры, каждый из которых имеет все необходимые интерфейсы для интеграции с автомобилем. С помощью цифровых интерфейсов связи, блоки объединяются в сеть для обмена информацией друг с другом. Самые распространенные цифровые интерфейсы в автомобилях — CAN, LIN, FLEXRay. Из них наибольшее распространение получил именно CAN.

В 1986 году этот стандарт разработали в компании Bosch. CAN (Controller Area Network) шина — это промышленный стандарт сети. Стандарт разрабатывался для возможности устройствам общаться друг с другом без хоста. А первым автомобилем с CAN-шиной стал Mercedes-Benz W140, выпущенный в 1991 году. Каждый блок имеет свой набор ID. Обмен информацией осуществляется с помощью специальных сообщений, которые состоят из полей ID, длины сообщения и данных. Поле данных может нести информацию, например, о состоянии систем и датчиков, команды управления механизмами и т.д. При этом приоритет на шине имеет сообщение с меньшим ID.

1. image
Рис. Шина CAN автомобиля.

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

2. image
Рис. Физическое представление сигнала в CAN шине

Также по CAN можно управлять узлами автомобиля. Посредством CAN шины можно получать информацию о состоянии различных датчиков и системах автомобиля. Именно эти возможности мы и используем для своего проекта.

Так как самое сложное при исследовании автомобиля — это закрытые протоколы. Мы выбрали Lexus RX, потому что знали, что сможем управлять всеми необходимыми узлами по CAN. Поэтому одной из причин выбора именно этой модели авто стало наличие описания части протокола CAN-шины в opensource-проекте Openpilot.

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

Электроусилитель руля

Электроусилитель руля EPS (Electric Power Steering) — система, предназначенная снизить усилие на руль при повороте (Рис. 3). Приставка «электро» говорит о типе системы — электрическая. Управление рулем с этой системой становится комфортным, водитель поворачивает руль в нужном направлении, а электродвигатель помогает довернуть его до необходимого угла.

На торсионный вал устанавливается датчик величины крутящего момента (Torque Sensor). Электроусилитель устанавливается на рулевой вал автомобиля, части которого соединены между собой торсионным валом. Данные, полученные от датчика момента, датчиков скорости и оборотов коленвала, поступают в электронный блок управления ECU. При вращении руля происходит скручивание торсионного вала, которое регистрируется датчиком момента. А ECU, в свою очередь, уже вычисляет необходимое компенсационное усилие и подает команду на электродвигатель усилителя.

3. image
Рис. Схематичное изображение системы электроусилителя руля

Видео: cистема LKA рулит автомобилем с помощью системы EPS.

Электронная педаль газа

Дроссельная заслонка — это механизм регулировки количества топливной смеси, которая попадет в двигатель. Чем больше смеси попадет, тем быстрее едет автомобиль.
Электронная педаль газа — это система, которая задействует работу нескольких электронных узлов. Сигнал о положении педали, при ее нажатии, поступает в блок управления двигателем ECM (Engine Control Module). ECM, на основе этого сигнала, рассчитывает необходимое количество топлива, которое нужно подать в двигатель. В зависимости от необходимого количества топлива, ECM регулирует угол открытия дроссельной заслонки.

4. image
Рис. Система электронной педали газа.

Видео: Для работы круиз-контроля используется управление электронной педалью газа.

Электронные системы помощи водителю

Мы купили автомобиль, который оборудован множеством цифровых блоков и систем помощи водителю (ADAS). В нашем проекте мы используем LKA, ACC и PCS.

LKA удерживает автомобиль в полосе движения, когда водитель, например, отвлекся. LKA (Lane Keep Assist) — это система удержания в полосе, которая состоит из фронтальной камеры и вычислительного блока. Система способна понимать, что автомобиль неконтролируемо движется к правой или левой полосе. Алгоритмы в вычислительном блоке получают данные от камеры и на их основе принимают решение о состоянии автомобиля на дороге. При пересечении полосы система сама скорректирует угол поворота колес так, чтобы автомобиль остался в полосе движения. В таких случаях подается звуковой сигнал для привлечения внимания водителя. Система должна вмешиваться только в том случае, если осознает, что маневр между полосами движения не был вызван действием водителя.

Автомобиль сам ускоряется и притормаживает для поддержания нужной скорости, при этом водитель может убрать ногу с педалей газа и тормоза. ACC (Adaptive Cruise Control) — система адаптивного круиз-контроля, который позволяет выставить заданную скорость следования. Адаптивный круиз контроль способен видеть препятствия впереди автомобиля и притормаживать для избежания столкновения с ними. Этот режим удобно использовать при езде по скоростным магистралям и автострадам. При обнаружении статичного объекта, ACC сбавит скорость до полной остановки. Если впереди автомобиля едет другое транспортное средство с меньшей скоростью, ACC сбавит скорость и будет следовать за ним. Обычно такие радары работают на частоте 24-72 ГГц и способны уверенно видеть объекты на расстоянии до 300 метров. Для обнаружения объектов перед автомобилем такая система использует радар с миллиметровым диапазоном длин волн. Радар обычно установлен за передним значком на решетке радиатора.

Система призвана предотвратить столкновение с автомобилем, который движется впереди. PCS (Pre-Collision System) — система предотвращения столкновения. Здесь так же используются радар для оценки расстояния до объекта и фронтальная камера для его распознавания. При неизбежности столкновения, система минимизирует урон от столкновения. Обычно у системы есть два этапа срабатывания. Фронт PCS прогнозирует вероятность столкновения на основе скорости автомобиля, расстояния до объекта и его скорости. Второй этап — активируется экстренное торможение с помощью системы ABS, и включаются преднатяжители ремней безопасности. Первый этап — система звуком и индикацией на приборной панели оповещает об опасности водителя.

Практическая часть

Управление рулем

Первое, что захотелось сделать нашей команде, — это научиться рулить. Рулем в автомобиле могут управлять две системы: парковочный ассистент IPAS (Intelligent Park Assist) и LKA.

Так как в нашем автомобиле нет данной системы, проверить и освоить рулевое управление таким способом нельзя. IPAS позволяет задавать напрямую угол поворота рулевого колеса в градусах.

Мы подключили анализатор CAN-шины. Поэтому мы изучили электрические схемы автомобиля и поняли, какие CAN-шины могут быть полезны. Наша задача была найти команды управления электроусилителем руля EPS (Electric Power Steering). Лог содержит файл записей сообщений в шине в хронологической последовательности. Ниже пример изменения данных в шине CAN. Мы сняли лог поворота рулевого колеса из стороны в сторону, в логе смогли найти показания угла поворота и скорость вращения рулевого колеса. Интересующие нас данные выделены маркером.

image
Поворот руля влево на 360 градусов

image
Поворот руля вправо на 270 градусов

Для этого мы выехали на тихую улицу и записали логи обмена между блоком удержания в полосе и DSU (Driving Support ECU). Следующим этапом мы исследовали систему удержания в полосе. На рисунке 6 изображена команда управления EPS. С помощью анализатора шины CAN нам удалось вычислить сообщения от системы LKA.

5. image
Рис. Команда управления рулем с помощью системы LKA

Команду принимает модуль EPS. LKA управляет рулем путем задания значения момента на валу (STEER_TORQUE_CMD) рулевого колеса. Поле LKA_STATE содержит информацию о состоянии LKA. Каждое сообщение содержит в заголовке значение счетчика (COUNTER), которое инкрементируется при каждой отправке. Для захвата управления необходимо выставлять бит STEER_REQUEST.

Автомобиль проигнорирует такую команду, если сообщение содержит некорректную контрольную сумму или значение счетчика. Сообщения, которые отвечают за работу важных систем авто, защищаются контрольной суммой (CHECKSUM) для минимизации рисков ложного срабатывания. Это встроенная производителем защита от вмешательств сторонних систем и помех в линии связи.

6.) представлена диаграмма работы LKA. На графике (Рис. Torque Cmd — команда от LKA для управления рулем. Torque Sensor — значение с датчика момента на торсионном валу. При переходе через ноль меняется направление поворота руля. Из картинки видно, как происходит подруливание LKA для удержания автомобиля в полосе. отрицательное значение сигнала говорит о повороте вправо, положительное — влево. Т.е. При вмешательстве водителя, система перестает выдавать управление. Удержание команды в нуле говорит об отсутствии управления со стороны LKA. О вмешательстве водителя LKA узнает с помощью второго датчика момента на валу со стороны рулевого колеса.

6. image
Рис. График работы системы LKA

С помощью модуля StarLine Сигма 10 мы подготовили прошивку для проверки управления. Нам предстояло проверить работу команды управления рулем. На тот момент у нас не было графического интерфейса для управления модулем, поэтому пришлось использовать штатные средства автомобиля. StarLine Сигма 10 должен выдавать в CAN-шину команды на поворот руля влево или вправо. 7). Мы нашли в CAN-шине статус положения рычага круиз-контроля и запрограммировали модуль таким образом, что верхнее положение рычага приводило к повороту руля вправо, нижнее положение — к повороту влево (Рис.

7. image
Рис. Первые попытки рулить

Это возникает по нескольким причинам. На видео видно, что управление осуществляется короткими секциями.

Если расхождение между сигналом Torque Cmd и Torque Sensor превышает определенное значение Δ, система автоматически перестает воспринимать команды (Рис. Первая из причин — это отсутствие обратной связи. Мы настроили алгоритм на корректировку выдаваемой команды (Torque CMD) в зависимости от значения момента на валу (Torque Sensor). 8).

8. image
Рис. Расхождение сигнала приводит к ошибке работы системы

Система EPS не позволяет командами от LKA рулить в широком диапазоне. Следующее ограничение связано с системой защиты встроенной в EPS. при езде по дороге резкое маневрирование не безопасно. Что вполне логично, т.к. 9). Таким образом, при превышении порогового значения момента на валу, система LKA выдает ошибку и отключается (Рис.

9. image
Рис. Превышение порогового значения регулировки момента на валу

Мы посылаем модулю EPS команду повернуть колеса с конкретным усилием влево или вправо. Независимо от того, активирована система LKA или нет, сообщения с командами от нее присутствуют в шине постоянно. После нашей команды со значением момента, приходит штатная с нулевым (Рис. А в это время LKA перебивает наши посылки «пустыми» сообщениями. 10).

10. image
Рис. Штатные сообщения приходят с нулевыми значениями момента и перебивают наше управление

Это решило проблему, а нам удалось получить плавное управления рулем (Рис. Тогда мы, с помощью модуля StarLine Сигма 10, смогли фильтровать весь трафик от LKA и блокировать сообщения с ID 2E4, когда нам это было нужно. 11).

11. image
Рис. Плавная регулировка поворота руля без ошибок

Управление газом

Система адаптивного круиз-контроля ACC управляет ускорением и торможением программно по CAN-шине. Блок управления двигателем ECU принимает команды DSU, если необходимо ускориться — активирует электронную педаль газа. Для торможения автомобиля используется рекуперативное торможение. При этом на торможение и ускорение используется одна команда, отличаются только значения.

Она состоит из величины ускорения ACCEL_CMD, пары служебных бит и контрольной сумма Checksum. Команда управления ускорением или замедлением представлена на рисунке 12. Ускорение задается в диапазоне от 0 до 3 м/с^2, замедление аналогично, но со знаком минус. Для ускорения автомобилем значение ACCEL_CMD положительное, для замедления — отрицательное. Например, для ускорения 1 м/с^2, ACCEL_CMD = 1000 (0x03E8). Для отправки данных в шину необходимо пересчитать желаемое ускорение или замедление с коэффициентом 0,001.

12. image
Рис. Команда управления ускорения/замедления автомобиля

Сравнили с имеющимся у нас описанием команд и приступили к тестированию. Мы сняли логи со штатной системы ACC и проанализировали команды.

Лог управления ускорением/замедлением системы адаптивного круиз-контроля ACC (выделено маркером) image
Рис. 13.

Мы выехали на дорогу с оживленным трафиком для тестирования команды ускорения. Здесь не обошлось без трудностей. Необходимо найти движущийся впереди автомобиль и включить режим следования за ним. Команды управления ускорением или замедлением автомобиля работают только при активированном круиз контроле, не достаточно активировать его кнопкой.

Активация круиз контроля происходит при наличии впереди другого траснпортного средства image
Рис. 14.

К этому моменту мы подключили графический интерфейс для управления модулем StarLine Сигма 10. С помощью модуля StarLine Сигма 10 посылаем команду ускорения, и автомобиль начинает набирать скорость. Теперь мы управляем рулем, ускорением и торможением с помощью кнопок в приложении.

Система круиз-контроля отключилась, а следовательно, и команды ускорения перестали работать.
Мы приступили к исследованию возможности использовать команды без активного круиз-контроля. Команды работали до тех пор, пока не потеряли автомобиль впереди. Нас интересовало, в первую очередь, какой блок блокирует выполнение команд ACC на ускорение или замедление. Пришлось много времени потратить на анализ данных в шине CAN, чтобы понять как создать условия для работы команд. Пришлось изучить какие ID идут от DSU, LKA, радара и камеры, подсовывая липовые данные различных датчиков.

К тому времени мы представляли как происходит взаимодействие блоков автомобиля, провели исследование трафика сообщений и выделили группы сообщений, посылаемых каждым блоком. Решение пришло спустя 3 недели. DSU выдает команды на ускорение и замедление автомобиля, и именно этот блок получает данные от радара миллиметрового диапазона. За работу адаптивного круиз-контроля ACC отвечает блок Driving Support ECU (DSU). Радар сообщает DSU на каком расстоянии от машины движется объект, с какой относительной скоростью и определяет его положение по горизонтали (левее, правее или по центру).

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

Активация круиза: a) попытка активировать без подмены данных радара; б) активация при подмене данных от радара. a) image б)image
Рис. 15.

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

Поэтому тут же проверили и замедление. Как мы уже узнали, команда на ускорение и замедление одна. Поехали на на скорости с активным круиз-контролем, запустили команду на торможение, и авто сразу же замедлилось.

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

Цель достигнута.

Что еще мы используем

Для создания беспилотника необходимо управление вспомогательными системами: поворотниками, стоп-сигналами, аварийной сигнализацией, клаксоном и пр. Всем этим так же можно управлять по CAN шине.

Оборудование и ПО

Для работ с автомобилем сегодня мы используем набор различного оборудования:

  • Анализатор шины Marathon позволяет подключать и читать данные с двух шин одновременно. На сайте производителя анализатора есть бесплатное ПО для анализа логов. Но мы используем ПО, написанное в нашей компании для внутреннего пользования.
  • Модуль StarLine Сигма 10 мы используем как платформу для работы с цифровыми интерфейсами. Модуль поддерживает CAN и LIN интерфейсы. При исследовании автомобиля пишем программы на C, зашиваем их в модуль и проверяем работу. Из модуля можем сделать сниффер трафика CAN-шины. Сниффер нам помогает понять, какие ID идут от блока или блокировать сообщения от штатных систем.
  • Диагностическое оборудование Toyota/Lexus. С помощью этого оборудования можно найти команды управления системами автомобиля: поворотниками, стоп-сигналами, клаксоном, индикацией приборки.

Сегодня ведется активная работа по разработке беспилотного автомобиля, в ближайших планах реализация экстренного торможения перед препятствиями, их объезди и перестраивание маршрута автомобиля в зависимости от дорожной ситуации и указаний водителя.

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

GitLab проекта

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть