UAV |
---|
![]() |
The solution utilizes a depth image estimation model to create an occupancy grid map of the surrounding area and uses an A* path planning algorithm to find optimal paths to end goals while simultaneously navigating around obstacles. The simulation is conducted using AirSim in Unreal Engine.
Important
This project provides an open-source framework that uses a virtual environment to test and compare autonomous UAV navigation methods based on monocular vision.
Current drone navigation system is proof of concept. Refer to the Citation section for the journal paper to learn more about the research and concerns addressed application in real-world scenarios.
When using A Framework for Autonomous UAV Navigation Based on Monocular Depth Estimation, please cite the following journal paper (pdf, video)
@article{monocular-slam-drone,
title={A Framework for Autonomous UAV Navigation Based on Monocular Depth Estimation},
author={Gaigalas Jonas and Perkauskas Linas and Gricius Henrikas, Kanapickas Tomas and Kriščiūnas Andrius},
journal={TODO},
year={2025},
publisher={TODO},
}
- Docker installed (with docker-compose support)
- NVIDIA GPU and drivers with CUDA support for GPU acceleration (optional)
- X11 server running for displaying graphical applications (optional)
Tip
If using Windows, you can set up VcXsrv
as your X11 server. Instructions are provided in the "Setting Up X11 Server" section below.
Follow the steps below to set up the project on your local machine:
Clone repository with included git submodules by running:
git clone --recurse-submodules https://github.com/jonasctrl/monocular-slam-drone.git
To build the project using docker compose:
docker compose up --build
Caution
You need to create a .env
file in the root directory and update it with your system-specific variables for display forwarding.
DISPLAY=192.168.0.120:0 # Your X11 server address
Tip
See .env.example
for general steps on how to find your display for X11 forwarding.
Select the environment you want to use and import the fine-tuned model for it:
- Fine-tuned models are located in Google Drive
- Models are trained on the Model Datasets
Start the simulation environment in Unreal Engine. The environment can be downloaded from the AirSim Environments page.
After starting the simulation environment:
- AirSim will create configuration files in
C:\Users\{username}\Documents\AirSim\
- Copy the
settings.json
from the repository's config folder to the AirSim config directory
To start the project, run the following command inside the docker container:
python3 /catkin_ws/src/drone-node/src/mapper_nav_ros.py
Tip
The red grid shown in Rviz is the uncertain depth space and the blue one is the occupied-known space. Use the RVIZ window GUI to plan specified missions with the 2D planning tool.
The proposed architecture for an autonomous monocular drone navigation system is depicted in following diagram:
The system is divided into:
- Simulation Environment: Using
Airsim v1.8.1
- Monocular Drone Navigation System: Running in a containerized Docker environment with
Ubuntu 20.04
and using theROS noetic v1.17.0
framework for communication
The navigation system consists of three modules:
Module | Description |
---|---|
Depth Estimation Module (DEM) | Estimates depth images from the RGB camera feed provided by the simulation environment. Based on "Depth Anything V2" model. |
Mapper Module (MM) | Builds and iteratively updates the occupancy map-based 3D environment using depth images from DEM and camera position/orientation from the simulation. |
Navigation Module (NM) | Finds viable path trajectories to specified points in the mapped 3D environment using the A* algorithm. Output is fed back to the simulation environment. |
The following images demonstrate the depth estimation and mapping process:
Camera Image | 3D Mapping Visualization |
---|---|
![]() |
![]() |
Tip
The red voxel grid shown in Rviz is the uncertain depth space and the blue one is the occupied-known space.
If you're running this on Windows, you can set up an X11 server using VcXsrv
:
- Download and install VcXsrv from SourceForge
- During configuration, check the box "Disable access control"
- Ensure that
DISPLAY
is correctly set in your.env
file
If using a Linux-based environment:
export DISPLAY=host.docker.internal:0
xhost +
Tip
To test the X11 setup, run xclock
inside the container. If you see a clock window appear, your X11 server is configured correctly.
This project is licensed under the MIT License - see the LICENSE file for details.