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Для обновления ПО без удаления данных на стереомодуле, необходимо:
- Скачать актуальную версию
- Обновление ПО без удаления пользовательских данных:
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.pyMJPEG-трансляция стереопары в браузер и запись видео на камере:
python3 web_stream.pyПосле запуска web_stream.py поток доступен в браузере:
http://192.168.42.241:8087/cam.mjpg
Каталог 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 для ускорения на целевой платформе.
Каталог 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 под задачу.