How can I run a node from Code?
Hi all,
I'm trying to start a node from other by code using Python but I don't know how. I use Ros kinetic.
Thanks!!
ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
Hi all,
I'm trying to start a node from other by code using Python but I don't know how. I use Ros kinetic.
Thanks!!
This is possible, but I'm going to ask why you want to do this? It's quite rare for this to be necessary. Can you use a launch file to achieve the same thing, if so then I'd highly recommend you to use that option.
Any operating system command can be executed from python using the os.system("your system command") function. So you can use this to start a node the same way that you do manually from the command line:
os.system("rosrun <package_name> <node_name> <arguments. . .>")
Importantly though this command will block until the node has completed and shut down which is probably not what you want to happen. I'm guessing you want to start a node up, and then continue with the rest of your python code while this new node is also running.
To start a node in the background you'll need to use os.spawnv() to start the node and store it's process id so that your python code can kill this sub-process before it closes:
node_pid = os.spawnv(P_NOWAIT, "rosrun", ["<package_name>", "node_name>", "<arguments. . .>"])
# Some python code to execute while the new node is running
so.kill(node_pid, signal.SIGINT)
There is a danger that if your python node crashes then the node you started in the background will keep running and will still need to be killed manually. So I'd just emphasise if you can use launch files instead then use them and only manage the processes like this yourself if you can't possibly avoid it.
Hope this helps.
Any idea how to do this in c++? Icouldnt find a solution to the non_blocking version. Help would be appreciated.
The roslaunch API is in python and you can wrap it yourself to call from code natively. https://docs.ros.org/api/roslaunch/ht...
Asked: 2018-11-03 19:01:29 -0600
Seen: 1,823 times
Last updated: Nov 05 '18
Overview of classes that are available in a package or nodes
combining launch files doesn't give same behavior: order / timing of ik solver
How to spawn multiple nodes in same C++ process
Is it possible to have 2 nodehandlers for a single node
launching nodes in a new terminal with roslaunch
problem with client node [closed]
Multiple nodes publish to one topic, all fields in msg are not populated at once
rosserial communication between bluetooth and arduino
Start a node from python code - rospy equivalence rosrun - rosgui qt