This example package is meant to explore the possibilities of ROS2 from the point of view of current ROS1 features and how the ROS1 feature translate into the new ROS2 architecture. We investigate the aspects that are currently utilized in MRS UAV System with the intention of a potential future transition.
Everything is a component. We happily nodelet everything in ROS1, so why otherwise?
- ServiceClientExample - periodically calls a service
- TODO retrieving result synchronously. Some solutions are available, none work for me within a component
- TODO slow and irregular publishing (Timer-driven) with multi-threaded executor
- PublisherExample - periodically publishes
- TODO slow and irregular publishing (Timer-driven) with multi-threaded executor
- ServiceServerExample - getting called, ok
- SubscriberExample - subscribes, ok
- TimerExample - runs multiple timers in parallel
- TODO timer callbacks are not executed in parallel even with multi-threaded container (with multi-threaded executor)
- ParamsExample - load params from yaml and launch file
- param server callback is hooked up
- TODO nested params do not work
- TODO investigate the
ros__parameters:
namespace, which does not seem to be neccessary
./tmux/start.sh
(change the sourced workspace path in tmux/session.yml
)
- mrs_msgs were ported to ROS2
- ROS bridge installs, compiles, runs (scripts here)
- TODO check performance and load with images
- TODO check performance and load high publish rates
- Why are most examples on still use
main()
when everything in ROS2 should be a component (nodelet)?- https://index.ros.org/doc/ros2/Tutorials/Composition/
"Note: It is still possible to use the node-like style of “writing your own main” but for the common case it is not recommended."
- ComponentContainer
- seems like the multi-threaded container (with multi-threaded executor) fails to execute callbacks (at least Timer callbacks) in parallel
- multi-threaded composer (with multi-threaded executor) produces very uneven and slow rates of timers, Publishing is slow in Docker with MutliThreadedExecutor #1487 (December, 2020)
- CMakeLists.txt
- basics are fine
- TODO building (and using) custom libraries
- TODO building standalone executable nodelets (should be possible)
- Launch files
- they are in python now link
- remapping, params, nodelets
- TODO connecting to existing component containers (nodelet managers)
- TODO launch prefixes (e.g., launching with GDB)
- Subscribers - work fine, not a big difference from ROS1
- TODO still problem with multiple callbacks in parallel?
- Publishers - work fine, not a big difference from ROS1
- Service client
- it is asynchronous only!!!!
- how to make it behave synchronously? wrapper (only in standalone node)
- Service server - works fine
- Timers - single timer works fine, similarly to ROS1 Timers
- TODO still problem with multiple timers in parallel, recent (last active 2021/01/15) and related issues Avoid timers to be executed twice in the multithreaded executor #1328 and Allow timers to keep up the intended rate in MultiThreadedExecutor #1516 tell me that it is not settled how they should behave ?!?
- Parameters
- basic params work from yaml and launch
- Beware! loading an empty yaml file causes a long and criptic error. Solution: add some random unsued param.
- TODO fix nested parameters
- DRS - has a direct implementation in the default parameters
- callback hooked to the external change of the parameters works
- validation of the parameters has to be performed in our code -> we will need a custom wrapper for that, otherwise madness
- ROS2 rqt_reconfigure is super buggy and wonky, this issue is especially hellish
- it shows the node's parameters sometimes, seems random
- why is the terminal output monochromatic? I want my colors back...
-
export RCUTILS_COLORIZED_OUTPUT=1
-
- ROS Time
- TODO duration, rate, sleep
- Transformations
- TODO
- Tests
- TODO
- Pluginlib
- TODO
- Lifecycles (new feature)
- TODO