这个问题我解决了,规划失败的原因可能是设置复合规划组的目标点不能采用这种方式: move_group.setPoseTarget(left_target_pose, "er3a_end_frame");
move_group.setPoseTarget(right_target_pose, "linkhou_end_frame");(这种应该是moveit1的设置方式)
而是要采用下面这种方式:
//1.构建双机械臂父规划组的控制接口
MoveitControl panda_dual_arms_control(node,"dual_arms","world");//此时传入的规划组就是包含两个机械臂的父规划组
//2.获取机器人模型
moveit::core::RobotModelConstPtr robot_model = panda_dual_arms_control.move_group_->getRobotModel();
//获取左右臂的关节组信息
const moveit::core::JointModelGroup* right_arm_jmg = robot_model->getJointModelGroup("right_arm");
const moveit::core::JointModelGroup* left_arm_jmg = robot_model->getJointModelGroup("left_arm");
//3.设置左右臂的目标关节值
std::vector<double> panda_left_arm_pos1_joint = {0.0,1.2953,1.5527,0.0175,-0.08,-0.0085,0.6243};
std::vector<double> panda_right_arm_pos1_joint = {0.048,1.3343,1.5847,-0.2556,0.1121,0.0,0.0};
//4.创建目标状态
moveit::core::RobotStatePtr goal_state = std::make_sharedmoveit::core::RobotState(robot_model);
//设置左右臂的目标关节值
goal_state->setJointGroupPositions(right_arm_jmg, panda_right_arm_pos1_joint);
goal_state->setJointGroupPositions(left_arm_jmg, panda_left_arm_pos1_joint);
//5.设置目标状态并规划
panda_dual_arms_control.move_group_->setJointValueTarget(*goal_state);
bool success = (panda_dual_arms_control.move_group_->plan(panda_dual_arms_control.plan_path) == moveit::core::MoveItErrorCode::SUCCESS);
//6.执行规划
if (success)
{
RCLCPP_INFO(node->get_logger(), "Planning successful! Executing trajectory.");
panda_dual_arms_control.move_group_->execute(panda_dual_arms_control.plan_path);
}
else
{
RCLCPP_ERROR(node->get_logger(), "Planning failed!");
}
上面是我写的代码,我通过这种方式设置目标点,就可以正常的规划出来复合规划组的路径了。