本文整理汇总了C++中arma::Col::subvec方法的典型用法代码示例。如果您正苦于以下问题:C++ Col::subvec方法的具体用法?C++ Col::subvec怎么用?C++ Col::subvec使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类arma::Col
的用法示例。
在下文中一共展示了Col::subvec方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getModel
inline double ParallelKinematicMachine3PUPS::getEndEffectorPoseError(
const arma::Col<double>::fixed<6>& endEffectorPose,
const arma::Row<double>& redundantJointActuations) const {
const arma::Cube<double>::fixed<3, 3, 2>& model = getModel(endEffectorPose, redundantJointActuations);
const arma::Mat<double>::fixed<3, 3>& baseJoints = model.slice(0);
const arma::Mat<double>::fixed<3, 3>& endEffectorJoints = model.slice(1);
arma::Mat<double>::fixed<3, 3> endEffectorJointsRotated = endEffectorJoints;
endEffectorJointsRotated.each_col() -= endEffectorPose.subvec(0, 1);
const arma::Mat<double>::fixed<3, 3>& baseToEndEffectorJointPositions = endEffectorJoints - baseJoints;
const arma::Row<double>::fixed<3>& baseToEndEffectorJointActuations = arma::sqrt(arma::sum(arma::square(baseToEndEffectorJointPositions)));
if (arma::any(baseToEndEffectorJointActuations < minimalActiveJointActuations_) || arma::any(baseToEndEffectorJointActuations > maximalActiveJointActuations_)) {
return 0.0;
}
arma::Mat<double>::fixed<6, 3> forwardKinematic;
forwardKinematic.head_rows(3) = baseToEndEffectorJointPositions;
for (std::size_t n = 0; n < baseToEndEffectorJointPositions.n_cols; ++n) {
forwardKinematic.submat(3, n, 5, n) = arma::cross(endEffectorJointsRotated.col(n), baseToEndEffectorJointPositions.col(n));
}
arma::Mat<double> inverseKinematic(6, 3 + redundantJointIndicies_.n_elem, arma::fill::zeros);
inverseKinematic.diag() = -arma::sqrt(arma::sum(arma::square(baseToEndEffectorJointPositions)));
for (std::size_t n = 0; n < redundantJointIndicies_.n_elem; ++n) {
const unsigned int& redundantJointIndex = redundantJointIndicies_(n);
inverseKinematic(n, 3 + n) = arma::dot(baseToEndEffectorJointPositions.col(redundantJointIndex), redundantJointAngles_.col(redundantJointIndex));
}
return -1.0 / arma::cond(arma::solve(forwardKinematic.t(), inverseKinematic));
}
示例2: getModel
inline double ParallelKinematicMachine3PRPR::getEndEffectorPoseError(
const arma::Col<double>::fixed<3>& endEffectorPose,
const arma::Row<double>& redundantJointActuations) const {
const arma::Cube<double>::fixed<2, 3, 2>& model = getModel(endEffectorPose, redundantJointActuations);
const arma::Mat<double>::fixed<2, 3>& baseJointPositions = model.slice(1);
const arma::Mat<double>::fixed<2, 3>& endEffectorJointPositions = model.slice(1);
arma::Mat<double>::fixed<2, 3> endEffectorJointPositionsRotated = endEffectorJointPositions;
endEffectorJointPositionsRotated.each_col() -= endEffectorPose.subvec(0, 1);
const arma::Mat<double>::fixed<2, 3>& baseToEndEffectorJointPositions = endEffectorJointPositions - baseJointPositions;
const arma::Row<double>::fixed<3>& baseToEndEffectorJointActuations = arma::sqrt(arma::sum(arma::square(baseToEndEffectorJointPositions)));
if (arma::any(baseToEndEffectorJointActuations < minimalActiveJointActuations_) || arma::any(baseToEndEffectorJointActuations > maximalActiveJointActuations_)) {
return 0.0;
}
arma::Mat<double>::fixed<3, 3> forwardKinematic;
forwardKinematic.head_rows(2) = baseToEndEffectorJointPositions;
forwardKinematic.row(2) = -forwardKinematic.row(0) % endEffectorJointPositionsRotated.row(1) + forwardKinematic.row(1) % endEffectorJointPositionsRotated.row(0);
arma::Mat<double> inverseKinematic(3, 3 + redundantJointIndicies_.n_elem, arma::fill::zeros);
inverseKinematic.diag() = -baseToEndEffectorJointActuations;
for (std::size_t n = 0; n < redundantJointIndicies_.n_elem; ++n) {
const unsigned int& redundantJointIndex = redundantJointIndicies_(n);
inverseKinematic(n, 3 + n) = forwardKinematic(redundantJointIndex, 0) * redundantJointAngleCosines_(n) + forwardKinematic(redundantJointIndex, 1) * redundantJointAngleSines_(n);
}
return -1.0 / arma::cond(arma::solve(forwardKinematic.t(), inverseKinematic));
}
示例3: getNextFrame
//ReadHTKHeader();
bool CmpParser::getNextFrame(arma::Col<double> &frame, int derivate){
if (file.is_open()==false)
return false;
if (hdr.sampKind&1024){//compressed mode. TODO to be implemented
std::cerr<<"HTK compressed mode is not yet supported"<<std::endl;
return false;
}
else{
unsigned int dim=hdr.sampSize/4;
arma::Col<double> data;
if (!this->readData(data)){
return false;
}
if (prev1.n_rows!=data.n_rows){
prev2=data;
if (!this->readData(prev1)){
return false;
}
if (!this->readData(data)){
return false;
}
}
if (derivate==2){
frame.resize(3*dim);
frame.subvec(0, dim-1)=prev1;
frame.subvec(dim, 2*dim-1)=(data-prev2)/2;
frame.subvec(2*dim, 3*dim-1)=prev2-2*prev1+data;
}
else if (derivate==1){
frame.resize(2*dim);
frame.subvec(0, dim-1)=prev1;
frame.subvec(dim, 2*dim-1)=(data-prev2)/2;
}
else{
frame.resize(dim);
frame=data;
}
prev2=prev1;
prev1=data;
//std::cout<<"data:"<<std::endl;
//std::cout<<frame<<std::endl;
return true;
}
}
示例4: calculateDependentVariables
//This function is specific to a single problem
void calculateDependentVariables(const arma::Mat<std::complex<double> >& myOffsets,
const arma::Col<std::complex<double> >& myCurrentGuess,
arma::Col<std::complex<double> >& targetsCalculated)
{
//Evaluate a dependent variable for each iteration
//The arma::Col allows this to be expressed as a vector operation
for(int i = 0; i < NUMDIMENSIONS; i++)
{
targetsCalculated[i] = arma::sum(pow(myCurrentGuess.subvec(0,1) - myOffsets.row(i).subvec(0,1).t(),2.0));
targetsCalculated[i] = targetsCalculated[i] + myCurrentGuess[2]*pow(-1.0, i) - myOffsets.row(i)[2];
//std::cout << targetsCalculated[i] << std::endl;
}
//std::cout << "model evaluated *************************" << std::endl;
//std::cout << targetsCalculated << std::endl;
//std::cout << myOffsets << std::endl;
}
示例5: verify
inline arma::Cube<double>::fixed<2, 3, 2> ParallelKinematicMachine3PRPR::getModel(
const arma::Col<double>::fixed<3>& endEffectorPose,
const arma::Row<double>& redundantJointActuations) const {
verify(arma::any(arma::vectorise(redundantJointActuations < 0)) || arma::any(arma::vectorise(redundantJointActuations > 1)), "All values for the actuation of redundantion joints must be between [0, 1].");
verify(redundantJointActuations.n_elem == redundantJointIndicies_.n_elem, "The number of redundant actuations must be equal to the number of redundant joints.");
arma::Cube<double>::fixed<2, 3, 2> model;
const arma::Col<double>::fixed<2>& endEffectorPosition = endEffectorPose.subvec(0, 1);
const double& endEffectorAngle = endEffectorPose(2);
model.slice(0) = redundantJointStartPositions_;
for (std::size_t n = 0; n < redundantJointIndicies_.n_elem; n++) {
const unsigned int& redundantJointIndex = redundantJointIndicies_(n);
model.slice(0).col(redundantJointIndex) += redundantJointActuations(redundantJointIndex) * redundantJointStartToEndPositions_.col(redundantJointIndex);
}
model.slice(1) = get2DRotation(endEffectorAngle) * endEffectorJointPositions_;
model.slice(1).each_col() += endEffectorPosition;
return model;
}