ИИ для автономного вождения для сборщика мусора в машинах-ослах
Используйте твердотельный накопитель TensorFlow MobileNetV2 DNN на Raspberry Pi plus Pi Camera для создания автономного автомобиля, способного обнаруживать объекты.
История
В этом проекте будет показано, как превратить радиоуправляемый автомобиль с питанием от (Raspberry Pi + Pi Camera) в автомобиль, способный обнаруживать объекты и автономное вождение. Для этого мы развернем две глубокие нейронные сети. Один для обнаружения объекта, а другой для автономного вождения с использованием логического вывода для рулевого управления и газа. RPi 3 служит бортовым компьютером. Из-за ограниченных ресурсов RPi одновременно может работать только одна из сетей.
Идея состоит в том, чтобы обучить нейронную сеть распознавать мусорные баки, чтобы машина могла их забирать автономно.
идентификация автомобиля и ноутбука
Проект состоит из двух частей. В первой части план состоит в том, чтобы использовать сверточную сеть умеренного размера для распознавания объектов во входном видеопотоке с камеры Pi. TensorFlow будет использоваться для развертывания модели CNN, а OpenCV будет использоваться для управления потоком видео с камеры Pi.
Во второй части мы собираемся использовать поведенческое клонирование, чтобы заставить машину двигаться автономно. Модифицированный автомобиль также будет дополнен дополнительными датчиками, такими как ультразвуковой датчик расстояния, GPS и IMU с 6 степенями свободы, а также будут реализованы дополнительные функции телеметрии.
Введение
Еще в 2017 году (год назад) Google выпустил MobileNet, а ранее в этом году MobileNetV2. Эти сети специально оптимизированы для работы со встроенными устройствами, такими как смартфоны. По совпадению, MPU, используемый на RPi 3, попадает в эту категорию, поскольку он может работать как на Linux, так и на Android.
Первая проблема, с которой можно столкнуться, - это ограниченная оперативная память и вычислительная мощность Raspberry Pi 3. Несмотря на то, что это четырехъядерный MPU, этого все же недостаточно при работе с файлами большого веса, необходимыми YOLO (You Only Посмотрите один раз) типа сетей.
Первое решение, которое приходит на ум, - это отправить изображение, полученное с помощью камеры Pi, через Wi-Fi на внешний ПК и выполнить этап вывода объекта, а затем отправить команды в Donkey Car. По сути, мы должны связываться с головным кораблем на каждом этапе. Это неэффективно, не говоря уже о непрактичности в сценариях, когда связь с внешним портативным компьютером невозможна.
Сначала я тестировал сеть VGG16, которая была относительно точной при обнаружении мусорных баков. Однако он не мог работать на RPi, так как только вес составлял около 350 МБ! Чтобы проверить сеть VGG, обратитесь к приложенному коду в конце с похожими изображениями в качестве входных данных.
Проблема:
python KerasVGG_test.py
Итак, чтобы решить проблему огромных размеров весов, мы собираемся запускать все модели на RPi, используя более тонкие сети. В частности, мы собираемся использовать CNN на базе детектора одиночного выстрела MobileNetV2. Это DNN, оптимизированная для очень небольшого (относительно) веса.
Этот метод называется трансферным обучением, поскольку мы используем предварительно обученные сетевые веса.
Прежде чем мы углубимся в программное обеспечение, мы должны внести некоторые изменения в оборудование.
Аппаратное обеспечение
Магнитная машина использовалась для проекта Осла. Магнит - это автомобиль с дистанционным управлением, который работает с использованием многоканального радио 2,4 ГГц. Чтобы превратить Магнит в оселку, нужно выполнить несколько шагов.
1. Демонтаж
Сначала снимите верхнюю крышку, удалив зажимы и два винта на задней панели. Вы найдете клетку с двумя драйверами. Удалите и это, а затем снимите внешнюю верхнюю корзину. Теперь у вас есть доступ к цепям на автомобиле. Сверху один раз можно увидеть приемник, ESC (электронный регулятор скорости) и сервопривод.
Пустой DonkeyCar
Приемник представляет собой 4-канальный приемник с цепью B / C (удаление батареи). Каждый канал использует 3-х проводный соединитель. Каналы CH3 и CH4 не используются. ESC принимает батарею в качестве входа, выключателя питания и входа от канала 1 приемника. Сервопривод подключен к каналу 0 приемника. Сервопривод используется для рулевого управления. Угол поворота рулевого колеса можно отрегулировать вручную, если вы управляете с помощью джойстика, или его нужно откалибровать.
2. Установите адаптеры
Используются два пластиковых адаптера, напечатанных на 3D-принтере, после удаления двух винтов и верхней части корпуса. Вы должны прикрутить два адаптера вместо существующих зажимов, используя те же винты. После замены двух зажимов двумя печатными адаптерами на 3D-принтере теперь мы можем установить верхнюю деревянную пластину автомобиля Donkey.
Адаптеры, заменяющие длинные зажимы
Затем прикрутите ручку камеры к пластине базовой платы. Затем поместите пластмассовые детали с резьбой в каждое отверстие. Они используются для фиксации Raspberry Pi и сервоконтроллера на месте.
3. Сервоконтроллер и RPi
Установите RPi и сервоконтроллер на деревянную пластину. В итоге я использовал стяжки для крепления RPi, так как я не хотел помещать металлический винт рядом с антенной. После завинчивания сервоконтроллера подключите выводы шины I2C от RPi к сервоконтроллеру. Затем возьмите небольшой нож и разрежьте стяжки, которые скрепляют 3-контактные провода регулятора скорости и сервопривода.
При подключении к внешнему сервоконтроллеру оба соединения с приемником должны быть отключены от него и подключены к каналам 0 и 1 сервоконтроллера, которые мы позже установим наверху DonkeyCar. тарелка.
4. Деревянная тарелка
Установите деревянную пластину на адаптеры. Теперь используйте зажимы, чтобы прикрепить пластину DonkeyCar к адаптерам магнитного шасси.
Установите пластину автомобиля Donkey сверху и с помощью короткого кабеля USB подключите аккумулятор USB к RPi. Тросы дроссельной заслонки и рулевого управления будут выступать из отверстия в пластине и подключаться к каналам 0 и 1 сервоконтроллера, установленного на пластине автомобиля Donkey.
5. Дополнительные датчики
Основной проблемой стандартной конфигурации является отсутствие датчика для измерения скорости или расстояния до препятствий. Я добавил IMU 6DOF MPU6050, который позволяет RPi измерять трехмерное ускорение и повороты. Затем я добавил GPS к последовательному порту, а также датчик HCSR04 для измерения расстояния. Однако HCSR04 работает через 5 В и требует переключателя уровня.
На этом этап оборудования устройства завершен. Оселка была полностью переделана в 4-колесную машину, оснащенную:
а) Монокулярная широкоугольная камера
б) Сервоконтроллер.
c) Датчик IMU с 6 степенями свободы
г) GPS
e) Датчик расстояния
Все дополнительные датчики будут иметь временную метку при захвате и использоваться для увеличения обучающих векторов для глубинной нейронной сети.
Для поддержки дополнительного датчика необходимо изменить скрипт manage.py, чтобы добавить эту функцию.
Чтобы использовать IMU, я сначала попробовал библиотеку Python для FXOS8700 на Debian Stretch. Это не сработало из коробки из-за повторяющейся ошибки запуска RPi, поэтому в итоге я использовал MPU6050, который также поставляется с гироскопом.
Чтобы проверить код IMU, используйте следующий фрагмент ниже:
из IMU import MPU6050
mu =MPU6050 ()
a =imu.run ()
a #print answer
Следующее программное обеспечение должно быть из virtualenv для MPU6050:
sudo apt install python3-smbus
pip install mpu6050-raspberrypi
Файл meta.json в папке tub необходимо расширить для поддержки регистрации данных IMU.
{«Входы»:[«cam / image_array», «user / angle», «user / throttle», «user / mode», «imu / acl_x», «imu / acl_y», «imu / acl_z», «imu) / gyr_x »,« imu / gyr_y »,« imu / gyr_z »],« типы »:[« image_array »,« float »,« float »,« str »,« float »,« float »,« float », «Плавать», «плавать», «плавать»]}
Файл manage.py также необходимо изменить, как показано ниже:
imu =Mpu6050 ()
V.add (imu, output =['imu / acl_x', 'imu / acl_y', 'imu / acl_z', 'imu / gyr_x', 'imu / gyr_y', 'imu / gyr_z '], threadhed =True)
# добавить ванну для сохранения данных
inputs =[' cam / image_array ',' user / angle ',' user / throttle ',' user / mode ', 'imu / acl_x', 'imu / acl_y', 'imu / acl_z', 'imu / gyr_x', 'imu / gyr_y', 'imu / gyr_z']
types =['image_array', 'float' , 'float', 'str', 'float', 'float', 'float', 'float', 'float', 'float']
Наконец, я также добавил к устройству модуль GPS. Хотя его нельзя использовать в помещении, его полезно добавить для испытаний на открытом воздухе в местах, где вы можете подключиться к сети WIFI.
Если нужно войти в данные GPS, необходимо внести ту же модификацию, что и с IMU.
Чтобы использовать датчик расстояния HSCR04 один раз, необходимо установить библиотеку RPI.GPIO из среды python.
pi p установить RPi.GPIO
Здесь собраны все модификации оборудования. В конце концов у вас получится DonkeyCar, который выглядит так:
Программное обеспечение
Идея состоит в том, чтобы реализовать конвейер AI для обнаружения объектов, работающий на RPi. Первым шагом будет развертывание DNN для обнаружения объектов, которое будет работать на RPi 3 независимо от внешних устройств. Начнем с установки необходимого программного обеспечения.
1. Установите библиотеки DNN
В проекте используются TensorFlow и OpenCV. Проще говоря, чтобы сделать вывод о Raspberry Pi, мы используем уже обученную сеть. После загрузки грузов обнаружение объекта и вывод выполняется для каждого кадра камеры.
pip install tensorflow [pi]
pip install matplotlib raspberry
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-devsudo apt-get install qt4-dev-tools
pip3 install opencv-python
Следует отметить одну вещь:TensorFlow использует другой формат файла, в отличие от Keras, который имеет относительно простой рабочий процесс для загрузки весов в виде файлов h5.
sudo pip3 install keras –upgrade
Клонируйте официальный репозиторий модели TensorFlow.
git clone –recurse-submodules https://github.com/tensorflow/models.git
и экспортируйте путь:
экспорт PYTHONPATH =$ PYTHONPATH:/ home / pi / tensorflow1 / models / research:/ home / pi / tensorflow1 / models / research / slim
Наконец, когда все установлено и перед перезапуском проблема
деактивировать #, чтобы выйти из виртуальной рабочей области env, если вы используете
sudo shutdown -h now
Следующим шагом будет установка компилятора Protobuffer для весов SSD MobileNetV2.
2. Установите компилятор ProtoBuffer
Keras использует формат файла, отличный от TensorFlow. Итак, нам приходится иметь дело с протобуферами, которые являются собственным форматом для TensorFlow.
Я установил версию 3.5.1
sudo apt-get install autoconf automake libtool curl
wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all–3.5.1.tar.gz
tar -zxvf protobuf-all – 3.5.1.tar.gzcd protobuf-3.5.1
./configure
Компиляция этого займет довольно много времени (~ 1,5 часа) на RPi. Другое решение - кросс-компиляция, но пока нам придется сделать его простым. Выпуск:
сделать
Затем введите:
выполнить проверку
sudo make install
cd pythonexport
LD_LIBRARY_PATH =.. / src / .libs
Наконец, установите компилятор:
python3 setup.py build –cpp_implementation python3 setup.py test –cpp_implementationsudo python3 setup.py install –cpp_implementation
Теперь экспортируйте путь:
экспорт PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION =cpp
экспорт PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION =3
sudo ldconfig
Наконец, чтобы протестировать компилятор, просто введите:
протокол
Теперь мы читаем до грохота. Это позволит нам преобразовать вес в формат, понятный TensorFlow.
Подробнее:ИИ автономного вождения для мусороуборочной машины на ослике
Производственный процесс
- Планирование движения в реальном времени для автономного автомобиля в различных ситуациях , в смоделированн…
- Урок вождения по эксплуатации и техническому обслуживанию
- Подготовка к автономному будущему
- Что 5G может предоставить подключенному автомобилю?
- Безопасность:главный приоритет для автомобилей будущего
- 7 важных советов по безопасной эксплуатации пылесборника
- 3D-система отслеживания движения для автономных технологий
- Порт для зарядки автономных роев дронов
- Daimler и BMW будут сотрудничать в области автономного вождения
- Решения Continental Pioneers для автономного вождения