This repository contains the code for the ICRA 2021 paper :
CVaR-based Flight Energy Risk Assessment for Multirotor UAVs using a Deep Energy Model
Arnav Choudhry*,
Brady Moon*,
Jay Patrikar*,
Constantine Samaras,
Sebastian Scherer
(* equal contribution) [PDF]
Brief overview [Video]
Energy management is a critical aspect of risk assessment for Uncrewed Aerial Vehicle (UAV) flights, as a depleted battery during a flight brings almost guaranteed vehicle damage and a high risk of human injuries or property damage. Predicting the amount of energy a flight will consume is challenging as routing, weather, obstacles, and other factors affect the overall consumption.
We develop a deep energy model for a UAV that uses Temporal Convolutional Networks to capture the time varying features while incorporating static contextual information. Our energy model is trained on a real world dataset and does not require segregating flights into regimes. We illustrate an improvement in power predictions by 29% on test flights when compared to a state-of-the-art analytical method. Using the energy model, we can predict the energy usage for a given trajectory and evaluate the risk of running out of battery during flight. We propose using Conditional Value-at-Risk (CVaR) as a metric for quantifying this risk. We show that CVaR captures the risk associated with worst-case energy consumption on a nominal path by transforming the output distribution of Monte Carlo forward simulations into a risk space. Computing the CVaR on the risk-space distribution provides a metric that can evaluate the overall risk of a flight before take-off. Our energy model and risk evaluation method can improve flight safety and evaluate the coverage area from a proposed takeoff location.
- Python >= 3.8
- Clone this repo:
git clone #
cd #
- Create a new virtual environment using Conda or virtualenv.
conda create --name <envname> python=3.8
- Activate the environment and install the requirements:
conda activate <envname>
pip install -r requirements.txt
We use the data set provided in the paper "Data Collected with Package Delivery Quadcopter Drone" (available here). The scripts are to preprocess the dataset are included.
We provide a training script to train a TCN or LSTM model with some amount of flexibility. To train a custom recurrent net, run the following line of code along with some (or none) of the options provided
python train.py
Optional arguments can be given as following:
-d
,--directory
sets the working directory for data. Default is current working directory.-o
,--output
sets the output directory for training. Default is current working directory.-D
,--data
whether to download the data or not. This is a binary flag whose default is set toFalse
.--lookback
sets the size of lookback window. (default =20
)--batch_size
size of batch passed totf
. (default =32
)--nb_filters
(For TCN) The number of filters to use in the convolutional layers. Would be similar to units for LSTM. Can be a list. (default =32
)--kernel_size
(For TCN) The size of the kernel to use in each convolutional layer. (default =3
)--nb_stacks
(For TCN) The number of stacks of residual blocks to use. (default =1
)--n_layers
Number of layers in the network. (default =4
)--total_epochs
Total number passes over the entire training data set. (default =10
)--optimizer
Optimizer used by the neural network. (default =Adam
)--dropout
Dropout used by the neural network. (default =0
)--units
(For LSTM) The number of units in each layer. (default =32
)--net_type
The type of net to train. Eitherlstm
ortcn
. (default =tcn
)--stateful
sets whether to create a stateful neural net or not. This is a binary flag whose default is set toFalse
.
On running the training script, everything is saved in a new folder called Results
which is created in the output directory. The initialized model is saved in a sub-folder called saved_models
. It is saved with the name <save_str>
which is created using the following rule for a TCN
{net_type}_{lookback}_{nb_filters}_{kernel_size}_{nb_stacks}_{n_layers}
and the following rule for an LSTM
{net_type}_{lookback}_{dropout}_{units}_{n_hidden}_{optimizer}
The model is checkpointed at epoch 0
as well as every 50
training flights. The checkpoints are stored in a sub-folder called ckpts/<save str>
. While training, logs are saved for tensorboard in the sub-folder logs/<save str>/<time at start of experiment>
. At the end of the experiment, a csv
file is created with the Validation and Training results at CsvResults/<save str>/csv_result.csv
.
The repo contains the deep energy model and the Liu model cited as the baseline in the paper. To run the evaluation script on the provided checkpoints, run the following
python evaluation.py
Optional arguments can be given as following:
-d
,--directory
sets the working directory for the data. Default is current working directory.-m
,--model
model(s) to evaluate. Can be any ofb-TCN
,s-TCN
,b-LSTM
,s-LSTM
,liu
,all
orcustom
. Default isb-TCN
.-e
,--evaluate
which dataset to evaluate on. Can betrain
,test
,val
,random
, orall
. Defult istest
.-D
,--data
whether to download the dataset or not. This is a binary flag whose default is set toFalse
.-c
,--ckpt
is the location of the checkpoint file for weights of the custom neural net. It is required if a custom model is selected.- Other additional options are available in case a
custom
net is to be evaluated. For details on those options please check the Train section above.
We also ship the checkpoints to reproduce the results presented in the paper. Details on how to run the model with the pretrained checkpoints are shown in the Evaluation section of this README file.
Model | Random Flights | Test Flights | # params | ||
---|---|---|---|---|---|
MAPE (%) | RE (%) | MAPE (%) | RE (%) | ||
Liu model | 14.05 | 9.16 | 12.70 | 7.41 | 5 |
b-LSTM | 13.58 | 10.35 | 11.47 | 7.57 | 84,649 |
s-LSTM | 15.35 | 11.65 | 12.36 | 8.24 | 5,833 |
b-TCN | 10.38 | 7.38 | 9.06 | 5.12 | 76,073 |
s-TCN | 10.36 | 7.56 | 9.13 | 5.52 | 5,225 |
For more information on the models please refer to the paper.
We have also provided our simple quadrotor simulation for running MC simulations over a flight path and computing the risk.
python sim.py
The example environment is the same as Case Study 1 from our paper. The wind fiels and interfaces for getting wind at any position for any inlet condition is also included.
If you have any questions, please contact [email protected] or [email protected], or open an issue on this repo.
If you find this repository useful for your research, please cite the following paper:
@INPROCEEDINGS{choudhry2021cvar,
author={Choudhry, Arnav and Moon, Brady and Patrikar, Jay and Samaras, Constantine and Scherer, Sebastian},
booktitle={2021 IEEE International Conference on Robotics and Automation (ICRA)},
title={CVaR-based Flight Energy Risk Assessment for Multirotor UAVs using a Deep Energy Model},
year={2021},
pages={262-268},
doi={10.1109/ICRA48506.2021.9561658}
}