The project is becoming bigger, more contributors are approaching it and the code is becoming a big mess with incoherent patterns/configs/etc. I think it's time we make it a bit more serious-looking so that it's easier for new people to approach it rather than trying to hack the main.
Changes
Unified way to define app modes
Centralized viewport for app modes that require it
Dynamic help page that shows key mapping and description of the current mode
Centralized input system, which consistently works across app modes
More info shown at the top of the screen
initial pose allows now to send a generic pose
What's missing
Proper documentation: I'd like to add docstrings everywhere but first I want to see if everybody is ok with the current design. A separate PR can take care of the doc
Config refactor: I recycled the existing config. We should probably consistently divide it in general config and app mode-specific config (already partially done by @MaxiMaerz for the teleop mode for example)
Listeners refactor: I'm not sure I like a struct to aggregate all the listeners. I currently pulled out the image-related ones, but we should see how this evolves in the future. The minimum-diff solution would be to just rename it in ViewportListeners and handle all those required for a specific mode separately
Multiple topic support for send pose: this should be super easy, but I thought it was out of the scope of this PR
Motivation
The project is becoming bigger, more contributors are approaching it and the code is becoming a big mess with incoherent patterns/configs/etc. I think it's time we make it a bit more serious-looking so that it's easier for new people to approach it rather than trying to hack the main.
Changes
What's missing