NLP-based perching trajectory generation presented in our paper "Perception-Aware Perching on Powerlines with Multirotors".

Perception-Aware Perching on Powerlines with Multirotors

This repo contains the code for the NLP-based perching trajectory generation presented in our paper "Perception-Aware Perching on Powerlines with Multirotors". It also contains the following example trajectories:

Upside down 90º 90º (Perception Aware)
Upside Down 90º (No Perception Awareness) 90º (With Perception Awareness)

Citing

If you use this code in an academic context, please cite the following publication:

@article{paneque2022perching,
  title={Perception-Aware Perching on Powerlines with Multirotors},
  author={Paneque, J. L., Martínez-de-Dios, J. R., Ollero, A., Hanover, D., Sun, S., Romero, A. and Scaramuzza, D.},
  journal={IEEE Robotics and Automation Letters},
  year={2022}
}

License

MIT License. Copyright (C) 2022 Julio L. Paneque, Jose Ramiro Martínez de Dios and Anibal Ollero (GRVC Robotics Lab, Universidad de Sevilla) and Drew Hanover, Sihao Sun, Ángel Romero and Davide Scaramuzza (Robotics and Perception Group, University of Zurich).

This is research code, expect that it changes often and any fitness for a particular purpose is disclaimed.

This work has dependencies on other libraries which are individually cited when appearing.

Requirements

The code was tested with Ubuntu 18.04, Matlab R2020b, FORCESPRO 5.1.0, Casadi 3.5.1, g++ 10.3.0 and libYAML-cpp 0.5. Compatibility with other versions should be possible but is not tested.

Installation and usage

Generating the solver (solver_generation)

The NLP solver is generated and run using the FORCESPRO software (https://forces.embotech.com/). A free academic license of the software can be requested in this link.

Once you have the license, install FORCESPRO following these instructions, and then install the MATLAB client following these instructions. After that, navigate to the solver_generation folder and run:

generate_solver.m

This will generate all the required files and copy them to the solver_interface folder.

Using the solver (solver_interface)

After the solver is generated, it can be used from the C++ interface to compute the required perching trajectories. To compile the interface, navigate to solver_interface and run:

g++ -o compute_perching_traj -Iinclude -std=c++17 src/perch_recovery_planner.cpp src/parameters/quad.cpp src/parameters/lines.cpp src/parameters/costs.cpp src/parameters/reference.cpp src/parameters/xinit.cpp extern/solver/PerchingSolver/lib/libPerchingSolver.so extern/solver/PerchingSolver_casadi2forces.c extern/solver/PerchingSolver_casadi.c -lm -lyaml-cpp

Once the code is compiled, it can be run given a path to a YAML file with the desired problem. This file provides the paths for the following sub-files (also in YAML format):

  • The quadrotor parameters (quad_config)
  • The powerlines setup (lines_config)
  • The NLP costs for perching (perching_costs)
  • The NLP costs for recovery (recovery_costs)
  • The perching reference (reference)
  • The starting position (xinit)

We provide the configuration files for three different perching maneuvers: upside_down, 90_deg_no_pa and 90_deg_pa. To run the first one, simply run:

./compute_perching_traj config/upside_down.yaml

This will compute the maneuver and generate an upside_down.csv file in the current directory. We already provide the resulting .csv files of the three maneuvers so they can be seen without compiling any code.

Visualizing the results (trajectory_visualization)

We provide a optional python script to visualize the generated maneuvers in 3D animated plots. The required packages to run it are listed in trajectory_visualization/requirements.txt. The script takes as inputs the trajectory file, the quadrotor configuration file and the powerlines setup file. Additional arguments --show_vel and --save can be used to show the quadrotor velocity overtime and to save the resulting animation as a gif file (note: saving the animation will take some time before anything is shown).

You can play an example animation by running:

python visualize_trajectory.py -t ../solver_interface/upside_down.csv -q ../solver_interface/config/quad_parameters.yaml -l ../solver_interface/config/upside_down/line_parameters.yaml --show_vel

This will show an animation of the upside_down perching maneuver.

Similar Resources

Source Code for SIGGRAPH Asia 2021 Paper "Ensemble Denoising for Monte Carlo Renderings"

Ensemble Denoising Source Code for SIGGRAPH Asia 2021 Paper Ensemble Denoising for Monte Carlo Renderings. Paper | Code | Talk Slides Dependencies A C

Nov 25, 2022

Codes for the paper "A Correlation Attack on Full SNOW-V and SNOW-Vi"

Codes for the paper "A Correlation Attack on Full SNOW-V and SNOW-Vi" #Contents Automatic search of linear approximation trails of SNOW-V Evaluating t

Oct 19, 2022

the code of paper "Optimizing Global Injectivity for Constrained Parameterization" (SIGGRAPH Asia 2021)

the code of paper

Optimizing Global Injectivity for Constrained Parameterization Xingyi Du, Danny M. Kaufman, Qingnan Zhou, Shahar Kovalsky, Yajie Yan, Noam Aigerman, T

Nov 10, 2022

Code for Paper A Systematic Framework to Identify Violations of Scenario-dependent Driving Rules in Autonomous Vehicle Software

Code for Paper A Systematic Framework to Identify Violations of Scenario-dependent Driving Rules in Autonomous Vehicle Software

Nov 28, 2022

We implemented our own sequential version of GA, PSO, SA and ACA using C++ and the parallelized version with CUDA support

We implemented our own sequential version of GA, PSO, SA and ACA using C++ (some using Eigen3 as matrix operation backend) and the parallelized version with CUDA support. All of them are much faster than the popular lib scikit-opt.

May 7, 2022

LightSeq: A High Performance Library for Sequence Processing and Generation

LightSeq: A High Performance Library for Sequence Processing and Generation

LightSeq is a high performance training and inference library for sequence processing and generation implemented in CUDA. It enables highly efficient computation of modern NLP models such as BERT, GPT, Transformer, etc. It is therefore best useful for Machine Translation, Text Generation, Dialog, Language Modelling, Sentiment Analysis, and other related tasks with sequence data.

Jan 3, 2023

Code generation for automatic differentiation with GPU support.

Code generation for automatic differentiation with GPU support.

Dec 5, 2022

A GPU (CUDA) based Artificial Neural Network library

A GPU (CUDA) based Artificial Neural Network library

Updates - 05/10/2017: Added a new example The program "image_generator" is located in the "/src/examples" subdirectory and was submitted by Ben Bogart

Dec 10, 2022

C-based/Cached/Core Computer Vision Library, A Modern Computer Vision Library

Build Status Travis CI VM: Linux x64: Raspberry Pi 3: Jetson TX2: Backstory I set to build ccv with a minimalism inspiration. That was back in 2010, o

Jan 6, 2023
Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation"

SSM-VLN Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation". Environment Installation Download Room-to-Room

Dec 3, 2022
The official implementation of our CVPR 2021 paper - Hybrid Rotation Averaging: A Fast and Robust Rotation Averaging Approach

Graph Optimizer This repo contains the official implementation of our CVPR 2021 paper - Hybrid Rotation Averaging: A Fast and Robust Rotation Averagin

Dec 23, 2022
This is the code of our paper An Efficient Training Approach for Very Large Scale Face Recognition or F²C for simplicity.
This is the code of our paper An Efficient Training Approach for Very Large Scale Face Recognition or F²C for simplicity.

Fast Face Classification (F²C) This is the code of our paper An Efficient Training Approach for Very Large Scale Face Recognition or F²C for simplicit

Jun 27, 2021
The repository contains our dataset and C++ implementation of the CVPR 2022 paper, Geometric Structure Preserving Warp for Natural Image Stitching.
The repository contains our dataset and C++ implementation of the CVPR 2022 paper, Geometric Structure Preserving Warp for Natural Image Stitching.

Geometric Structure Preserving Warp for Natural Image Stitching This repository contains our dataset and C++ implementation of the CVPR 2022 paper, Ge

Dec 22, 2022
Implementation for the "Surface Reconstruction from 3D Line Segments" paper.
Implementation for the

Surface Reconstruction from 3D Line Segments Surface reconstruction from 3d line segments. [Paper] [Supplementary Material] Langlois, P. A., Boulch, A

Dec 31, 2022
This code accompanies the paper "Human-Level Performance in No-Press Diplomacy via Equilibrium Search".
This code accompanies the paper

Diplomacy SearchBot This code accompanies the paper "Human-Level Performance in No-Press Diplomacy via Equilibrium Search". A very brief orientation:

Dec 20, 2022
The official implementation of the research paper "DAG Amendment for Inverse Control of Parametric Shapes"
The official implementation of the research paper

DAG Amendment for Inverse Control of Parametric Shapes This repository is the official Blender implementation of the paper "DAG Amendment for Inverse

Dec 26, 2022
Source Code for SIGGRAPH Asia 2021 Paper "Ensemble Denoising for Monte Carlo Renderings"

Ensemble Denoising Source Code for SIGGRAPH Asia 2021 Paper Ensemble Denoising for Monte Carlo Renderings. Paper | Code | Talk Slides Dependencies A C

Nov 25, 2022