本文整理汇总了C++中actionlib::SimpleActionClient::getState方法的典型用法代码示例。如果您正苦于以下问题:C++ SimpleActionClient::getState方法的具体用法?C++ SimpleActionClient::getState怎么用?C++ SimpleActionClient::getState使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类actionlib::SimpleActionClient
的用法示例。
在下文中一共展示了SimpleActionClient::getState方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: turn
void turn() {
turtlebot_actions::TurtlebotMoveGoal goal;
goal.forward_distance = 0;
goal.turn_distance = M_PI;
action_client.waitForServer();
action_client.sendGoal(goal);
//wait for the action to return
bool finished_before_timeout = action_client.waitForResult(
ros::Duration(30.0));
if (finished_before_timeout) {
actionlib::SimpleClientGoalState state = action_client.getState();
ROS_INFO("Action finished: %s", state.toString().c_str());
} else
ROS_INFO("Action did not finish before the time out.");
}
示例2: actualizeGoal
void actualizeGoal(ros::NodeHandle& nh,
actionlib::SimpleActionClient<arm_navigation_msgs::MoveArmAction>& client,
arm_navigation_msgs::MoveArmGoal goal) {
if (nh.ok())
{
bool finished_within_time = false;
client.sendGoal(goal);
finished_within_time = client.waitForResult(ros::Duration(200.0));
if (!finished_within_time)
{
client.cancelGoal();
ROS_INFO("Timed out achieving goal");
}
else
{
actionlib::SimpleClientGoalState state = client.getState();
bool success = (state == actionlib::SimpleClientGoalState::SUCCEEDED);
if(success)
ROS_INFO("Action finished: %s",state.toString().c_str());
else
ROS_INFO("Action failed: %s",state.toString().c_str());
}
}
}
示例3: move_straight
void move_straight() {
float current_angle = 0;
float desired_angle = 0;
/*
if (map->frames.size() > 0) {
Sophus::SE3f position =
map->frames[map->frames.size() - 1]->get_pos();
Eigen::Vector3f current_heading = position.unit_quaternion()
* Eigen::Vector3f::UnitZ();
current_angle = std::atan2(-current_heading(1), current_heading(0));
desired_angle = std::asin(position.translation()(1)/10.0);
}*/
turtlebot_actions::TurtlebotMoveGoal goal;
goal.forward_distance = 25.0;
goal.turn_distance = current_angle - desired_angle;
action_client.waitForServer();
action_client.sendGoal(goal);
//wait for the action to return
bool finished_before_timeout = action_client.waitForResult(
ros::Duration(500.0));
if (finished_before_timeout) {
actionlib::SimpleClientGoalState state = action_client.getState();
ROS_INFO("Action finished: %s", state.toString().c_str());
} else
ROS_INFO("Action did not finish before the time out.");
map->save("corridor_map");
}
示例4: pickAndPlace
void pickAndPlace(const geometry_msgs::Pose& start_pose, const geometry_msgs::Pose& end_pose)
{
ROS_INFO("[pick and place] Picking. Also placing.");
simple_arm_server::MoveArmGoal goal;
simple_arm_server::ArmAction action;
simple_arm_server::ArmAction grip;
/* open gripper */
grip.type = simple_arm_server::ArmAction::MOVE_GRIPPER;
grip.move_time.sec = 1.0;
grip.command = gripper_open;
goal.motions.push_back(grip);
/* arm straight up */
tf::Quaternion temp;
temp.setRPY(0,1.57,0);
action.goal.orientation.x = temp.getX();
action.goal.orientation.y = temp.getY();
action.goal.orientation.z = temp.getZ();
action.goal.orientation.w = temp.getW();
/* hover over */
action.goal.position.x = start_pose.position.x;
action.goal.position.y = start_pose.position.y;
action.goal.position.z = z_up;
action.move_time.sec = 0.25;
goal.motions.push_back(action);
/* go down */
action.goal.position.z = start_pose.position.z;
action.move_time.sec = 1.5;
goal.motions.push_back(action);
/* close gripper */
grip.type = simple_arm_server::ArmAction::MOVE_GRIPPER;
grip.command = gripper_closed;
grip.move_time.sec = 1.0;
goal.motions.push_back(grip);
/* go up */
action.goal.position.z = z_up;
action.move_time.sec = 1.0;
goal.motions.push_back(action);
/* hover over */
action.goal.position.x = end_pose.position.x;
action.goal.position.y = end_pose.position.y;
action.goal.position.z = z_up;
action.move_time.sec = 1.0;
goal.motions.push_back(action);
/* go down */
action.goal.position.z = end_pose.position.z;
action.move_time.sec = 1.5;
goal.motions.push_back(action);
/* open gripper */
grip.command = gripper_open;
goal.motions.push_back(grip);
/* go up */
action.goal.position.z = z_up;
action.move_time.sec = 1.0;
goal.motions.push_back(action);
goal.header.frame_id = arm_link;
client_.sendGoal(goal);
ROS_INFO("[pick and place] Sent goal. Waiting.");
client_.waitForResult(ros::Duration(30.0));
ROS_INFO("[pick and place] Received result.");
if (client_.getState() == actionlib::SimpleClientGoalState::SUCCEEDED)
as_.setSucceeded(result_);
else
{
ROS_INFO("Actual state: %s", client_.getState().toString().c_str());
as_.setAborted(result_);
}
}
示例5: executeGrasps
//.........这里部分代码省略.........
// If this flag is set to true, the action of planning &
// executing is allowed to look around (move sensors) if
// it seems that not enough information is available about
// the environment
options.look_around = false;
// If this value is positive, the action of planning & executing
// is allowed to look around for a maximum number of attempts;
// If the value is left as 0, the default value is used, as set
// with dynamic_reconfigure
//int32 look_around_attempts
// If set and if look_around is true, this value is used as
// the maximum cost allowed for a path to be considered executable.
// If the cost of a path is higher than this value, more sensing or
// a new plan needed. If left as 0.0 but look_around is true, then
// the default value set via dynamic_reconfigure is used
//float64 max_safe_execution_cost
// If the plan becomes invalidated during execution, it is possible to have
// that plan recomputed and execution restarted. This flag enables this
// functionality
options.replan = false;
// The maximum number of replanning attempts
//int32 replan_attempts
// ---------------------------------------------------------------------------------------------
// Create and populate the goal
moveit_msgs::PickupGoal goal;
// An action for picking up an object
// The name of the object to pick up (as known in the planning scene)
goal.target_name = chosen_block_object_.id;
// which group should be used to plan for pickup
goal.group_name = PLANNING_GROUP_NAME;
// which end-effector to be used for pickup (ideally descpending from the group above)
goal.end_effector = EE_NAME;
// a list of possible grasps to be used. At least one grasp must be filled in
goal.possible_grasps.resize(possible_grasps.size());
goal.possible_grasps = possible_grasps;
// the name that the support surface (e.g. table) has in the collision map
// can be left empty if no name is available
//string collision_support_surface_name
// whether collisions between the gripper and the support surface should be acceptable
// during move from pre-grasp to grasp and during lift. Collisions when moving to the
// pre-grasp location are still not allowed even if this is set to true.
goal.allow_gripper_support_collision = true;
// The names of the links the object to be attached is allowed to touch;
// If this is left empty, it defaults to the links in the used end-effector
//string[] attached_object_touch_links
// Optional constraints to be imposed on every point in the motion plan
//Constraints path_constraints
// an optional list of obstacles that we have semantic information about
// and that can be touched/pushed/moved in the course of grasping;
// CAREFUL: If the object name 'all' is used, collisions with all objects are disabled during the approach & lift.
//string[] allowed_touch_objects
// The maximum amount of time the motion planner is allowed to plan for
goal.allowed_planning_time = 10.0; // seconds?
// Planning options
goal.planning_options = options;
//ROS_INFO_STREAM_NAMED("pick_place_moveit","Pause");
//ros::Duration(5.0).sleep();
// ---------------------------------------------------------------------------------------------
// Send the grasp to move_group/Pickup
ROS_INFO_STREAM_NAMED("pick_place_moveit","Sending pick action to move_group/Pickup");
movegroup_action_.sendGoal(goal);
if(!movegroup_action_.waitForResult(ros::Duration(20.0)))
{
ROS_INFO_STREAM_NAMED("pick_place_moveit","Returned early?");
return false;
}
if (movegroup_action_.getState() == actionlib::SimpleClientGoalState::SUCCEEDED)
{
ROS_INFO_STREAM_NAMED("pick_place_moveit","Plan successful!");
}
else
{
ROS_ERROR_STREAM_NAMED("pick_place_moveit","FAILED: " << movegroup_action_.getState().toString() << ": " << movegroup_action_.getState().getText());
return false;
}
return true;
}
示例6: PickPlaceMoveItServer
// Constructor
PickPlaceMoveItServer(const std::string name):
nh_("~"),
movegroup_action_("pickup", true),
clam_arm_client_("clam_arm", true),
ee_marker_is_loaded_(false),
block_published_(false),
action_server_(name, false)
{
base_link_ = "/base_link";
// -----------------------------------------------------------------------------------------------
// Adding collision objects
collision_obj_pub_ = nh_.advertise<moveit_msgs::CollisionObject>(COLLISION_TOPIC, 1);
// -----------------------------------------------------------------------------------------------
// Connect to move_group/Pickup action server
while(!movegroup_action_.waitForServer(ros::Duration(4.0))){ // wait for server to start
ROS_INFO_STREAM_NAMED("pick_place_moveit","Waiting for the move_group/Pickup action server");
}
// ---------------------------------------------------------------------------------------------
// Connect to ClamArm action server
while(!clam_arm_client_.waitForServer(ros::Duration(5.0))){ // wait for server to start
ROS_INFO_STREAM_NAMED("pick_place_moveit","Waiting for the clam_arm action server");
}
// ---------------------------------------------------------------------------------------------
// Create planning scene monitor
planning_scene_monitor_.reset(new planning_scene_monitor::PlanningSceneMonitor(ROBOT_DESCRIPTION));
if (planning_scene_monitor_->getPlanningScene())
{
//planning_scene_monitor_->startWorldGeometryMonitor();
//planning_scene_monitor_->startSceneMonitor("/move_group/monitored_planning_scene");
//planning_scene_monitor_->startStateMonitor("/joint_states", "/attached_collision_object");
}
else
{
ROS_FATAL_STREAM_NAMED("pick_place_moveit","Planning scene not configured");
}
// ---------------------------------------------------------------------------------------------
// Load the Robot Viz Tools for publishing to Rviz
rviz_tools_.reset(new block_grasp_generator::RobotVizTools(RVIZ_MARKER_TOPIC, EE_GROUP, PLANNING_GROUP_NAME, base_link_, planning_scene_monitor_));
// ---------------------------------------------------------------------------------------------
// Register the goal and preempt callbacks
action_server_.registerGoalCallback(boost::bind(&PickPlaceMoveItServer::goalCB, this));
action_server_.registerPreemptCallback(boost::bind(&PickPlaceMoveItServer::preemptCB, this));
action_server_.start();
// Announce state
ROS_INFO_STREAM_NAMED("pick_place_moveit", "Server ready.");
ROS_INFO_STREAM_NAMED("pick_place_moveit", "Waiting for pick command...");
// ---------------------------------------------------------------------------------------------
// Send home
ROS_INFO_STREAM_NAMED("pick_place_moveit","Sending home");
clam_arm_goal_.command = clam_msgs::ClamArmGoal::RESET;
clam_arm_client_.sendGoal(clam_arm_goal_);
while(!clam_arm_client_.getState().isDone() && ros::ok())
ros::Duration(0.1).sleep();
// ---------------------------------------------------------------------------------------------
// Send fake command
fake_goalCB();
}