Пример #1
0
void ChompOptimizer::setRobotStateFromPoint(ChompTrajectory& group_trajectory, int i)
{
  const Eigen::MatrixXd::RowXpr& point = group_trajectory.getTrajectoryPoint(i);

  std::vector<double> joint_states;
  for(int j = 0; j < group_trajectory.getNumJoints(); j ++)
  {
    joint_states.push_back(point(0,j));
  }

  //ros::WallTime timer = ros::WallTime::now();
  planning_models::RobotState *::JointStateGroup* group = state_.getJointStateGroup(planning_group_);
  group->setStateValues(joint_states);
  //timer = ros::WallTime::now();
}
Пример #2
0
	ChompTrajectory::ChompTrajectory(const ChompTrajectory& source_traj, int diff_rule_length) :
		discretization_(source_traj.discretization_)
	{
		num_joints_ = source_traj.getNumJoints();

		// figure out the num_points_:
		// we need diff_rule_length-1 extra points on either side:
		int start_extra = (diff_rule_length - 1) - source_traj.start_index_;
		int end_extra = (diff_rule_length - 1) - ((source_traj.num_points_ - 1) - source_traj.end_index_);

		num_points_ = source_traj.num_points_ + start_extra + end_extra;
		start_index_ = diff_rule_length - 1;
		end_index_ = (num_points_ - 1) - (diff_rule_length - 1);
		duration_ = (num_points_ - 1)*discretization_;

		// allocate the memory:
		init();

		full_trajectory_index_.resize(num_points_);

		// now copy the trajectories over:
		for (int i = 0; i<num_points_; i++)
		{
			int source_traj_point = i - start_extra;
			if (source_traj_point < 0)
				source_traj_point = 0;
			if (source_traj_point >= source_traj.num_points_)
				source_traj_point = source_traj.num_points_ - 1;
			full_trajectory_index_[i] = source_traj_point;
			for (int j = 0; j<num_joints_; j++)
			{
				(*this)(i, j) = source_traj(source_traj_point, j);
			}
		}
	}