Action Server Fix (Incomplete)

This commit is contained in:
Ilya Uraev 2022-02-07 18:34:33 +04:00
parent 7ca3fbeb1d
commit 7b73c48f03
6 changed files with 43 additions and 28 deletions

View file

@ -4,7 +4,7 @@
<BehaviorTree ID="BehaviorTree"> <BehaviorTree ID="BehaviorTree">
<Sequence> <Sequence>
<Action ID="GetEntityState" server_name="/get_entity_state" server_timeout="10" PartName="rasmt"/> <Action ID="GetEntityState" server_name="/get_entity_state" server_timeout="10" PartName="rasmt"/>
<Action ID="MoveToPose" server_name="/move_topose" server_timeout="10" cancel_timeout="5" arm_group="${arg0}" /> <Action ID="MoveToPose" server_name="/move_topose" server_timeout="10" cancel_timeout="5" arm_group="rasmt_arm_group" />
</Sequence> </Sequence>
</BehaviorTree> </BehaviorTree>
<!-- ////////// --> <!-- ////////// -->

View file

@ -1,6 +1,7 @@
#include "robossembler_interfaces/action/moveit_send_pose.hpp" #include "robossembler_interfaces/action/moveit_send_pose.hpp"
#include "behaviortree_cpp_v3/bt_factory.h" #include "behaviortree_cpp_v3/bt_factory.h"
#include "behavior_tree/BtAction.hpp" #include "behavior_tree/BtAction.hpp"
#include "geometry_msgs/msg/pose_stamped.hpp"
using namespace BT; using namespace BT;
using MoveToPoseAction = robossembler_interfaces::action::MoveitSendPose; using MoveToPoseAction = robossembler_interfaces::action::MoveitSendPose;
@ -21,12 +22,14 @@ class MoveToPose : public BtAction<MoveToPoseAction>
MoveToPoseAction::Goal populate_goal() override MoveToPoseAction::Goal populate_goal() override
{ {
MoveToPoseAction::Goal goal; //MoveToPoseAction::Goal goal;
auto goal = MoveToPoseAction::Goal();
//auto goal = std::make_shared<MoveToPoseAction::Goal>(); //auto goal = std::make_shared<MoveToPoseAction::Goal>();
goal.robot_name = robot_name_; goal.robot_name = robot_name_;
goal.end_effector_acceleration = 1; goal.end_effector_acceleration = 1.0;
goal.end_effector_velocity = 1; goal.end_effector_velocity = 1.0;
goal.target_pose = target_pose_; goal.target_pose = target_pose_;
RCLCPP_INFO(_node->get_logger(), "Goal populated");
return goal; return goal;
} }

View file

@ -41,9 +41,11 @@ void BtEngine::run()
RCLCPP_INFO_STREAM( RCLCPP_INFO_STREAM(
this->get_logger(), "Running tree at frequency " << this->get_logger(), "Running tree at frequency " <<
1.0 / loop_timeout_.count() * 1e3 << "Hz"); 1.0 / loop_timeout_.count() * 1e3 << "Hz");
while(rclcpp::ok()){
tree_->tickRoot(); tree_->tickRoot();
loop_rate.sleep(); loop_rate.sleep();
} }
}
void BtEngine::add_groot_monitoring() void BtEngine::add_groot_monitoring()
{ {

View file

@ -18,11 +18,13 @@ endif()
# find dependencies # find dependencies
find_package(ament_cmake REQUIRED) find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED) find_package(rosidl_default_generators REQUIRED)
find_package(geometry_msgs REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME} rosidl_generate_interfaces(${PROJECT_NAME}
"action/MoveitSendPose.action" "action/MoveitSendPose.action"
"msg/ActionFeedbackStatusConstants.msg" "msg/ActionFeedbackStatusConstants.msg"
"msg/ActionResultStatusConstants.msg" "msg/ActionResultStatusConstants.msg"
DEPENDENCIES geometry_msgs
) )
if(BUILD_TESTING) if(BUILD_TESTING)

View file

@ -51,7 +51,7 @@ if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED) find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies() ament_lint_auto_find_test_dependencies()
endif() endif()
# #[[
add_library(move_topose_action SHARED add_library(move_topose_action SHARED
src/move_topose_action_server.cpp src/move_topose_action_server.cpp
) )
@ -62,17 +62,15 @@ target_include_directories(move_topose_action PRIVATE
ament_target_dependencies(move_topose_action ${deps}) ament_target_dependencies(move_topose_action ${deps})
rclcpp_components_register_node(move_topose_action PLUGIN "robossembler_actions::MoveToPoseActionServer" EXECUTABLE move_topose_action_server) 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) add_executable(move_topose_action_server src/move_topose_action_server.cpp)
target_include_directories(move_topose_action_server PRIVATE include) target_include_directories(move_topose_action_server PRIVATE include)
ament_target_dependencies(move_topose_action_server ${deps}) ament_target_dependencies(move_topose_action_server ${deps})
]]
install( install(
TARGETS move_topose_action_server TARGETS move_topose_action_server
ARCHIVE DESTINATION lib DESTINATION lib/${PROJECT_NAME}
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
) )
ament_package() ament_package()

View file

@ -18,6 +18,7 @@
// moveit libs // moveit libs
#include "moveit/move_group_interface/move_group_interface.h" #include "moveit/move_group_interface/move_group_interface.h"
#include "moveit/planning_interface/planning_interface.h" #include "moveit/planning_interface/planning_interface.h"
/* /*
#include <tf2/LinearMath/Quaternion.h> #include <tf2/LinearMath/Quaternion.h>
#include <tf2_geometry_msgs/tf2_geometry_msgs.h> #include <tf2_geometry_msgs/tf2_geometry_msgs.h>
@ -39,12 +40,14 @@ public:
using MoveitSendPose = robossembler_interfaces::action::MoveitSendPose; using MoveitSendPose = robossembler_interfaces::action::MoveitSendPose;
//explicit MoveToPoseActionServer(const rclcpp::Node::SharedPtr& node) //explicit MoveToPoseActionServer(const rclcpp::Node::SharedPtr& node)
explicit MoveToPoseActionServer(const rclcpp::NodeOptions & options = rclcpp::NodeOptions()) explicit MoveToPoseActionServer(const rclcpp::Node::SharedPtr &node) : Node("move_topose"), node_(node)
: Node("move_topose_action_server", options)//, node_(node)
{ {
using namespace std::placeholders; using namespace std::placeholders;
this->action_server_ = rclcpp_action::create_server<MoveitSendPose>( this->action_server_ = rclcpp_action::create_server<MoveitSendPose>(
this, this->get_node_base_interface(),
this->get_node_clock_interface(),
this->get_node_logging_interface(),
this->get_node_waitables_interface(),
"move_topose", "move_topose",
std::bind(&MoveToPoseActionServer::goal_callback, this, _1, _2), std::bind(&MoveToPoseActionServer::goal_callback, this, _1, _2),
std::bind(&MoveToPoseActionServer::cancel_callback, this, _1), std::bind(&MoveToPoseActionServer::cancel_callback, this, _1),
@ -56,12 +59,13 @@ private:
rclcpp_action::Server<MoveitSendPose>::SharedPtr action_server_; rclcpp_action::Server<MoveitSendPose>::SharedPtr action_server_;
using ServerGoalHandle = rclcpp_action::ServerGoalHandle<MoveitSendPose>; using ServerGoalHandle = rclcpp_action::ServerGoalHandle<MoveitSendPose>;
rclcpp_action::GoalResponse goal_callback( rclcpp_action::GoalResponse goal_callback(
const rclcpp_action::GoalUUID & uuid, const rclcpp_action::GoalUUID & uuid,
std::shared_ptr<const MoveitSendPose::Goal> goal) std::shared_ptr<const MoveitSendPose::Goal> goal)
{ {
RCLCPP_INFO(this->get_logger(), "Received goal request for robot [%s] with Pose [%f, %f, %f, %f, %f, %f, %f]", 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.x, goal->target_pose.pose.orientation.y, goal->target_pose.pose.orientation.z,
goal->target_pose.pose.orientation.w); goal->target_pose.pose.orientation.w);
(void)uuid; (void)uuid;
@ -89,15 +93,18 @@ private:
RCLCPP_INFO(this->get_logger(), "Executing goal"); RCLCPP_INFO(this->get_logger(), "Executing goal");
const auto goal = goal_handle->get_goal(); const auto goal = goal_handle->get_goal();
auto result = std::make_shared<MoveitSendPose::Result>(); auto result = std::make_shared<MoveitSendPose::Result>();
RCLCPP_INFO(this->get_logger(), "Goal and Result Initialised");
moveit::planning_interface::MoveGroupInterface::Options move_group_options(goal->robot_name, "robot_description"); 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::planning_interface::MoveGroupInterface move_group_interface(node_, goal->robot_name);
moveit::core::RobotState start_state(*move_group_interface.getCurrentState()); 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.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.setMaxVelocityScalingFactor(goal->end_effector_velocity);
move_group_interface.setMaxAccelerationScalingFactor(goal->end_effector_acceleration); move_group_interface.setMaxAccelerationScalingFactor(goal->end_effector_acceleration);
RCLCPP_INFO(this->get_logger(), "move_group ready to plan");
moveit::planning_interface::MoveGroupInterface::Plan plan; moveit::planning_interface::MoveGroupInterface::Plan plan;
bool success = (move_group_interface.plan(plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS); bool success = (move_group_interface.plan(plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);
@ -124,16 +131,19 @@ private:
}// namespace robossembler_actions }// 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::init(argc, argv);
rclcpp::NodeOptions node_options; rclcpp::NodeOptions node_options;
node_options.automatically_declare_parameters_from_overrides(true); node_options.automatically_declare_parameters_from_overrides(true);
rclcpp::Node::SharedPtr node = rclcpp::Node::make_shared("move_topose", "", node_options); auto node = rclcpp::Node::make_shared("move_topose", node_options);
rclcpp::spin(node); auto action_server = std::make_shared<robossembler_actions::MoveToPoseActionServer>(node);
//rclcpp::shutdown();
//rclcpp::spin(action_server);
rclcpp::executors::MultiThreadedExecutor executor;
executor.add_node(action_server);
executor.spin();
return 0; return 0;
}*/ }