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
This code was written by the Control of Networked System (CNS), University of Klagenfurt, Klagenfurt, Austria.
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.
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}
}
The main folder constains the C++ library and its ROS wrapper.
These software components are needed on your platform to run the ROS node.
- ROS: tested with ROS noetic
- 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
- 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
- Compile using
catkin build
:cd catkin_ws/src && catkin build uwb_init_ros
- (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 .
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:
- Start collecting measurements (poses and UWB ranges)
rosservice call uwb_init_ros/start "{}"
- Initialize UWB anchors (after first flight)
rosservice call uwb_init_ros/initialize "{}"
- (optional) Compute optimal waypoints
rosservice call uwb_init_ros/compute_wps "{}"
- (optional) Perform a flight through the waypoints (start collecting data with 1. before flying) and refine previous initialization
rosservice call uwb_init_ros/refine "{}"
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 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 |
In case of issues, feature requests, or other questions please open a New Issue or contact the authors via email.