Skip to content

Repository files navigation

AR-Stereo-AI

AR-Stereo-AI - это стереомодуль на базе нейропроцессора RK3399Pro для проектов со стереозрением и нейросетями.

Камера может использоваться в двух основных режимах:

  • как самостоятельное устройство: после загрузки автоматически запускается сервис детекции человека, отдает MJPEG-поток в браузер и отправляет UDP-команду 1 или 0 в зависимости от наличия человека в кадре;
  • как платформа для разработки: можно запускать стереопотоки, строить карту глубины, калибровать камеры, собирать ROS-драйверы, запускать RKNN-модели и обучать собственные модели для задач компьютерного зрения.

Команды ниже предполагают, что вы подключились к камере по SSH и находитесь в каталоге:

cd /home/root/ar-stereo_main

Быстрый старт

Подключитесь к камере по Ethernet:

ssh root@192.168.42.241

Пароль по умолчанию:

12345

Проверьте автозапуск детектора людей:

sudo systemctl status person_detector_udp.service
sudo journalctl -u person_detector_udp.service -f

Откройте видеопоток детектора в браузере:

http://192.168.42.241:8087/cam.mjpg

Настройки UDP-команды детектора находятся здесь:

ar_stereo_service/person_detector_udp.env

По умолчанию:

PERSON_DETECTOR_UDP_HOST=192.168.42.5
PERSON_DETECTOR_UDP_PORT=1236

После изменения настроек перезапустите сервис:

sudo systemctl restart person_detector_udp.service

Что умеет камера

Возможность Где находится Для чего используется
Детекция людей person_detector/ Штатный автономный режим, HTTP-просмотр и UDP-сигнал 1/0
Автозапуск systemd ar_stereo_service/ Установка и обслуживание сервиса детекции
Стереопотоки по UDP stream-left.sh, stream-right.sh, view.sh Быстрая проверка камер и просмотр изображения на ПК
Калибровка стереопары calibration/ Получение параметров камер и карт ректификации
Карта глубины distance_stream_cpp/, distance_stream_python/ Оценка расстояния в области интереса
YOLOv5 yolov5_/ Эксперименты с YOLOv5 на RKNN
ROS-драйверы appro_drivers-ros1_extend/ ROS1/ROS2 интеграция камеры, IMU и MSP

Структура репозитория

ar-stereo_main/
  README.md                         основной документ по работе с камерой
  stream-left.sh                    UDP-поток с левой камеры
  stream-right.sh                   UDP-поток с правой камеры
  view.sh                           просмотр UDP-потоков на ПК через GStreamer
  web_stream.py                     MJPEG-трансляция стереокартинки и запись видео
  grap_video_local_pc.py            захват UDP-видео на ПК
  grap_videos_on_camera.py          запись стереовидео на камере
  grap_images_on_camera.py          съемка изображений с камер

  ar_stereo_service/                systemd-сервисы, GPIO init, настройки UDP
  person_detector/                  детектор человека
  calibration/                      калибровка, YAML-параметры камер
  distance_stream_cpp/              C++ расчет глубины и трансляция результата
  distance_stream_python/           Python расчет глубины и тестовые скрипты
  yolov3_/                          YOLOv3 материалы и эксперименты
  yolov5_/                          YOLOv5 материалы и эксперименты
  appro_drivers-ros1_extend/        ROS-драйверы камеры, IMU и MSP

Подключение к камере

Камера обычно подключается к компьютеру по Ethernet. Если адрес камеры известен, подключитесь так:

ssh root@192.168.42.241

Если адрес неизвестен, можно просканировать сеть с компьютера:

sudo apt-get install nmap
ifconfig
sudo nmap -sn 192.168.42.0/24

Если ваша сеть использует другую подсеть, замените 192.168.42.0/24 на свою. Перед SSH-подключением камеру можно проверить:

ping 192.168.42.241

Если SSH ругается на изменившийся ключ устройства, удалите старую запись:

ssh-keygen -R 192.168.42.241

Если камера не подключается, проверьте, что IP-адрес компьютера и IP-адрес камеры не совпадают. Для ручной настройки сетевого интерфейса на Linux удобно использовать:

sudo nmtui

Подготовка модуля к работе

Для обновления ПО без удаления данных на стереомодуле, необходимо:

  1. Скачать актуальную версию
  2. Обновление ПО без удаления пользовательских данных:
http://192.168.42.241:9999/sysupgrade

Открыть скачанный образ,обновить

Если камеру нужно перепрошить вручную, подготовьте загрузочную microSD-карту с образом, вставьте ее в камеру, дождитесь зеленой индикации, отключите питание, извлеките microSD и включите питание снова.

Для подключения камеры к интернету откройте страницу /network и переключите камеру в режим клиента, если это требуется для вашей сети.

Сетевые настройки:

http://192.168.42.241:9999/network

В разделе wlan... измените режим работы камеры либо на Client (если хотите, чтобы она подключалась к Wi-Fi), либо на Access Point в противоположном случае

Стереорежим и выбор камеры

По умолчанию со стереомодуля используются изображения с крайней левой и средней правой камеры. Для переключения режима правой камеры найдите системный файл stereo_mode:

find /sys/ -name stereo_mode

Затем откройте найденный файл, скопируйте и укажите режим. Например:

nano /sys/devices/platform/ff120000.i2c/i2c-2/2-0036/stereo_mode

Внутри файла можно указать:

left

или:

right

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

Просмотр видеопотоков

Для быстрой проверки камер можно запустить отдельные UDP-потоки.

На камере:

./stream-left.sh
./stream-right.sh

На компьютере, который принимает поток, должен быть установлен GStreamer. Для просмотра используйте (необходимо скопировать файл на ПК):

./view.sh

Текущие порты:

Поток Скрипт UDP-порт
Правая камера stream-right.sh 1234
Левая камера stream-left.sh 1235
YOLOv5 yolov5_/rknn_yolov5_demo/src/main.cc 1237

В скриптах stream-left.sh и stream-right.sh сейчас зашит адрес получателя 192.168.42.15. Если ваш ПК имеет другой IP, измените host=... в этих скриптах или используйте собственную GStreamer-команду.

Автозапуск детектора людей

Основной сервис:

person_detector_udp.service

Он запускает:

person_detector/person_detector_udp.py

Что делает сервис:

  • инициализирует GPIO через ar_stereo_service/init.sh;
  • загружает модель person_detector/yolov3_416.rknn;
  • запускает RKNN runtime;
  • читает изображение с камеры через GStreamer/libcamera;
  • ищет класс person;
  • отдает MJPEG-поток на http://<ip-камеры>:8087/cam.mjpg;
  • отправляет UDP-команду 1, если человек найден, и 0, если человек не найден.

Установка и запуск сервиса:'U*w3hTM9k+N>2

cd /home/root/ar-stereo_main/ar_stereo_service
./install_person_detector_udp.sh

Проверка:

sudo systemctl status person_detector_udp.service
sudo journalctl -u person_detector_udp.service -f

Настройка UDP-адресата:

nano /home/root/ar-stereo_main/ar_stereo_service/person_detector_udp.env
sudo systemctl restart person_detector_udp.service

Ручной запуск без systemd:

cd /home/root/ar-stereo_main/person_detector
python3 person_detector_udp.py

При ручном запуске скрипт может попросить ввести UDP host. Если нажать Enter, будет использовано значение по умолчанию.

Калибровка стереокамеры

Калибровку лучше выполнять ипосле изменения объектива, крепления, разрешения или режима стереопары.

Перейдите в каталог калибровки:

cd /home/root/ar-stereo_main/calibration

В текущем дереве есть готовый бинарник CVcam_calibration. Запустите:

./CVcam_calibration

Если нужно пересобрать из исходника:

g++ SVcam_calibration.cpp -o SVcam_calibration $(pkg-config --cflags --libs opencv4)
./SVcam_calibration

Калибровка кмеры проводится с помощью шахматной доски. Скрипт попросит ввести:

  • количество внутренних углов шахматной доски по ширине;
  • количество внутренних углов шахматной доски по высоте;
  • ширину клетки.

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

Рекомендации:

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

Результаты сохраняются в YAML-файлы, например:

left_calibration.yml
right_calibration.yml
stereo_calibration.yml
rectification.yml

Эти параметры используются при построении карты глубины.

Карта глубины и оценка расстояния

В репозитории есть две реализации:

  • distance_stream_cpp/ - C++ версия;
  • distance_stream_python/ - Python версия.

Запуск C++ версии:

cd /home/root/ar-stereo_main/distance_stream_cpp
./distance_stream

Если нужно пересобрать:

g++ distance_stream.cpp -o distance_stream $(pkg-config --cflags --libs opencv4)

Запуск Python версии:

cd /home/root/ar-stereo_main/distance_stream_python
python3 depth_stream_final.py

Потоки глубины и отладочное видео можно просматривать через view.sh на ПК. Перед использованием проверьте IP, UDP-порты, путь к карте ректификации и ROI в соответствующем скрипте (в depth_stream_final.py это 163 и 170 строки).

Работа с видео и данными

Захват UDP-видео на ПК:

python3 grap_video_local_pc.py

Запись стереовидео на камере фрагментами по 25 секунд:

python3 grap_videos_on_camera.py

MJPEG-трансляция стереопары в браузер и запись видео на камере:

python3 web_stream.py

После запуска web_stream.py поток доступен в браузере:

http://192.168.42.241:8087/cam.mjpg

YOLOv5/RKNN demo

Каталог yolov5_/rknn_yolov5_demo/ для RKNN YOLOv5 и используется для экспериментов с YOLOv5

IP - проверить/изменить IP

yolov5_/rknn_yolov5_demo/src/main.cc:
```std::string gst_pipeline  =   "appsrc ! queue ! videoconvert ! video/x-raw,width=640,height=480,format=NV12 ! videoconvert ! jpegenc ! rtpjpegpay ! udpsink host=192.168.42.15 port=1237 sync=false";```

Сборка:

cd /home/root/ar-stereo_main/yolov5_/rknn_yolov5_demo
./build_linux.sh

Запуск:

./run_demo.sh

Модель RKNN лежит здесь:

yolov5_/rknn_yolov5_demo/model/yolov5s_relu_out_opt.rknn

PyTorch-модель и скрипт конвертации находятся здесь:

yolov5_/rknn_yolov5_demo/convert_rknn_demo/yolov5/

Важные замечания:

  • используйте RKNN-Toolkit версии 1.7.0 или выше;
  • demo ожидает RKNN-модель с 8-bit asymmetric quantization;
  • при замене модели нужно согласовать anchors, число классов и параметры post-processing в include/postprocess.h;
  • часть post-processing вынесена на CPU, а в модели используется ReLU вместо SiLU для ускорения на целевой платформе.

ROS-драйверы

Каталог appro_drivers-ros1_extend/ содержит:

  • cv_camera - OpenCV-based grabber;
  • imu_reader - чтение IMU по I2C;
  • msp - клиент для INAV/MSP flight controller;
  • bag_grabber - вспомогательные ROS-скрипты.

Сборка ROS1:

catkin_make -DCATKIN_ENABLE_TESTING=0 --cmake-args -DEAGLE_EYE_MSGS_BUILD_ROS1=ON -DEAGLE_EYE_MSGS_BUILD_ROS2=OFF -DDRV_BUILD_ROS2=OFF -DDRV_BUILD_ROS1=ON

Сборка ROS2:

colcon build --cmake-args -DDRV_BUILD_ROS2=ON -DDRV_BUILD_ROS1=OFF --symlink-install

Параметры MSP-ноды:

Параметр Значение
port путь к serial/UART, например /dev/ttyACM0
baud baudrate, по умолчанию 115200
reconnectTimeout пауза между переподключениями, по умолчанию 5.0
max_reconnects максимум попыток переподключения, по умолчанию 5
imuRate частота запроса IMU, по умолчанию 150
gpsRate частота запроса GPS, по умолчанию 3

Сервисные файлы

В ar_stereo_service/ лежат несколько сервисов и install-скриптов. Для нового автозапуска детектора людей используйте:

person_detector_udp.service
install_person_detector_udp.sh
person_detector_udp.env

Если запустить скрипт ./install.sh - установка службы автозапуска yolov и замена dtb

Сетевые порты

Назначение Адрес или порт
SSH root@192.168.42.241
Веб-настройки камеры http://192.168.42.241:9999/
Обновление образа http://192.168.42.241:9999/sysupgrade
UDP-команда детектора host/port из person_detector_udp.env, по умолчанию 192.168.42.5:1236
UDP-видео правая камера 1234
UDP-видео левая камера 1235
UDP-видео YOLOv5 demo 1237

Типовые проблемы

Нет SSH-подключения:

  • проверьте Ethernet-кабель и питание;
  • проверьте, что ПК и камера находятся в одной подсети;
  • выполните ping 192.168.42.241;
  • просканируйте сеть через nmap;
  • если ключ SSH изменился, выполните ssh-keygen -R 192.168.42.241.

Нет видео на ПК:

  • проверьте, что поток запущен на камере;
  • проверьте IP получателя в stream-left.sh и stream-right.sh;
  • убедитесь, что на ПК установлен GStreamer;
  • проверьте, что firewall не блокирует UDP-порты 1234, 1235, 1237.

Не запускается детектор:

  • проверьте sudo systemctl status person_detector_udp.service;
  • откройте логи sudo journalctl -u person_detector_udp.service -f;
  • проверьте, что существует person_detector/yolov3_416.rknn;
  • проверьте npu_transfer_proxy;
  • убедитесь, что камера открывается через GStreamer/libcamera.

Плохая карта глубины:

  • повторите калибровку при хорошем освещении;
  • проверьте, что используется актуальный rectification.yml;
  • проверьте разрешение камер и соответствие параметров калибровки;
  • подберите параметры StereoSGBM и ROI под задачу.

About

This is a repository for using the stereo vision module "AR-Stereo-AI" from the company Applied Robotics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages