Skip to main content
Version: Next

Execute Mission from Goal

Send the platform on an autonomous mission around the map, starting from a specific goal.

Action Name: autonomy/mission_from_goal

Action Type: clearpath_navigation_msgs/action/ExecuteMissionFromGoal

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

from clearpath_navigation_msgs.action import ExecuteMissionFromGoal


class ExecuteMissionFromGoalActionClient(Node):

def __init__(self):
super().__init__('mission_from_goal_action_client')
self._action_client = ActionClient(self, ExecuteMissionFromGoal, 'autonomy/mission_from_goal')

def send_goal(self, order):
goal_msg = ExecuteMissionFronGoal.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 = ExecuteMissionFromGoalActionClient()
# action_client.send_goal()
rclpy.spin(action_client)