code: public boolean mapLocalToTarget()
      {
          GVRSkeleton	srcskel = mSourceSkeleton;
          GVRSkeleton	dstskel = mDestSkeleton;
          Vector3f v = new Vector3f();
  
          if ((dstskel == null) || (srcskel == null))
          {
              return false;
          }
          if (mBoneMap == null)
          {
              mBoneMap = makeBoneMap(srcskel, dstskel);
          }
          GVRPose     srcpose = srcskel.getPose();
          Quaternionf q = new Quaternionf();
          int		    numsrcbones = srcskel.getNumBones();
          mDestPose.clearRotations();
          srcskel.getPosition(v);
          dstskel.setPosition(v);
          for (int i = 0; i < numsrcbones; ++i)
          {
              int	boneindex = mBoneMap[i];
  
              if (boneindex >= 0)
              {
                  srcpose.getLocalRotation(i, q);
                  mDestPose.setLocalRotation(boneindex, q.x, q.y, q.z, q.w);
              }
          }
          dstskel.applyPose(mDestPose, GVRSkeleton.ROTATION_ONLY);
          return true;
      }
docs: Maps the pose of the source skeleton onto the destination skeleton in local space.
  <p>
  The local bone rotations of matching bones are copied.
  If the PoseMapper has a bone map, it is used to determine which bones
  of the source skeleton correspond to which bones in the destination skeleton.
  This function requires both the source and target skeletons to be set.
  
  @returns true if successful, false on error