diff --git a/README.md b/README.md index c210f83..80a1434 100644 --- a/README.md +++ b/README.md @@ -1,79 +1,169 @@ -# Azaion Autopilot -A preliminary example of autonomous drone flight. This example is based on the MAVSDK framework and ArduPilot flight controller software. Running the example requires installing MAVSDK debian package and compiling ArduPilot. Example has been tested in Ubuntu 20.04 environment. - +# Azaion DroneController and AiController +An autonomous drone controller with AI inference support. Programs uses MAVSDK framework and ArduPilot flight controller. Running the applications requires MAVSDK installation and compiling ArduPilot. Example has been tested in Ubuntu 22.04 and 24.04 environments. ## Install necessary dependencies +```bash sudo apt update - -sudo apt install ccache git build-essential qt5-qmake qtbase5-dev +sudo apt install ccache git build-essential qmake6 qt6-base-dev +``` ## Speed up the compilations +```bash echo "export MAKEFLAGS=\"-j$(($(nproc)))\"" >> ~/.bashrc - echo "export PATH=/usr/lib/ccache:\$PATH" >> ~/.bashrc +``` -## Clone source codes. You must add your SSH key before the cloning! +## Clone source codes. SSH key must be added before the cloning! +```bash git clone git@github.com:azaion/autopilot.git git clone --recursive git@github.com:azaion/autopilot.git git submodule update --init --recursive +``` ## Install MAVSDK for Ubuntu 20.04 -wget https://github.com/mavlink/MAVSDK/releases/download/v2.9.1/libmavsdk-dev_2.9.1_ubuntu20.04_amd64.deb - -sudo dpkg -i libmavsdk-dev_2.9.1_ubuntu20.04_amd64.deb +```bash +wget https://github.com/mavlink/MAVSDK/releases/download/v2.12.10/libmavsdk-dev_2.12.10_ubuntu20.04_amd64.deb +sudo dpkg -i libmavsdk-dev_2.12.10_ubuntu20.04_amd64.deb +``` ## Install MAVSDK for Ubuntu 22.04 -wget https://github.com/mavlink/MAVSDK/releases/download/v2.9.1/libmavsdk-dev_2.9.1_ubuntu22.04_amd64.deb +```bash +wget https://github.com/mavlink/MAVSDK/releases/download/v2.12.10/libmavsdk-dev_2.12.10_ubuntu22.04_amd64.deb +sudo dpkg -i libmavsdk-dev_2.12.10_ubuntu22.04_amd64.deb +``` -sudo dpkg -i libmavsdk-dev_2.9.1_ubuntu22.04_amd64.deb +## Install ONNX Runtime for Ubuntu (not required for embedded platforms) -## Install MAVSDK for embedded platforms +### With GPU inference +```bash +wget https://github.com/microsoft/onnxruntime/releases/download/v1.18.0/onnxruntime-linux-x64-gpu-cuda12-1.18.0.tgz +sudo tar xf onnxruntime-linux-x64-gpu-cuda12-1.18.0.tgz -C /opt/ +sudo ln -s /opt/onnxruntime-linux-x64-gpu-cuda12 /opt/onnxruntime-linux-x64-1.18.0 +``` -### Update cmake (need to build mavsdk) -wget https://github.com/Kitware/CMake/releases/download/v3.29.3/cmake-3.29.3-linux-aarch64.sh -sudo cp cmake-3.29.3-linux-aarch64.sh /opt -sudo chmod +x /opt/cmake-3.29.3-linux-aarch64.sh -cd /opt -sudo bash cmake-3.29.3-linux-aarch64.sh -sudo rm cmake ccmake cpack ctest cmake-gui -sudo ln -s /opt/cmake-3.29.3-linux-aarch64/bin/* /usr/bin +### With CPU inference +```bash +wget https://github.com/microsoft/onnxruntime/releases/download/v1.18.0/onnxruntime-linux-x64-1.18.0.tgz +sudo tar xf onnxruntime-linux-x64-1.18.0.tgz -C /opt/ +``` -### Make sure gcc9 installed and is default (Need to build mavsdk. gcc -v to check) -sudo add-apt-repository ppa:ubuntu-toolchain-r/test -sudo apt update -sudo apt install gcc-9 g++-9 -sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-9 +## Install MAVSDK for Ubuntu 22.04 or 24.04 PCs +```bash +wget https://github.com/mavlink/MAVSDK/releases/download/v2.12.10/libmavsdk-dev_2.12.10_ubuntu22.04_amd64.deb +sudo dpkg -i libmavsdk-dev_2.12.10_ubuntu22.04_amd64.deb +``` -### Build & Install from sources -sudo apt-get update -sudo apt-get install build-essential cmake git -git clone https://github.com/mavlink/MAVSDK.git -cd MAVSDK -git checkout tags/v2.9.1 -git submodule update --init --recursive -cmake -Bbuild/default -DCMAKE_BUILD_TYPE=Release -H. -cmake --build build/default -j8 -sudo cmake --build build/default --target install - -### Resolving python problems -In case of an error "The python version is too old, expecting 3, 6, 9" during Ardupilot run, -install 3.6 python (most probably under alias python3) and -just change 1 line in ardupilot/modules/waf/waf-light from ... python -> python3 - -##Ardupilot +## Build ArduPilot +```bash git clone --recursive https://github.com/ArduPilot/ardupilot.git cd ardupilot ./Tools/environment_install/install-prereqs-ubuntu.sh -y . ~/.profile ./waf configure --board=sitl ./waf build +``` -## Build autopilot application -cd src && cmake . && make +## Build and install OpenCV 4.10.0 +```bash +sudo apt update +sudo apt install libgtk-3-dev libpng-dev cmake ffmpeg libavcodec-dev libavformat-dev libavfilter-dev +wget https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip +unzip 4.10.0.zip +cd opencv-4.10.0 +mkdir build && cd build +cmake -DCMAKE_INSTALL_PREFIX=/opt/opencv-4.10.0 -DBUILD_opencv_world=ON -DOPENCV_GENERATE_PKGCONFIG=ON -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF .. +make -j8 && sudo make install +``` -## Launch similator in the ArduPilot directory +## Install MAVSDK for embedded platforms + +### Build and install MAVSDK from the sources if needed +```bash +sudo apt-get update +sudo apt-get install build-essential cmake git +git clone https://github.com/mavlink/MAVSDK.git +cd MAVSDK +git checkout tags/v2.12.10 +git submodule update --init --recursive +cmake -Bbuild/default -DCMAKE_BUILD_TYPE=Release -H. +cmake --build build/default -j8 +sudo cmake --build build/default --target install +``` + +## Build Azaion applications + +### PC builds (uses ONNX Runtime for the AI inference) +```bash +qmake6 && make +``` + +### OPI5 builds (uses gimbal camera and RKNN libraries for the AI inference) +```bash +qmake6 CONFIG+=opi5 CONFIG+=gimbal && make +``` + +## Run Azaion drone controller with ArduPilot simulator in Ubuntu PC + +### Launch similator in the ArduPilot directory +```bash ./Tools/autotest/sim_vehicle.py --map --console -v ArduCopter +``` -## Launch example application in the new terminal window after waiting simulator (around 1 min) to be ready -cmake . && make && ./autopilot mission.json +### Launch example application in the new terminal window after waiting simulator (around 1 min) to be ready +```bash +./drone_controller/drone_controller ./drone_controller/mission.json quadcopter udp +``` + +## Run Azaion AI controller in Ubuntu PC + +### Install ffmpeg and mediamtx +```bash +sudo apt update +sudo apt install ffmpeg +wget https://github.com/bluenviron/mediamtx/releases/download/v1.8.4/mediamtx_v1.8.4_linux_amd64.tar.gz +mkdir mediamtx +tar xf mediamtx_v1.8.4_linux_amd64.tar.gz -C mediamtx +``` + +### Launch RTSP server if real camera is not used +```bash +cd mediamtx +./mediamtx +``` + +### Playback of RTSP video stream when no real camera is used +```bash +ffmpeg -re -stream_loop -1 -i SOME_MP4_VIDEO_FILE -c copy -f rtsp rtsp://localhost:8554/live.stream +``` + +### Test RTSP stream with ffplay +```bash +ffplay -rtsp_transport tcp rtsp://localhost:8554/live.stream +``` + +### Compile and run AI controller without camera support +Modify ./ai_controller/aiengineconfig.h and change IP address of RTSP source +```bash +qmake6 CONFIG+=opi5 && make && ./ai_controller/ai_controller [ONNX_MODEL_FILE] +``` + +### Compile and run AI controller with camera support +Modify ./ai_controller/aiengineconfig.h and change IP address of RTSP source +```bash +qmake6 CONFIG+=opi5 CONFIG+=gimbal && make && ./ai_controller/ai_controller [ONNX_MODEL_FILE] +``` + +## Run Azaion AI controller in OPI5 + +### Compile and run AI controller without gimbal camera support +Modify ./ai_controller/aiengineconfig.h and change IP address of RTSP source +```bash +qmake6 CONFIG+=opi5 && make && ./ai_controller/ai_controller [RKNN_MODEL_FILE] +``` + +### Compile and run AI controller without gimbal camera support +Modify ./ai_controller/aiengineconfig.h and change IP address of RTSP source +```bash +qmake6 CONFIG+=opi5 CONFIG+=gimbal && make && ./ai_controller/ai_controller [RKNN_MODEL_FILE] +``` diff --git a/misc/rtsp_ai_player/rtsp_ai_player.pro b/ai_controller/ai_controller.pro similarity index 100% rename from misc/rtsp_ai_player/rtsp_ai_player.pro rename to ai_controller/ai_controller.pro diff --git a/misc/rtsp_ai_player/aiengine.cpp b/ai_controller/aiengine.cpp similarity index 100% rename from misc/rtsp_ai_player/aiengine.cpp rename to ai_controller/aiengine.cpp diff --git a/misc/rtsp_ai_player/aiengine.h b/ai_controller/aiengine.h similarity index 100% rename from misc/rtsp_ai_player/aiengine.h rename to ai_controller/aiengine.h diff --git a/misc/rtsp_ai_player/aiengineconfig.h b/ai_controller/aiengineconfig.h similarity index 100% rename from misc/rtsp_ai_player/aiengineconfig.h rename to ai_controller/aiengineconfig.h diff --git a/misc/rtsp_ai_player/aienginedefinitions.h b/ai_controller/aienginedefinitions.h similarity index 100% rename from misc/rtsp_ai_player/aienginedefinitions.h rename to ai_controller/aienginedefinitions.h diff --git a/misc/rtsp_ai_player/aienginegimbalclient.cpp b/ai_controller/aienginegimbalclient.cpp similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalclient.cpp rename to ai_controller/aienginegimbalclient.cpp diff --git a/misc/rtsp_ai_player/aienginegimbalclient.h b/ai_controller/aienginegimbalclient.h similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalclient.h rename to ai_controller/aienginegimbalclient.h diff --git a/misc/rtsp_ai_player/aienginegimbalserver.cpp b/ai_controller/aienginegimbalserver.cpp similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserver.cpp rename to ai_controller/aienginegimbalserver.cpp diff --git a/misc/rtsp_ai_player/aienginegimbalserver.h b/ai_controller/aienginegimbalserver.h similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserver.h rename to ai_controller/aienginegimbalserver.h diff --git a/misc/rtsp_ai_player/aienginegimbalserveractions.cpp b/ai_controller/aienginegimbalserveractions.cpp similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserveractions.cpp rename to ai_controller/aienginegimbalserveractions.cpp diff --git a/misc/rtsp_ai_player/aienginegimbalserveractions.h b/ai_controller/aienginegimbalserveractions.h similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserveractions.h rename to ai_controller/aienginegimbalserveractions.h diff --git a/misc/rtsp_ai_player/aienginegimbalservercrc16.cpp b/ai_controller/aienginegimbalservercrc16.cpp similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalservercrc16.cpp rename to ai_controller/aienginegimbalservercrc16.cpp diff --git a/misc/rtsp_ai_player/aienginegimbalservercrc16.h b/ai_controller/aienginegimbalservercrc16.h similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalservercrc16.h rename to ai_controller/aienginegimbalservercrc16.h diff --git a/misc/rtsp_ai_player/aienginegimbalserverdefines.h b/ai_controller/aienginegimbalserverdefines.h similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserverdefines.h rename to ai_controller/aienginegimbalserverdefines.h diff --git a/misc/rtsp_ai_player/aienginegimbalserverudp.cpp b/ai_controller/aienginegimbalserverudp.cpp similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserverudp.cpp rename to ai_controller/aienginegimbalserverudp.cpp diff --git a/misc/rtsp_ai_player/aienginegimbalserverudp.h b/ai_controller/aienginegimbalserverudp.h similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserverudp.h rename to ai_controller/aienginegimbalserverudp.h diff --git a/misc/rtsp_ai_player/aienginegimbalserverudpcommand.cpp b/ai_controller/aienginegimbalserverudpcommand.cpp similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserverudpcommand.cpp rename to ai_controller/aienginegimbalserverudpcommand.cpp diff --git a/misc/rtsp_ai_player/aienginegimbalserverudpcommand.h b/ai_controller/aienginegimbalserverudpcommand.h similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserverudpcommand.h rename to ai_controller/aienginegimbalserverudpcommand.h diff --git a/misc/rtsp_ai_player/aienginegimbalserverudpresponse.cpp b/ai_controller/aienginegimbalserverudpresponse.cpp similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserverudpresponse.cpp rename to ai_controller/aienginegimbalserverudpresponse.cpp diff --git a/misc/rtsp_ai_player/aienginegimbalserverudpresponse.h b/ai_controller/aienginegimbalserverudpresponse.h similarity index 100% rename from misc/rtsp_ai_player/aienginegimbalserverudpresponse.h rename to ai_controller/aienginegimbalserverudpresponse.h diff --git a/misc/rtsp_ai_player/aiengineimagesaver.cpp b/ai_controller/aiengineimagesaver.cpp similarity index 100% rename from misc/rtsp_ai_player/aiengineimagesaver.cpp rename to ai_controller/aiengineimagesaver.cpp diff --git a/misc/rtsp_ai_player/aiengineimagesaver.h b/ai_controller/aiengineimagesaver.h similarity index 100% rename from misc/rtsp_ai_player/aiengineimagesaver.h rename to ai_controller/aiengineimagesaver.h diff --git a/misc/rtsp_ai_player/aiengineinference.cpp b/ai_controller/aiengineinference.cpp similarity index 100% rename from misc/rtsp_ai_player/aiengineinference.cpp rename to ai_controller/aiengineinference.cpp diff --git a/misc/rtsp_ai_player/aiengineinference.h b/ai_controller/aiengineinference.h similarity index 100% rename from misc/rtsp_ai_player/aiengineinference.h rename to ai_controller/aiengineinference.h diff --git a/misc/rtsp_ai_player/aienginertsplistener.cpp b/ai_controller/aienginertsplistener.cpp similarity index 100% rename from misc/rtsp_ai_player/aienginertsplistener.cpp rename to ai_controller/aienginertsplistener.cpp diff --git a/misc/rtsp_ai_player/aienginertsplistener.h b/ai_controller/aienginertsplistener.h similarity index 100% rename from misc/rtsp_ai_player/aienginertsplistener.h rename to ai_controller/aienginertsplistener.h diff --git a/misc/rtsp_ai_player/azaion_10_labels_list.txt b/ai_controller/azaion_10_labels_list.txt similarity index 100% rename from misc/rtsp_ai_player/azaion_10_labels_list.txt rename to ai_controller/azaion_10_labels_list.txt diff --git a/misc/rtsp_ai_player/coco_80_labels_list.txt b/ai_controller/coco_80_labels_list.txt similarity index 100% rename from misc/rtsp_ai_player/coco_80_labels_list.txt rename to ai_controller/coco_80_labels_list.txt diff --git a/misc/rtsp_ai_player/get_yolo_model.sh b/ai_controller/get_yolo_model.sh similarity index 100% rename from misc/rtsp_ai_player/get_yolo_model.sh rename to ai_controller/get_yolo_model.sh diff --git a/misc/rtsp_ai_player/main.cpp b/ai_controller/main.cpp similarity index 100% rename from misc/rtsp_ai_player/main.cpp rename to ai_controller/main.cpp diff --git a/misc/rtsp_ai_player/src-ncnn/aiengineinferencencnn.cpp b/ai_controller/src-ncnn/aiengineinferencencnn.cpp similarity index 100% rename from misc/rtsp_ai_player/src-ncnn/aiengineinferencencnn.cpp rename to ai_controller/src-ncnn/aiengineinferencencnn.cpp diff --git a/misc/rtsp_ai_player/src-ncnn/aiengineinferencencnn.h b/ai_controller/src-ncnn/aiengineinferencencnn.h similarity index 100% rename from misc/rtsp_ai_player/src-ncnn/aiengineinferencencnn.h rename to ai_controller/src-ncnn/aiengineinferencencnn.h diff --git a/misc/rtsp_ai_player/src-onnx-runtime/aiengineinferenceonnxruntime.cpp b/ai_controller/src-onnx-runtime/aiengineinferenceonnxruntime.cpp similarity index 100% rename from misc/rtsp_ai_player/src-onnx-runtime/aiengineinferenceonnxruntime.cpp rename to ai_controller/src-onnx-runtime/aiengineinferenceonnxruntime.cpp diff --git a/misc/rtsp_ai_player/src-onnx-runtime/aiengineinferenceonnxruntime.h b/ai_controller/src-onnx-runtime/aiengineinferenceonnxruntime.h similarity index 100% rename from misc/rtsp_ai_player/src-onnx-runtime/aiengineinferenceonnxruntime.h rename to ai_controller/src-onnx-runtime/aiengineinferenceonnxruntime.h diff --git a/misc/rtsp_ai_player/src-onnx-runtime/utils.cpp b/ai_controller/src-onnx-runtime/utils.cpp similarity index 100% rename from misc/rtsp_ai_player/src-onnx-runtime/utils.cpp rename to ai_controller/src-onnx-runtime/utils.cpp diff --git a/misc/rtsp_ai_player/src-onnx-runtime/utils.h b/ai_controller/src-onnx-runtime/utils.h similarity index 100% rename from misc/rtsp_ai_player/src-onnx-runtime/utils.h rename to ai_controller/src-onnx-runtime/utils.h diff --git a/misc/rtsp_ai_player/src-onnx-runtime/yolov8Predictor.cpp b/ai_controller/src-onnx-runtime/yolov8Predictor.cpp similarity index 100% rename from misc/rtsp_ai_player/src-onnx-runtime/yolov8Predictor.cpp rename to ai_controller/src-onnx-runtime/yolov8Predictor.cpp diff --git a/misc/rtsp_ai_player/src-onnx-runtime/yolov8Predictor.h b/ai_controller/src-onnx-runtime/yolov8Predictor.h similarity index 100% rename from misc/rtsp_ai_player/src-onnx-runtime/yolov8Predictor.h rename to ai_controller/src-onnx-runtime/yolov8Predictor.h diff --git a/misc/rtsp_ai_player/src-opencv-onnx/aiengineinferenceopencvonnx.cpp b/ai_controller/src-opencv-onnx/aiengineinferenceopencvonnx.cpp similarity index 100% rename from misc/rtsp_ai_player/src-opencv-onnx/aiengineinferenceopencvonnx.cpp rename to ai_controller/src-opencv-onnx/aiengineinferenceopencvonnx.cpp diff --git a/misc/rtsp_ai_player/src-opencv-onnx/aiengineinferenceopencvonnx.h b/ai_controller/src-opencv-onnx/aiengineinferenceopencvonnx.h similarity index 100% rename from misc/rtsp_ai_player/src-opencv-onnx/aiengineinferenceopencvonnx.h rename to ai_controller/src-opencv-onnx/aiengineinferenceopencvonnx.h diff --git a/misc/rtsp_ai_player/src-opencv-onnx/inference.cpp b/ai_controller/src-opencv-onnx/inference.cpp similarity index 100% rename from misc/rtsp_ai_player/src-opencv-onnx/inference.cpp rename to ai_controller/src-opencv-onnx/inference.cpp diff --git a/misc/rtsp_ai_player/src-opencv-onnx/inference.h b/ai_controller/src-opencv-onnx/inference.h similarity index 100% rename from misc/rtsp_ai_player/src-opencv-onnx/inference.h rename to ai_controller/src-opencv-onnx/inference.h diff --git a/misc/rtsp_ai_player/src-opi5/aiengineinferenceopi5.cpp b/ai_controller/src-opi5/aiengineinferenceopi5.cpp similarity index 100% rename from misc/rtsp_ai_player/src-opi5/aiengineinferenceopi5.cpp rename to ai_controller/src-opi5/aiengineinferenceopi5.cpp diff --git a/misc/rtsp_ai_player/src-opi5/aiengineinferenceopi5.h b/ai_controller/src-opi5/aiengineinferenceopi5.h similarity index 100% rename from misc/rtsp_ai_player/src-opi5/aiengineinferenceopi5.h rename to ai_controller/src-opi5/aiengineinferenceopi5.h diff --git a/misc/rtsp_ai_player/src-opi5/bus.png b/ai_controller/src-opi5/bus.png similarity index 100% rename from misc/rtsp_ai_player/src-opi5/bus.png rename to ai_controller/src-opi5/bus.png diff --git a/misc/rtsp_ai_player/src-opi5/common.h b/ai_controller/src-opi5/common.h similarity index 100% rename from misc/rtsp_ai_player/src-opi5/common.h rename to ai_controller/src-opi5/common.h diff --git a/misc/rtsp_ai_player/src-opi5/file_utils.c b/ai_controller/src-opi5/file_utils.c similarity index 100% rename from misc/rtsp_ai_player/src-opi5/file_utils.c rename to ai_controller/src-opi5/file_utils.c diff --git a/misc/rtsp_ai_player/src-opi5/file_utils.h b/ai_controller/src-opi5/file_utils.h similarity index 100% rename from misc/rtsp_ai_player/src-opi5/file_utils.h rename to ai_controller/src-opi5/file_utils.h diff --git a/misc/rtsp_ai_player/src-opi5/font.h b/ai_controller/src-opi5/font.h similarity index 100% rename from misc/rtsp_ai_player/src-opi5/font.h rename to ai_controller/src-opi5/font.h diff --git a/misc/rtsp_ai_player/src-opi5/image_drawing.c b/ai_controller/src-opi5/image_drawing.c similarity index 100% rename from misc/rtsp_ai_player/src-opi5/image_drawing.c rename to ai_controller/src-opi5/image_drawing.c diff --git a/misc/rtsp_ai_player/src-opi5/image_drawing.h b/ai_controller/src-opi5/image_drawing.h similarity index 100% rename from misc/rtsp_ai_player/src-opi5/image_drawing.h rename to ai_controller/src-opi5/image_drawing.h diff --git a/misc/rtsp_ai_player/src-opi5/image_utils.c b/ai_controller/src-opi5/image_utils.c similarity index 100% rename from misc/rtsp_ai_player/src-opi5/image_utils.c rename to ai_controller/src-opi5/image_utils.c diff --git a/misc/rtsp_ai_player/src-opi5/image_utils.h b/ai_controller/src-opi5/image_utils.h similarity index 100% rename from misc/rtsp_ai_player/src-opi5/image_utils.h rename to ai_controller/src-opi5/image_utils.h diff --git a/misc/rtsp_ai_player/src-opi5/postprocess.cc b/ai_controller/src-opi5/postprocess.cc similarity index 100% rename from misc/rtsp_ai_player/src-opi5/postprocess.cc rename to ai_controller/src-opi5/postprocess.cc diff --git a/misc/rtsp_ai_player/src-opi5/postprocess.h b/ai_controller/src-opi5/postprocess.h similarity index 100% rename from misc/rtsp_ai_player/src-opi5/postprocess.h rename to ai_controller/src-opi5/postprocess.h diff --git a/misc/rtsp_ai_player/src-opi5/yolov8.cc b/ai_controller/src-opi5/yolov8.cc similarity index 100% rename from misc/rtsp_ai_player/src-opi5/yolov8.cc rename to ai_controller/src-opi5/yolov8.cc diff --git a/misc/rtsp_ai_player/src-opi5/yolov8.h b/ai_controller/src-opi5/yolov8.h similarity index 100% rename from misc/rtsp_ai_player/src-opi5/yolov8.h rename to ai_controller/src-opi5/yolov8.h diff --git a/autopilot.pro b/autopilot.pro new file mode 100644 index 0000000..f7bbbee --- /dev/null +++ b/autopilot.pro @@ -0,0 +1,11 @@ +TEMPLATE = subdirs + +SUBDIRS += ai_controller \ + drone_controller + +# Pass CONFIG values to subprojects +ai_controller.subdir = ai_controller +drone_controller.subdir = drone_controller +ai_controller.CONFIG += $$CONFIG +drone_controller.CONFIG += $$CONFIG + diff --git a/src/.clang-format b/drone_controller/.clang-format similarity index 100% rename from src/.clang-format rename to drone_controller/.clang-format diff --git a/src/.gitignore b/drone_controller/.gitignore similarity index 100% rename from src/.gitignore rename to drone_controller/.gitignore diff --git a/src/az_action_point.cpp b/drone_controller/az_action_point.cpp similarity index 100% rename from src/az_action_point.cpp rename to drone_controller/az_action_point.cpp diff --git a/src/az_action_point.h b/drone_controller/az_action_point.h similarity index 100% rename from src/az_action_point.h rename to drone_controller/az_action_point.h diff --git a/src/az_config.h b/drone_controller/az_config.h similarity index 100% rename from src/az_config.h rename to drone_controller/az_config.h diff --git a/src/az_coordinate.cpp b/drone_controller/az_coordinate.cpp similarity index 100% rename from src/az_coordinate.cpp rename to drone_controller/az_coordinate.cpp diff --git a/src/az_coordinate.h b/drone_controller/az_coordinate.h similarity index 100% rename from src/az_coordinate.h rename to drone_controller/az_coordinate.h diff --git a/src/az_drone_controller.cpp b/drone_controller/az_drone_controller.cpp similarity index 100% rename from src/az_drone_controller.cpp rename to drone_controller/az_drone_controller.cpp diff --git a/src/az_drone_controller.h b/drone_controller/az_drone_controller.h similarity index 100% rename from src/az_drone_controller.h rename to drone_controller/az_drone_controller.h diff --git a/src/az_drone_controller_plane.cpp b/drone_controller/az_drone_controller_plane.cpp similarity index 100% rename from src/az_drone_controller_plane.cpp rename to drone_controller/az_drone_controller_plane.cpp diff --git a/src/az_drone_controller_plane.h b/drone_controller/az_drone_controller_plane.h similarity index 100% rename from src/az_drone_controller_plane.h rename to drone_controller/az_drone_controller_plane.h diff --git a/src/az_mission.cpp b/drone_controller/az_mission.cpp similarity index 100% rename from src/az_mission.cpp rename to drone_controller/az_mission.cpp diff --git a/src/az_mission.h b/drone_controller/az_mission.h similarity index 100% rename from src/az_mission.h rename to drone_controller/az_mission.h diff --git a/src/az_mission_controller.cpp b/drone_controller/az_mission_controller.cpp similarity index 100% rename from src/az_mission_controller.cpp rename to drone_controller/az_mission_controller.cpp diff --git a/src/az_mission_controller.h b/drone_controller/az_mission_controller.h similarity index 100% rename from src/az_mission_controller.h rename to drone_controller/az_mission_controller.h diff --git a/src/az_utils.cpp b/drone_controller/az_utils.cpp similarity index 100% rename from src/az_utils.cpp rename to drone_controller/az_utils.cpp diff --git a/src/az_utils.h b/drone_controller/az_utils.h similarity index 100% rename from src/az_utils.h rename to drone_controller/az_utils.h diff --git a/src/autopilot.pro b/drone_controller/drone_controller.pro similarity index 100% rename from src/autopilot.pro rename to drone_controller/drone_controller.pro diff --git a/src/main.cpp b/drone_controller/main.cpp similarity index 100% rename from src/main.cpp rename to drone_controller/main.cpp diff --git a/src/mission.json b/drone_controller/mission.json similarity index 100% rename from src/mission.json rename to drone_controller/mission.json diff --git a/install.sh b/install.sh deleted file mode 100644 index e0a1c62..0000000 --- a/install.sh +++ /dev/null @@ -1,27 +0,0 @@ -# MAVSDK -sudo apt-get update -y -sudo apt-get install build-essential cmake git python3-pip -y -git clone https://github.com/mavlink/MAVSDK.git -cd MAVSDK -git checkout tags/v2.9.1 -git submodule update --init --recursive -cmake -Bbuild/default -DCMAKE_BUILD_TYPE=Release -H. -cmake --build build/default -j8 -sudo cmake --build build/default --target install -cd .. - -#Ardupilot -git clone --recursive https://github.com/ArduPilot/ardupilot.git -cd ardupilot -./Tools/environment_install/install-prereqs-ubuntu.sh -y -. ~/.profile -./waf configure --board=sitl -./waf build - -#Autopilot -cd src && qmake && make - -#Run -./ardupilot/Tools/autotest/sim_vehicle.py --map --console -v ArduCopter & -cd src -./autopilot mission.json diff --git a/misc/rtsp_ai_player/README.md b/misc/rtsp_ai_player/README.md deleted file mode 100644 index e2b824a..0000000 --- a/misc/rtsp_ai_player/README.md +++ /dev/null @@ -1,129 +0,0 @@ -# rtsp_ai_player - -`rtsp_ai_player` is an application that listens to an RTSP stream, analyzes images with an AI model, and shows the results visually. It also controls a gimbal camera to zoom in on the recognized objects. Application uses YOLOv8 AI models converted to the ONNX format. - -### How to convert Azaion AI model file to ONNX format -```bash -yolo export model=azaion-2024-08-13.pt dynamic=False format=onnx imgsz=640,640 -``` - -## How to use application locally on a Linux PC. - -# Speed up compilations -```bash -echo "export MAKEFLAGS=\"-j8\"" >> ~/.bashrc -echo "export PATH=/usr/lib/ccache:\$PATH" >> ~/.bashrc -``` - -### Install OpenCV 4.10.0 -```bash -sudo apt update -sudo apt install libgtk-3-dev libpng-dev cmake ffmpeg libavcodec-dev libavformat-dev libavfilter-dev -wget https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip -unzip 4.10.0.zip -cd opencv-4.10.0 -mkdir build && cd build -cmake -DCMAKE_INSTALL_PREFIX=/opt/opencv-4.10.0 -DBUILD_opencv_world=ON -DOPENCV_GENERATE_PKGCONFIG=ON -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF .. -make -j8 && sudo make install -``` - -### Install ONNX runtime 1.18.0 -```bash -wget https://github.com/microsoft/onnxruntime/releases/download/v1.18.0/onnxruntime-linux-x64-1.18.0.tgz -sudo tar xf onnxruntime-linux-x64-1.18.0.tgz -C /opt -``` - -### Install ffmpeg and mediamtx RTSP server: -```bash -sudo apt update -sudo apt install ffmpeg - -# For Amd64-like platforms: -wget https://github.com/bluenviron/mediamtx/releases/download/v1.8.4/mediamtx_v1.8.4_linux_amd64.tar.gz -mkdir mediamtx -tar xf mediamtx_v1.8.4_linux_amd64.tar.gz -C mediamtx - -# For OrangePi5 use this lib instead (since it's an ARM platform): -wget https://github.com/bluenviron/mediamtx/releases/download/v1.9.1/mediamtx_v1.9.1_linux_arm64v8.tar.gz -mkdir mediamtx -tar xf mediamtx_v1.9.1_linux_arm64v8.tar.gz -C mediamtx -``` - -### If you use video file from the local RTSP server: -```bash -cd mediamtx -./mediamtx -``` - -### Play Azaion mp4 video file from RTSP server ... : -```bash -ffmpeg -re -stream_loop -1 -i $HOME/azaion/videos/for_ai_cut.mp4 -c copy -f rtsp rtsp://localhost:8554/live.stream -``` - -### ... or play simple video file from RTSP server: -```bash -ffmpeg -re -stream_loop -1 -i $HOME/azaion/videos/table.mp4 -c copy -f rtsp rtsp://localhost:8554/live.stream -``` - -### Test RTSP streaming with ffplay: -```bash -ffplay -rtsp_transport tcp rtsp://localhost:8554/live.stream -``` - -### Compile and run rtsp_ai_player with YOLOv8 medium AI model: -```bash -cd autopilot/misc/rtsp_ai_player -qmake6 && make -./rtsp_ai_player ~/azaion/models/onnx/yolov8m.onnx -``` - -### Compile and run rtsp_ai_player with Azaion AI model: -```bash -cd autopilot/misc/rtsp_ai_player -qmake6 && make -./rtsp_ai_player ~/azaion/models/azaion/azaion-2024-08-13.onnx -``` -### Compile and run rtsp_ai_player with YOLOv8 medium model and gimbal camera: -```bash -cd autopilot/misc/rtsp_ai_player -qmake6 CONFIG+=gimbal && make -./rtsp_ai_player ~/azaion/models/onnx/yolov8m.onnx -``` - -## How to use application on Orange PI 5. - -### Install ffmpeg and mediamtx to Ubuntu PC: -```bash -sudo apt update -sudo apt install ffmpeg -wget https://github.com/bluenviron/mediamtx/releases/download/v1.8.4/mediamtx_v1.8.4_linux_amd64.tar.gz -mkdir mediamtx -tar xf mediamtx_v1.8.4_linux_amd64.tar.gz -C mediamtx -``` - -### Launch RTSP server in Ubuntu PC -```bash -cd mediamtx -./mediamtx -``` - -### Play RTSP video stream in Ubuntu PC -```bash -ffmpeg -re -stream_loop -1 -i SOME_MP4_VIDEO_FILE -c copy -f rtsp rtsp://localhost:8554/live.stream -``` - -### Test RTSP stream with ffplay in Ubuntu PC: -```bash -ffplay -rtsp_transport tcp rtsp://localhost:8554/live.stream -``` - -### Compile and launch RTSP AI PLAYER in Orange PI 5: -Modify autopilot/misc/rtsp_ai_player/aiengineconfig.h and change 192.168.168.91 to IP address of RTSP source - -```bash -cd autopilot/misc/rtsp_ai_player -mkdir build -cd build -qmake6 CONFIG+=opi5 .. && make -j8 && ./rtsp_ai_player [RKNN_MODEL_FILE] -``` - diff --git a/tmp/udp/udp_client/main.cpp b/misc/udp/udp_client/main.cpp similarity index 100% rename from tmp/udp/udp_client/main.cpp rename to misc/udp/udp_client/main.cpp diff --git a/tmp/udp/udp_client/udp_client.pro b/misc/udp/udp_client/udp_client.pro similarity index 100% rename from tmp/udp/udp_client/udp_client.pro rename to misc/udp/udp_client/udp_client.pro diff --git a/tmp/udp/udp_server/main.cpp b/misc/udp/udp_server/main.cpp similarity index 100% rename from tmp/udp/udp_server/main.cpp rename to misc/udp/udp_server/main.cpp diff --git a/tmp/udp/udp_server/udp_server.pro b/misc/udp/udp_server/udp_server.pro similarity index 100% rename from tmp/udp/udp_server/udp_server.pro rename to misc/udp/udp_server/udp_server.pro diff --git a/tmp/udp/udp_server/udpserver.cpp b/misc/udp/udp_server/udpserver.cpp similarity index 100% rename from tmp/udp/udp_server/udpserver.cpp rename to misc/udp/udp_server/udpserver.cpp diff --git a/tmp/udp/udp_server/udpserver.h b/misc/udp/udp_server/udpserver.h similarity index 100% rename from tmp/udp/udp_server/udpserver.h rename to misc/udp/udp_server/udpserver.h diff --git a/tmp/yolov10-cpp-testing/CMakeLists.txt b/misc/yolov10-cpp-testing/CMakeLists.txt similarity index 100% rename from tmp/yolov10-cpp-testing/CMakeLists.txt rename to misc/yolov10-cpp-testing/CMakeLists.txt diff --git a/tmp/yolov10-cpp-testing/src/ia/inference.cpp b/misc/yolov10-cpp-testing/src/ia/inference.cpp similarity index 100% rename from tmp/yolov10-cpp-testing/src/ia/inference.cpp rename to misc/yolov10-cpp-testing/src/ia/inference.cpp diff --git a/tmp/yolov10-cpp-testing/src/ia/inference.h b/misc/yolov10-cpp-testing/src/ia/inference.h similarity index 100% rename from tmp/yolov10-cpp-testing/src/ia/inference.h rename to misc/yolov10-cpp-testing/src/ia/inference.h diff --git a/tmp/yolov10-cpp-testing/src/main.cpp b/misc/yolov10-cpp-testing/src/main.cpp similarity index 100% rename from tmp/yolov10-cpp-testing/src/main.cpp rename to misc/yolov10-cpp-testing/src/main.cpp diff --git a/tmp/yolov10-cpp-testing/src/placeholder.cpp b/misc/yolov10-cpp-testing/src/placeholder.cpp similarity index 100% rename from tmp/yolov10-cpp-testing/src/placeholder.cpp rename to misc/yolov10-cpp-testing/src/placeholder.cpp diff --git a/tmp/yolov10-cpp-testing/src/video.cpp b/misc/yolov10-cpp-testing/src/video.cpp similarity index 100% rename from tmp/yolov10-cpp-testing/src/video.cpp rename to misc/yolov10-cpp-testing/src/video.cpp diff --git a/tmp/yolov10-cpp-testing/src/video_rtsp.cpp b/misc/yolov10-cpp-testing/src/video_rtsp.cpp similarity index 100% rename from tmp/yolov10-cpp-testing/src/video_rtsp.cpp rename to misc/yolov10-cpp-testing/src/video_rtsp.cpp