From d8be0c08b170b00e79014eff264ee1c12dceb379 Mon Sep 17 00:00:00 2001
From: "Carlos A. Orduno" <39749557+orduno@users.noreply.github.com>
Date: Thu, 16 May 2019 10:41:13 -0700
Subject: [PATCH] Update spin and backup bt actions to use ROS2 actions (#725)

* Updating the spin & backup behavior tree action nodes to use ROS2 actions.

* Deleting the stop primitive.
---
 nav2_motion_primitives/src/back_up.cpp           |  6 ++++--
 nav2_motion_primitives/src/spin.cpp              |  2 +-
 nav2_msgs/action/BackUp.action                   |  2 +-
 nav2_msgs/action/Spin.action                     |  2 +-
 nav2_tasks/include/nav2_tasks/back_up_action.hpp | 13 ++++++-------
 nav2_tasks/include/nav2_tasks/spin_action.hpp    |  9 ++++-----
 6 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/nav2_motion_primitives/src/back_up.cpp b/nav2_motion_primitives/src/back_up.cpp
index 00ead9ed..b93ce786 100644
--- a/nav2_motion_primitives/src/back_up.cpp
+++ b/nav2_motion_primitives/src/back_up.cpp
@@ -38,11 +38,13 @@ BackUp::~BackUp()
 
 Status BackUp::onRun(const std::shared_ptr<const BackUpAction::Goal> command)
 {
-  if (command->target_location.y != 0.0 || command->target_location.z != 0.0) {
+  if (command->target.y != 0.0 || command->target.z != 0.0) {
     RCLCPP_INFO(node_->get_logger(), "Backing up in Y and Z not supported, "
       "will only move in X.");
   }
-  command_x_ = command->target_location.x;
+  
+  command_x_ = command->target.x;
+
   if (!robot_->getOdometry(initial_pose_)) {
     RCLCPP_ERROR(node_->get_logger(), "initial robot odom pose is not available.");
     return Status::FAILED;
diff --git a/nav2_motion_primitives/src/spin.cpp b/nav2_motion_primitives/src/spin.cpp
index b49495dc..c395cbcf 100644
--- a/nav2_motion_primitives/src/spin.cpp
+++ b/nav2_motion_primitives/src/spin.cpp
@@ -50,7 +50,7 @@ Spin::~Spin()
 Status Spin::onRun(const std::shared_ptr<const SpinAction::Goal> command)
 {
   double yaw, pitch, roll;
-  tf2::getEulerYPR(command->goal.quaternion, yaw, pitch, roll);
+  tf2::getEulerYPR(command->target.quaternion, yaw, pitch, roll);
 
   if (roll != 0.0 || pitch != 0.0) {
     RCLCPP_INFO(node_->get_logger(), "Spinning on Y and X not supported, "
diff --git a/nav2_msgs/action/BackUp.action b/nav2_msgs/action/BackUp.action
index a5cf8f36..939cfce6 100644
--- a/nav2_msgs/action/BackUp.action
+++ b/nav2_msgs/action/BackUp.action
@@ -1,5 +1,5 @@
 #goal definition
-geometry_msgs/Point target_location
+geometry_msgs/Point target
 ---
 #result definition
 std_msgs/Empty result
diff --git a/nav2_msgs/action/Spin.action b/nav2_msgs/action/Spin.action
index ef3cff2a..f129b992 100644
--- a/nav2_msgs/action/Spin.action
+++ b/nav2_msgs/action/Spin.action
@@ -1,5 +1,5 @@
 #goal definition
-geometry_msgs/QuaternionStamped goal
+geometry_msgs/QuaternionStamped target
 ---
 #result definition
 std_msgs/Empty result
diff --git a/nav2_tasks/include/nav2_tasks/back_up_action.hpp b/nav2_tasks/include/nav2_tasks/back_up_action.hpp
index 5975b959..13e40b97 100644
--- a/nav2_tasks/include/nav2_tasks/back_up_action.hpp
+++ b/nav2_tasks/include/nav2_tasks/back_up_action.hpp
@@ -19,27 +19,26 @@
 #include <memory>
 #include <cmath>
 
-#include "nav2_tasks/bt_conversions.hpp"
 #include "nav2_tasks/bt_action_node.hpp"
-#include "nav2_tasks/back_up_task.hpp"
+#include "nav2_msgs/action/back_up.hpp"
 
 namespace nav2_tasks
 {
 
-class BackUpAction : public BtActionNode<BackUpCommand, BackUpResult>
+class BackUpAction : public BtActionNode<nav2_msgs::action::BackUp>
 {
 public:
   explicit BackUpAction(const std::string & action_name)
-  : BtActionNode<BackUpCommand, BackUpResult>(action_name)
+  : BtActionNode<nav2_msgs::action::BackUp>(action_name)
   {
   }
 
   void on_init() override
   {
     // Populate the input message
-    goal->x = -0.15;
-    goal->y = 0.0;
-    goal->z = 0.0;
+    goal_.target.x = -0.15;
+    goal_.target.y = 0.0;
+    goal_.target.z = 0.0;
   }
 };
 
diff --git a/nav2_tasks/include/nav2_tasks/spin_action.hpp b/nav2_tasks/include/nav2_tasks/spin_action.hpp
index 78948006..f1d27dc3 100644
--- a/nav2_tasks/include/nav2_tasks/spin_action.hpp
+++ b/nav2_tasks/include/nav2_tasks/spin_action.hpp
@@ -19,9 +19,8 @@
 #include <memory>
 #include <cmath>
 
-#include "nav2_tasks/bt_conversions.hpp"
 #include "nav2_tasks/bt_action_node.hpp"
-#include "nav2_tasks/spin_task.hpp"
+#include "nav2_msgs/action/spin.hpp"
 #include "geometry_msgs/msg/quaternion.hpp"
 #include "tf2/LinearMath/Quaternion.h"
 #include "tf2_geometry_msgs/tf2_geometry_msgs.h"
@@ -29,11 +28,11 @@
 namespace nav2_tasks
 {
 
-class SpinAction : public BtActionNode<SpinCommand, SpinResult>
+class SpinAction : public BtActionNode<nav2_msgs::action::Spin>
 {
 public:
   explicit SpinAction(const std::string & action_name)
-  : BtActionNode<SpinCommand, SpinResult>(action_name)
+  : BtActionNode<nav2_msgs::action::Spin>(action_name)
   {
   }
 
@@ -43,7 +42,7 @@ public:
     // Rotate 90deg CCW
     tf2::Quaternion quaternion;
     quaternion.setRPY(0, 0, M_PI / 2);  // yaw, pitch and roll are rotation in z, y, x respectively
-    goal_->quaternion = tf2::toMsg(quaternion);
+    goal_.target.quaternion = tf2::toMsg(quaternion);
   }
 };
 
-- 
GitLab