Announcing catmux - A helper package to startup complex systems in multiple shells

Hi there,

Have you ever had a larger robotic systems with many different launchfiles to startup? So you end up opening multiple shells and starting launchfiles or nodes in each of them instead of having the comfort of starting just one command.

This is where catmux jumps in. It helps you managing mutliple shells running different commands using tmux without the need of actually knowing too much about tmux. Just create a yaml-file that specifies which commands you want to run in which window and your robot-startup is just one call away.
The package is relatively new, but has been tested in production for two months now, which is why I decided to announce it here. You’ll find it on my github page:

If you think, this could be useful, please have a try and give feedback. Currently. I am especially interested in your opinion whether this package benefits from being a catkin package or if I should rather make it ROS independent and release it as pure python package. Currently the ROS dependency comes in only from being able to pass paths to files using the ‘package://…’ syntax.

If you say, that this package is completely useless, as one can also launch everything in one single launchfile, my daily workflow often requires to inspect output of single nodes separately or easily restart components of a whole systems. Yes, i know that this could all be achieved using the built-in logging helpers and using rosnode kill and so on, but in my opinion it has great benefit to be able to do all this at command line level.

I am also aware that I reimplemented many roslaunch-features such as argument passing, launching things on external machines and so on, which is why I am also very curious whether you think, this is an idiotic idea or if this actually makes sense in your opinion.

That all being said: I’m looking forward to any feedback, might it be here, a gitlab issue or a personal message.

Cheers
Felix

2 Likes

This is probably going to be useful! I’ll try it out in the future and give feedback. :smiley:

I personally think it should be ROS-independent/standalone, even if it’s only used with ROS, because it adds an unnecessary layer. For example, having it under ROS makes the commands quite verbose. For help, rosrun catmux create_session -h is quite long (all catmux commands start with rosrun catmux create_session, so it could really be simplified to just catmux).

This looks interesting, we also use tmux-sessions in a similar way at Magazino. Have you thought about using services so that everything is started automatically when the robot is turned on?

You mean services as in upstart / systemd? As I work at a research lab, most of our robots are multi-purpose with multiple workspaces on them, so this does not make much sense here. But of course nothing stands in the way of using it with those, one would only have to pass the ‘-d’ flag to the run part and that’s it.

This looks interesting, will give it a try.
Are you familiar with rosmon, that also improves output and enables easy restart of individual nodes? That’s in a single shell though.