Пример #1
0
/* Gets the end effector position for a given set of joint angles */    
void Kinematics::getEndEffectorPosition(const std::vector<double> &joint_angles, std::vector<double> &end_effector_position) const {
    int n = joint_angles.size();	
    std::pair<fcl::Vec3f, fcl::Matrix3f> ee_pose = getPoseOfLinkN(joint_angles, n);
    end_effector_position.push_back(ee_pose.first[0]);
    end_effector_position.push_back(ee_pose.first[1]);
    end_effector_position.push_back(ee_pose.first[2]);
}  
Пример #2
0
Eigen::MatrixXd Kinematics::getEndEffectorPose(const std::vector<double> &joint_angles, bool &eigen) {	
	Eigen::MatrixXd m(4, 4);
	Eigen::MatrixXd res = Eigen::MatrixXd::Identity(4, 4);
	res(0, 3) = joint_origins_[0][0];
	res(1, 3) = joint_origins_[0][1];
	res(2, 3) = joint_origins_[0][2];	
	for (size_t i = 0; i < joint_angles.size() + 1; i++) {
		if (i == joint_angles.size()) {
			res = getPoseOfLinkN(0.0, res, i);
		}
		else {
			res = getPoseOfLinkN(joint_angles[i], res, i);
		}
		
	}
	
	return res;
}
Пример #3
0
void Kinematics::getEEJacobian(const std::vector<double> &joint_angles, Eigen::MatrixXd &jacobian) {
	auto ee_pose = getEndEffectorPose(joint_angles);	
	Eigen::Vector3d o_e;
	o_e << ee_pose.first[0], ee_pose.first[1], ee_pose.first[2];	
	std::vector<std::pair<fcl::Vec3f, fcl::Matrix3f>> link_poses;
	for (size_t i = 0; i < joint_angles.size(); i++) {
		auto pose = getPoseOfLinkN(joint_angles, i);
		Eigen::VectorXd column_vector(6);
		Eigen::Vector3d o_i;
		o_i << pose.first[0], pose.first[1], pose.first[2];		
		Eigen::Vector3d z_i;
		z_i << pose.second(0, 2), pose.second(1, 2), pose.second(2, 2);		
		Eigen::Vector3d upper = z_i.cross(o_e - o_i);
		column_vector << upper, z_i;
		jacobian.col(i) = column_vector;
	}
}
Пример #4
0
std::pair<fcl::Vec3f, fcl::Matrix3f> Kinematics::getEndEffectorPose(const std::vector<double> &joint_angles) const {
	int n = joint_angles.size(); 
    return getPoseOfLinkN(joint_angles, n);
}
Пример #5
0
void Kinematics::getPositionOfLinkN(const std::vector<double> &joint_angles, const int &n, std::vector<double> &position) const {
    std::pair<fcl::Vec3f, fcl::Matrix3f> link_n_pose = getPoseOfLinkN(joint_angles, n);
    position.push_back(link_n_pose.first[0]);
    position.push_back(link_n_pose.first[1]);
    position.push_back(link_n_pose.first[2]);
}