NO
YES
NO
NO
YES
YES
NO
YES
ROS2 it is
ROS1 it is
YES
NO
YES
NO
ROS2 transition - MRS UAV System diagram
MRS UAV Core
PX4 + Mavros
Third-party package refactoring decision making tree
MRS UAV Modules
Robofly
Sensor drivers
Gazebo + PX4 SITL
New features - not in ROS1 MRS yet
MRS Course tasks (for 2026)
Octomap mapping & planning
UVDAR
Documentation
Buildfarm
Core example packages
Precise Landing
Computer vision examples
Summer School task (for 2026)
Flight Forge
MRS Apptainer
MRS Docker
Portainer system
Task 01 controller
Task 02 formation
Task 03 swarm
Months-worth of work (1 Tomas)
Weeks-woth of work (1 Tomas)
Days-worth of work (1 Tomas)

Let's adopt the ROS2 branch

Well then?

Let's adopt the ROS2 branch and fix it's problems

Decide if we should fix the ROS2 branch or to port the ROS1 (that worked) to ROS2

Is it better to merge them into the ROS2 version?

Is there a ROS2 branch?

Do we have our own changes to the ROS1 branch

Refactor to ROS2 ourselves

Check if the ROS2 branch needs the changes as well

Test the ROS2 branch as it is

Do we want to keep the software?

Replace it with something better

Does it perform well?

Do we need the changes?

HW Api

  • plugin interface

  • example plugin

  • plugin manager

  • doxygen

  • took me 1 day

MRS UAV Estimators

  • AGL estimators
  • Altitude estimators
  • Heading estimators
  • Lateral estimators
  • State estimators
  • TODO unify healthcheck timers
  • Tests

MRS UAV Autostart

  • Refactor
  • Tests
  • param loading
  • Publisher
  • Subscriber
  • Timer
  • Service client
  • Service server
  • library
  • tests
    • unit test
    • integration test
  • Pluginlib
  • tf broadcaster
  • tf listener
  • clock managament
  • image transport
  • point cloud transport
  • actionlib
  • lifecycle nodes

MRS UAV Trackers

  • Mpc tracker
  • Line tracker
  • Midair activation tracker
  • Landoff tracker
  • Joy tracker (keep?)
  • Speed tracker (keep?)
  • FlipTracker {keep?)
  • Tests

MRS DJI Tello API

  • refactor

Trajectory generation

  • Refactor
  • Tests
  • path random flier

mrs_msgs

  • refactor
  • building of doxygen docs

Diagnostics manager?

  • talk to Vojta and get an idea how it works
  • Maybe Matous should do it?

Remote controller HW abstracton

Safety area manager

  • refactor
  • incorporate
  • tests

MRS UAV Status

  • Acquisition node
  • Presentation node

mrs_uav_core package

  • get_public_params.py
  • core lauch
  • rviz refactor script

Colcon workspace

  • how does the mixin feature work

MRS Rviz plugins (Afzal)

  • not essential, should be possible
  • refactor

MRS UAV Development

  • colon alias for ease of use
  • custom roscd alias
  • pre-sourcing of a selected workspace for speedup of the process

PX4 SITL

  • updgrade to the newest reasonable PX4 version

Sensor drivers (px4_sitl_gazebo)

  • our custom fixes to the maagnetometer (did not use inclination)
  • custom fixes to lidar
  • custom fixes to GPS plugin

Gazebo

  • refactor the metapackage
    • launch files
    • configs

Drone spawner

  • keep the functionalities
  • dockerization?

MRS UAV System metarepositories

  • refactor

ROS2 inter-robot communication

  • How to correctly configure remote access to remote ROS2 machine?
  • How to replace the old Nimbro setup with native ROS2 features

MRS Errorgraph

  • refactor
  • incorporate

Signed disarming

MRS Errorgraph viewer

  • refactor
  • incorporate

Parakh's propulsion model

Gazebo custom drone example

  • refactor

Gazebo common & extra resources

  • custom plugins
  • custom worlds

MRS UAV Deployment

  • the package builds
  • refactor config files
  • example realworld tmux sessions

MRS Coppelia simulation

  • I would keep it as an example
  • refactor

ROS Kalibr docker

  • Question: does Kalibr have a ROS2 version (it needs rosbag as an input)
  • Answer: No, it is not developed anymore. There might be activities related to disentangling it from ROS completely (https://github.com/ethz-asl/kalibr/issues/725).
  • refactor
  • or make sure rosbags can be converted from ROS2 to ROS1

MRS UAV Gazebo testing

  • refactor

PX4 Hw API

  • Refactor
  • Test with a real drone first (if the comunications work as expected)

MRS Lib

  • param loader
  • publisher handler
  • service client handler
  • timer handler
  • timeout manager
  • lkf, ukf, dkf, nckf
  • profiiler
  • msg extractor
  • service client handler
  • subscriber handler
  • transform broadcaster
  • transformer
  • safety zone
  • IIR filter
  • batch visualizer (Afzal)
  • dynamic reconfigure
  • service server handler (matous)
  • aloamgarm + JLKF (Vasek)
    • tests
  • dynamic publisher (Matous)[1]
    • tests
  • .. the rest of the minor libs
  • building of doxygen docs
  • building a python lib for testing
    • how to export python libs?

  1. Probably rewrite from scratch↩︎

External dependencies

  • ROS
  • Eigen
  • PCL (neccessary?)
  • OpenCV (neccessary?)

MRS Multirotor simulator

  • refactor
    • dynamic reconfigure
    • rviz integration
  • add sensor noise (Michal Reiser)
  • test simtime generation
  • test max simulation rate
  • HW Api plugin (needs HW API)

Linux Setup (Ubuntu 24.04)

  • nvim works
    • coc.nvim replaced ycm
    • ROS integration works
  • i3 works
  • tmux and other tools ok
  • automatic installation works

START

TODOs

Minor TODO

  • Although the estimation manager checks for data on the "control input" topic, the particular estimator might be subscribing a wrong topic, therefore, you might miss the error of bad remapping
  • Mavros config needs different configs for Garmin with old (id 33) and new fw (id 0, pitch_270)
  • Batch visualizerer topics are not shown in rviz (MrsLib)
  • tf for rtk antenna currently hardcoded in transform manager's launch file (TransformManager)
  • Test for "Transform Reference List" (ControllManager)

makeprg compilation of a package in neovim

  • :make in vim should trigger colcon buiild of the current packaage
    • we need to be able to detect which package does the currently opened file originates from

Key-signed disarming

  • implement key exchange mechanism for the disarming service: the caller should first get a random key from the hw api that will allow him to disarm. This will prevent a random caller from disarming the drone in mid air.

  • implementation

  • tests

Controller and Tracker timeouting

  • implementation
  • tests

Proper handling of UTM zones

  • implementation
  • tests

Landing detection for all output modalities

Think of a way how to detect that we landed for all output modalities...

  • implementation
  • tests

PCL specialization of mrs_lib (Transformer)

  • implementation
  • tests

Speed tracker (Rethink and refactor?)

  • I would rethink it as "Passthrough tracker" using the TrackerCommand

MRS UAV Status

  • the remote mode should use desired velocity instead of relative position command

MRS Multirotor simulator plugin API

  • allow loading UAV-plugins and WORLD-plugins
  • implementation
  • tests

MidAir activation

  • parametrize the sleep after arming by the rate if incoming odometry

Launch file

  • make debug_roslaunch conditional in the launch files

Remote controller abstraction

  • from HW API -> Control manager

F4F utilizes and deploys these features in an industrial setting

F4F

Hector + core

  • does it have a newer ROS2 branch?
  • is anybody using it?
  • refactor

MRS Serial

  • refactor
  • important for RTK

MRS Bumper

  • refactor

MRS PCL Tools

  • refactor
  • depends on Ouster, should we rethink this?

POINT LIO + core

  • does it have a newer ROS2 branch?
  • refactor

ALOAM + core

  • does it have a newer ROS2 branch?
  • refactor

Path loader (Tsoy)

  • refactor

Trajectory loader (Tsoy)

  • refactor

F4F

F4F

Landing estimator

  • refactor

Landing controller

  • refactor

April tag

  • find and adapt ROS2 version

Gazebo simulation package

  • refactor

F4F

Livox360 driver

  • does it have a newer ROS2 branch?
  • refactor

Optic flow

  • do we want to keep it?
  • refactor if yes

super low priority

MRS LLCP

  • refactor

F4F

Luxonis driver

  • does it have a newer ROS2 branch?
  • refactor

Bluefox driver (2 weeks)

  • does it have a newer ROS2 branch?

  • refactor

MRS UAV Modules metapackage

  • refactor

Realsense driver (1 week)

  • does it have a newer ROS2 branch?
  • refactor

F4F

  • Who is going to do it?
  • Are there any dependencies to real sensor drivers?

Basler driver

  • does it have a newer ROS2 branch?
  • beware the multithreading problem
  • refactor

Ouster driver

  • does it have a newer ROS2 branch?
  • refactor

UVDAR Core

  • Refactor

UVDAR Gazebo plugin

  • Refactor

Robofly's UVDAR

  • rafactor

UVDAR calibration routine

  • Refactor

MRS Modules msgs

  • refactor
  • building of doxygen docs

OpenVins + Core

  • does it have a newer ROS2 branch?
  • refactor

Let's adopt the ROS2 version and update it with our changes

Let's refactor the ROS1 version into ROS2 ourselves

Let's refactor the ROS1 version into ROS2 ourselves

Camera base

  • does it have an equivalent in ROS2
  • refactor (incoroporated into Bluefox2)

RPLidar driver

  • does it have a newer ROS2 branch?
  • are we using it?
  • refactor

F4F

MRS Utils

  • refactor

Summer school real-world deployment

  • update and refactor

LIOSAM + core

  • does it have a newer ROS2 branch?
  • refactor

F4F

  • refactor ROS bindings and integration
  • udpate examples

Unreal sim package

  • Simulator node
  • HW APi
  • rename package
  • dynparam mgr

Basic functionality works

MRS UAV Controllers

  • MpcController
  • Se3Controller
  • Failsafe controller
  • Midair activation controller
  • Tests
  • refactor ROS bindings and integration
  • udpate examples

ROS2 bridge (Hugues)

  • Is it alive? Can it be used by people who want to run their ROS1 node agains the ROS2 system?
  • investigate

RMW Zenoh

  • will it be better than FastDDS?
  • can it replace nimbro?
    • can it be configured per-topic?
  • does it perform with fast and large msgs?

F4F

CPP

  • edge detector

Python

  • blob detector

Stacks

  • refactor/create example stacks

Libcamera ROS driver

  • there should be official ROS2 branch
  • rafactor

F4F

CPP

  • waypoint flier
  • waypoint flier simple
  • tracker plugin
  • controller plugin
  • estimator plugin (TODO create)
  • pluginlib example

Python

  • sweeping generator

NLOPT solver ROS wrapper

  • refactor

ICM IMU driver

  • refactor

Object tracking example

  • refactor

F4F documentation

  • update

F4F

Octomap planner

  • refactor
  • merge changes from SPRIND

SubT Planning lib

  • refactor
  • might not contain ROS

Octomap server

  • refactor
  • merge changes from SPRIND

MRS Octomap Tools

  • refactor
  • is it used?

Libcamera driver library

  • refactor (probably stays the same)

Hailo AI adapter

  • refactor
  • update base image builder

F4F

CI Scripts

  • set of common scripts used by the buildfarm and by separate repositories' actions
  • update and refactor

Controller and Tracker Timeouting

MRS UAV Managers

  • Estimation manager (4 days)
  • Control manager
  • UAV manager
  • Transform manager (1 day)
  • Constraint manager
  • Gain manager
  • Tests
  • bulding of doxygen docs

MRS Docs

  • updating prerequisities about ROS
  • refactoring all example pages
  • refactoring pieces of ROS1-related code snippets

Cheatsheet

  • Update ROS-related stuff

Main github page

  • update when ready

MRS Internal wiki

  • update

F4F

UTM zone handling

Dynmgr

  • TODO callbacks
  • TODO ranges

Buildfarm

  • creating of ROS2 PPAs
  • revisiting bloom
  • refactoring dockerized compilation pipeline
  • on-push builds
  • test pipeline
  • coverage pipeline

MRS UAV testing

  • the abstraction library
  • tests
    • example tests using the lib

Portainer stacks

  • refactor

Basic robofly example

  • basic example

F4F software installation guide

  • update
  • build from scratch without the MRS UAV System with just the Multirotor Sim lib

Summer school simulation and wrappers

  • update and refactor
  • remove Gazebo
  • update and refactor
  • remove Gazebo
  • update and refactor

START

Is FastRTSP good enough for images and pointclouds? (deleg. Tsoy Artyom)

  • not as bad as initially thought
  • try the Zenoh RMW, which should work like the ROS1 with roscore
  • FastRTSP is unusable for real-time performance reasons

MRS UAV Shell Additions

  • refactor

Rosbag Record

  • how do our customizations from ROS1 apply?
    • rosbag record is killed when it cannot write to the disk anymore
    • it publishes and prints the data rate
    • investigate and implement
  • converting bags from ROS2 to ROS1 (for kalibr)
  • converting bags from ROS1 to ROS2 (for datasets)

Mavros

  • Mavros works

ROS2 problems and regressions

TUI

  • no roscd
  • calling services got complicated (filling json dictionaries by hand sucks)
  • no colors without exporting a variable (export RCUTILS_COLORIZED_OUTPUT=1)
  • no code completion without modifying the environment
eval "$(/usr/bin/register-python-argcomplete ros2)"
eval "$(/usr/bin/register-python-argcomplete colcon)"
  • when switching RMW, the ROS daemon needs to be killed (pkill -9 -f ros && ros2 daemon stop)
  • code completion suggest only the launch files that end with .launch.py

colcon

Launch

  • respawning does not work
  • not crashing in the launch file will not cause the launch file to crash
  • launch files need to be "grouped" while being included, otherwise the arguments are going to be overlapping
  • when node is started using ros2 launch, it does not have direct access to tty, which make using libraries such as ncurses impossible

Containers

  • The container some times exists with nonzeor exit code, nothing found in backtrace
  • The component can not be killed "nicely" from within itself

FastRTPS

  • Causes the node to freeze (slow down significantly) when service being called from another computer

Zenoh

  • When the router dies before other nodes (e.g., when stopping an integration test), the other nodes crash

Parameters

  • All parameters are shown in rqt_reconfigure and can not be removed, only "greyed out"
  • All components are getting the callback for changing parameters, even for other component's parameters
  • Missing dynamic parameter grouping from rqt_reconfigure
  • Missing enums from dynamic parameters
  • Cryptic error when loading an empty config file
  • rqt_reconfigure does not show any params for the node if there is a param without a value
  • if you set parameter range to, e.g., <0, 100>, it will let through -inf and inf :-D (https://github.com/ros2/rclcpp/issues/2898)
  • Loading of "optional" parameters is broken: They can not be undeclared (https://answers.ros.org/question/395760/) if they were not loaded. This then brakes rqt_reconfigure.

rclcpp

  • the generic topic subscriber now needs to know the topic type in runtime
  • the official Timer implementation is very CPU heavy (5x over ROS1, 4x over custom threaded implementation)
  • comparing incompatible times will throw an exception! this is easy to miss or cause during runtime. Why is C++ library for realtime robotics throwing so many exceptions?
  • service call is by default async, the sync one needs to be implemented manually; the boiler plate code for both is pretty large
  • cannot change period of ROS Timers when they already exist
  • the need to implement your own "onInit()" using a thread or a Timer

rclpy

  • filling Int type into a Double type of a ROS message will cause runtime error
  • no AnyMessage subscriber, you need to know the type when subscribing

Pluginlib

  • Does not kill the plugins nicely when exiting
    • You need to implement a shutdown callback in the parent node and reset the plugin's pointers by hand

rosbag

  • rosbag play does not show the progress anymore

Documentation