Moveit中的computeCartesianPaths问题

时间:2019-09-18 08:28:47

标签: ros moveit

我正在尝试使用MoveIt!将机器人操纵器的末端执行器移动通过一系列航路点。最初,我使用move_group.move()命令遍历每个点。我使用的代码如下所示:

ros::init(argc, argv, "manos_openpose");
ros::NodeHandle nh;
ros::AsyncSpinner spinner(1);
spinner.start();
moveit::planning_interface::MoveGroupInterface move_group("arm");

move_group.setPoseReferenceFrame("world");

geometry_msgs::Pose currentPose = move_group.getCurrentPose().pose;

geometry_msgs::Pose target_pose = currentPose;
target_pose.position.z += 0.1;
move_group.setPoseTarget(target_pose);
move_group.move();

target_pose.position.z -= 0.1;
move_group.setPoseTarget(target_pose);
move_group.move();

ros::waitForShutdown();

一切正常。然后,我尝试通过计算经过这些点的笛卡尔路径来复制相同的运动。我使用的代码如下所示:

ros::init(argc, argv, "manos_openpose");
ros::NodeHandle nh;
ros::AsyncSpinner spinner(1);
spinner.start();
moveit::planning_interface::MoveGroupInterface move_group("arm");

move_group.setPoseReferenceFrame("world");

geometry_msgs::Pose initState = move_group.getCurrentPose().pose;
std::vector<geometry_msgs::Pose> waypoints;

geometry_msgs::Pose target_pose = initState;
target_pose.position.z += 0.1;
waypoints.push_back(target_pose);

target_pose.position.z -= 0.1;
waypoints.push_back(target_pose);

moveit::planning_interface::MoveGroupInterface::Plan my_plan;
moveit_msgs::RobotTrajectory trajectory;
const double jump_threshold = 0.0;
const double eef_step = 0.001;
double fraction = move_group.computeCartesianPath(waypoints, eef_step, jump_threshold, trajectory);

my_plan.trajectory_ = trajectory;
move_group.execute(my_plan);

但是,函数computeCartesianPath()返回的值在0.3到0.6之间(每次我运行代码时都返回不同的值)。因此,MoveIt!仅执行与上述函数的返回值相对应的轨迹部分。有什么想法为什么由于航路点有效而不能执行整个轨迹?我正在使用Ubuntu 16.04和ROS Kinetic。在此先感谢您,让我知道是否可以提供其他信息。

0 个答案:

没有答案