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; }
private void checkIsTransformationInPlane( RigidBodyTransform transformToNewFrame, Point3d transformedPoint) { transformToNewFrame.getTranslation(temporaryTranslation); if (Math.abs(temporaryTranslation.getZ() - transformedPoint.getZ()) > epsilon) throw new RuntimeException( "Cannot transform FramePoint2d to a plane with a different surface normal"); }
public void doMouseDraggedMiddle(double dx, double dy) { // Zooms in and out if ((this.isMounted) && (viewportAdapter != null)) { cameraMount.zoom(dy * 0.1); } else { Vector3d v3d = new Vector3d(camX - fixX, camY - fixY, camZ - fixZ); Vector3d offsetVec = new Vector3d(v3d); // offsetVec.normalize(); offsetVec.scale(dy * zoom_factor); // if (offsetVec.length() < v3d.length()) // { if (!isDolly || (!isDollyX && !isDollyY)) { camX += offsetVec.getX(); camY += offsetVec.getY(); } if (!isDolly || !isDollyZ) camZ += offsetVec.getZ(); // } v3d.set(camX - fixX, camY - fixY, camZ - fixZ); if (v3d.length() < MIN_CAMERA_POSITION_TO_FIX_DISTANCE) { v3d.normalize(); v3d.scale(MIN_CAMERA_POSITION_TO_FIX_DISTANCE); camX = v3d.getX() + fixX; camY = v3d.getY() + fixY; camZ = v3d.getZ() + fixZ; } } // transformChanged(currXform); }
public void drawBox(BufferedImage image, RigidBodyTransform transform, double scale) { DenseMatrix64F rotation = new DenseMatrix64F(3, 3); Vector3d translation = new Vector3d(); transform.getRotation(rotation); transform.getTranslation(translation); Se3_F64 targetToSensor = new Se3_F64( rotation, new Vector3D_F64(translation.getX(), translation.getY(), translation.getZ())); Graphics2D g2 = image.createGraphics(); g2.setStroke(new BasicStroke(4)); g2.setColor(java.awt.Color.RED); VisualizeFiducial.drawCube(targetToSensor, this.intrinsicParameters, scale, 2, g2); g2.finalize(); }
public void doMouseDraggedRight(double dx, double dy) { // Elevate up and down double delX0 = camX - fixX, delY0 = camY - fixY, delZ0 = camZ - fixZ; v3d.set(delX0, delY0, delZ0); // double offsetDistance = v3d.length(); t3d.setRotationYawAndZeroTranslation(-dx * rotate_camera_factor); t3d.transform(v3d); if (!isTracking || (!isTrackingX && !isTrackingY)) { fixX = camX - v3d.getX(); fixY = camY - v3d.getY(); } delX0 = camX - fixX; delY0 = camY - fixY; delZ0 = camZ - fixZ; // v3d.set(delX0, delY0, delZ0); rotVector.set(-1.0, 0.0, 0.0); rotVector.cross(new Vector3d(0.0, 0.0, -1.0), v3d); rotAxisAngle4d.set(rotVector, dy * rotate_camera_factor / 4.0); t3d.setRotationAndZeroTranslation(rotAxisAngle4d); t3d.transform(v3d); if ((v3d.getX() * delX0 > 0.0) && (v3d.getY() * delY0 > 0.0)) { if (!isTracking || (!isTrackingX && !isTrackingY)) { fixX = camX - v3d.getX(); fixY = camY - v3d.getY(); } if (!isTracking || !isTrackingZ) { fixZ = camZ - v3d.getZ(); /* * double factor = elevate_camera_factor * offsetDistance; * //Math.abs(camZ-fixZ); if (factor < elevate_camera_factor) factor * = elevate_camera_factor; fixZ = camZ - v3d.z + dy factor; //fixZ * = camZ - v3d.z + dy * elevate_factor; */ } } // transformChanged(currXform); }
public void doMouseDraggedLeft(double dx, double dy) { // Rotate around fix point: double delX0 = camX - fixX, delY0 = camY - fixY, delZ0 = camZ - fixZ; v3d.set(delX0, delY0, delZ0); // double offsetDistance = v3d.length(); t3d.setRotationYawAndZeroTranslation(-dx * rotate_factor); t3d.transform(v3d); if (!isDolly || (!isDollyX && !isDollyY)) { camX = v3d.getX() + fixX; camY = v3d.getY() + fixY; } delX0 = camX - fixX; delY0 = camY - fixY; delZ0 = camZ - fixZ; // v3d.set(delX0, delY0, delZ0); rotVector.cross(new Vector3d(0.0, 0.0, -1.0), v3d); rotAxisAngle4d.set(rotVector, dy * rotate_factor / 4.0); t3d.setRotationAndZeroTranslation(rotAxisAngle4d); t3d.transform(v3d); if ((v3d.getX() * delX0 > 0.0) && (v3d.getY() * delY0 > 0.0)) { if (!isDolly || (!isDollyX && !isDollyY)) { camX = v3d.getX() + fixX; camY = v3d.getY() + fixY; } if (!isDolly || !isDollyZ) { camZ = v3d.getZ() + fixZ; /* * double factor = elevate_factor * Math.abs(offsetDistance); * //camZ-fixZ); if (factor < elevate_factor) factor = * elevate_factor; //camZ = v3d.z + fixZ + dy * elevate_factor; camZ * = v3d.z + fixZ + dy * factor; */ } } // transformChanged(currXform); }
public void rotateAroundFix(double dx, double dy) { double distanceFromCameraToFix = Math.sqrt(Math.pow(camX - fixX, 2) + Math.pow(camY - fixY, 2) + Math.pow(camZ - fixZ, 2)); if (distanceFromCameraToFix > 1.0) { dx /= distanceFromCameraToFix; dy /= distanceFromCameraToFix; } double delX0 = camX - fixX, delY0 = camY - fixY, delZ0 = camZ - fixZ; v3d.set(delX0, delY0, delZ0); t3d.setRotationYawAndZeroTranslation(-dx * rotate_factor); t3d.transform(v3d); if (!isDolly || (!isDollyX && !isDollyY)) { camX = v3d.getX() + fixX; camY = v3d.getY() + fixY; } delX0 = camX - fixX; delY0 = camY - fixY; delZ0 = camZ - fixZ; rotVector.cross(new Vector3d(0.0, 0.0, -1.0), v3d); rotAxisAngle4d.set(rotVector, dy * rotate_factor / 4.0); t3d.setRotationAndZeroTranslation(rotAxisAngle4d); t3d.transform(v3d); if ((v3d.getX() * delX0 > 0.0) && (v3d.getY() * delY0 > 0.0)) { if (!isDolly || (!isDollyX && !isDollyY)) { camX = v3d.getX() + fixX; camY = v3d.getY() + fixY; } if (!isDolly || !isDollyZ) { camZ = v3d.getZ() + fixZ; } } }
public void setAngularAccelerationInBody(Vector3d angularAccelerationInBody) { qdd_wx.set(angularAccelerationInBody.getX()); qdd_wy.set(angularAccelerationInBody.getY()); qdd_wz.set(angularAccelerationInBody.getZ()); }
public void setAngularVelocityInBody(Vector3d angularVelocityInBody) { qd_wx.set(angularVelocityInBody.getX()); qd_wy.set(angularVelocityInBody.getY()); qd_wz.set(angularVelocityInBody.getZ()); }
public static void packVector3dToGeometry_MsgPoint(Vector3d position, Point point) { point.setX(position.getX()); point.setY(position.getY()); point.setZ(position.getZ()); }
public static void packVector3dToGeometry_msgsVector3(Vector3d vector, Vector3 rosVectorToPack) { rosVectorToPack.setX(vector.getX()); rosVectorToPack.setY(vector.getY()); rosVectorToPack.setZ(vector.getZ()); }