Цель PositionConstraint для манипулятора робота: невозможно построить представление цели - PullRequest
0 голосов
/ 30 мая 2018

У меня есть настройка ROS индиго, Беседка под Ubuntu 14.04.Под ROS узел moveit работает.Робот-манипулятор IRB120 моделируется и стоит в беседке.У меня есть узел, который использует moveit (узел move_group) для планирования пути (траектории) для пункта назначения , который хочет Боб.Запланированная траектория будет отправлена ​​в Беседку, которая будет показана позже.

Существует два подхода, которые Боб может использовать для описания пункта назначения:

  1. Углы каждого суставарука: используя массив из шести чисел (для шести суставов руки), определяется форма каждого сустава и голени.Этот подход работает отлично.Используется класс JointConstraint:

    double goal_poses [] = {0,52, 0,50, 0,73, -0,02, 0,31, 6,83};for (int i = 0; i <6; i ++) // перебираем суставы руки.{moveit_msgs :: JointConstraint jc;вес j = 1,0;jc.tolerance_above = 0,0001;jc.tolerance_below = 0,0001;jc.position = goal_poses [i];jc.joint_name = names [i];goal_constraint.joint_constraints.push_back (х);} </p>

  2. Определите местоположение и направление только конечного эффектора.Я не могу использовать этот подход.Я использовал PositionConstraint класс.

Короче говоря, проблема : я могу описать пункт назначения, используя класс JointConstraint, но я не знаю, какопишите это в PositionConstraint классе. Как описать цель, просто указав, где должен быть конечный эффектор?

Как описать цель в формате PositionConstraint: (Я указываю, где должен быть конечный эффектори какова должна быть его ориентация.)

  moveit_msgs::PositionConstraint pc;
  pc.weight = 1.0;
  geometry_msgs::Pose p;
  p.position.x = 0.3; // not sure if feasible position
  p.position.y = 0.3; // not sure if feasible position
  p.position.z = 0.3; // not sure if feasible position
  pc.link_name="tool0";
  p.orientation.x = 0;
  p.orientation.y = 0;
  p.orientation.z = 0;
  p.orientation.w = 1;
  pc.constraint_region.mesh_poses.push_back(p);
  goal_constraint.position_constraints.push_back(pc);

Но когда запрос отправлен, сервер отвечает:

[ERROR] [1527689581.951677797, 295.242000000]: Unable to construct goal representation

Примечание:

В обоих случаях ядобавьте goal_constraint к trajectory_request:

trajectory_request.goal.request.goal_constraints.push_back(goal_constraint);
// add other details to trajectory_request here...

trajectory_request для отправки на move_group.(опубликовав trajectory_request по теме /move_group/goal)

1 Ответ

0 голосов
/ 03 сентября 2018

Несколько иное решение решило проблему описания цели с ориентацией конечного эффектора и местоположением :

Вместо публикации цели на topic для другого узла, чтобы проанализировать и прочитатьмы можем использовать библиотечную функцию moveit computeCartesianPath.(В этом примере код для публикации траектории закомментирован и частично отсутствует)

void planTo(std::vector<double> coordinate, std::vector<double> orientation){

  geometry_msgs::Pose p;
  p.orientation.w = 1.0;
  p.position.x = coordinate[0];
  p.position.y = coordinate[1];
  p.position.z = coordinate[2];

  tf::Quaternion q = tf::createQuaternionFromRPY(
      orientation[0],orientation[1],orientation[2]);

  p.orientation.x = q.getX();
  p.orientation.y = q.getY();
  p.orientation.z = q.getZ();
  p.orientation.w = q.getW();

  std::vector<geometry_msgs::Pose> goals;
  goals.push_back(p);

  moveit::planning_interface::MoveGroup mg("manipulator");
  mg.setStartStateToCurrentState();

  // load the path in the `trajectory` variable:
  moveit_msgs::RobotTrajectory trajectory;
  mg.computeCartesianPath(goals, 0.01, 0.0, trajectory);
  // publish to gazebo:
  // trajectory.joint_trajectory.header.stamp = ros::Time::now();
  // publisher.publish(trajectory.joint_trajectory);
}

Я решил это несколько месяцев назад и, к сожалению, не помню точный источник / учебник.

...