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

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

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

обновление (18.10.2019):
Команда Serval обновлена ​​для соответствия образу Jetson Nano SD-карты JP4.2.2. Пожалуйста, также проверьте официальную документацию по ослике для получения дополнительной информации.

  • Отключение драйвера с ошибками rtl8192cu работает не очень хорошо, а скорость передачи нового изображения ограничена 1 Мб / с. Для переустановки драйвера перейдите по ссылке.
  • Nvidia выпустила поддержку новой версии Tensorflow и Pytorch специально для Jetson. Некоторые процедуры установки обновляются.

Jetson Nano - мощный и эффективный одноплатный компьютер, созданный для (модное слово) ИИ на грани. Это всего лишь 99 долларов США, и это дает сообществу Maker все возможности использовать мощь машинного обучения.

Некоторое время я играл с Ослиной машиной, используя Raspberry Pi. Мне это очень нравится, и я ценю усилия сообщества. Я могу обучить его с помощью простого CNN, но вычислительная мощность вскоре падает, когда я добавляю больше датчиков, например, IMU, Lidar. А модель с интенсивными вычислениями не будет иметь хорошей частоты кадров или даже не сможет работать на Pi. Мне нужно что-то более мощное, но не такое дорогое. 😛 Что-то ниже 100 долларов США.

И вот он, Jetson Nano. В отличие от Raspberry Pi, Jetson Nano выпущен всего несколько недель назад, и по нему есть небольшие руководства и проекты. У меня были трудности с настройкой машины Donkey, и я решил написать (и свое первое…) руководство по настройке. Давайте начнем.

Для части Jetson Nano вам понадобится Jetson Nano, карта micro SD и USB-ключ Wi-Fi.

Я очень удивлен, что в комплект разработчика нет встроенного Wi-Fi и Bluetooth. Я последовал совету из учебника от Nvidia, чтобы записать образ на SD-карту и купить рекомендованный USB-ключ Wi-Fi: Edimax EW-7811Un.

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

Однако… Пока я тестировал его, Wi-Fi отключается каждые несколько минут, и я не могу загрузить и установить пакет, который мне был нужен. Я потратил 2 дня, пытаясь найти решение, и следующая команда упростит жизнь.

echo “blacklist rtl8192cu” | sudo tee -a /etc/modprobe.d/blacklist.conf

Это отключает драйвер с ошибками, и Wi-Fi, кажется, возвращается в нормальное состояние, но скорость передачи ограничена только 1 Мбит / с. Другое (лучшее) решение - перекомпилировать драйвер. Следуйте инструкциям из этого репозитория git и переустановите драйвер. Возможно, вам придется заглянуть в раздел устранения неполадок, чтобы отключить функцию управления питанием, чтобы Wi-Fi, вероятно, работал.

Начать установку пакета

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

Давайте сначала начнем с Tensorflow!

sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev
sudo apt-get install python3-pip
sudo pip3 install -U pip
sudo pip3 install -U numpy grpcio absl-py py-cpuinfo psutil portpicker six mock requests gast h5py astor termcolor protobuf keras-applications keras-preprocessing wrapt google-pasta
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.14.0+nv19.7

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

Не забудьте проверить все, чтобы убедиться, что он установлен правильно. Убедитесь, что сообщений об ошибках нет.

donkey@donkey-desktop:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>>

Почему бы не установить и Pytorch?

wget https://nvidia.box.com/shared/static/06vlvedmqpqstu1dym49fo7aapgfyyu9.whl -O torch-1.2.0a0+8554416-cp36-cp36m-linux_aarch64.whl
pip3 install numpy torch-1.2.0a0+8554416-cp36-cp36m-linux_aarch64.whl

Опять же, проверьте все, прежде чем двигаться вперед

donkey@donkey-desktop:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.__version__)
1.1.0a0+b457266
>>> print('CUDA available: ' + str(torch.cuda.is_available()))
CUDA available: True
>>>

И последнее, но не менее важное: он нам и Керасу понадобится для машины Осла.

pip install у меня не работает, поэтому я использую следующий метод:

sudo apt-get install python3-scipy
sudo apt-get install python3-keras

Тестовое задание:

donkey@donkey-desktop:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import keras
Using TensorFlow backend.
>>>

Программная часть в основном закончена. Перейдем к аппаратной части.

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

  1. Драйвер PCA9685 PWM
  2. Камера

Сначала обновите библиотеку GPIO

Nivida уже предоставила библиотеку GPIO, и что удивительно, у нее такой же API для RPi.GPIO. Так что для переноса библиотеки RPi на Jetson Nano почти ничего не нужно менять. Следуйте инструкциям Nivida GitHub, чтобы установить библиотеку, и вы также можете протестировать GPIO. Не забудьте также установить группу gpio для пользователя.

Во-вторых, установите сервобиблиотеку PCA9685 для управления рулевым управлением и дроссельной заслонкой

pip3 install Adafruit_PCA9685

Подключите PCA9685 к Jetson nano. Вы должны увидеть номер булавки по метке шелкографии.

VCC <-> 3.3v
SDL <-> SDL(3)
SCL <-> SCL(5)
GND <-> GND

И как обычно тестируем соединение.

donkey@donkey-desktop:/opt/nvidia$ sudo i2cdetect -y -r 1
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --

Посмотрите на адрес 0x40. Это наш PCA9685. Для тех, кто хочет узнать больше о протоколе I2C, вы можете посетить здесь.

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

sudo usermod -a -G i2c username
sudo reboot

Проверьте настройки группы для пользователя:

donkey@donkey-desktop:~$ groups
i2c adm cdrom sudo audio dip video plugdev lpadmin gdm sambashare gpio

Вот оно.

Все еще со мной? Следующим шагом будет настройка камеры. Плохая новость: камера Pi 1 не работает с Jetson Nano. А также широкоугольную камеру, которой я пользовался давно.

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

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

Последний шаг: установили модуль Donkeycar

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

git clone https://github.com/feicccccccc/donkeycar.git
cd donkeycar
pip3 install -e .

Для тех, кому интересно. Редактирую следующие вещи.

  1. Добавить новый класс камеры
  2. Добавить шину по умолчанию к деталям привода
  3. Добавьте приведение типов Int в Keras.py для переменной, чтобы обучение работало.

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

donkey@donkey-desktop:~/sandbox$ donkey createcar d2

Чтобы использовать новую камеру, необходимо внести несколько изменений в manag.py.

#from donkeycar.parts.camera import PiCamera
from donkeycar.parts.camera import CSICamera

А также добавьте новые детали камеры в автомобиль.

#cam = PiCamera(resolution=cfg.CAMERA_RESOLUTION)    
#V.add(cam, outputs=['cam/image_array'], threaded=True)
cam = CSICamera(resolution=cfg.CAMERA_RESOLUTION)
V.add(cam, outputs=['cam/image_array'], threaded=False)

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

donkey@donkey-desktop:~/sandbox/d2$ python3 manage.py drive

Затем вы можете войти на веб-сервер и управлять автомобилем.

И самое интересное! Вы можете тренировать свою машину на Jetson Nano локально!

Повеселись!

Редактировать:

  1. Пока я писал эту статью, я обнаружил в корзине для мусора USB-адаптер Bluetooth. Я подключаю его к Jetson Nano, и он работает! И мне не нужно делать никаких дополнительных настроек, чтобы подключить его к моему контроллеру PS4. Ура! Вы можете использовать контроллер, следуя этому руководству. Очень важно получить хороший набор данных, и правильный контроллер очень поможет.
  2. Рулевое управление и дроссельная заслонка, кажется, заклинивают друг друга. Причина в энергоемком Jetson Nano и моторе. Кратковременное потребление тока слишком велико, чтобы значительное падение напряжения повлияло на сигнал ESC. Есть два решения: использовать отдельный источник питания для сервопривода или добавить большой конденсатор для предотвращения падения напряжения. Я предпочитаю последний, но на данный момент у меня нет крышки, поэтому вы можете видеть на фотографии, что я перерезал USB-кабель, припаял к нему 2 перемычки и подключил его к сервоприводу.

3. Если вам нужен образ SD-карты целиком, вы можете найти его здесь. И ID, и пароль - осел.

4. Вы также можете создать раздел / файл подкачки для JN, поскольку он имеет только 4 ГБ памяти.

sudo fallocate -l 6G /var/swapfile
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'