F4F utilizes and deploys these features in an industrial setting
F4F
mrs_msgs
refactor
building of doxygen docs
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
: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
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'
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
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
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?