diff --git a/src/btree_nodes/src/nodes/ActorAnimation.cpp b/src/btree_nodes/src/nodes/ActorAnimation.cpp index 847c2fe..9484d18 100644 --- a/src/btree_nodes/src/nodes/ActorAnimation.cpp +++ b/src/btree_nodes/src/nodes/ActorAnimation.cpp @@ -44,12 +44,16 @@ BT::NodeStatus ActorAnimation::onStart() { client->async_send_goal(goal,send_goal_options); + result = BT::NodeStatus::RUNNING; return BT::NodeStatus::RUNNING; } BT::NodeStatus ActorAnimation::onRunning() { mutex.lock(); auto status = result; + if(result != BT::NodeStatus::RUNNING){ + result = BT::NodeStatus::IDLE; + } mutex.unlock(); return status; } diff --git a/src/btree_nodes/src/nodes/OffsetPose.cpp b/src/btree_nodes/src/nodes/OffsetPose.cpp index bca28bb..236ffc8 100644 --- a/src/btree_nodes/src/nodes/OffsetPose.cpp +++ b/src/btree_nodes/src/nodes/OffsetPose.cpp @@ -3,14 +3,16 @@ // #include "OffsetPose.h" +#include +#include BT::PortsList BT::OffsetPose::providedPorts() { return { - InputPort>("input", "initial position as Position2D"), + InputPort>("input", "initial position as Pose"), InputPort>("offset", "offset as a Point"), InputPort>("orientation", "rotation of resulting pose as Quaternion"), - InputPort>("output", "generated new pose") + OutputPort>("output", "generated new pose") }; } @@ -18,28 +20,30 @@ BT::OffsetPose::OffsetPose(const std::string &name, const BT::NodeConfiguration &config) : SyncActionNode(name, config) {} BT::NodeStatus BT::OffsetPose::tick() { - + std::shared_ptr pose; if (!getInput("input", pose)) { return NodeStatus::FAILURE; } + + auto resultPose = std::make_shared(*pose); std::shared_ptr quaternion; if(getInput("orientation", quaternion)) { - pose->orientation.w = quaternion->w; - pose->orientation.x = quaternion->x; - pose->orientation.y = quaternion->y; - pose->orientation.z = quaternion->z; + resultPose->orientation.w = quaternion->w; + resultPose->orientation.x = quaternion->x; + resultPose->orientation.y = quaternion->y; + resultPose->orientation.z = quaternion->z; } std::shared_ptr offset; if(getInput("offset", offset)) { - pose->position.x += offset->x; - pose->position.y += offset->y; - pose->position.z += offset->z; + resultPose->position.x += offset->x; + resultPose->position.y += offset->y; + resultPose->position.z += offset->z; } - setOutput>("output", pose); + setOutput("output", resultPose); return BT::NodeStatus::SUCCESS; } diff --git a/src/btree_nodes/src/nodes/RobotMove.cpp b/src/btree_nodes/src/nodes/RobotMove.cpp index 4dc85eb..0614ca7 100644 --- a/src/btree_nodes/src/nodes/RobotMove.cpp +++ b/src/btree_nodes/src/nodes/RobotMove.cpp @@ -13,7 +13,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)){ + if(!getInput("target",pose)){ std::cout << "no target available." << std::endl; return NodeStatus::FAILURE; } @@ -22,8 +22,10 @@ BT::NodeStatus BT::RobotMove::onStart() { asyncResult = NodeStatus::RUNNING; connection->get()->planAndExecute(pose,[this](bool finished){ if(finished){ + printf("Finished move."); asyncResult = NodeStatus::SUCCESS; } else { + printf("Failed move."); asyncResult = NodeStatus::FAILURE; } });