Воспроизведение проекта NVIDIA Redtail
NVIDIA Redtail как автономные визуальные навигационные компоненты для беспилотных летательных и наземных аппаратов, использующие глубокое обучение. Использование моно и стереоалгоритмов для определения глубины. Воспроизведение проекта в симуляторе Gazebo.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 09.07.2020 |
Размер файла | 3,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Федеральное государственное автономное образовательное учреждение высшего образования
«Национальный исследовательский технологический университет «МИСиС»
Курсовая работа на тему:
Воспроизведение проекта NVIDIA Redtail
Выполнил:
Кондратова К.М.
Москва 2020
Введение
NVIDIA Redtail - автономные визуальные навигационные компоненты для беспилотных летательных и наземных аппаратов, использующие глубокое обучение.
Данный проект содержит глубокие нейронные сети, компьютерное зрение, код управления, аппаратные инструкции и побочные продукты, которые позволяют пользователям создавать беспилотные летательные и наземные аппараты. Эти механизмы способны автономно перемещаться в сильно неструктурированных средах, например, на лесных тропах, тротуарах и т. д., используя стереоалгоритм. TrailNet DNN для визуальной навигации от проекта NVIDIA Redtail работает на встроенной платформе NVIDIA's Jetson.
Jetson обеспечивает практически мгновенное распознавание препятствий и вычисление траектории полета. Испытания данной системы проводились на Redtail drone командой NVIDIA на пешеходных лесных и горных тропах. Без пилотирования, GPS и карт, используя только глубокое обучение в ИИ, беспилотный дрон следует по дорогам, идентифицируя препятствия и тропы по рельефу окружающей местности.
Благодаря Jetpack API и открытому исходному коду программного обеспечения TrailNet стало возможно создавать таких же беспилотных дронов самостоятельно.
1. Актуальность
В контексте автономных транспортных средств существует проблема оценки визуальной глубины окружающей среды. Несмотря на прогресс в ее монокулярной (monocular) оценке, использующейся повсеместно, разрыв между точностью измерения двух систем: монокулярной и стерео (stereo) - остается большим. Устранение этого разрыва - серьезная и сложная задача из-за фундаментальных ограничений монокулярного зрения. В результате, оценка глубины с помощью стереосистем и алгоритмов представляется более перспективной и актуальной в настоящее время.
Проект NVIDIA предлагает новый полу обучаемый подход к глубокому обучению стерео нейронной сети, а также новую архитектуру, содержащую машинно-обученный уровень argmax и пользовательскую среду (которая будет открыта для общего доступа), что позволяет уменьшенной версии стерео DNN работать на встроенном графическом процессоре.
В будущем автопилотируемые дроны и наземные аппараты могут прочно войти в нашу повседневную жизнь. Например, дроны могут использоваться на спасательных операциях для поиска людей на местности и в труднодоступных для человека местах, машины с автопилотом должны точно представлять окружающую среду и быстро реагировать на ее изменения. Спектр задач таких аппаратов огромен, но для каждой из них важно точно представление объектов в окружающей среде, для чего и предпочтительнее стереосистемы.
Проект NVIDIA был успешно протестирован (набор данных stereo KITTI 2015), а затем продемонстрирован на нескольких конференциях и выставках (IROS 2018, CVRP 2018). С 3 февраля 2020 года проект Redtail больше не поддерживается разработчиками, но продолжает развиваться при помощи сообщества. На его основе созданы альтернативные реализации, которые успешно используются и тестируются в настоящее время.
Цель и задачи
Исходя из вышесказанного, целью нашей курсовой работы стало:
Воспроизведение проекта NVIDIA Redtail.
Для этого были поставлены следующие задачи:
1. Изучение программной реализации проекта, документации и требований по его теме.
2. Сборка и воспроизведение проекта в Gazebo simulator.
3. Тестирование работы проекта в симуляторе.
Восприятие глубины полезно для понимания сцены, ее реконструкции, виртуальной и дополненной реальности, обхода препятствий, самостоятельного вождения автомобилей, робототехники и других приложений. Традиционно для оценки глубины используется несколько изображений. Методы, которые попадают под эту категорию, включают в себя стерео, фотометрическое стерео, глубину фокуса, глубину расфокусировки, время пролета и структуру движения. Есть несколько причин использования нескольких изображений: во-первых, для оценки абсолютной глубины требуется, по крайней мере, одно известное расстояние, что часто может быть обеспечено некоторыми знаниями о многокамерной установке. Во-вторых, множественные изображения обеспечивают геометрические ограничения, которые можно использовать для преодоления множества неоднозначностей фотометрических данных. Альтернативой является использование одного изображения для оценки глубины. Но такой подход не может достичь высокой точности на больших расстояниях в незнакомой среде, из-за его фундаментальных ограничений.
В связи с этим команда NVIDIA Redtail предлагает новый, эффективный стерео подход с глубоким обучением, который показывает убедительные результаты в наборе данных KITTI 2015 за счет использования функции потерь (с использованием LIDAR и фотометрической согласованности), объединяющий объем затрат, 3D-свертки и машинную функцию argmax. Глубокие нейронные сети проекта (DNN) могут быть обучены с нуля, используя общедоступные данные. В рамках проекта NVIDIA доступны несколько предварительно обученных нейронных сетей. Также проект содержит модели Stereo DNN и runtime, которые позволяют оценить глубину со стереокамеры на платформе NVIDIA.
2. Использование моно и стерео алгоритмов для определения глубины
Одна из причин в использовании монокулярной глубины - давняя вера в то, что стерео полезно только на близком расстоянии. Широко известно, что за пределами примерно 6 метров зрительная система человека по существу является монокулярной. Но появляется все больше свидетельств того, что человеческая стереосистема способна на большее. Многочисленные исследования показали метрическую оценку вплоть до 20 метров. Более того, поскольку зрительная система человека способна оценивать несоразмерность всего в несколько мгновений, есть основания полагать, что расстояние может составлять 1 км или более, при этом некоторые эксперименты подтверждают это. Стоит обратить внимание, что искусственная стереосистема, у которой базис шире, чем среднее расстояние между зрачками человека в ~65 мм, способна обеспечить еще большую точность.
Использование диаметрально разных подходов приобретает новое значение в контексте автономных автомобилей, поскольку их производители (за редким исключением) устанавливают монокуляр, а не стереокамеры в передней части транспортных средств. Правильный и полный инженерный подход к критической системе безопасности заключается в использовании всех доступных датчиков, что в данный момент не осуществляется. На средних скоростях на шоссе тормозной путь, необходимый для полной остановки до удара, требует наблюдения за непредвиденным стоящим объектом на расстоянии около 100 м. Монокулярная глубина, даже с новейшими алгоритмами, не способна обеспечить точность хотя бы близкую к этому требованию. Из-за таких результатов возникает желание испробовать стерео алгоритмы, в которых в последние годы был достигнут значительный прогресс в применении глубокого обучения.
Команда NVIDIA впервые исследовала и сравнила некоторые из стерео архитектур, их влияние на качество оценки глубины, а также разработала свой новый стерео подход с полу контролируемым обучением, который будет представлен далее. Но сначала на примере рассмотрим отличия стерео и моно оценки глубины и диспаритета.
Трудности и неточности монокулярной оценки глубины
Авторы проекта указывают на неточности монокулярной оценки, доказывая ее на примере, представленном далее:
На рисунке отмечены несколько интересующих нас точек. Предположим, что место действия неизвестно. Тогда ответьте на вопрос, ширина ближайшей дороги (на которой стоит машина (А)) больше, чем ширина тротуара (расстояние между столбами (E и F))? Возникает искушение ответить утвердительно. В конце концов, дорога не только занимает больше пикселей в изображении (что ожидаемо, т.к. она находится ближе к камере), но и порядок величины ее пикселей больше.
Рис. 1. Изображение из KITTI dataset. На нем представлена дорога перед трамвайными путями перед здание. Некоторые интересующие нас вещи: машина (A), забор (B), остановка (C), здание (D), ближайший столб (E), дальний столб (F), люди (G) и отправляющийся трамвай (H). Здание находится в 30 метрах от камеры.
Это изображение было показано нескольким людям в лаборатории NVIDIA и все они пришли к одному и тому же выводу: дорога действительно кажется значительно шире. Как оказалось, если взять это изображение за некий стандарт, то люди не слишком хорошо оценивают метрическую глубину по одному изображению, т.к. в действительности дорога и тротуар имеют примерно одинаковые размеры.
Также в статье представлено изображение, полученное лучшим алгоритмом монокулярной глубины (monoDepth) и изображение, полученное с помощью алгоритма стерео глубины, разработанного командой Redtail. На первый взгляд кажется, что оба результата вполне правдоподобны. Хотя можно заметить, что стерео алгоритм сохраняет более четкие границы объектов и поэтому, вероятно, достигает более точных результатов.
Рис. 2. Результаты моно и стерео алгоритмов (сверху и снизу соответственно) на изображении рисунка 1, показывающие карту глубины/диспаритета.
Для того чтобы лучше увидеть различия, обратимся к третьему рисунку, на котором представлены точки (вид сверху), связанные с картами глубины/дисперсии, а также наложены данные наземного сканера LIDAR. Эти изображения показывают, что монокулярная глубина не достигает необходимой точности. На самом деле, из 8 интересующих нас объектов, выделенных на рисунке 1, монокулярный алгоритм теряет почти все из них (возможно, он обнаруживает автомобиль (A) и часть забора (B)). В отличие от этого результата, стерео алгоритм способен правильно обнаружить автомобиль (A), забор (B), остановку (C), здание (D), ближний (E) и дальний (F) заборы и людей (G). Единственный крупный объект, который пропустил стерео алгоритм - поезд (H), уходящий со станции, который виден в основном через прозрачную остановку.
Рис. 3. Результаты моно и стерео алгоритмов (слева и справа соответственно), вид трехмерных точек сверху. Зеленые линии - данные с LIDAR. Буквами обозначены объекты, представляющие интерес для исследования.
Именно то, что стерео алгоритмы имеют доступ к большей информации, которую монокулярные алгоритмы никогда не будут иметь, является решающим для точного определения глубины при выборе между ними. Как видно из последнего изображения ширина тротуара почти такая же, как и ширина дороги. Как показано на практике, стерео алгоритм, имея только одну пару изображений из одной точки в одно время, способен восстановить информацию, даже если здание находится в 30 метрах от камеры. Тот факт, что человеческая зрительная система так легко обманывается одной фотографией, заставляет исследователей и разработчиков предполагать, что ограничение точности для монокулярной глубины не связано с конкретным используемым алгоритмом, а скорее является фундаментальным препятствием, которое будет трудно преодолеть в течение длительного времени.
3. Глубокие стерео сети
Проект NVIDIA Redtail берет за основу использование стереопары изображений. При помощи тензоров левое и правое изображения сопоставляются путем сравнения объектов.
В ходе исследования команды NVIDIA, было выяснено, что дифференцируемый мягкий argmax (аргумент максимизации), использующийся в подавляющем большинстве стерео алгоритмов, имеет недостаток, заключающийся в предположении, что весь контекст изображения уже был принят во внимание, что может быть не так. Чтобы преодолеть это ограничение, они реализовали машинную функцию argmax (ML-argmax), использующую последовательность 2D сверток для получения единственного значения для каждого пикселя, которое после прохождения через сигмоид становится оценкой несоответствия для этого пикселя.
Ниже представлены три ключевых отличия архитектуры стерео алгоритма Redtail по отношению к GC-Net (стерео сеть, которая по данным 2015 года показала наилучший результат на данных KITTI [5]):
1. Полу обученные функции потерь включают как контролируемые, так и неконтролируемые условия.
2. Использование ELU activations, а не ReLU-batchnorm позволяет сети обучаться и работать быстрее, избавляя от дополнительных операций, необходимых batchnorm.
3. Использование новых машинно-обученных функций argmax вместо мягкого argmax позволяет сети лучше учитывать контекст, прежде чем принимать решения.
Результаты опытов команды NVIDIA Redtail
Чтобы оценить стерео сеть и ее варианты, были проведены обучение и тестирование на наборе данных KITTI, что потребовало 40 GPU-дней. Для обучения было использовано 29K изображений с разреженным LIDAR. Впервые были объединены контролируемое и неконтролируемое обучение для глубокой стерео сети. Сама сеть была реализована в TensorFlow и обучена на 85000 итерациях с размером пакета 1 на графическом процессоре NVIDIA Titan X.
Рис. 4. Сверху вниз: изображения, полученные при контролируемом (LIDAR), неконтролируемом (фотометрическая согласованность) и полу-контролируемом (оба метода) обучениях.
Алгоритм был протестирован, а затем проводилось сравнение результатов с ведущим моно алгоритмом (monoDepth) и несколькими стерео алгоритмами. В итоге, все стерео алгоритмы, базирующиеся на LIDAR, упускали мелкие детали, такие как столбы и рельсы, в чем уступали рассматриваемому алгоритму. Сеть Redtail, использующая ML-argmax и полу контролируемое обучение достигает результатов, сходных с другими командами. GC-Net, фактически выигрывает только по трем из шести показателей, что скорее всего обусловлено предварительной подготовкой сети на плотных данных. Однако, представленный проект больше углублялся больше в влияние сетевой архитектуры и функции потерь, чем в анализ датасетов, что в данном случае является только будущей задачей. Но даже при этом, показана исключительная способность алгоритма извлекать из данных мелкие детали.
Результаты стерео сети NVIDIA отображены на рисунке ниже. Стоит обратить внимание, что алгоритм точно обнаруживает транспортные средства, велосипедистов, здания, деревья и столбы, а также дорожную плоскость.
Рис. 5. Результаты стерео алгоритма NVIDIA на тестовом наборе данных KITTI 2015. Слева направо: входное изображение, карта несоразмерности и карта ошибок.
С помощью пользовательской среды выполнения (основанной на TensorRT/cuDNN) была достигнута производительность реального времени (почти 20 кадров в секунду) на Titan XP, а также эффективные показатели на интегрированном Jetson TX2. Данный проект - первое глубокое обучение стерео сети на встроенном оборудовании [4].
Тестирование кода в симуляторе помогает избежать дорогостоящих сбоев оборудования и трат на оборудование, в принципе. Docker - предпочтительный способ настройки среды моделирования, поскольку позволяет изолировать все изменения программного обеспечения от основной системы, а также иметь несколько сред моделирования на одном компьютере.
4. Требования - аппаратное обеспечение
Данный проект рассчитан под 64-битную архитектуру. Это одно из важных требований. Другое - поддерживаемая библиотекой CUDA видеокарта. Об этом нюансе будет рассказано в подготовительном этапе установки этой библиотеки (пункт “CUDA Toolkit”).
Требования - программное обеспечение
Помимо аппаратных ограничений, есть и программные. Одно общее - ОС Ubuntu 16.04 LTS.
Уже было упомянуто, что симуляция проекта будет произведена с помощью Docker, однако существует два способа это сделать.
Первый заключается в том, чтобы запустить уже готовый образ. Его преимущество в том, что он содержит все необходимые компоненты и, в теории, не требует установки тех элементов, которые будут описаны ниже, за исключением Docker: ROS Kinetic, Gazebo, PX4 stack, CUDA и cuDNN, TensorRT и другое. Контейнеры, созданные из образа, позволяют запускать узлы ROS, такие как DNN, контроллер, камеру и джойстик, а также отладку в Gazebo.
Вторым способом является ручные сборка и запуск образа.
Однако образ требует наличие графического процессора NVIDIA и установленного NVIDIA Docker. Стоит заметить, что данная конфигурация была запущена и протестирована с помощью Docker v1, что является предпочтительным, так как в v2 нет драйверов OpenGL и другие известные проблемы.
Подробнее в описании репозитория проекта - [6].
Docker и NVIDIA Docker
Docker - программное обеспечение для автоматизации развёртывания и управлением приложениями с поддержкой контейнеризации. Позволяет упаковывать приложение в контейнер вместе со всеми необходимыми зависимостями и окружением (например библиотеки).
Контейнеризация - метод виртуализации, при котором создается изолированное внутри ОС пространство использующее ядро системы для доступа к аппаратным ресурсам.
Цели использования
Изоляция системы от изменений программного обеспечения;
Удобство развертывания на системах участников курсовой.
NVIDIA Docker - инструментарий использующий Docker Engine для использования контейнером GPU видеокарты NVIDIA с помощью CUDA Toolkit.
Установка Docker
1. Обновляем пакет apt и добавляем пакеты для использования https пакетом apt:
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
2. Добавляем официальный GPG ключ Докера
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg |
sudo apt-key add -
3. Проверяем получение ключа
$ sudo apt-key fingerprint 0EBFCD88
4. Добавляем репозиторий
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
5. Устанавливаем Docker Engine
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
6. Проверка того, что Docker установлен
$ sudo docker run hello-world
Установка Nvidia Docker
1. Добавляем ссылки на репозитории
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
2. Устанавливаем пакет nvidia-container-toolkit
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
3. Перезагружаем докер
sudo systemctl restart docker
CUDA Toolkit
Набор инструментов NVIDIA CUDA предоставляет среду разработки для создания высокопроизводительных приложений с GPU-ускорением. С помощью CUDA Toolkit возможны разработка, оптимизация и развертывание приложений на встроенных системах с графическим ускорением, настольных рабочих станциях, корпоративных центрах обработки данных, облачных платформах и суперкомпьютерах HPC. Инструментарий включает библиотеки с ускорением на GPU, инструменты отладки и оптимизации, компилятор C / C++ и библиотеку времени выполнения для развертывания приложения.
CUDA Toolkit - набор библиотек и инструментов, необходимый для работы. Приведем краткое описание:
Цели
Их всех целей можно выделить две наиболее важных.
Первая заключается в предоставлении набора расширений для стандартных языков программирования, которые обеспечивают простую реализацию параллельных алгоритмов. Благодаря этому сокращаются затраты времени на реализацию таких алгоритмов
Вторая причина заключается в самих алгоритмах, которые используют вместе с обычным и графический процессор. Графические процессоры с поддержкой CUDA имеют сотни ядер, способные выполнять параллельные вычисления.
Рассмотрим шаги установки. Их полная версия представлена на официальном сайте [7].
Поддержка
Сначала необходимо убедиться, что Вы имеете поддерживаемое аппаратное обеспечение. Критериями являются:
· Совместимый GPU;
Введите следующую команду, чтобы убедиться, что Вы имеете CUDA-совместный графический процессор.
$ lspci | grep -i nvidia
Также Вы можете найти свою видеокарту NVIDIA в списке CUDA-совместимых [8].
· Поддерживаемые версии Linux с gcc компилятором;
Введите следующую команду, чтобы определить, какой дистрибутив ОС вы используете:
$ uname -m && cat /etc/*release
Если вывод покажет x86_64, это значит, что архитектура Вашей системы - 64 бит. Это обязательно.
Для проверки того, установлен ли gcc, введите команду, которая покажет версию компилятора. Вы не увидите версию, если он не установлен:
$ gcc --version
Версию ядра вашей системы можно узнать с помощью следующей команды:
$ uname -r
Заголовки ядра и пакеты разработки для текущего ядра могут быть установлены с помощью:
$ sudo apt-get install linux-headers-$(uname -r)
NVIDIA CUDA Toolkit [8].
Загрузка NVIDIA Toolkit
Для наших целей необходим CUDA версии 9.0. Далее будут рассмотрены шаги по загрузке и установке данной версии CUDA Toolkit:
Загрузите установщик с официального сайта или используйте следующую команду:
cd
wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run
Сейчас Вы скачали установщик драйверов NVIDIA, установщик CUDA, установщик образцов.
Установка драйверов CUDA:
sudo apt-get install nvidia-384 nvidia-modprobe
1. Разархивируйте скачанные файлы:
cd
chmod +x cuda_9.0.176_384.81_linux-run
./cuda_9.0.176_384.81_linux-run --extract=$HOME
2. Вызовите run-файлы для установки оставшегося:
Установка CUDA Toolkit 9.0:
sudo./cuda-linux.9.0.176-22781540.run
Установка образцов, с помощью которых можно проверить, правильно и установлена CUDA:
sudo./cuda-samples.9.0.176-22781540-linux.run
После завершения установки настройте библиотеку времени исполнения:
sudo bash -c "echo /usr/local/cuda/lib64/ >
/etc/ld.so.conf.d/cuda.conf"
sudo ldconfig
3. Рекомендуется добавить строку /usr/local/cuda/bin в системный файл /etc/environment, чтобы nvcc был включен в $PATH. После этого нужно перезагрузить ПК.
sudo vim /etc/environments
Добавьте строку:/usr/local/cuda/bin
CUDA Drivers
GPU не является полностью автономным и требует многих ресурсов и информации от обычных драйверов даже для простых вещей. CUDA Drivers содержат некоторые компоненты и выполняют следующие функции:
JIT-компилятор/оптимизатор - код сборки может быть скомпилирован драйвером во время выполнения, а также перекомпилирован для соответствия архитектуре устройства, если это необходимо и возможно;
· Управление памятью устройства;
· Управление памятью хоста;
· Поддержка контекста, среды выполнения (управление буферной памятью кода/кучи/стека/печати);
· Динамическое управление символами, потоками и другое;
· Управление несколькими ядрами;
· Управление вычислительными режимами;
· Управление взаимодействием драйвера дисплея (использование DirectX и OpenGL).овка CUDA Drivers произведена в пункте “CUDA Toolkit. Установка”.
Также необходима установка cuDNN 7.1 - библиотека для работы с развертывающими нейронными сетями с поддержкой графических ускорителей. Этапы:
· Загрузить cuDNN v7.1.deb-файлы: runtime library, developer library, code samples.
Установите исходники в нужном порядке:
sudo dpkg -i libcudnn7_7.1.4.18-1+cuda9.2_amd64.deb
sudo dpkg -i libcudnn7-dev_7.1.4.18-1+cuda9.2_amd64.deb
sudo dpkg -i libcudnn7-doc_7.1.4.18-1+cuda9.2_amd64.deb
· Добавьте переменную окружения в конец.bashrc:
export LD_LIBRARY_PATH="LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}/usr/local/cuda/extras/CUPTI/lib64"
source ~/.bashrc
Подробнее смотрите в туториале [17].
TensorRT и Tensorflow
В настоящее время наблюдается рост спроса на сервисы с ИИ, однако и наборы данных становятся объемнее, нейронные сети усложняются. Требования к задержке растут, чтобы соответствовать ожиданиям.
NVIDIA TensorRT - высокопроизводительный оптимизатор deep learning и среда исполнения для приложений с глубоким обучением.
TensorFlow - библиотека с открытым исходным кодом для численных расчетов с использованием графов потоков данных. Вершины графа представляют собой математические операции, а ребра - многомерные массивы данных (или тензоры), протекающие между ними. Подобная гибкая структура позволяет развертывать вычисления на одном или нескольких процессорах/графических процессорах на компьютере и мобильном устройстве без переписывания кода. Изначально был разработан для машинного обучения и исследований глубоких нейронных сетей.
Для данного проекта необходима установка TensorRT 4.0.1.6, а TensorFlow предоставляется автоматически.
Далее рассмотрим шаги установки:
1. Прежде всего, данная библиотека требует установленных CUDA Toolkit v8.0, 9.0 или 9.2 (для нашего проекта 9.0, установка которого была описана выше), cuDNN 7.1.3, Python 2 или Python 3. Убедитесь, что все компоненты установлены.
2. Скачайте tar-файл TensorRT-4.0.1.6 с официального сайта.
3. Разархивируйте скачанный файл:
$ tar xzvf TensorRT-4.0.1.6.Ubuntu-16.04.4.x86_64
-gnu.cuda-9.0.cudnn7.1.tar.gz
4. Добавьте переменные окружения:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:
<eg: TensorRT-4.0.1.6/lib>
5. Установите пакет Python TensorRT:
$ cd TensorRT-4.0.1.6/python
o Python 2.7:
$ sudo pip2 install
tensorrt-4.0.1.6-cp27-cp27mu-linux_x86_64.whl
o Python 3.5:
$ sudo pip3 install
tensorrt-4.x.x.x-cp35-cp35m-linux_x86_64.whl
6. Установите пакет Python UFF:
$ cd TensorRT-4.0.1.6/uff
o Python 2.7:
$ sudo pip2 install uff-0.4.0-py2.py3-none-any.whl
o Python 3.5:
$ sudo pip3 install uff-0.4.0-py2.py3-none-any.whl
7. Установите пакет graphsurgeon:
$ cd TensorRT-4.0.1.6/graphsurgeon
$ sudo pip2 install graphsurgeon-0.2.0-py2.py3-none-any.whl
8. Переменные окружения:
Для работы некоторых примеров необходимо установить переменные окружения, которые будут указывать на путь к установленному пакету:
TENSORRT_INC_DIR к <TAR_INSTALL_ROOT>/include.
TENSORRT_LIB_DIR к <TAR_INSTALL_ROOT>/lib.
Более подробную информацию можно найти в официальном туториале по установке и использованию [9].
Сборка готового образа
Как уже было сказано, образ уже содержит необходимые компоненты и не требует установки упомянутых библиотек. В следующих пунктах рассмотрим шаги создания и запуска контейнера.
Примечание: образ содержит библиотеки, однако некоторые компоненты, такие как OpenCV, Qt Creator и QGroundControl требуют ручной установки. Они будут упомянуты на соответствующих шагах.
Сборка Docker-образа
Образ Redtail не является частью Docker Hub, так что его необходимо собрать. Скачайте TensorRT 4.0.1.6 для Ubuntu 16.04 и CUDA 9.0 с официального сайта NVIDIA Developer.
Далее в терминале перейдите в директорию redtail/tools/simulation/docker и запустите скрипт:
./build_redtail_image.sh path/to/TensorRT-4.0.1.6 tar file/...tar
Сборка образа займет некоторое время, а по завершении можно просмотреть имеющиеся на системе образы с помощью команды docker images. Вывод получится примерно таким:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvidia-redtail-sim kinetic-v2 b23157eb05e7 21 hours ago 7.59GB
Создание контейнера
Теперь, когда контейнер создан, вернитесь на уровень выше (redtail/tools/simulation) и запустите скрипт на выполнение, который переведет Вас в режим работы внутри контейнера:
run_redtail_docker.sh [container_name] [host_data_dir] [container_data_dir]
container_name - имя контейнера (redtail-sim по умолчанию).
host_data_dir - директория на хосте, куда будет смонтирован контейнер (/data по умолчанию).
container_data_dir - полный путь в контейнере, где host_data_dir будет размещена (/data по умолчанию).
Примечание: если Вы будете использовать камеру и/или джойстик, подключите их до входа в режим контейнера.
5. Сборка компонентов
У контейнера имеется рабочее пространство в ~/ws. В этом пространстве содержатся все компоненты, кроме исходного кода Redtail. Поэтому исходный код должен быть размещен на хосте и доступен среди всех контейнеров.
Чтобы создать правильные символические ссылки к рабочему пространству catkin и собрать все компоненты, запустите данный скрипт из контейнера, заменив пути, если это нужно:
~/build_redtail.sh /data/src/redtail
Запуск компонентов
Для запуска проекта необходимо запустить некоторые компоненты. Часто это делается из других терминалов, подключенных к одному контейнеру.
Запуск Gazebo
Выполните следующие команды:
cd ~/px4/Firmware/
make posix_sitl_default gazebo
Сборка займет некоторое время, но после Вы должны увидеть окно Gazebo с моделью 3DR Iris дрона. Для управления ним можете перейти к пункту “Тестируем Gazebo” в ручной сборке.
Запуск MAVROS
MAVROS (MAVLink + ROS) - пакет ROS, предоставляющий возможность управления беспилотниками по протоколу MAVLink. Поддерживает полетные стеки PX4 и APM, связь организовывается по UART, USB, TCP или UDP.
MAVROS подписывается на определенные ROS-топики в ожидании команд, публикует в другие топики телеметрию и предоставляет сервисы.
В новом терминале, подключенном к контейнеру, выполните следующие команды:
cd ${CATKIN_WS}/
roslaunch mavros px4.launch
fcu_url:="udp://:14540@127.0.0.1:14557"
gcs_url:="udp://@172.17.0.1"
На данном этапе можно запустить QGroundControl.
6. Запуск компонентов Redtail
Запуск контроллера и джойстика
В новом терминале контейнера выполните команды, одна их которых запустят ноду джойстика, а другая поднимет дрон в воздух и позволит им управлять с джойстика:
cd ${CATKIN_WS}/
rosrun joy joy_node
_dev:=/dev/input/js0 _autorepeat_rate:=30 &
rosrun px4_controller px4_controller_node
_altitude_gain:=2
Запуск DNN публикации
Есть несколько способов получить изображение:
1. Фальшивый видеопоток:
o Размещение рабочего пространства и сборка нод:
ln -s /redtail/ros/packages/caffe_ros
${CATKIN_WS}/src/
ln -s /redtail/ros/packages/image_pub
${CATKIN_WS}/src/
cd ${CATKIN_WS}
catkin_make
source devel/setup.bash
Запуск ноды, публикующей кадры видео:
rosrun image_pub image_pub_node _img_path:=/data/videos/trail_test.mp4
o Публикация изображения 30 кадров/сек:
rosrun image_pub image_pub_node
_img_path:=/data/downloads/images/trail_right.png _pub_rate:=30 _repeat:=true
Примечание: относительно этого и предыдущего пунктов, Вы можете проверить наличие топика /camera/image_raw командой rostopic list, или проверить данные топика командой rostopic echo -n 1 /camera/image_raw.
Запуск DNN ноды:
rosrun caffe_ros caffe_ros_node __name:=trails_dnn _prototxt_path:=/redtail/models/TrailNet_SResNet-18.prototxt _model_path:=/redtail/models/TrailNet_SResNet-18.caffemodel _output_layer:=out
Вы можете проверить наличие топика /trails_dnn/network/output, выполнив rostopic list. Также Вы можете узнать данные в этом топике командой rostopic echo /trails_dnn/network/output.
2. Настоящий видеопоток с физической камеры через gscam ROS ноду:
cd ${CATKIN_WS}/
export GSCAM_CONFIG="v4l2src device=/dev/video0 ! video/x-raw, width=640, height=360 ! videoconvert"
rosrun gscam gscam
3. Предварительно записанные rosbag-файлы [10].
Ошибки
Из-за того,что проект Nvidia Redtail прекратил свою поддержку в 2018 году может возникнуть ряд проблем.В данной главе будут описаны ошибки,встреченные нами.
Устаревший pip
Большинство ошибок кроется в файле dockerfile.kinetic.
Первой ошибкой является использование устаревшей библиотеки pip, что не позволяет создать wheel для сборки kiwisolver. Решением является изменение файла dockerfile.kinetic.
RUN apt-get update && apt-get -y --no-install-recommends install
Эту обширную команду следует сепарировать на несколько маленьких для более удобного поиска ошибок.
Перед установкой пакета matplotlib следует обновить pip.Это будет выглядеть таким образом:
RUN pip install --upgrade pip
RUN pip install 'matplotlib==2.2.2' --force-reinstall
Использование неправильного протокола
В команде
RUN cd /opt && curl http://www.eprosima.com/index.php/component/ars/repository/eprosima-fast-rtps/eprosima-fast-rtps-1-5-0/eprosima_fastrtps-1-5-0-linux-tar-gz?format=raw | tar xz eProsima_FastRTPS-1.5.0-Linux/share/fastrtps/fastrtpsgen.jar eProsima_FastRTPS-1.5.0-Linux/bin/fastrtpsgen
Запрашивается доступ к сайту www.eprosima.com по протоколу http, когда сайт поддерживает только протокол https.
Устаревший ROS
Следующей проблемой является получение ключа GPG от неработающего сервера,а также получение устаревшего ключа
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 \
Следует использовать эту команду, в ней используется актуальный ключ и работающий сервер ключей.
7. Создание нового образа PX4 and ROS Docker setup
В тех случаях, когда redtail image не может быть собран, есть вариант собрать образ вручную. Следующие секции описывают этот процесс. Docker Hub содержит px4-dev-ros образ, который включает в себя PX4 firmware, инструменты для симуляции, и ROS Indigo. Следуя инструкциям на сайте PX4 developer [11] создадим Docker контейнер.
Примечание: убедитесь, что вы скачали px4io/px4-dev-ros:v1.0 а не более позднюю версию.
tools/simulation/run_px4_docker.sh скрипт упрощает создание нового / присоединение к существующему контейнеру Docker. Скрипт имеет 4 необязательных параметра:
$ run_px4_docker.sh [container_name] [host_data_dir]
[container_data_dir] [NVIDIA_named_volume],
где [container_name] имя контейнера (по умолчанию: px4-ros), [host_data_dir] это полный путь к директории на хосте которая монтируется в контейнер (по умолчанию: /data), [container_data_dir] это полный путь к директории в контейнере с которой [host_data_dir] будет сопоставляться (по умолчанию: /data) и [NVIDIA_named_volume] это имя тома для отображения драйверов NVIDIA.
Сопоставление каталога от хоста к контейнеру позволяет легко обмениваться исходным кодом и данными между различными контейнерами.
Правильное отображение драйверов NVIDIA необходимо для обеспечения возможности запуска полного моделирования (контроллер DNN+).
Поддержка NVIDIA GPU and CUDA (опционально)
Запуск скрипта с стандартными настройками создает контейнер, который может быть использован для запуска и отладки только контроллера. Если бы вы хотели запустить узел DNN в симуляторе, необходимые некоторые дополнительные шаги. Такая конфигурация требует NVIDIA GPU с последними драйверами [12] такими же как в NVIDIA Docker [13].
Создание контейнера с поддержкой NVIDIA GPU
Узнайте, какой том в Docker сопоставляется с текущей установленной версией драйверов:
$ docker volume ls
Примерный вывод:
DRIVER VOLUME NAME
nvidia-docker nvidia_driver_378.13
Это том созданный NVIDIA Docker. Убедитесь, что эта версия тома совпадает с версий драйверов NVIDIA на компьютере. Текущая версия драйвера на компьютере может быть найдена командой
$ nvidia-smi
Запустите run_px4_docker.sh со всеми 4 параметрами, последний параметр - это имя тома (nvidia_driver_378.13), пример запуска:
$./run_px4_docker.sh px4-ros-cuda /data/ /data/
nvidia_driver_378.13
Оказавшись в контейнере, выполните следующие команды для обновления необходимых переменных среды в файле.bashrc:
$ echo "export
PATH=\$PATH:/usr/local/nvidia/bin:/usr/local/cuda/bin" >> $HOME/.bashrc
$ echo "export
LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/nvidia/lib64:/usr/local/cuda/lib64" >> $HOME/.bashrc
$ echo "export
LIBRARY_PATH=\$LIBRARY_PATH:/usr/local/cuda/lib64/stubs"
>> $HOME/.bashrc
Выйдете из контейнера, перезагрузить и подсоедините с помощью команды:$./run_px4_docker.sh px4-ros-cuda
Оказавшись, убедитесь, что версия GPU такая же как на устройстве с помощью инструмента nvidia-smi.
Установка CUDA Toolkit
Загрузите CUDA Toolkit 8.0 [14] для Ubuntu 14.04 (.runfile). Пакет скачается вместе с CUDA Toolkit, шаблонами, и драйвером. Нужно установить только Toolkit; не устанавливайте драйвера (шаблоны по желанию). Пример установки:
$./cuda_8.0.61_375.26_linux.run --silent --toolkit
Убедитесь, что Вы можете запустить NVCC компилятор с помощью команды $ nvcc --version.
Установка cuDNN
Скачайте cuDNN v6 [15] и установите пакет Debian для CUDA 8.0 (Runtime library). Для примера:
$ dpkg -i libcudnn6_6.0.21-1+cuda8.0_amd64.deb
$ Verify that the package was installed successfully:
$ dpkg -l | grep cudnn
Установка TensorRT
Загрузите TensorRT v2 [16] tar файл для CUDA 8.0.Установка из tar файла рекомендуется так как установка из Debian пакета известна некоторыми проблемами. Распакуйте файл и обновите ваши переменные окружения:
$ TENSORRT_BASE_DIR=/opt/tensorrt
$ TENSORRT_DIR=${TENSORRT_BASE_DIR}/TensorRT-2.1.2
tar -xf TensorRT-2.1.2.x86_64.cuda-8.0-14-04.tar.bz2
-C ${TENSORRT_BASE_DIR}
$ echo "export
LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:${TENSORRT_DIR}/lib" >> $HOME/.bashrc
$ echo "export
LIBRARY_PATH=\$LIBRARY_PATH:${TENSORRT_DIR}/lib" >> $HOME/.bashrc
$ echo "export CPATH=\$CPATH:${TENSORRT_DIR}/include" >>
$HOME/.bashrc
Проверьте установку с помощью запуска утилиты giexec:
${TENSORRT_DIR}/bin/giexec
Установка OpenCV с поддержкой CUDA
Узлу DNN необходима OpenCV с поддержкой CUDA.OpenCV 2.4 уже есть в установленном контейнере, но скомпилировано без поддержки CUDA. Следуйте командам ниже, чтобы собрать и установить OpenCV 2.4 из исходников:
$ cd ~
$ git clone https://github.com/opencv/opencv.git
$ cd opencv
$ git checkout 2.4.13.2
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
$ make -j4
$ make install
Примечание: В случае если сборка не удается, добавьте следующий фрагмент кода в команду cmake и повторите попытку:
-D CUDA_CUDA_LIBRARY =
/usr/local/cuda/lib64/stubs/libcuda.so
Построение стека программного обеспечения модели PX4
Обновляем GCC
Следующие команды установят последнюю версию GCC 5 и сделают его компилятором по умолчанию. Вам необходимо запустить эти команды в контейнере только один раз,после создания нового контейнера.
$ add-apt-repository ppa:ubuntu-toolchain-r/test
$ apt-get update
$ apt-get install gcc-5 g++-5
$ update-alternatives --install /usr/bin/gcc gcc
/usr/bin/gcc-5 60 --slave /usr/bin/g++ g++ /usr/bin/g++-5
8. Сборка PX4 кода
Скачайте исходные файлы PX4 Firmware. В этих инструкциях, мы допускаем что сопоставлена директория /data/ на компьютере с директорией /data/ в контейнере.
Запустите следующие команды в контейнере:
$ mkdir -p /data/src/px4/
$ cd /data/src/px4/
$ git clone https://github.com/PX4/Firmware.git
$ cd Firmware/
$ git checkout v1.4.4
$ make posix_sitl_default gazebo
9. Тестируем Gazebo
Когда сборка закончена, симулятор Gazebo simulator запуститься с предзагруженной моделью 3DR Iris. Это должно выглядеть таким образом:
Для того чтобы убедиться, что всё работает корректно, попробуйте оторвать дрон от земли с помощью командной строки. В окне контейнера, нажмите enter (должно появиться pxh>) и наберите команду:
$ commander takeoff
В окне газебо вы должны увидеть, как дрон взлетает. Чтобы посадить дрона наберите команду:
$ commander land
Присоединение QGroundControl к симулятору
The QGroundControl GCS может быть присоединено к экземпляру MAVROS работающему в контейнере.
Прикрепите к контейнеру и запустите узел MAVROS с аргументом gcs_url:$ roslaunch mavros px4.launch
fcu_url:="udp://:14540@127.0.0.1:14557" gcs_url:="udp://@172.17.0.1"
Возможно, вам потребуется изменить адрес компьютера; проверьте вывод команды ifconfig для просмотра вашего Docker host IP.
Запустите QGroundControl на компьютере. Оно должно автоматически присоединиться к симулятору запущенному в Docker. Попробуйте запустить управляющие дроном команды в командной строке Gazebo и посмотрите изменения в QGroundControl.
Сборка кода контроллера
Для сборки и запуска кода контроллера некоторые дополнительные зависимости должны быть установлены в контейнер.
Создание рабочей среды
Следующие команды создадут catkin workspace и соберут контроллер. Использование скрипта предполагает, что источники проекта находятся в /redtail. Вам нужно выполнить эти команды только один раз, после создания нового контейнера.
$ CATKIN_WS=${HOME}/ws
$ mkdir -p ${CATKIN_WS}/src
$ cd ${CATKIN_WS}/src
$ catkin_init_workspace
$ git clone https://github.com/ros/angles.git
$ ln -s /redtail/ros/packages/px4_controller
${CATKIN_WS}/src/
Сборка кода:
$ cd ${CATKIN_WS}
$ catkin_make
После, запустите следующую команду для добавления ROS переменных окружения для workspace:
source ${CATKIN_WS}/devel/setup.bash
Для того чтобы избежать этого при каждом входе, обновите bashrc файл:
echo "export CATKIN_WS=\${HOME}/ws" >> ${HOME}/.bashrc
echo "source \${CATKIN_WS}/devel/setup.bash" >>
${HOME}/.bashrc
Не забудьте собрать контроллер с помощью команды catkin_make после всех изменений.
Конфигурирование контроллера
Внешний контроллер, такой как NVIDIA Shield или Microsoft XBox controller, могут использоваться для управления дроном вручную, а также для включения/выключения автономного полета. Перед запуском контейнера Docker убедитесь, что контроллер подключен к компьютеру.
Установка узла ROS Joystick
$ apt-get install ros-indigo-joy
Тестирование узла joystick
roscore &
rosrun joy joy_node _dev:=/dev/input/js0
Теперь в разных терминалах, соединенных с одним и тем же контейнером Docker, запустите следующее:
rostopic echo /joy
и подвигайте стик на контроллере или понажимайте кнопки.Вы должны увидеть выходные данные, если нет - попробуйте использовать другое устройство (список доступных устройств может быть найден с помощью запуска команды: $ ls /dev/input/js*
Заключение
Разобравшись в предоставленной документации, мы попытались воспроизвести проект в симуляторе Gazebo. Стало понятно, что проект хоть и позволяет что-то посмотреть, не имея физического робота, однако эти возможности сильно ограничены, о чем говорят официальные источники в том числе.
Из наиболее удачного можно выделить работу с QGroundControl и управление с джойстика, результат можно увидеть в приложении.
навигационный летательный стереоалгоритм симулятор
Список литературы
2. https://github.com/mtbsteve/redtail
3. C. Godard, O. M. Aodha, and G. J. Brostow. Unsupervised monocular depth estimation with left-right consistency. In CVPR, 2017.
4. https://github.com/NVIDIA-AI-IOT/redtail/blob/master/docs/
5. A. Kendall, H. Martirosyan, S. Dasgupta, P. Henry, R. Kennedy, A. Bachrach, and A. Bry. End-to-end learning of geometry and context for deep stereo regression. In ICCV, 2017.
6. https://github.com/NVIDIA-AI-IOT/redtail/wiki/Testing-in-Simulator#rviz-visualization
7. https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#pre-installation-actions
8. http://developer.nvidia.com/cuda-gpus
9. https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html
10. http://wiki.ros.org/rosbag
11. https://dev.px4.io/v1.9.0/en/test_and_ci/docker.html
12. https://www.nvidia.com/Download/index.aspx
13. https://github.com/NVIDIA/nvidia-docker
14. https://developer.nvidia.com/cuda-downloads
15. https://developer.nvidia.com/cudnn
16. https://developer.nvidia.com/tensorrt
17. https://medium.com/repro-repo/install-cuda-9-2-and-cudnn-7-1-for-tensorflow-pytorch-gpu-on-ubuntu-16-04-1822ab4b2421
18. https://discuss.ardupilot.org/t/gsoc-2018-complex-autonomous-tasks-onboard-a-uav-using-a-monocular-camera-nvidia-redtail/31933
19. https://github.com/ArduPilot/redtail/wiki/Simulation#trail-navigation-using-google-maps-api-in-gazebo-simulator
20. https://ardupilot.org/dev/docs/using-gazebo-simulator-with-sitl.html
Размещено на Allbest.ru
Подобные документы
История развития графических адаптеров и их характеристики. Конкуренция изготовителей ATI и NVIDIA как "двигатель прогресса" графических адаптеров. Обзор основных моделей: ATI Radeon, Nvidia GeForce FX. Критерии выбора графических адаптеров при покупке.
реферат [134,7 K], добавлен 14.11.2013Беспилотные летательные аппараты. Возможный функционал применения беспилотных летательных аппаратов. Аэростатные летательные аппараты. Комплексы для использования до и свыше 100 метров. Двухлучевая модель распространения радиоволн, коэффициент отражения.
курсовая работа [2,8 M], добавлен 26.08.2017История видеокарт, их назначение и устройство. Принципы обеспечения работы графического адаптера. Характеристики и интерфейс видеокарт. Сравнительный анализ аналогов производства компаний NVIDIA GeForce и AMD Radeon. Направления их совершенствования.
контрольная работа [295,6 K], добавлен 04.12.2014История разработок и развития беспилотных летательных аппаратов, принципы их действия и сферы практического применения. Разработка программного обеспечения для обработки результатов съемки тепловых карт местности и устранения геометрических искажений.
дипломная работа [3,4 M], добавлен 10.01.2013Современные технологии ведения боя. Роботизированные средства в военной сфере. Устройство беспилотных летательных аппаратов, наземных и морских роботов. Разработка программы на языке Prolog для выполнения задачи разминирования военным роботом-сапером.
курсовая работа [375,1 K], добавлен 20.12.2015Порівняльне тестування відеоадаптерів фірм Nvidia GeForce та AMD Radeon. Призначення та основні типи відеоадаптерів. Використання логічних пробників. Вимірювання номінальної напруги, струму, температури. Основні вимоги безпеки під час експлуатації ЕОМ.
курсовая работа [1,6 M], добавлен 02.11.2014Появление дронов - фактор, в результате которого существенно упростилась возможность получения доступа к персональным данным граждан. Характеристика особенностей законодательного регулирования беспилотных летательных аппаратов в Российской Федерации.
дипломная работа [51,4 K], добавлен 10.06.2017Состав видеокарты AMD Radeon HD 6990, принципы и режимы ее работы, основные компоненты и интерфейсы подключения. Сравнительный обзор с видеокартой NVIDIA GeForce. Тестирование устройства, техническое обслуживание, последовательность настройки и включения.
дипломная работа [891,1 K], добавлен 26.08.2012Суть и описание проекта (резюме бизнес-плана). Классификация программного обеспечения для управления проектами. Функции программного обеспечения для календарного планирования. Календарное планирование. Управление затратами.
курсовая работа [192,2 K], добавлен 18.06.2007Использование MS Project для определения критического пути проекта. Задачи транспортной логистики. Разработка модели формирования затрат и доходов проекта. Расчет затрат, связанных с внедрением базы данных. Создание оптимальных условий труда оператора.
курсовая работа [877,6 K], добавлен 21.04.2013