5. ROS Node¶
In the previous part, we already mentioned the node. In this chapter, we will get into the details.
Let’s start by taking a look at the complete file again:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | """OnboardingNode."""
from simulation.utils.ros_base.node_base import NodeBase
class OnboardingNode(NodeBase):
"""ROS node to teach new members."""
def __init__(self):
"""Initialize the node."""
super().__init__(name="onboarding_node")
# Start running node
# This will do the following
# 1) Call self.start()
# 2) Call self.steer() 60 times a second!
# 3) Call self.stop() when ROS is shutting down
self.run(function=self.steer, rate=60)
def start(self):
"""Start node."""
# When overwriting a function, ensure that the original function (NodeBase.start())
# is also called
super().start()
def stop(self):
"""Turn off node."""
# When overwriting a function, ensure that the original function (NodeBase.stop())
# is also called
super().stop()
def steer(self):
"""Control the car's pose to drive along the road."""
pass
|
The OnboardingNode
class is a subclass of
NodeBase
(Go check it out). This speeds up the
development process by handling all rospy related functions.
5.1. __init__¶
Let’s start by looking at __init__()
:
1 2 3 4 5 6 7 8 9 10 11 12 |
def __init__(self):
"""Initialize the node."""
super().__init__(name="onboarding_node")
# Start running node
# This will do the following
# 1) Call self.start()
# 2) Call self.steer() 60 times a second!
# 3) Call self.stop() when ROS is shutting down
self.run(function=self.steer, rate=60)
|
The function super()
returns the next super class of self
.
(You can take a look at one of our short talks for more: Inheritance in Python.)
In this case, it’s NodeBase
.
The method __init__()
gets called with the argument name.
This introduces the node to ROS and loads parameters specified inside
onboarding_node.launch
.
Next, self.run()
is called.
It is defined within NodeBase
and will correctly start and shutdown the node by calling self.start()
and self.stop()
.
When passing function=self.steer
and rate=60 as arguments,
NodeBase
will also call the function self.steer()
60 times a second.
5.2. start¶
start()
is called before when the node is started.
In this example, nothing happens, but the supers’ start()
method gets called.
At the moment it doesn’t do a thing but you will need to add code here later.
1 2 3 4 5 6 7 |
def start(self):
"""Start node."""
# When overwriting a function, ensure that the original function (NodeBase.start())
# is also called
super().start()
|
5.3. stop¶
stop()
is much like start.
It is called when the node is shutting down.
And again it doesn’t do anything at the moment.
1 2 3 4 5 6 7 |
def stop(self):
"""Turn off node."""
# When overwriting a function, ensure that the original function (NodeBase.stop())
# is also called
super().stop()
|
5.4. steer¶
As described earlier, steer()
is called 60 times a second.
It is empty, but you will add code to it later in this tutorial.
1 2 3 4 |
def steer(self):
"""Control the car's pose to drive along the road."""
pass
|