ROS actionlib start
This commit is contained in:
parent
e2aa178cac
commit
ed2f2c95c7
@ -16,19 +16,25 @@
|
|||||||
|
|
||||||
import rclpy
|
import rclpy
|
||||||
from rclpy.node import Node
|
from rclpy.node import Node
|
||||||
|
from rclpy.action import ActionServer
|
||||||
|
|
||||||
|
# How to use, please refer to:
|
||||||
|
# Topic:
|
||||||
|
# - topic_talker.py
|
||||||
|
# - topic_listener.py
|
||||||
|
# Service:
|
||||||
|
# - service_host.py
|
||||||
|
# - service_client.py
|
||||||
|
# Action:
|
||||||
|
# - action_server.py
|
||||||
|
# - action_client.py
|
||||||
|
|
||||||
# How to use:
|
|
||||||
# from pubsub_library import MinimalPublisher
|
|
||||||
# from pubsub_library import MinimalSubscriber
|
|
||||||
# minimal_publisher = MinimalPublisher(NODE_NAME='minimal_pub', TOPIC_NAME='user_controller', MSG_TYPE=Usercontroller, MSG_PERIOD=0.5)
|
|
||||||
# minimal_subscriber = MinimalSubscriber(NODE_NAME='minimal_sub', TOPIC_NAME='epos_feedback', MSG_TYPE=Eposreturn)
|
|
||||||
# See --> talker.py, listener.py
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Definition of Parent Classes
|
# Definition of Parent Classes
|
||||||
#******************************************************************************#
|
#******************************************************************************#
|
||||||
# TOPICS
|
# TOPIC
|
||||||
#******************************************************************************#
|
#******************************************************************************#
|
||||||
|
|
||||||
class MinimalPublisher(Node):
|
class MinimalPublisher(Node):
|
||||||
@ -175,7 +181,6 @@ class MinimalServiceProvider(Node):
|
|||||||
response.success = True # Change this to fit your service type
|
response.success = True # Change this to fit your service type
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
#******************************************************************************#
|
#******************************************************************************#
|
||||||
|
|
||||||
class MinimalServiceClientAsync(Node):
|
class MinimalServiceClientAsync(Node):
|
||||||
@ -224,3 +229,84 @@ class MinimalServiceClientAsync(Node):
|
|||||||
return self.future.done(), response # response is of type "<service_type_name>.Response()"
|
return self.future.done(), response # response is of type "<service_type_name>.Response()"
|
||||||
else:
|
else:
|
||||||
return self.future.done(), None
|
return self.future.done(), None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#******************************************************************************#
|
||||||
|
# ACTIONS
|
||||||
|
#******************************************************************************#
|
||||||
|
|
||||||
|
class MinimalActionServer(Node):
|
||||||
|
""" Minimal Action Server Class
|
||||||
|
Inputs:
|
||||||
|
* NODE_NAME: string
|
||||||
|
* ACT_NAME: string
|
||||||
|
* ACT_TYPE: action type class
|
||||||
|
* act_callback_input: action callback function
|
||||||
|
|
||||||
|
Return:
|
||||||
|
*
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, NODE_NAME, ACT_NAME, ACT_TYPE, act_callback_input=None):
|
||||||
|
self.NODE_NAME = NODE_NAME
|
||||||
|
self.ACT_NAME = ACT_NAME
|
||||||
|
self.ACT_TYPE = ACT_TYPE
|
||||||
|
# Check if user passed callback function
|
||||||
|
if act_callback_input == None:
|
||||||
|
self.execute_callback= self.std_act_callback
|
||||||
|
else:
|
||||||
|
self.execute_callback = act_callback_input
|
||||||
|
|
||||||
|
# Init above laying class "Node" (super class)
|
||||||
|
super().__init__(self.NODE_NAME)
|
||||||
|
print("\tStarting Action Server:\t%s"%(self.ACT_NAME))
|
||||||
|
self._action_server = ActionServer(self, self.ACT_TYPE, self.ACT_NAME, self.execute_callback)
|
||||||
|
|
||||||
|
|
||||||
|
# standard action callback
|
||||||
|
def std_act_callback(self, goal_handle):
|
||||||
|
""" Standard Action Callback Method
|
||||||
|
|
||||||
|
Replace this method by inputting a custom callback method using 'act_callback_input'.
|
||||||
|
This method MUST return a variable of the type 'action result',
|
||||||
|
eg. result = ACTION_TYPE.Result()
|
||||||
|
"""
|
||||||
|
self.get_logger().info('Executing goal...')
|
||||||
|
#################
|
||||||
|
# Action Method #
|
||||||
|
# here #
|
||||||
|
#################
|
||||||
|
result = self.ACT_TYPE.Result()
|
||||||
|
return result
|
||||||
|
|
||||||
|
#******************************************************************************#
|
||||||
|
|
||||||
|
class MinimalActionClient(Node):
|
||||||
|
""" Minimal Action Client
|
||||||
|
Inputs:
|
||||||
|
* NODE_NAME: string
|
||||||
|
* ACT_NAME: string
|
||||||
|
* ACT_TYPE: action type class
|
||||||
|
* act_callback_input: action callback function
|
||||||
|
|
||||||
|
Return:
|
||||||
|
*
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, NODE_NAME, ACT_NAME, ACT_TYPE, act_callback_input=None):
|
||||||
|
self.NODE_NAME = NODE_NAME
|
||||||
|
self.ACT_NAME = ACT_NAME
|
||||||
|
self.ACT_TYPE = ACT_TYPE
|
||||||
|
|
||||||
|
# Init above laying class "Node" (super class)
|
||||||
|
super().__init__(self.NODE_NAME)
|
||||||
|
print("\tStarting Action Client for:\t%s"%(self.ACT_NAME))
|
||||||
|
self._action_client = ActionClient(self, self.ACT_TYPE, self.ACT_NAME)
|
||||||
|
|
||||||
|
def send_goal(self, input):
|
||||||
|
return
|
||||||
|
|
||||||
|
def abort_goal(self):
|
||||||
|
return
|
Loading…
Reference in New Issue
Block a user