Как научиться водить автомат


Как водить машину для начинающих пошагово: автомат

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

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

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

Содержание статьи

Езда на автомате для начинающих

Итак, рычаг селектора переключения АКПП имеет несколько основных положений: P, R, N, D, D2 (или L), D3 или S. Рассмотрим  каждый по отдельности.

  • Положение рычага переключения передач в позиции «P» — паркинг. Движение автомобиля невозможно, при этом в таком режиме разрешен запуск двигателя.
  • Положение рычага переключения передач в позиции «R» — реверс. Задний ход. Нельзя пользоваться этой позицией во время движения автомобиля вперед. В этом режиме запуск двигателя невозможен.
  • «N» — нейтраль. Автомобиль может свободно перемещаться. В этом режиме разрешен запуск двигателя, а также буксировка авто.

    Положение рычага переключения передач в позиции «D» – драйв (основной режим движения). Этот режим обеспечивает автоматическое переключение с первой по четвертую передачу (рекомендуется использовать в нормальных режимах движения).

  • Положение рычага переключения передач в позиции D3 (S) второй диапазон пониженных передач (на дорогах с небольшими подъемами и спусками) или D2 (L) диапазон пониженных передач (на бездорожье).

Такие режимы переключения есть не на всех АКПП, все зависит от модификации трансмиссии. Переключение рычага из положения D в положение D2 или D3 и обратно может производиться во время движения транспортного средства. АКПП также могут дополнительно оборудоваться  режимами переключения скоростей: N – нормальный, Е – экономичный, S – спортивный.

Вождение автомобиля: автомат коробка

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

  • Настройка водительского сидения. Спинка водительского сидения должна иметь максимально вертикальное положение, но не в ущерб удобству посадки водителя. Удаление подушки от педального узла, должно быть ориентировано на неполное распрямление ноги водителя при максимальном нажатии на педаль тормоза.

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

  • Настройка зеркал заднего вида. После того как, водитель  настроил водительское сидение, необходимо настроить зеркала заднего вида. Как правило, в современных автомобилях устанавливаются два боковых и салонное зеркало заднего вида (за исключением пикапов и коммерческого транспорта).  

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

При правильно настроенных боковых зеркалах 1/3 часть зеркала должна отражать заднее крыло автомобиля, а 2/3 обстановку позади. Касаемо салонного зеркала, оно должно быть отрегулировано таким образом, чтобы в верхнем положении переключателя угла наклона салонного зеркала в нем полностью отражался проем заднего стекла автомобиля.

  • После того, как настройки посадки водителя закончены, можно приступить к запуску двигателя. Запуск ДВС автомобиля с автоматической коробкой передач на многих моделях невозможен без нажатия на педаль тормоза в любом положении селектора выбора режимов АКПП, кроме P и N.

Ключ имеет четыре положения в замке зажигания: 

  1. Стандартное (базовое положение).
  2. Снятие противоугонной блокировки (разблокировка колонки рулевого управления).
  3. Включение зажигания (контроль приборной панели). Активирована электронная система автомобиля.
  4. Запуск двигателя.

Для того чтобы завести автомобиль с АКПП:

  • Вставляем ключ в замок зажигания и выжимаем педаль тормоза, при этом рычаг переключения передач должен находиться в положении паркинг «Р» или положении нейтраль «N».
  • Не отпуская педаль тормоза, поворачиваем ключ в замке зажигания в положение «Запуск двигателя».
  • Переводя рычаг селектора управления передачами в положение драйв «D» или «R», отпускаем педаль тормоза, опускаем стояночный тормоз, после чего автомобиль начинает движение.

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

  • Перед началом движения автомобиля нужно убедиться при помощи зеркал заднего вида в отсутствии попутного транспорта,  включить поворот, перенести правую ногу с педали тормоза на педаль газа и начинать движение плавно.

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

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

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

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

Если же дорожное покрытие недостаточного качества, либо погодные условия не позволяют безопасно совершить въезд на подъем «накатом», водитель транспортного средства обязан занять крайне правое положение на проезжей части. Далее на небольшой скорости следует преодолеть подъем. Если крутизна подъема слишком велика, стоит ограничиться понижающими передачами на АКПП (D3, 2, L).

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

  • Движение задним ходом. Перед началом движения задним ходом, водитель транспортного средства в первую очередь должен убедиться в достаточном пространстве на проезжей части за автомобилем для совершения маневра.

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

Убедившись в отсутствии преград, водитель переводит селектор АКПП в положение «R», убирает ногу с педали тормоза и, аккуратно дозируя тягу педалью акселератора, выполняет маневр. Если движение интенсивное, то для обеспечения большей безопасности при маневре, водитель транспортного средства может дополнительно включить аварийные огни.

  • Положение нейтраль «N». Это положение селектора АКПП используется крайне редко, зачастую в «сервисных» целях: закатить автомобиль на эвакуатор или на подъемник, в рамках проведения ТО, при буксировке и т.д.

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

Что в итоге

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

Рекомендуем также прочитать статью о том, как управлять автомобилем с коробкой автомат. Из этой статьи вы узнаете об особенностях управления автомобилем с АКПП, а также о некоторых тонкостях и нюансах техники вождения машины с автоматом.

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

 

Читайте также

Как научить себя водить автомобиль с помощью глубокого обучения | Абхинав Сагар

Самоходный автомобиль Google - Waymo

Без лишних слов давайте начнем с кода. Полный проект на github можно найти здесь.

Я начал с загрузки всех необходимых библиотек и зависимостей.

Набор данных состоит из 6 столбцов - центр, левый, правый (пути изображения камеры), рулевое управление, дроссель, реверс, скорость (значения). Я использовал фреймворк pandas для отображения первых пяти строк в наборе данных.

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

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

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

Следующим шагом было разделение данных с использованием правила 80–20, что означает использование 80% данных для обучения, а остальное - для тестирования модели на невидимых изображениях.Кроме того, я построил образец распределения угла поворота для обучения и проверки.

Я продолжил обработку изображений. Я обрезал изображение, чтобы удалить ненужные функции, преобразовал изображения в формат YUV, использовал размытие по Гауссу, уменьшил размер для упрощения обработки и нормализовал значения.

Для сравнения и визуализации я построил исходное и предварительно обработанное изображение.

Пока все хорошо. Затем я преобразовал все изображения в массив numpy.

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

Обучение нейронной сети

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

Наконец, я обучил модель для 25 эпох с размером пакета 128.Кроме того, я построил график тренировок и потерь при проверке как функцию эпох.

Потери против эпохи

Модель неплохо сходится всего за 25 эпох. Это означает, что он изучает довольно хорошую политику управления автомобилем на невидимой дороге. Не стесняйтесь поиграть с гиперпараметрами для получения лучших результатов.

.

Глубокое обучение для самоуправляемых автомобилей | by Manajit Pal

Использование исследований Nvidia для создания CNN для автономного вождения в Pytorch

Источник: Google Images

Большое спасибо Valohai за использование моего ржавого учебника в качестве введения в их потрясающую платформу машинного обучения 😍. Я предлагаю вам всем ознакомиться с их примером обучения сети в облаке с полным контролем версий с помощью платформы машинного обучения Valohai (www.valohai.com).

Мы все знаем, что беспилотные автомобили - одна из самых популярных областей исследований и бизнеса для технологических гигантов.То, что несколько лет назад казалось научной фантастикой, теперь больше похоже на то, что скоро станет неотъемлемой частью жизни. Причина, по которой я говорю «скоро будет», заключается в том, что, хотя такие компании, как Tesla, Nissan, Cadillac, действительно имеют программное обеспечение для помощи при самостоятельном управлении автомобилем, им по-прежнему требуется, чтобы человек следил за дорогой и возьмите под свой контроль, когда это необходимо. Однако интересно наблюдать, как далеко мы продвинулись в плане инноваций и насколько быстро развиваются технологии.Настолько, что теперь, с помощью базового глубокого обучения, магии нейронных сетей, мы можем создать собственный конвейер для автономного вождения! В восторге? Я уверен, что я! Тогда давайте перейдем к делу…

Предварительные требования:
1. Эта статья предполагает базовое понимание сверточных нейронных сетей и их работы.
2. Код, упомянутый здесь, написан на Python с использованием среды Pytorch, поэтому рекомендуется базовое знание языка и среды.

Если вам все это кажется чепухой, не паникуйте! Этот бесплатный курс от Udacity даст вам все, что вам нужно знать об основах глубокого обучения и Pytorch.

Моя биография
Я начал свое путешествие по глубокому обучению с одной из стипендиальных программ Udacity, спонсируемых Facebook, с помощью которой я изучил основы Pytorch из курса, упомянутого выше. Одновременно я был зачислен в программу Udacity Self-Driving Car Engineer Nanodegree, спонсируемую KPIT, где в качестве одного из моих проектов мне пришлось разработать модель сквозного глубокого обучения для беспилотного автомобиля в Керасе. Поэтому я решил переписать код в Pytorch и поделиться тем, что я узнал в этом процессе.Ладно, хватит разговоров, давайте настроим нашу машину на все, помня об одном - скажи НЕТ переобучению!

Ресурсы для проекта
1. Симулятор беспилотного автомобиля Udacity
2. Конечно, Python и Pytorch Framework
3. Если ваша машина не поддерживает GPU, я бы рекомендовал использовать Google Colab для обучения вашей сети. . Он предоставляет часы GPU и TPU бесплатно!
4. Если вы столкнулись с проблемами при сборе данных для обучения, вы можете использовать данные, предоставленные Udacity, для обучения вашей сети.
5. Полный код доступен здесь, а записная книжка Colab - здесь.
6. Исследовательский документ Nvidia, упомянутый в этой статье, можно найти здесь.

Сбор данных
Набор данных, предоставленный Udacity, работает хорошо, но этого недостаточно для того, чтобы автомобиль двигался по сложной местности (например, второй трек в симуляторе Udacity). Чтобы собрать данные из трека 2, нам сначала нужно создать папку в каталоге нашего проекта. Назовем эту папку - данные .Теперь запустим наш симулятор. Выберите в меню вторую дорожку и перейдите к опции тренировочного режима .

Главное меню симулятора

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

Просмотр папки с данными

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

Захват обучающих данных

Обучающие данные теперь хранятся в папке data . Внутри одна папка и один файл: IMG, и driving_log.csv . Наша следующая задача - прочитать из файла CSV имена изображений и связанные с ними данные управления и загрузить соответствующее изображение из папки IMG в Python.

ВРЕМЯ КОДИРОВАТЬ!

Было бы лучше работать с Colab, если вы предпочитаете не брать на себя головную боль по установке различных библиотек и фреймворков на свой локальный компьютер, а также если вы хотите воспользоваться бесплатными часами графического процессора. Кроме того, если вы предпочитаете не собирать данные, вы можете импортировать набор данных Udacity с помощью ! Wget URL и разархивировать файл с помощью ! Unzip .Перво-наперво. Импорт заголовков:

Чтение и разделение данных

Приведенный выше код считывает все из файла журнала и сохраняет его в массиве sample . Следующая строка (считыватель, Нет) удаляет первую строку, содержащую имена столбцов. Мы будем использовать этот массив для разделения наших данных на обучение и проверку. Одна из хороших практик из того, что я узнал, - использовать 20–30% обучающих данных в качестве набора для проверки для сравнения потерь при проверке и обучении, чтобы избежать переобучения.Давайте сделаем это:

Загрузка изображений в Dataloader
Теперь, когда мы сделали образцы, пришло время прочитать изображения и дополнить их. Это важный шаг, так как он поможет обобщить нашу модель. Но этот процесс требует больших вычислительных ресурсов и времени даже для графических процессоров. Хитрость заключается в том, чтобы распараллелить этот процесс, собирая данные в пакетах, дополняя их и отправляя модели для обучения. Керас достигает этого процесса с помощью python генераторов и функции fit_generator .В Pytorch для этого мы будем использовать класс Dataset и функцию Dataloader .
Чтобы реализовать это, нам пришлось бы перегрузить несколько функций класса, а именно функции __getitem__ , __len__ и __init__ . Мы также должны были бы определить некоторые дополнительные процессы. Я закодировал базовую функцию, которая будет брать изображение, случайным образом обрезать его и переворачивать по горизонтали вместе с отрицанием данных рулевого управления.Обрезка, по сути, помогает модели сосредоточиться только на дороге, убирая небо и другие отвлекающие элементы на изображении, а также выполняется зеркальное отражение, чтобы изображения были обобщены для левых и правых поворотов, по существу, удерживая автомобиль в центре. дороги. Другие методы могут заключаться в добавлении случайной яркости для имитации различной продолжительности дня, наложении на изображение слоя искажений и шума для имитации дождя, добавлении случайных теней на дороге и т. Д. Но пока мы просто будем придерживаться основ.

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

Обратите внимание, что есть также аргумент с именем преобразование . Наше преобразование нормализует значения массива изображений до диапазона 0–1 с помощью лямбда-функции . Затем мы используем функцию Dataloader для добавления всего в генератор, который будет вызываться пакетно во время обучения.Мы определяем размер пакета 32 и перемешиваем их при передаче DataLoader . num_workers определяет, сколько рабочих будет создавать пакеты параллельно для обработки.

Архитектура модели
Пришло время построить нашу модель. Давайте внимательно посмотрим на исследовательский документ Nvidia. Идите вперед и откройте его в новой вкладке. Ссылка находится в разделе ресурсов выше.

Если вы прокрутите вниз до страницы 5 PDF-файла, вы увидите архитектуру CNN, которую они построили.

Ладно, ленивец, это образ, о котором я говорю 😝. Если вы посмотрите на числа, вы увидите глубину сверточных слоев и входные и выходные характеристики полносвязных слоев. Теперь в каждой карте функций есть упомянутые ядра. Как упоминалось в документе, ребята из Nvidia использовали изображения YUV в качестве входных данных и использовали чередующиеся свертки в первых трех сверточных слоях с шагом 2 × 2 и ядром 5 × 5, а также несвязанную свертку с размером ядра 3 × 3 последние два сверточных слоя.Интересно, однако, что никакого упоминания о слое maxpool не было. Я старался неукоснительно следовать вышеупомянутой архитектуре и строить CNN. Вот что я придумал:

К сожалению, с этим подходом что-то не так. Может быть, это была нехватка данных или, может быть, отсутствие слоев maxpool, сеть работала ужасно. Автомобиль всегда дрейфовал по бездорожью даже на прямой дороге. После некоторого поиска в Google я наткнулся на это репо. Модель используется здесь как упрощенная версия архитектуры Nvidia.Я попробовал, и это сработало отлично, когда тренировалось с достаточным количеством эпох. Итак, окончательная архитектура для меня была такой:

Тем не менее, вы можете попробовать первую модель со слоями maxpool. Это потребует некоторых расчетов для заполнения, а также для высоты и ширины вывода. Давайте рассмотрим несколько моментов здесь:
a) nn.Module - Класс nn.Module используется в Pytorch для создания CNN. Мы должны перегрузить функции __init __ () и forward () для построения сети.Я использовал nn.Sequential () , чтобы избежать дублирования кода. Все, что находится в функции nn.Sequential () , применяется ко входу последовательно. Довольно аккуратно, а?
а) активация элюента -
Здесь используется функция активации элю (экспоненциальная линейная единица). В отличие от relu (выпрямленного линейного блока), elu ускоряет процесс обучения, а также решает проблему исчезающего градиента. Более подробную информацию и уравнение функции элюирования можно найти здесь.
b) Сглаживание изображения - Сглаживание вывода сверточных слоев перед переходом к полносвязным слоям выполняется с помощью строки: output.вид (output.size (0), -1) .

Оптимизатор и критерий
Двигаясь дальше, в документе также обсуждается использование потерь среднеквадратичной ошибки в качестве критерия и оптимизатора Адама. Давайте закодируем это! Я установил скорость обучения 0,0001. Вы можете настроить это соответствующим образом.

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

Pytorch и CUDA
Pytorch обеспечивает простую интеграцию с графическими процессорами с поддержкой CUDA (извините, AMD).Это делается с помощью простой функции device () . Он может значительно ускорить процесс обучения, например, в 10 раз быстрее, чем обычный процессор. Почему бы не воспользоваться этим? Для этого нам нужно передать наши данные и модель на GPU для обработки. Это действительно проще, чем кажется. Мы определяем функцию, которая будет делать это для всех входных данных, которые она получает.

Обратите внимание, что я преобразовал его в float () , чтобы модель могла вычислять входные данные.

Обучение
Пора тренировать наш шедевр! Сначала мы передаем модель в графический процессор, а затем используем генератор для передачи наших данных, а также данных в графический процессор.Затем мы устанавливаем оптимизатор, чтобы он не накапливал градиенты во время обратного распространения, используя функцию optimizer.zero_grad () . Наконец, мы рассчитываем общую потерю поезда и делим ее на размер пакета, чтобы получить среднюю потерю обучения за эпоху. Довольно просто.

Проверка
То же самое для проверки, но на этот раз мы убедимся, что наша модель находится в режиме оценки, чтобы мы не обновляли по ошибке градиенты и не распространяли ошибки. Мы используем модель .eval () для изменения режима и чтобы убедиться, что модель не отслеживает, мы используем torch.set_grad_enabled (False) . Таким же образом рассчитывается и убыток.

Сохранение модели
Последний шаг кода здесь! После завершения обучения мы сохраняем модель, чтобы использовать ее для автономного вождения автомобиля в нашем симуляторе. Мы создаем словарь состояний и сохраняем модель в формате .h5 , используя torch.save () .

Веселье начинается
И последнее, прежде чем мы начнем тестирование нашей модели, нам нужен файл, который загрузит нашу модель, получит кадры трека из симулятора для обработки через нашу модель и отправит прогноз рулевого управления обратно в симулятор.Не бойся! Я создал файл drive.py , который в основном является версией Pytorch файла drive.py от Udacity, который я использовал в своем проекте. Вы можете просмотреть код и поэкспериментировать с ним, если вам нужен другой дроссель и т. Д. А пока давайте скопируем и вставим содержимое приведенного ниже кода.

Также нам понадобится файл model.py , который будет содержать архитектуру модели. Создайте файл и вставьте свою сетевую архитектуру. Если у вас возникнут какие-либо проблемы, не стесняйтесь взглянуть на мою модель .py в репо.

Загрузите файл model.h5 в тот же каталог, если вы использовали Google Colab для написания кода. Запустите терминал, cd в свой каталог и запустите сценарий с нашей моделью:

 python drive.py model.h5 

Если на вашем компьютере установлены две разные версии python, используйте python3 вместо python . Нажмите «Разрешить», когда увидите всплывающие окна.

Снова откройте симулятор и выберите автономный режим .Автомобиль должен ездить самостоятельно, как хозяин!

Вот и все! Ваш собственный конвейер для беспилотных автомобилей. Как это круто! 😁

Вот небольшая демонстрация того, что вы могли ожидать:

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

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

Заключение
Спасибо, что нашли время прочитать мою статью. Я действительно надеюсь, что это поможет кому-то, кто хочет узнать некоторые концепции использования глубокого обучения в беспилотных автомобилях. Кроме того, это моя первая статья, связанная с ИИ, и я полный новичок, поэтому я был бы очень признателен, если бы вы могли оставить какие-либо положительные или отрицательные отзывы, свои мысли или другие ресурсы, которые, по вашему мнению, являются лучшим способом создания ИИ. для беспилотных автомобилей в комментариях ниже.Ура, ребята!

.

научиться водить машину за считанные минуты | Автор: Антонин РАФФИН

Обучение вождению за считанные минуты - обновленный подход

Хотя метод Wayve.ai в принципе может работать, у него есть некоторые проблемы, которые необходимо решить, чтобы применить его к беспилотному автомобилю с радиоуправлением.

Во-первых, поскольку экстрактор признаков (VAE) обучается после каждого эпизода, распределение признаков не является стационарным. То есть функции меняются с течением времени и могут привести к нестабильности в обучении политике.Кроме того, обучение VAE на ноутбуке (без графического процессора) происходит довольно медленно, поэтому мы бы хотели избежать повторного обучения VAE после каждого эпизода.

Чтобы решить эти две проблемы, я решил обучить VAE заранее и использовать ноутбук Google Colab, чтобы сохранить свой компьютер. Таким образом, политика обучается с помощью экстрактора фиксированных функций.

На изображении ниже мы исследуем, чему научился VAE. Перемещаемся в его скрытом пространстве (с помощью ползунков) и наблюдаем реконструированное изображение.

Изучение скрытого пространства, изученного VAE

Тогда, как известно, DDPG нестабилен (в том смысле, что его производительность может катастрофически упасть во время обучения) и его довольно сложно настроить. К счастью, недавний алгоритм под названием Soft Actor-Critic (SAC) имеет эквивалентные характеристики и его намного проще настроить *.

* во время экспериментов пробовал PPO, SAC и DDPG. DDPG и SAC показали лучшие результаты в нескольких эпизодах, но SAC было проще настроить.

Для этого проекта я использовал реализацию Soft Actor-Critic (SAC), которую я написал для стабильных базовых показателей (если вы работаете с RL, я определенно рекомендую вам взглянуть;)), в которой есть последние улучшения алгоритма в нем.

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

Функция награды: действуй быстро, но не сбивайся с пути!

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

Таким образом, я решил давать «бонус жизни» на каждом временном шаге (т.е. награду +1 за то, чтобы оставаться на трассе) и наказывать робота, используя « штраф за аварию » (-10 награда ) для ухода с трассы.Вдобавок я обнаружил, что полезно наказывать машину за слишком быстрое выезд с дороги: к штрафу за столкновение добавляется дополнительная отрицательная награда, пропорциональная дроссельной заслонке.

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

Подводя итог:

, где w1 и w2 просто постоянны, что позволяет сбалансировать цели (с w1 << 10 и w2 << 1, потому что они второстепенные цели)

Избегание шаткого управления: обучение плавному вождению

В действительности мир не стохастичен.Если вы заметили - робот не просто самопроизвольно трясется. Если вы не подключите к нему алгоритм RL. - Эмо Тодоров

Слева: Shaky Control - Справа: Smooth Control с использованием предложенной техники

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

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

В качестве примера, если текущий угол поворота автомобиля равен 0 °, и он внезапно пытается повернуть на 90 °, ограничение непрерывности позволит ему, например, поворачивать только при 40 °. Следовательно, разница между двумя последовательными командами рулевого управления остается в заданном диапазоне.За это дополнительное ограничение приходится немного больше тренироваться.

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

  • выходное относительное управление вместо абсолютного управления: производит колебания с более низкой частотой
  • добавить штраф за непрерывность (наказывать робота за сильные изменения в рулевом управлении): робот не оптимизирует то, что нужно, иногда работает, но потом не остается на трассе.Если стоимость этого штрафа слишком мала, он просто игнорирует его.
  • ограничивают максимальное рулевое управление: автомобиль больше не может оставаться на трассе в самых крутых поворотах
  • сложите несколько кадров, чтобы дать некоторую информацию о скорости: производит колебания более низкой частоты

Примечание: недавно исследователи из ETH Zurich предложили использовать учебную программу научиться иметь непрерывный и энергоэффективный контроль. Это может быть второе решение (хотя его немного сложнее настроить).

Краткое изложение подхода

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

Сначала человек собирает данные, управляя автомобилем вручную (10k изображений за ~ 5 минут ручного вождения). Эти изображения используются для тренировки VAE.

Затем мы чередуем эпизоды исследования (используется стохастическая политика) и обучение политике (проводится, когда человек снова ставит машину на рельсы, чтобы оптимизировать затраченное время).

Для обучения политики изображения сначала кодируются с использованием VAE (здесь со скрытым пространством размером 64) и объединяются с историей последних десяти предпринятых действий (дросселирование и рулевое управление), создавая вектор характеристик 84D.

Политика управления представлена ​​нейронной сетью (2 полносвязных уровня по 32 и 16 блоков, с функцией активации ReLU или ELU).

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

Заключение

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

Поскольку этот метод предназначен для применения в реальном мире, это определенно мой следующий шаг в этом проекте: протестировать подход на реальной радиоуправляемой машине * (см. Ниже). Для этого потребуется сжать модель VAE (сеть политик уже довольно мала), чтобы заставить ее работать на Raspberry Pi.

На сегодня все, не стесняйтесь тестировать код, комментировать или задавать вопросы, и помните, что совместное использование - это забота;)!

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

Благодарности

Эта работа была бы невозможна без повторной реализации Wayve Ромой Соколковым. .искусственный интеллект, симулятор автомобиля-осла Тона Крамера, сообщение в блоге Феликса Ю для вдохновения, Дэвид Ха за его реализацию VAE, Stable-Baselines и его зоопарк для реализации SAC и обучающих скриптов, проект Racing Robot для дистанционного управления и набор инструментов S-RL для инструментов отладки и обучения VAE.

Я также хотел бы поблагодарить Рома, Себастьяна, Тона, Флоренс, Йоханнеса, Йонаса, Габриэля, Альваро, Артура и Серхио за отзывы.

Приложение: Изучение представления состояния

Влияние размерности скрытого пространства и количества выборок

Размер скрытого пространства VAE просто должен быть достаточно большим, чтобы VAE смог восстановить важную часть входного изображения .Например, не было больших различий в получаемой политике управления между VAE 64D и 512D.

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

Можно ли узнать политику управления по случайным признакам?

Я попытался исправить веса VAE сразу после инициализации, а затем изучил политику для этих случайных функций.Однако это не сработало.

Сравнение с обучением на основе пикселей

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

Какая минимальная политика работает?

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

.

Как работают самоуправляемые автомобили?

Где все беспилотные автомобили? Это то, что вы, вероятно, говорите себе после того, как многие крупные технологические и автомобильные компании прогнозировали, что к следующему году, в 2020 году, полностью автономные технологии будут развернуты во многих автопарках.

Хотя этот «крайний срок» выглядит так, как будто он не будет соблюден, за последние несколько лет беспилотные автомобили и автономные технологии добились значительных успехов. Буквально недавно автономный полугрузовик совершил поездку по территории США.С. без проблем.

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

Это значительный пробег с очень небольшим количеством аварий по сравнению с водителями-людьми.

Поскольку технологии все еще развиваются, возможно, все еще находятся в зачаточном состоянии, что такое технология самоуправления и как работают автомобили, оснащенные ею?

Что такое беспилотные автомобили?

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

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

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

Уровни автономных транспортных средств

Когда мы думаем об автономных или беспилотных транспортных средствах, мы, вероятно, думаем об автомобиле или полуавтомобиле, который может управлять собой полностью без участия человека.Хотя это автономно, это не говорит всей истории. Этот «полностью автономный» сценарий представляет собой автономное транспортное средство 5 уровня , уровни 0–5 представляют полный спектр вождения, от полностью человеческого, до 5 , полностью компьютерного.

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

Источник: The Simple Dollar

Чтобы объяснить каждую деталь более конкретным текстом, мы изложили их все ниже.

Уровень 0: Водитель постоянно полностью контролирует автомобиль.

Уровень 1: Управление отдельными транспортными средствами автоматизировано, например, электронный контроль устойчивости или автоматическое торможение.

Уровень 2 : По крайней мере, два элемента управления могут быть автоматизированы одновременно, например, адаптивный круиз-контроль в сочетании с удержанием полосы движения.

Уровень 3: 75% автоматизация . В определенных условиях водитель может полностью отказаться от управления всеми критически важными для безопасности функциями.Автомобиль определяет, когда условия требуют, чтобы водитель снова взял управление на себя, и предоставляет водителю «достаточно комфортное время перехода» для этого.

Уровень 4: Транспортное средство выполняет все важные для безопасности функции на протяжении всей поездки, при этом от водителя не ожидается, что он будет управлять транспортным средством в любое время.

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

СВЯЗАННЫЙ: UBER ВОЗВРАЩАЕТ АВТОМОБИЛИ НА РАБОТУ - НО С ЧЕЛОВЕКАМИ

Какие технологии используются в беспилотных автомобилях?

Беспилотные автомобили включают в себя значительное количество технологий.Аппаратное обеспечение этих автомобилей оставалось довольно стабильным, но программное обеспечение, стоящее за автомобилями, постоянно меняется и обновляется. Рассматривая некоторые из основных технологий, мы имеем:

Камеры

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

У Teslas 8 внешних камер , чтобы помочь им понять окружающий мир.

Радар

Радар - одно из основных средств, которые беспилотные автомобили используют, чтобы «видеть» вместе с LiDar, компьютерными изображениями и камерами. Радар имеет самое низкое разрешение из трех, но он может видеть сквозь неблагоприятные погодные условия, в отличие от LiDAR, который основан на свете. Радар, с другой стороны, основан на радиоволнах, что означает, что он может распространяться сквозь такие вещи, как дождь или снег.

LiDAR

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

LiDAR имеет очень высокое разрешение по сравнению с RADAR, но, как мы упоминали выше, у него есть ограничения в условиях плохой видимости из-за того, что он основан на свете.

Другие датчики

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

Computer Power

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

Беспилотным автомобилям требуется исключительная вычислительная мощность, поэтому вместо традиционных ЦП они используют графические процессоры или ГП для вычислений. Однако даже самые лучшие графические процессоры начали оказываться недостаточными для нужд экстремальной обработки данных, наблюдаемой в беспилотных автомобилях, поэтому Tesla представила чип ускорителя нейронной сети, или NNA.Эти NNA обладают исключительной мощностью обработки в реальном времени, способной обрабатывать изображения в реальном времени.

С точки зрения перспективы между CPU, GPU и NNA, это количество гига-операций в секунду, которое они могут обрабатывать, или GOPS:

NNA являются явным победителем во много раз.

Будущее автономных и беспилотных транспортных средств

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

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

Если вы хотите увидеть некоторые из того, что мы обсуждали в этой статье, и многое другое в визуальной, анимированной, инфографической форме, взгляните на инфографику из The Simple Dollar ниже.

Источник: The Simple Dollar .

Смотрите также