Skip to main content
Version: Next

Undock (Local)

Undock the robot. The shold ideally be docked when this is run for successfull operation.

Action Name: autonomy/undock/local

Action Type: clearpath_dock_msgs/action/Undock

import rclpy
from rclpy.action import ActionClient
from rclpy.node import Node

from clearpath_navigation_msgs.action import Undock


class UndockActionClient(Node):

def __init__(self):
super().__init__('local_undock_action_client')
self._action_client = ActionClient(self, Undock, 'autonomy/dock/local')

def send_goal(self, order):
goal_msg = Undock.Goal()

# TODO: populate goal message

self._action_client.wait_for_server()

self._send_goal_future = self._action_client.send_goal_async(goal_msg, feedback_callback=self.feedback_callback)

self._send_goal_future.add_done_callback(self.goal_response_callback)

def goal_response_callback(self, future):
goal_handle = future.result()
if not goal_handle.accepted:
self.get_logger().info('Goal rejected :(')
return

self.get_logger().info('Goal accepted :)')

self._get_result_future = goal_handle.get_result_async()
self._get_result_future.add_done_callback(self.get_result_callback)

def get_result_callback(self, future):
result = future.result().result
self.get_logger().info('Result: {0}'.format(result.sequence))
rclpy.shutdown()

def feedback_callback(self, feedback_msg):
feedback = feedback_msg.feedback
self.get_logger().info('Received feedback: {0}'.format(feedback.partial_sequence))


if __name__ == '__main__':
rclpy.init(args=args)
action_client = UndockActionClient()
# action_client.send_goal()
rclpy.spin(action_client)