本文整理汇总了C++中LocalFrame::getBinormal方法的典型用法代码示例。如果您正苦于以下问题:C++ LocalFrame::getBinormal方法的具体用法?C++ LocalFrame::getBinormal怎么用?C++ LocalFrame::getBinormal使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LocalFrame
的用法示例。
在下文中一共展示了LocalFrame::getBinormal方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: evaluateHypotheses
void GraspSet::evaluateHypotheses(const PointList& point_list, const LocalFrame& local_frame)
{
hands_.resize(angles_.size());
sample_ = local_frame.getSample();
is_valid_ = Eigen::Array<bool, 1, Eigen::Dynamic>::Constant(1, angles_.size(), false);
FingerHand finger_hand(hand_geometry_.finger_width_, hand_geometry_.outer_diameter_, hand_geometry_.depth_);
Eigen::Matrix3d rot_binormal;
// Set the lateral and forward axis of the robot hand frame (closing direction and grasp approach direction).
if (rotation_axis_ == ROTATION_AXIS_CURVATURE_AXIS)
{
finger_hand.setLateralAxis(1);
finger_hand.setForwardAxis(0);
// Rotation about binormal by 180 degrees (reverses direction of normal)
rot_binormal << -1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, -1.0;
}
// Local reference frame
Eigen::Matrix3d local_frame_mat;
local_frame_mat << local_frame.getNormal(), local_frame.getBinormal(), local_frame.getCurvatureAxis();
// Evaluate grasp at each hand orientation.
for (int i = 0; i < angles_.rows(); i++)
{
// Rotation about curvature axis by <angles_(i)> radians
Eigen::Matrix3d rot;
rot << cos(angles_(i)), -1.0 * sin(angles_(i)), 0.0,
sin(angles_(i)), cos(angles_(i)), 0.0,
0.0, 0.0, 1.0;
// Rotate points into this hand orientation.
Eigen::Matrix3d frame_rot;
frame_rot.noalias() = local_frame_mat * rot_binormal * rot;
PointList point_list_frame = point_list.rotatePointList(frame_rot.transpose());
// Crop points on hand height.
PointList point_list_cropped = point_list_frame.cropByHandHeight(hand_geometry_.height_);
// Evaluate finger placements for this orientation.
finger_hand.evaluateFingers(point_list_cropped.getPoints(), hand_geometry_.init_bite_);
// Check that there is at least one feasible 2-finger placement.
finger_hand.evaluateHand();
if (finger_hand.getHand().any())
{
// Try to move the hand as deep as possible onto the object.
int finger_idx = finger_hand.deepenHand(point_list_cropped.getPoints(), hand_geometry_.init_bite_, hand_geometry_.depth_);
// Calculate points in the closing region of the hand.
std::vector<int> indices_closing = finger_hand.computePointsInClosingRegion(point_list_cropped.getPoints(), finger_idx);
if (indices_closing.size() == 0)
{
continue;
}
// create the grasp hypothesis
Grasp hand = createHypothesis(local_frame.getSample(), point_list_cropped, indices_closing, frame_rot,
finger_hand);
hands_[i] = hand;
is_valid_[i] = true;
}
}
}