Open mwcondino opened 11 months ago
I actually didn't realize we had ProcessStdin
. So maybe there is a bug here.
But I will say that this whole thing is an anti-pattern, in my opinion. The point of launch
is to run multiple processes, so which process should stdin be forwarded to? It's totally unclear. I guess we could have some kind of 'marker' where one and only one process can process stdin, but at that point why not just open another terminal?
But maybe others have a different opinion.
I don't think I made my use case super clear - the example launch is a simplified version of a launch file I'd like to use to start up some nodes while also playing back bag data. I would find it convenient to be able to pause/start the bag process at will.
I suppose I could run that in a separate terminal, but there's some default args I will always want to pass to the bag process, and it's convenient to do that from a launch file. Furthermore, there are certain topics I'd like to conditionally remap based on launch configurations, and this becomes really clunky without a dedicated script to generate the playback command.
On Fri, Sep 15, 2023, 5:26 AM Chris Lalancette @.***> wrote:
I actually didn't realize we had ProcessStdin. So maybe there is a bug here.
But I will say that this whole thing is an anti-pattern, in my opinion. The point of launch is to run multiple processes, so which process should stdin be forwarded to? It's totally unclear. I guess we could have some kind of 'marker' where one and only one process can process stdin, but at that point why not just open another terminal?
But maybe others have a different opinion.
— Reply to this email directly, view it on GitHub https://github.com/ros2/launch/issues/735#issuecomment-1721193196, or unsubscribe https://github.com/notifications/unsubscribe-auth/AIW4W2IO3OCHIIG7AL5SG73X2RCQLANCNFSM6AAAAAA4ZCFETI . You are receiving this because you authored the thread.Message ID: @.***>
Hi @mwcondino,
I am in the same situation, having a lunch file containing, among other things, a ros2 bag play with a bunch of remappings and the like. Like you, stdin is disabled so I cannot pause/resume/ at will.
I did find a work-around using rqt. Just type rqt and a GUI will pop up. Then go to the tab Plugins->Services->Service Caller. In the Service drop-down list find /rosbag2_player/pause (or resume or whatever) and then click on the Call button. And presto! You have a Pause/Resume :)
The downside is that it's quite cumbersome since you have to select the action each time from a drop-down list. But it is not that bad if you only have to do it rarely. Perhaps there is a way to make a list of services you want to call and just double-click them... Maybe....
Hope this is useful.
Bug report
Required Info:
ros-humble-launch=1.0.3-1jammy.20221019.125253
. Also checked on1.0.4-1jammy.20230718.195748
Steps to reproduce issue
Run this file with
ros2 launch ./test.launch.py
test.launch.py:
Once that is running, press space - the expected behavior is that the space character would be forwarded to the
ExecuteProcess
action which is playing back the bag (any bag will work for this test, so long as the name matches up).However, when I press space (or really any character), I get this warning:
Expected behavior
The
ProcessStdin
event should forward data to the matching process.Actual behavior
It looks like there's just a warning message. From looking into the code here, it appears as if the function is not really implemented, unless I'm missing something.
I think that
ExecuteProcess
may need some updating to correctly pipe data passed into the__on_process_stdin_event
function to the underlying subprocess.