Skip to content

UWB anchors initialization procedure C++ Library and ROS1 wrapper

License

Notifications You must be signed in to change notification settings

aau-cns/uwb_init

Repository files navigation

UWB initialization library ROS wrapper

A ROS1 workspace to use the UWB initialization library explained in the paper UVIO: An UWB-Aided Visual-Inertial Odometry Framework with Bias-Compensated Anchors Initialization (https://arxiv.org/abs/2308.00513).

Maintainers: Giulio Delama and Alessandro Fornasier

Credit

This code was written by the Control of Networked System (CNS), University of Klagenfurt, Klagenfurt, Austria.

License

This software is made available to the public to use (source-available), licensed under the terms of the BSD-2-Clause- License with no commercial use allowed, the full terms of which are made available in the LICENSE file. No license in patents is granted.

Usage for academic purposes

If you use this software in an academic research setting, please cite Delama2023 or Jung2024 and consult the LICENSE file for a detailed explanation.

@inproceedings{Delama2023,
   author       = {Delama, Giulio and Shamsfakhr, Farhad and Weiss, Stephan and Fontanelli, Daniele and Fornasier, Alessandro},
   booktitle    = {2023 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
   title        = {UVIO: An UWB-Aided Visual-Inertial Odometry Framework with Bias-Compensated Anchors Initialization},
   year         = {2023},
  organization  = {IEEE}
}
@inproceedings{Jung2024,
   author       = {Jung, Roland and Santoro, Luca and Brunelli, Davide and Fontanelli, Daniele and Weiss, Stephan},
   booktitle    = {2024 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
   title        = {Modular Meshed Ultra-Wideband Aided Inertial Navigation with Robust Anchor Calibration},
   year         = {2024},
  organization  = {IEEE}
}

Getting Started

The main folder constains the C++ library and its ROS wrapper.

Requirements

These software components are needed on your platform to run the ROS node.

Prerequisites

  1. Create a catkin workspace and install catkin_tools
    mkdir -p catkin_ws/src && cd catkin_ws
    sudo apt update && sudo apt install -y python3-catkin-tools
    catkin init
    catkin config --extend /opt/ros/$(rosversion -d) --cmake-args -DCMAKE_BUILD_TYPE=Release -j4 -l4
    
  2. Clone the required ROS packeges to your workspace
    cd src
    git clone [email protected]:aau-cns/ros_pkgs/mdek_uwb_driver.git
    [email protected]:aau-cns/mission_sequencer.git
    git clone [email protected]:aau-cns/ros_pkgs/uwb_init_cpp.git
    git clone [email protected]:aau-cns/ros_pkgs/uwb_msgs.git
    

Build

  1. Compile using catkin build:
    cd catkin_ws/src && catkin build uwb_init_ros
    
  2. (not required) The C++ stand-alone library can also be builded and installed with:
    cd uwb_init_lib
    mkdir build && cd build
    cmake ../
    cmake --build .
    sudo cmake --install .
    
    
    

Usage

The objective is to initialize a set of unknown UWB anchors. To understand the motivation and the detailed initialization procedure please refer to the [academic paper].

The rosnode can be launched with the provided launchfile by running

roslaunch uwb_init_ros uwb_init.launch

The initialization can be performed by calling the following ros services:

  1. Start collecting measurements (poses and UWB ranges)
rosservice call uwb_init_ros/start "{}"
  1. Initialize UWB anchors (after first flight)
rosservice call uwb_init_ros/initialize "{}"
  1. (optional) Compute optimal waypoints
rosservice call uwb_init_ros/compute_wps "{}"
  1. (optional) Perform a flight through the waypoints (start collecting data with 1. before flying) and refine previous initialization
rosservice call uwb_init_ros/refine "{}"

Launch Parameters

The provided launchfile and node allows the setting of the following parameters. Each of these parameters can either be set in the launchfile, set through other launchfiles by using the <include> and <arg> tags, or set through the command line with roslaunch uwb_init_ros uwb_init.launch <PARAMETER>:=<VALUE>.

ROS Topics and Services

ROS parameter description default value type
estimated_pose_topic name of the body pose topic used for anchor initialization `` geometry_msgs::PoseStamped
estimated_pose_cov_topic name of the body pose with covariance topic used for anchor initialization `` geometry_msgs::PoseWithCovarianceStamped <
estimated_transform_topic name of the body transform stamped topic used for anchor initialization `` geometry_msgs::TransformStamped
estimated_odometry_topic name of the body odometry stamped topic used for anchor initialization (nav_msgs::Odometry) ``
uwb_twr_topics dictionary of two-way ranging topics: {<ID>: topic, } {1: /uwb_driver_node/twr} uwb_msgs::TwoWayRangeStamped
uwb_range_topic name of the uwb topic used for anchor initialization /uwb_driver_node/uwb mdek_uwb_driver::Uwb
uwb_anchors_topic name of the topic used to publish the anchors after initialization ~uwb_anchors uwb_msgs::UwbAnchorArrayStamped
waypoints_topic name of topic used to publish the generated optimal waypoints ~wps mission_sequencer::MissionWaypointArray

Reporting Issues

In case of issues, feature requests, or other questions please open a New Issue or contact the authors via email.

Authors

About

UWB anchors initialization procedure C++ Library and ROS1 wrapper

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •