Skip to content

Latest commit

 

History

History
102 lines (67 loc) · 4.54 KB

README.md

File metadata and controls

102 lines (67 loc) · 4.54 KB

MATLAB Wrapper

http://borg.cc.gatech.edu/projects/gtsam

This is the GTSAM MATLAB toolbox, a MATLAB wrapper around the GTSAM C++ library. To build it, enable GTSAM_INSTALL_MATLAB_TOOLBOX=ON in CMake.

The interface to the toolbox is generated automatically by the wrap tool which directly parses C++ header files. The tool generates matlab proxy objects together with all the native functions for wrapping and unwrapping scalar and non scalar types and objects. The interface generated by the wrap tool also redirects the standard output stream (cout) to matlab's console.

For instructions on updating the version of the wrap library included in GTSAM to the latest version, please refer to the wrap README

Filename Case Sensitivity

Due to the file name syntax requirements of Matlab, having the files Symbol.m (for the class) and symbol.m (for the function) together on an OS with a case-insensitive filesystem is impossible.

To put it simply, for an OS like Windows or MacOS where the filesystem is case-insensitive, we cannot have two files symbol.m and Symbol.m in the same folder. When trying to write one file after another, they will end up overwriting each other. We cannot specify 2 different filenames, since Matlab's syntax prevents that.

For this reason, on Windows and MacOS, we ignore the Symbol class and request users to use the symbol function exclusively for key creation.

Ubuntu

If you have a newer Ubuntu system (later than 10.04), you must make a small modification to your MATLAB installation, due to MATLAB being distributed with an old version of the C++ standard library. Delete or rename all files starting with libstdc++ in your MATLAB installation directory, in paths:

/usr/local/MATLAB/[version]/sys/os/[system]/
/usr/local/MATLAB/[version]/bin/[system]/

Adding the toolbox to your MATLAB path

To get started, first add the toolbox (or gtsam_toolbox) folder to your MATLAB path - in the MATLAB file browser, right-click on the folder and click 'Add to path -> This folder' (do not add the subfolders to your path).

Final setup on Linux

MATLAB needs to know where the GTSAM shared object file (libgtsam.so.4) is so that it can link to it correctly.

System-wide

If you installed GTSAM system-wide (e.g. with sudo make install), then simply run sudo ldconfig.

Custom Install

If you have a custom install location, denoted by <install-path>, you need to update your LD_LIBRARY_PATH environment variable.

export LD_LIBRARY_PATH=<install-path>/gtsam:$LD_LIBRARY_PATH

Linker issues

If you compile the MATLAB toolbox and everything compiles smoothly, but when you run any MATLAB script, you get any of the following error messages in MATLAB

Invalid MEX-file '/usr/local/gtsam_toolbox/gtsam_wrapper.mexa64':
Missing symbol 'mexAtExit' required by '/usr/local/gtsam_toolbox/gtsam_wrapper.mexa64'
Missing symbol 'mexCallMATLABWithObject' required by '/usr/local/gtsam_toolbox/gtsam_wrapper.mexa64'
...

run following shell line

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6

before you run MATLAB from the same shell.

This mainly happens if you have GCC >= 5 and newer version MATLAB like R2017a.

Trying out the examples

The examples are located in the 'gtsam_examples' subfolder. You may either run them individually at the MATLAB command line, or open the GTSAM example GUI by running 'gtsamExamples'. Example:

>> cd /Users/yourname/toolbox  % Change to wherever you installed the toolbox
>> cd gtsam_examples           % Change to the examples directory
>> gtsamExamples               % Run the GTSAM examples GUI

Running the unit tests

The GTSAM MATLAB toolbox also has a small set of unit tests located in the gtsam_tests directory. Example:

>> cd /Users/yourname/toolbox  % Change to wherever you installed the toolbox
>> cd gtsam_tests              % Change to the examples directory
>> test_gtsam                  % Run the unit tests
Starting: testJacobianFactor
Starting: testKalmanFilter
Starting: testLocalizationExample
Starting: testOdometryExample
Starting: testPlanarSLAMExample
Starting: testPose2SLAMExample
Starting: testPose3SLAMExample
Starting: testSFMExample
Starting: testStereoVOExample
Starting: testVisualISAMExample
Tests complete!

Writing your own code

Coding for the GTSAM MATLAB toolbox is straightforward and very fast once you understand a few basic concepts! Please see the manual to get started.