Planning for two arms does not work in service call
I am receiving pose from a service call, then I am trying to plan first using right arm and then using left arm if the right arm is not successful, the code works if I set the pose manually but if I receive the pose using service call, it only plans for right arm but not left arm .
Why service call is causing issue here?
Here is the code:
#include <ros/ros.h>
#include "pr2_package/PoseSend.h"
#include <iostream>
using namespace std;
// MoveIt!
#include <moveit/planning_scene_monitor/planning_scene_monitor.h>
#include <moveit/planning_scene_interface/planning_scene_interface.h>
#include <moveit/move_group_interface/move_group.h>
#include <geometric_shapes/solid_primitive_dims.h>
static const std::string ROBOT_DESCRIPTION="robot_description";
void openGripper_right(trajectory_msgs::JointTrajectory& posture){
posture.joint_names.resize(6);
posture.joint_names[0] = "r_gripper_joint";
posture.joint_names[1] = "r_gripper_motor_screw_joint";
posture.joint_names[2] = "r_gripper_l_finger_joint";
posture.joint_names[3] = "r_gripper_r_finger_joint";
posture.joint_names[4] = "r_gripper_r_finger_tip_joint";
posture.joint_names[5] = "r_gripper_l_finger_tip_joint";
posture.points.resize(1);
posture.points[0].positions.resize(6);
posture.points[0].positions[0] = 1;
posture.points[0].positions[1] = 1.0;
posture.points[0].positions[2] = 0.477;
posture.points[0].positions[3] = 0.477;
posture.points[0].positions[4] = 0.477;
posture.points[0].positions[5] = 0.477;
}
void closedGripper_right(trajectory_msgs::JointTrajectory& posture){
posture.joint_names.resize(6);
posture.joint_names[0] = "r_gripper_joint";
posture.joint_names[1] = "r_gripper_motor_screw_joint";
posture.joint_names[2] = "r_gripper_l_finger_joint";
posture.joint_names[3] = "r_gripper_r_finger_joint";
posture.joint_names[4] = "r_gripper_r_finger_tip_joint";
posture.joint_names[5] = "r_gripper_l_finger_tip_joint";
posture.points.resize(1);
posture.points[0].positions.resize(6);
posture.points[0].positions[0] = 0;
posture.points[0].positions[1] = 0;
posture.points[0].positions[2] = 0.002;
posture.points[0].positions[3] = 0.002;
posture.points[0].positions[4] = 0.002;
posture.points[0].positions[5] = 0.002;
}
void openGripper_left(trajectory_msgs::JointTrajectory& posture){
posture.joint_names.resize(6);
posture.joint_names[0] = "l_gripper_joint";
posture.joint_names[1] = "l_gripper_motor_screw_joint";
posture.joint_names[2] = "l_gripper_l_finger_joint";
posture.joint_names[3] = "l_gripper_r_finger_joint";
posture.joint_names[4] = "l_gripper_r_finger_tip_joint";
posture.joint_names[5] = "l_gripper_l_finger_tip_joint";
posture.points.resize(1);
posture.points[0].positions.resize(6);
posture.points[0].positions[0] = 1;
posture.points[0].positions[1] = 1.0;
posture.points[0].positions[2] = 0.477;
posture.points[0].positions[3] = 0.477;
posture.points[0].positions[4] = 0.477;
posture.points[0].positions[5] = 0.477;
}
void closedGripper_left(trajectory_msgs::JointTrajectory& posture){
posture.joint_names.resize(6);
posture.joint_names[0] = "l_gripper_joint";
posture.joint_names[1] = "l_gripper_motor_screw_joint";
posture.joint_names[2] = "l_gripper_l_finger_joint";
posture.joint_names[3] = "l_gripper_r_finger_joint";
posture.joint_names[4] = "l_gripper_r_finger_tip_joint";
posture.joint_names[5] = "l_gripper_l_finger_tip_joint";
posture.points.resize(1);
posture.points[0].positions.resize(6);
posture.points[0].positions[0] = 0;
posture.points[0].positions[1] = 0;
posture.points[0].positions[2] = 0.002;
posture.points[0].positions[3] = 0.002;
posture.points[0].positions[4] = 0.002;
posture.points[0].positions[5] = 0.002;
}
void pick_left(moveit::planning_interface::MoveGroup &group_l, geometry_msgs::PoseStamped q)
{
ros::WallDuration(1.0).sleep();
std::vector<moveit_msgs::Grasp> grasps;
moveit_msgs::Grasp g;
g.pre_grasp_approach.direction.vector.x = 1.0;
g.pre_grasp_approach.direction.header.frame_id = "l_wrist_roll_link";
g.pre_grasp_approach.min_distance = 0.2;
g.pre_grasp_approach.desired_distance = 0.4;
g.post_grasp_retreat.direction.header.frame_id = "base_footprint";
g.post_grasp_retreat.direction.vector.z = 1.0;
g ...