public double resolveCenterOfPressureAndNormalTorque(
      FramePoint centerOfPressureToPack,
      SpatialForceVector spatialForceVector,
      ReferenceFrame centerOfPressurePlaneFrame) {
    // First resolve the wrench at the plane origin:
    wrenchResolvedOnPlane.set(spatialForceVector);
    wrenchResolvedOnPlane.changeFrame(centerOfPressurePlaneFrame);

    wrenchResolvedOnPlane.getAngularPart(torqueAtZeroInPlaneFrame);
    wrenchResolvedOnPlane.getLinearPart(forceInPlaneFrame);

    double fz = forceInPlaneFrame.getZ();

    double vector12x = Double.NaN;
    double vector12y = Double.NaN;

    double normalTorqueAtCenterOfPressure;
    if (fz > 1e-7) {
      // with sufficient normal force
      vector12x = -1.0 / fz * torqueAtZeroInPlaneFrame.getY();
      vector12y = 1.0 / fz * torqueAtZeroInPlaneFrame.getX();
      normalTorqueAtCenterOfPressure =
          torqueAtZeroInPlaneFrame.getZ()
              - vector12x * forceInPlaneFrame.getY()
              + vector12y * forceInPlaneFrame.getX();
    } else {
      // without normal force
      normalTorqueAtCenterOfPressure = torqueAtZeroInPlaneFrame.getZ();
    }

    centerOfPressureToPack.setIncludingFrame(centerOfPressurePlaneFrame, vector12x, vector12y, 0.0);
    return normalTorqueAtCenterOfPressure;
  }
 public void computeCentroidalMomentumRate(
     InverseDynamicsJoint[] jointsToOptimizeFor, DenseMatrix64F jointAccelerations) {
   DenseMatrix64F centroidalMomentumMatrixPart =
       getCentroidalMomentumMatrixPart(jointsToOptimizeFor);
   CommonOps.mult(centroidalMomentumMatrixPart, jointAccelerations, hdot);
   CommonOps.addEquals(hdot, adotV);
   centroidalMomentumRate.set(centerOfMassFrame, hdot);
 }
コード例 #3
0
  public void solve(SpatialForceVector momentumRateOfChange) {
    T.reshape(SpatialMotionVector.SIZE, 0);
    alpha1.reshape(T.getNumCols(), 1);
    N.reshape(SpatialForceVector.SIZE, SpatialForceVector.SIZE);
    beta1.reshape(N.getNumCols(), 1);

    CommonOps.setIdentity(N);
    momentumRateOfChange.packMatrix(beta1);

    solve(T, alpha1, N, beta1);
  }
コード例 #4
0
 public void getRateOfChangeOfMomentum(SpatialForceVector rateOfChangeOfMomentumToPack) {
   rateOfChangeOfMomentumToPack.set(centroidalMomentumMatrix.getReferenceFrame(), hdot);
 }