public void receivedClockMessage(long totalNsecs) {
    RigidBodyTransform pelvisPoseInMocapFrame = atomicPelvisPose.get();
    IMUDefinition[] imuDefinitions = fullRobotModel.getIMUDefinitions();
    RobotConfigurationData robotConfigurationData =
        new RobotConfigurationData(
            fullRobotModel.getOneDoFJoints(), forceSensorDefinitions, null, imuDefinitions);

    for (int sensorNumber = 0; sensorNumber < imuDefinitions.length; sensorNumber++) {
      IMUPacket imuPacket = robotConfigurationData.getImuPacketForSensor(sensorNumber);
      imuPacket.set(
          RandomTools.generateRandomVector3f(random),
          RandomTools.generateRandomQuaternion4f(random),
          RandomTools.generateRandomVector3f(random));
    }

    robotConfigurationData.setRobotMotionStatus(RobotMotionStatus.STANDING);

    robotConfigurationData.setTimestamp(totalNsecs);
    if (pelvisPoseInMocapFrame != null) {
      Vector3d translation = new Vector3d();
      Quat4d orientation = new Quat4d();
      pelvisPoseInMocapFrame.getTranslation(translation);
      pelvisPoseInMocapFrame.getRotation(orientation);
      robotConfigurationData.setRootTranslation(translation);
      robotConfigurationData.setRootOrientation(orientation);
    }
    fullRobotModel.updateFrames();
    packetCommunicator.send(robotConfigurationData);
  }
  public void setRotationAndTranslation(RigidBodyTransform transform) {
    Matrix3d rotationMatrix = new Matrix3d();
    transform.getRotation(rotationMatrix);
    setRotation(rotationMatrix);

    Vector3d translation = new Vector3d();
    transform.getTranslation(translation);
    setPosition(translation);
  }
  public static void packRigidBodyTransformToGeometry_msgsPose(
      RigidBodyTransform pelvisTransform, Pose pose) {
    Vector3d point = new Vector3d();
    pelvisTransform.getTranslation(point);

    Quat4d rotation = new Quat4d();
    pelvisTransform.getRotation(rotation);

    packVector3dAndQuat4dToGeometry_msgsPose(point, rotation, pose);
  }
  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();
  }
  private void computeOrientationStateOutputBlock() {
    estimationFrame.getTransformToDesiredFrame(tempTransform, ReferenceFrame.getWorldFrame());
    tempTransform.getRotation(rotationFromEstimationToWorld);

    tempCenterOfMassPosition.setIncludingFrame(centerOfMassPositionPort.getData());
    tempCenterOfMassPosition.changeFrame(estimationFrame);

    ReferenceFrame referenceFrame =
        referenceFrameMap.getFrameByName(
            pointPositionMeasurementInputPort.getData().getBodyFixedReferenceFrameName());
    tempFramePoint.setIncludingFrame(
        referenceFrame,
        pointPositionMeasurementInputPort.getData().getMeasurementPointInBodyFrame());

    tempFramePoint.changeFrame(estimationFrame);
    tempFramePoint.sub(tempCenterOfMassPosition);
    tempFramePoint.scale(-1.0);

    MatrixTools.toTildeForm(tempMatrix, tempFramePoint.getPoint());
    tempMatrix.mul(rotationFromEstimationToWorld, tempMatrix);
    MatrixTools.setDenseMatrixFromMatrix3d(0, 0, tempMatrix, getOutputMatrixBlock(orientationPort));
  }