Unreal sim package
- Simulator node
- HW APi
- rename package
- dynparam mgr
Basic functionality works
ROS2 bridge (Hugues)
- Is it alive? Can it be used by people who want to run their ROS1 node agains the ROS2 system?
- investigate
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 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)
MRS UAV testing
- the abstraction library
- tests
- example tests using the lib
HW Api
- plugin interface
- example plugin
- plugin manager
- doxygen
MRS UAV Controllers
- MpcController
- Se3Controller
- Failsafe controller
- Midair activation controller
- Tests
Dynmgr
- TODO callbacks
- TODO ranges
MRS UAV Trackers
- Mpc tracker
- Line tracker
- Midair activation tracker
- Landoff tracker
- Joy tracker (keep?)
- Speed tracker (keep?)
- FlipTracker {keep?)
- Tests
Parakh's propulsion model
Remote controller HW abstracton
UTM zone handling
Diagnostics manager?
- talk to Vojta and get an idea how it works
- Maybe Matous should do it?
Safety area manager
- refactor
- incorporate
- tests
MRS Errorgraph viewer
- refactor
- incorporate
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
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?
ROS2 problems and regressions
Martin Pecka's notes: https://gist.github.com/peci1/52aea17faf5f7e33c8096b75dc9bcd2f
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
- no colors
- no build-in profiles (mixin exists, but they need to be setup, are stored externally in a file)
colcon buildmakes new workspace if not called in the root of the workspace- including headers does not prioritize the ones in the workspace (https://colcon.readthedocs.io/en/released/user/overriding-packages.html#sort-include-directories-according-to-the-workspace-order)
- no direct control of the number of build threads without exporting an environment variable (export MAKEFLAGS=-j3)
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
- launch files can not be launched using a relative path, they need to be part of a package installed in the install space
Containers
- The container some times exists with nonzero exit code, nothing found in backtrace. This often happens during sig-terming the node, so checking the return code in the integration tests is not viable.
- 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
- bug with data leakage, should be fixed with the release of rmw_zenoh=0.2.8.
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
- update! can be solved elegantly by having the node as a member variable of a "Wrapper", e.g., mrs_lib::Node.
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
- https://docs.ros.org/en/jazzy/Concepts/Intermediate/About-Domain-ID.html
- nice philosofical info about the Domain ID, but ... how do you set it? There is no practical example. Is it an env variable? Is it and argument for the node? Who know?
Rviz
- Not able to visualize compressed images in Jazzy
Image Transport
- python implementation missing on Jazzy
MRS Errorgraph
- refactor
- incorporate
Signed disarming
ROS2 examples (Jazzy)
- 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 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)
- dynparam mgr
- service server handler
- 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?
Probably rewrite from scratch↩︎
mrs_msgs
- refactor
- building of doxygen docs
Linux Setup (Ubuntu 24.04)
- nvim works
- coc.nvim replaced ycm
- ROS integration works
- i3 works
- tmux and other tools ok
- automatic installation works
F4F utilizes and deploys these features in an industrial setting
F4F
External dependencies
- ROS
- Eigen
Object tracking example
- refactor
Libcamera ROS driver
- there should be official ROS2 branch
- rafactor
Hailo AI adapter
- refactor
- update base image builder
Libcamera driver library
- refactor (probably stays the same)
Bluefox driver (2 weeks)
-
does it have a newer ROS2 branch?
-
refactor
F4F software installation guide
- update
F4F documentation
- update
ICM IMU driver
- refactor
START
Basic robofly example
- basic example
Portainer stacks
- refactor
Landing estimator
- refactor
Realsense driver (1 week)
- does it have a newer ROS2 branch?
- refactor
Camera base
- does it have an equivalent in ROS2
- refactor (incoroporated into Bluefox2)
F4F
Basler driver
- does it have a newer ROS2 branch?
- beware the multithreading problem
- refactor
Ouster driver
- does it have a newer ROS2 branch?
- refactor
- TODOs after the camp
Observations
Pixhawk 6x with GPS (but fying with VIO)
- missing
mavros/local_position/odomwhich is a source forhw_api/velocity
Pixhawk 4 with GPS
- missing
mavros/odometry/inwhich is a source forhw_api/orientation
Livox360 driver
- does it have a newer ROS2 branch?
- refactor
Luxonis driver
- fork or wrap
- fixed launch files
RPLidar driver
- does it have a newer ROS2 branch?
- are we using it?
- refactor
April tag detector
- find and adapt ROS2 version
F4F
F4F
Gazebo simulation package
- refactor
Landing controller
- refactor
- refactor ROS bindings and integration
- udpate examples
F4F
- refactor ROS bindings and integration
- udpate examples
CI Scripts
- set of common scripts used by the buildfarm and by separate repositories' actions
- update and refactor
Buildfarm
- creating of ROS2 PPAs
- revisiting bloom
- refactoring dockerized compilation pipeline
- on-push builds
- test pipeline
- coverage pipeline
F4F
F4F
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
Replace it with something better
Is there a ROS2 branch?
open_mins
- refactor
mrs_mins_estimator_plugin
- refactor
Do we have our own changes to the ROS1 branch
Refactor to ROS2 ourselves
Let's refactor the ROS1 version into ROS2 ourselves
Let's adopt the ROS2 version and update it with our changes
Let's refactor the ROS1 version into ROS2 ourselves
Summer school real-world deployment
- update and refactor
Summer school simulation and wrappers
- update and refactor
Test the ROS2 branch as it is
Check if the ROS2 branch needs the changes as well
Does it perform well?
Do we need the changes?
Is it better to merge them into the ROS2 version?
Decide if we should fix the ROS2 branch or to port the ROS1 (that worked) to ROS2
Let's adopt the ROS2 branch
Well then?
Let's adopt the ROS2 branch and fix it's problems
mrs_aloam_core
- refactor
- remove Gazebo
- update and refactor
- build from scratch without the MRS UAV System with just the Multirotor Sim lib
- remove Gazebo
- update and refactor
START
Do we want to keep the software?
mrs_point_lio_core
- refactor
mrs_aloam_estimator_plugin
- refactor
mrs_open_vins_estimator_plugin
- refactor
- tested in simulation
- tested in realworld
mrs_vins_imu_filter
- refactor
open_vins
- refactor
mrs_open_vins_core
- refactor
mrs_vins_republisher
- refactor
mrs_liosam_estimator_plugin
- refactor
liosam
- refactor
mrs_liosam_core
- refactor
aloam_slam
- refactor
mrs_aloam_core
- refactor
MRS UAV Modules metapackage
- refactor
point_lio
- refactor
mrs_point_lio_estimator_plugin
- refactor
mrs_hector_core
- refactor
mrs_hector_estimator_plugin
- refactor
hector_slam
- refactor
MRS Serial
- refactor
- important for RTK
MRS Bumper
- refactor
Hector + core
- does it have a newer ROS2 branch?
- is anybody using it?
- refactor
MINS + core
- does it have a newer ROS2 branch?
- refactor
MRS PCL Tools
- refactor
- depends on Ouster, should we rethink this?
livox_ros_driver2
- refactor
Path loader
- refactor
Trajectory loader
- refactor
MRS Rviz plugins (Afzal)
- not essential, should be possible
- refactor
Optic flow
- refactor if yes
MRS LLCP (Richard)
- refactor
LIOSAM + core
- does it have a newer ROS2 branch?
- refactor
POINT LIO + core
- does it have a newer ROS2 branch?
- refactor
F4F
MRS Utils
- refactor
Gazebo custom drone example
- refactor
PX4 SITL
- updgrade to the newest reasonable PX4 version -> 1.16.0
Drone spawner
- keep the functionalities
- dockerization?
Gazebo
- refactor the metapackage
- launch files
- configs
ALOAM + core
- does it have a newer ROS2 branch?
- refactor
OpenVins + Core
- does it have a newer ROS2 branch?
- refactor
MRS Modules msgs
- refactor
- building of doxygen docs
F4F
F4F
Gazebo common & extra resources
- custom plugins
- custom worlds
- tf publishing
UVDAR Gazebo plugin
- Refactor
Sensor drivers (px4_sitl_gazebo)
- custom motor plugin
- our custom fixes to the magnetometer (did not use inclination)
- custom fixes to lidar
- custom fixes to GPS plugin
Robofly's UVDAR
- rafactor
UVDAR calibration routine
- Refactor
UVDAR Core
- Refactor
- Who is going to do it?
- Are there any dependencies to real sensor drivers?
F4F
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
Stacks
- refactor/create example stacks
MRS UAV System metarepositories
- refactor
MRS UAV Bluetotth
- refactor
MRS UAV USB Configurator
- refactor
MRS UAV Gazebo testing
- refactor
CPP
- edge detector
Python
- blob detector
- with venv
Mavros
- Mavros works
Octomap server (Valentin)
- refactor
- merge changes from SPRIND
Octomap planner
- refactor
- merge changes from SPRIND
Python
- sweeping generator
SubT Planning lib
- refactor
- might not contain ROS
F4F
MRS Coppelia simulation
- I would keep it as an example
- refactor
MRS UAV Deployment
- the package builds
- refactor config files
- example realworld tmux sessions
PX4 Hw API
- Refactor
- Test with a real drone first (if the comunications work as expected)
MRS Octomap Tools
- refactor
- is it used?
CPP
- waypoint flier
- waypoint flier native
- tracker plugin
- controller plugin
- estimator plugin
- pluginlib example
MRS DJI Tello API
- refactor
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)
Trajectory generation
- Refactor
- Tests
- path random flier
MRS UAV Autostart
- Refactor
- Tests
NLOPT solver ROS wrapper
- refactor
MRS UAV Status
- Acquisition node
- Presentation node
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 Development
- colon alias for ease of use
- custom roscd alias
- pre-sourcing of a selected workspace for speedup of the process
MRS UAV Estimators
- AGL estimators
- Altitude estimators
- Heading estimators
- Lateral estimators
- State estimators
- TODO unify healthcheck timers
- Tests
mrs_uav_core package
- get_public_params.py
- core lauch
- rviz refactor script
Colcon workspace
- how does the
mixinfeature work
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)
- Documentation: add information about Zenoh
makeprg compilation of a package in neovim
:makein vim should triggercolcon buiildof 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
Ouster driver
- TF frames should be prefixed by "$UAV_NAME/"
- The parameters should not use the "/$UAV_NAME/ouster" prefix
- Set as default: timestamp_mode: 'TIME_FROM_ROS_TIME'
PX4 API
- replicate the UTM fix https://github.com/ctu-mrs/mrs_uav_px4_api/pull/3
ControlManager diagnostics
- trackers and controllers should be able to invoke publishing of ControlManager's diagnostics when there is a significant change in the state
Basic tests sometimes produce segfaults
- added more prints to min_height_check
- seems to fail near the end, when flying normally check should pass
- check later if it fails again
- e.g., min_height_check, goto_fcu_service
[Docu] State machine diagrams of internal processes
- takeoff
- landing
- landing home
- escalating failsafe
- failsafe
- eland
- trajectory following
- rc remote mode
Incorporate Yaml remapper from Jakub
- use in core packages
- use in example packages
We are not using Service Server Handler, why?
Explicitly set callback groups
- core
- flightforge
- hw api
MRS package version printed during system startup
- done
Luxonis's depth-AI ROS
- fork or create a wrapper package and fix the launch files
- it is publishing outside of its namespace
Moving init timer back to constructor [Filip]
- done
Pages to fact-check
ROS2 Gazebo
https://ctu-mrs.github.io/docs/simulations/gazebo/custom_world (don't know if the mrs_gazebo_static_transform_republisher plugin is still needed
https://ctu-mrs.github.io/docs/simulations/gazebo/drone_spawner (PX4 firmware and mavros details for the current ros2 setup)
https://ctu-mrs.github.io/docs/simulations/gazebo/gazebo_video (where to get the static_camera from, are the commands best practices)
https://ctu-mrs.github.io/docs/simulations/gazebo/real_world_elevation (where to get sun model from? and new .glb file format)