diff --git a/src/btree_nodes/src/Tree.cpp b/src/btree_nodes/src/Tree.cpp index bc9d306..c0c9073 100644 --- a/src/btree_nodes/src/Tree.cpp +++ b/src/btree_nodes/src/Tree.cpp @@ -164,7 +164,7 @@ int main(int argc, char **argv) { }).detach(); std::cout << "Looping." << std::endl; - + while (rclcpp::ok()) { blackboardMutex.lock(); actorTree.tickRoot(); diff --git a/src/btree_nodes/src/nodes/ActorMovement.cpp b/src/btree_nodes/src/nodes/ActorMovement.cpp index d84873b..c967ba7 100644 --- a/src/btree_nodes/src/nodes/ActorMovement.cpp +++ b/src/btree_nodes/src/nodes/ActorMovement.cpp @@ -3,6 +3,7 @@ // #include "ActorMovement.h" +#include #include @@ -54,10 +55,16 @@ BT::NodeStatus ActorMovement::onStart() { mutex.unlock(); }; send_goal_options.goal_response_callback = [&](ClientGoalHandle::SharedPtr parameter){ + mutex.lock(); if(!parameter){ std::cout << "ActorMovement rejected by server." << std::endl; result = BT::NodeStatus::FAILURE; + }else{ + if (parameter->get_status() == action_msgs::msg::GoalStatus::STATUS_CANCELED || parameter->get_status() == action_msgs::msg::GoalStatus::STATUS_CANCELING ){ + result = BT::NodeStatus::FAILURE; + } } + mutex.unlock(); }; client->async_send_goal(goal,send_goal_options); diff --git a/src/btree_nodes/src/nodes/MoveConnection.cpp b/src/btree_nodes/src/nodes/MoveConnection.cpp index e55e6c2..36ebe1b 100644 --- a/src/btree_nodes/src/nodes/MoveConnection.cpp +++ b/src/btree_nodes/src/nodes/MoveConnection.cpp @@ -10,6 +10,7 @@ void MoveConnection::planAndExecute(const std::shared_ptr &callback) { std::cout<<"planAndExecute."< lastTarget = nullptr; - std::function lastCallback = [](bool finished) {}; - bool cancelled=false; + std::function lastCallback = [](__attribute__((unused))bool finished) {}; double currentSpeed = 1; std::mutex lock; public: diff --git a/src/btree_nodes/src/nodes/RobotMove.cpp b/src/btree_nodes/src/nodes/RobotMove.cpp index 7c22fd0..4dc85eb 100644 --- a/src/btree_nodes/src/nodes/RobotMove.cpp +++ b/src/btree_nodes/src/nodes/RobotMove.cpp @@ -11,6 +11,7 @@ BT::RobotMove::RobotMove(const std::string &name, const BT::NodeConfiguration &c } BT::NodeStatus BT::RobotMove::onStart() { + std::cout << "Starting RobotMove" << std::endl; std::shared_ptr pose; if(!getInput>("target",pose)){ std::cout << "no target available." << std::endl; @@ -38,8 +39,9 @@ BT::NodeStatus BT::RobotMove::onRunning() { } void BT::RobotMove::onHalted() { + std::cout << "Halting RobotMove" << std::endl; connection->get()->stop(); - asyncResult=NodeStatus::IDLE; + asyncResult=NodeStatus::FAILURE; } BT::PortsList BT::RobotMove::providedPorts() { diff --git a/src/ros_actor_action_server/src/Server.cpp b/src/ros_actor_action_server/src/Server.cpp index 2555f24..ece8c8a 100644 --- a/src/ros_actor_action_server/src/Server.cpp +++ b/src/ros_actor_action_server/src/Server.cpp @@ -80,7 +80,7 @@ int main(int argc, char **argv) { FeedbackMessage currentFeedback; ActionMessage currentAction; - std::thread([feedbackQueue, ¤tAnimationGoalPtr, ¤tMovementGoalPtr, ¤tFeedback, ¤tAction] { + std::thread([feedbackQueue, ¤tAnimationGoalPtr, ¤tMovementGoalPtr, ¤tFeedback] { while (true) { FeedbackMessage newFeedback; if(mq_receive(feedbackQueue, (char *)&newFeedback, sizeof(ros_actor_message_queue_msgs::FeedbackMessage), nullptr)==-1){