Visual SLAM

Related documentations
Map Manager
Tracker Coordinate System
Visual SLAM Learning Guide

The Visual SLAM(Simultaneous Localization and Mapping) creates and saves 3-dimensional maps of target spaces for more exquisite AR project.

Please refer Visual SLAM Learning Guide to create a map more precisely while scanning 3D space.

Start / Stop Tracker
Start / Stop Map Creation & Map Saving
Set Rendering Options

Start / Stop Tracker

To start / stop tracker, refer to the following code.

>SlamActivity.java

@Override
protected void onResume() {
    ...
    TrackerManager.getInstance().startTracker(TrackerManager.TRACKER_TYPE_SLAM);
    ...
}

@Override
protected void onPause() {
    ...
    TrackerManager.getInstance().stopTracker();
    ...
}

Start / Stop Map Creation & Map Saving

  • To start a map generation, refer to the following code.
TrackerManager.getInstance().findSurface();
  • To stop generating a map, refer to the following code.
TrackerManager.getInstance().quitFindingSurface();
  • Saving map is only possible while tracking. Refer to the following code for the file storage location when you save the generated map data as a file.

>SlamActivity.java

public void onClick(View view) {
    switch (view.getId()) {
        ...
        case R.id.save_map:
            ...
            SurfaceThumbnail surfaceThumbnail = TrackerManager.getInstance().saveSurfaceData(mapFileName);
            ...
    }
}

Set Rendering Options

Feature points, SLAM initialization progress, and axis can be created with 'FeaturePoint', 'Axis' class. Refer to the following code.

>ObjectTrackerRenderer.java

private FeaturePointCPU featurePoint;
private Axis axis;

@Override
onSurfaceCreated(GL10 unused, EGLConfig config) {
    ...
    backgroundCameraQuad = new BackgroundCameraQuad();
    featurePoint = new FeaturePointCPU();
    axis = new Axis();
    Bitmap blueBitmap = MaxstARUtil.getBitmapFromAsset("bluedot.png", activity.getAssets());
    Bitmap redBitmap = MaxstARUtil.getBitmapFromAsset("reddot.png", activity.getAssets());
    featurePoint.setFeatureImage(blueBitmap, redBitmap);
    featurePoint.setTrackState(true);
    ...
}

@Override
onDrawFrame(GL10 unused) {
    featurePoint.draw(TrackerManager.getInstance(), projectionMatrix);
    if (trackingResult.getCount() > 0) {
        Trackable trackable = trackingResult.getTrackable(0);

        axis.setTransform(trackable.getPoseMatrix());
        axis.setTranslate(0, 0, 0);
        axis.setScale(0.3f, 0.3f, 0.3f);
        axis.setProjectionMatrix(projectionMatrix);
        axis.draw();
    }
}

Preferably, use landscape left mode (screen orientation) for Visual SLAM.