diff --git a/robossembler/behavior_trees_xml/atomic_skills_xml/simple_sequence.xml b/robossembler/behavior_trees_xml/atomic_skills_xml/simple_sequence.xml index c98461f..ec0981d 100644 --- a/robossembler/behavior_trees_xml/atomic_skills_xml/simple_sequence.xml +++ b/robossembler/behavior_trees_xml/atomic_skills_xml/simple_sequence.xml @@ -4,7 +4,7 @@ - + diff --git a/robossembler/src/behavior_tree_nodes/atomic_skills/MoveToPose.cpp b/robossembler/src/behavior_tree_nodes/atomic_skills/MoveToPose.cpp index 94f5900..9a4bdec 100644 --- a/robossembler/src/behavior_tree_nodes/atomic_skills/MoveToPose.cpp +++ b/robossembler/src/behavior_tree_nodes/atomic_skills/MoveToPose.cpp @@ -1,6 +1,7 @@ #include "robossembler_interfaces/action/moveit_send_pose.hpp" #include "behaviortree_cpp_v3/bt_factory.h" #include "behavior_tree/BtAction.hpp" +#include "geometry_msgs/msg/pose_stamped.hpp" using namespace BT; using MoveToPoseAction = robossembler_interfaces::action::MoveitSendPose; @@ -21,12 +22,14 @@ class MoveToPose : public BtAction MoveToPoseAction::Goal populate_goal() override { - MoveToPoseAction::Goal goal; + //MoveToPoseAction::Goal goal; + auto goal = MoveToPoseAction::Goal(); //auto goal = std::make_shared(); goal.robot_name = robot_name_; - goal.end_effector_acceleration = 1; - goal.end_effector_velocity = 1; + goal.end_effector_acceleration = 1.0; + goal.end_effector_velocity = 1.0; goal.target_pose = target_pose_; + RCLCPP_INFO(_node->get_logger(), "Goal populated"); return goal; } diff --git a/robossembler/src/bt_checker.cpp b/robossembler/src/bt_checker.cpp index d112f41..d18852a 100644 --- a/robossembler/src/bt_checker.cpp +++ b/robossembler/src/bt_checker.cpp @@ -41,8 +41,10 @@ void BtEngine::run() RCLCPP_INFO_STREAM( this->get_logger(), "Running tree at frequency " << 1.0 / loop_timeout_.count() * 1e3 << "Hz"); - tree_->tickRoot(); - loop_rate.sleep(); + while(rclcpp::ok()){ + tree_->tickRoot(); + loop_rate.sleep(); + } } void BtEngine::add_groot_monitoring() diff --git a/robossembler_interfaces/CMakeLists.txt b/robossembler_interfaces/CMakeLists.txt index d86ffcc..80455a8 100644 --- a/robossembler_interfaces/CMakeLists.txt +++ b/robossembler_interfaces/CMakeLists.txt @@ -18,11 +18,13 @@ endif() # find dependencies find_package(ament_cmake REQUIRED) find_package(rosidl_default_generators REQUIRED) +find_package(geometry_msgs REQUIRED) rosidl_generate_interfaces(${PROJECT_NAME} "action/MoveitSendPose.action" "msg/ActionFeedbackStatusConstants.msg" "msg/ActionResultStatusConstants.msg" + DEPENDENCIES geometry_msgs ) if(BUILD_TESTING) diff --git a/robossembler_servers/CMakeLists.txt b/robossembler_servers/CMakeLists.txt index 2acae6b..07540fc 100644 --- a/robossembler_servers/CMakeLists.txt +++ b/robossembler_servers/CMakeLists.txt @@ -51,7 +51,7 @@ if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() endif() -# +#[[ add_library(move_topose_action SHARED src/move_topose_action_server.cpp ) @@ -62,17 +62,15 @@ target_include_directories(move_topose_action PRIVATE ament_target_dependencies(move_topose_action ${deps}) rclcpp_components_register_node(move_topose_action PLUGIN "robossembler_actions::MoveToPoseActionServer" EXECUTABLE move_topose_action_server) - -#[[ +]] +# add_executable(move_topose_action_server src/move_topose_action_server.cpp) target_include_directories(move_topose_action_server PRIVATE include) ament_target_dependencies(move_topose_action_server ${deps}) -]] + install( TARGETS move_topose_action_server - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin + DESTINATION lib/${PROJECT_NAME} ) ament_package() diff --git a/robossembler_servers/src/move_topose_action_server.cpp b/robossembler_servers/src/move_topose_action_server.cpp index 3454f9f..0388ff5 100644 --- a/robossembler_servers/src/move_topose_action_server.cpp +++ b/robossembler_servers/src/move_topose_action_server.cpp @@ -18,6 +18,7 @@ // moveit libs #include "moveit/move_group_interface/move_group_interface.h" #include "moveit/planning_interface/planning_interface.h" + /* #include #include @@ -39,12 +40,14 @@ public: using MoveitSendPose = robossembler_interfaces::action::MoveitSendPose; //explicit MoveToPoseActionServer(const rclcpp::Node::SharedPtr& node) - explicit MoveToPoseActionServer(const rclcpp::NodeOptions & options = rclcpp::NodeOptions()) - : Node("move_topose_action_server", options)//, node_(node) + explicit MoveToPoseActionServer(const rclcpp::Node::SharedPtr &node) : Node("move_topose"), node_(node) { using namespace std::placeholders; this->action_server_ = rclcpp_action::create_server( - this, + this->get_node_base_interface(), + this->get_node_clock_interface(), + this->get_node_logging_interface(), + this->get_node_waitables_interface(), "move_topose", std::bind(&MoveToPoseActionServer::goal_callback, this, _1, _2), std::bind(&MoveToPoseActionServer::cancel_callback, this, _1), @@ -56,12 +59,13 @@ private: rclcpp_action::Server::SharedPtr action_server_; using ServerGoalHandle = rclcpp_action::ServerGoalHandle; + rclcpp_action::GoalResponse goal_callback( const rclcpp_action::GoalUUID & uuid, std::shared_ptr goal) { RCLCPP_INFO(this->get_logger(), "Received goal request for robot [%s] with Pose [%f, %f, %f, %f, %f, %f, %f]", - goal->robot_name, goal->target_pose.pose.position.x, goal->target_pose.pose.position.y, goal->target_pose.pose.position.z, + goal->robot_name.c_str(), goal->target_pose.pose.position.x, goal->target_pose.pose.position.y, goal->target_pose.pose.position.z, goal->target_pose.pose.orientation.x, goal->target_pose.pose.orientation.y, goal->target_pose.pose.orientation.z, goal->target_pose.pose.orientation.w); (void)uuid; @@ -89,15 +93,18 @@ private: RCLCPP_INFO(this->get_logger(), "Executing goal"); const auto goal = goal_handle->get_goal(); auto result = std::make_shared(); - + RCLCPP_INFO(this->get_logger(), "Goal and Result Initialised"); moveit::planning_interface::MoveGroupInterface::Options move_group_options(goal->robot_name, "robot_description"); + RCLCPP_INFO(this->get_logger(), "move_group_options"); moveit::planning_interface::MoveGroupInterface move_group_interface(node_, goal->robot_name); moveit::core::RobotState start_state(*move_group_interface.getCurrentState()); - + RCLCPP_INFO(this->get_logger(), "Moveit2 Initialised"); move_group_interface.setStartState(start_state); - move_group_interface.setPoseTarget(goal->target_pose.pose); + //move_group_interface.setStartStateToCurrentState(); + move_group_interface.setPoseTarget(goal->target_pose); move_group_interface.setMaxVelocityScalingFactor(goal->end_effector_velocity); move_group_interface.setMaxAccelerationScalingFactor(goal->end_effector_acceleration); + RCLCPP_INFO(this->get_logger(), "move_group ready to plan"); moveit::planning_interface::MoveGroupInterface::Plan plan; bool success = (move_group_interface.plan(plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS); @@ -124,16 +131,19 @@ private: }// namespace robossembler_actions -RCLCPP_COMPONENTS_REGISTER_NODE(robossembler_actions::MoveToPoseActionServer) - -/* -int main(int argc, char * argv[]) +int main(int argc, char ** argv) { rclcpp::init(argc, argv); rclcpp::NodeOptions node_options; node_options.automatically_declare_parameters_from_overrides(true); - rclcpp::Node::SharedPtr node = rclcpp::Node::make_shared("move_topose", "", node_options); - rclcpp::spin(node); - //rclcpp::shutdown(); + auto node = rclcpp::Node::make_shared("move_topose", node_options); + auto action_server = std::make_shared(node); + + //rclcpp::spin(action_server); + + rclcpp::executors::MultiThreadedExecutor executor; + executor.add_node(action_server); + executor.spin(); + return 0; -}*/ +} \ No newline at end of file