File slam.hpp

Introduce the SLAMSystemPollingInterface and associated classes/enums. The former is the main object for interacting with the SLAM engine.

Helper functions for slamcore::Stream

template<class Archive>
static inline void load_minimal(const Archive&, Stream &obj, const std::string &value)
template<class Archive>
static inline std::string save_minimal(const Archive&, const Stream &obj)
static inline std::ostream &operator<<(std::ostream &os, const Stream &obj)

Helper functions for slamcore::Property

template<class Archive>
static inline void load_minimal(const Archive&, Property &obj, const std::string &value)
template<class Archive>
static inline std::string save_minimal(const Archive&, const Property &obj)
static inline std::ostream &operator<<(std::ostream &os, const Property &obj)

Get information about the client library

std::string getVersion()

Version

std::string getBuildVersion()

Build version

std::string getBuildType()

Build type

Helper functions for slamcore::DataSource

template<class Archive>
static inline void load_minimal(const Archive&, DataSource &obj, const std::string &value)
template<class Archive>
static inline std::string save_minimal(const Archive&, const DataSource &obj)
static inline std::ostream &operator<<(std::ostream &os, const DataSource &obj)

Enums

enum Stream

Supported data streams

Values:

enumerator Pose

Used for PoseInterface.

enumerator Video

Used for MultiFrameInterface.

enumerator IMU

Used for IMUListInterface.

enumerator ActiveMap

Used for SparseMapInterface.

enumerator Velocity

Used for VelocityInterface<camera_clock>

enumerator MetaData

Used for MetaDataInterface.

enumerator FrameSync

Used for FrameSyncInterface.

enumerator ErrorCode

used for ErrorCodeInterface

enumerator LocalPointCloud

used for PointCloudInterface

enumerator Count
enum Property

Properties to query and set.

Values:

enumerator ModelName

std::string, read-only, device model name

enumerator SerialNumber

std::string, read-only, serial number of the device

enumerator SensorInfo

std::string, read-only, misc sensor info

enumerator FirmwareVersion

std::string, read-only, firmware version

enumerator FirmwareBuildTime

std::string, read-only, firmware build time

enumerator FirmwareBuildVersion

std::string, read-only, contains SLAM build info

enumerator FirmwareBuildType

std::string, read-only, contains SLAM build type info

enumerator PositioningMode

PositioningMode enum, read-only, position mode of the SLAM system

enumerator ConfigPresetName

std::string, read-only, name of config preset

enumerator FeatureMap2DEnabled

bool, read-only, Whether 2D mapping features are enabled

enumerator FeatureKinematicsEnabled

bool, read-only, Whether we are running with kinematics enabled

enumerator SaveTrajectories

bool, Whether trajectories are saved

enumerator Count
enum DataSource

Input data source.

Values:

enumerator Dataset
enumerator RealSense
enumerator Count

Functions

void slamcoreInit(LogSeverity severity = LogSeverity::Count, LogCallbackT callback = nullptr)

Create SLAMSystemPollingInterface instance. Initialise SLAMcore API.

A callback can optionally be specified to be notified of log messages with severity greater or equal than the specified value.

The log callback implementation must guarantee its own thread-safety, i.e. it might be invoked, concurrently, from arbitrary threads.

The lifetime of the callback must be guaranteed until the call to slamcore::slamcoreDeinit().

Note

Not thread safe.

void slamcoreDeinit()

Deinitialise SLAMcore API.

Note

Not thread safe.

std::unique_ptr<SLAMSystemCallbackInterface> createSLAMSystem(const v0::SystemConfiguration &cfg, const Version &v = slamcore::getCurrentSDKVersion())

Create slamcore::SLAMSystemInterface instance.

Note

Not thread safe.

Parameters
  • cfg – The configuration for the system.

  • v – The SDK version, used internally.

template<>
struct slamcore::StreamType<Stream::Pose>
#include <slam.hpp>

Public Types

using type = PoseInterface<camera_clock>
template<>
struct slamcore::StreamType<Stream::Video>
#include <slam.hpp>

Public Types

using type = MultiFrameInterface
template<>
struct slamcore::StreamType<Stream::IMU>
#include <slam.hpp>

Public Types

using type = IMUListInterface
template<>
struct slamcore::StreamType<Stream::ActiveMap>
#include <slam.hpp>

Public Types

using type = SparseMapInterface
template<>
struct slamcore::StreamType<Stream::Velocity>
#include <slam.hpp>

Public Types

using type = VelocityInterface<camera_clock>
template<>
struct slamcore::StreamType<Stream::MetaData>
#include <slam.hpp>

Public Types

using type = MetaDataInterface
template<>
struct slamcore::StreamType<Stream::FrameSync>
#include <slam.hpp>

Public Types

using type = FrameSyncInterface
template<>
struct slamcore::StreamType<Stream::ErrorCode>
#include <slam.hpp>

Public Types

using type = ErrorCodeInterface
template<>
struct slamcore::StreamType<Stream::LocalPointCloud>
#include <slam.hpp>

Public Types

using type = PointCloudInterface
namespace slamcore

Main namespace for the SLAMcore public API

Helper functions for slamcore::Stream

template<class Archive>
static inline void load_minimal(const Archive&, Stream &obj, const std::string &value)
template<class Archive>
static inline std::string save_minimal(const Archive&, const Stream &obj)
static inline std::ostream &operator<<(std::ostream &os, const Stream &obj)

Helper functions for slamcore::Property

template<class Archive>
static inline void load_minimal(const Archive&, Property &obj, const std::string &value)
template<class Archive>
static inline std::string save_minimal(const Archive&, const Property &obj)
static inline std::ostream &operator<<(std::ostream &os, const Property &obj)

Get information about the client library

std::string getVersion()

Version

std::string getBuildVersion()

Build version

std::string getBuildType()

Build type

Helper functions for slamcore::DataSource

template<class Archive>
static inline void load_minimal(const Archive&, DataSource &obj, const std::string &value)
template<class Archive>
static inline std::string save_minimal(const Archive&, const DataSource &obj)
static inline std::ostream &operator<<(std::ostream &os, const DataSource &obj)

Helper conversion methods

slamcore::ImageFormat \(\leftrightarrow\) BytesPerPixel

Enums

enum Stream

Supported data streams

Values:

enumerator Pose

Used for PoseInterface.

enumerator Video

Used for MultiFrameInterface.

enumerator IMU

Used for IMUListInterface.

enumerator ActiveMap

Used for SparseMapInterface.

enumerator Velocity

Used for VelocityInterface<camera_clock>

enumerator MetaData

Used for MetaDataInterface.

enumerator FrameSync

Used for FrameSyncInterface.

enumerator ErrorCode

used for ErrorCodeInterface

enumerator LocalPointCloud

used for PointCloudInterface

enumerator Count
enum Property

Properties to query and set.

Values:

enumerator ModelName

std::string, read-only, device model name

enumerator SerialNumber

std::string, read-only, serial number of the device

enumerator SensorInfo

std::string, read-only, misc sensor info

enumerator FirmwareVersion

std::string, read-only, firmware version

enumerator FirmwareBuildTime

std::string, read-only, firmware build time

enumerator FirmwareBuildVersion

std::string, read-only, contains SLAM build info

enumerator FirmwareBuildType

std::string, read-only, contains SLAM build type info

enumerator PositioningMode

PositioningMode enum, read-only, position mode of the SLAM system

enumerator ConfigPresetName

std::string, read-only, name of config preset

enumerator FeatureMap2DEnabled

bool, read-only, Whether 2D mapping features are enabled

enumerator FeatureKinematicsEnabled

bool, read-only, Whether we are running with kinematics enabled

enumerator SaveTrajectories

bool, Whether trajectories are saved

enumerator Count
enum DataSource

Input data source.

Values:

enumerator Dataset
enumerator RealSense
enumerator Count

Functions

void slamcoreInit(LogSeverity severity = LogSeverity::Count, LogCallbackT callback = nullptr)

Create SLAMSystemPollingInterface instance. Initialise SLAMcore API.

A callback can optionally be specified to be notified of log messages with severity greater or equal than the specified value.

The log callback implementation must guarantee its own thread-safety, i.e. it might be invoked, concurrently, from arbitrary threads.

The lifetime of the callback must be guaranteed until the call to slamcore::slamcoreDeinit().

Note

Not thread safe.

void slamcoreDeinit()

Deinitialise SLAMcore API.

Note

Not thread safe.

std::unique_ptr<SLAMSystemCallbackInterface> createSLAMSystem(const v0::SystemConfiguration &cfg, const Version &v = slamcore::getCurrentSDKVersion())

Create slamcore::SLAMSystemInterface instance.

Note

Not thread safe.

Parameters
  • cfg – The configuration for the system.

  • v – The SDK version, used internally.

template<typename PT>
class PropertiesInterface
#include <slam.hpp>

Helper for handling the properties.

Property-getters

Query property value.

param pt

Property to query.

param val

Return value.

param idx

Optional index for array-like properties.

return

Error code.

template<typename T>
inline std::enable_if<std::is_integral<T>::value, T>::type getProperty(PropertyT pt, std::size_t idx = 0) const
template<typename T>
inline std::enable_if<std::is_enum<T>::value, T>::type getProperty(PropertyT pt, std::size_t idx = 0) const
template<typename T>
inline std::enable_if<std::is_floating_point<T>::value, T>::type getProperty(PropertyT pt, std::size_t idx = 0) const
template<typename T>
inline std::enable_if<std::is_same<T, std::string>::value, T>::type getProperty(PropertyT pt, std::size_t idx = 0) const
template<typename T>
inline std::enable_if<std::is_same<T, SensorIDT>::value, T>::type getProperty(PropertyT pt, std::size_t idx = 0) const
template<typename T>
inline std::enable_if<std::is_same<T, Vector>::value, T>::type getProperty(PropertyT pt, std::size_t idx = 0) const
template<typename T>
inline std::enable_if<std::is_same<T, Matrix>::value, T>::type getProperty(PropertyT pt, std::size_t idx = 0) const

Property-setter methods

Set a property.

param pt

Property to set.

param val

Value to set.

param idx

Optional index for array-like properties.

return

Error code.

template<typename T>
inline void setProperty(PropertyT pt, const T &val, std::size_t idx = 0, typename std::enable_if<std::is_integral<T>::value, T>::type* = 0)
template<typename T>
inline void setProperty(PropertyT pt, const T &val, std::size_t idx = 0, typename std::enable_if<std::is_enum<T>::value, T>::type* = 0)
template<typename T>
inline void setProperty(PropertyT pt, const T &val, std::size_t idx = 0, typename std::enable_if<std::is_floating_point<T>::value, T>::type* = 0)
inline void setProperty(PropertyT pt, const std::string &val, std::size_t idx = 0)
inline void setProperty(PropertyT pt, const SensorIDT &val, std::size_t idx = 0)
inline void setProperty(PropertyT pt, const VectorInterface &val, std::size_t idx = 0)
inline void setProperty(PropertyT pt, const MatrixInterface &val, std::size_t idx = 0)

Public Types

using PropertyT = PT

Public Functions

virtual ~PropertiesInterface() = default
virtual bool isPropertySupported(PropertyT pt) const = 0

Check if we support a particular property.

virtual bool isPropertyReadOnly(PropertyT pt, std::size_t idx = 0) const = 0

Check if a particular property is read-only.

Parameters
  • pt – Property to query.

  • idx – Optional index for array-like properties.

Returns

Return value.

Protected Functions

virtual void getPropertyImpl(PropertyT pt, int64_t &val, std::size_t idx) const = 0
virtual void setPropertyImpl(PropertyT pt, const int64_t &val, std::size_t idx) = 0
virtual void getPropertyImpl(PropertyT pt, ScalarT &val, std::size_t idx) const = 0
virtual void setPropertyImpl(PropertyT pt, const ScalarT &val, std::size_t idx) = 0
virtual void getPropertyImpl(PropertyT pt, std::string &val, std::size_t idx) const = 0
virtual void setPropertyImpl(PropertyT pt, const std::string &val, std::size_t idx) = 0
virtual void getPropertyImpl(PropertyT pt, SensorIDT &val, std::size_t idx) const = 0
virtual void setPropertyImpl(PropertyT pt, const SensorIDT &val, std::size_t idx) = 0
virtual void getPropertyImpl(PropertyT pt, Vector &val, std::size_t idx) const = 0
virtual void setPropertyImpl(PropertyT pt, const VectorInterface &val, std::size_t idx) = 0
virtual void getPropertyImpl(PropertyT pt, Matrix &val, std::size_t idx) const = 0
virtual void setPropertyImpl(PropertyT pt, const MatrixInterface &val, std::size_t idx) = 0
class SLAMAsyncTasksInterface
#include <slam.hpp>

Access to asynchronous tasks.

Subclassed by SLAMSystemInterface

Public Functions

virtual ~SLAMAsyncTasksInterface() = default
virtual IDT launchAsyncTask(TaskType task, const std::map<std::string, std::string> &params) = 0

Launch asynchronous task.

Note

This is asynchronous API, the task might start after this call returns.

Parameters
  • task – Type of task to launch.

  • params – Map of key-value pairs describing task-specific parameters.

Returns

Returned unique identifier to distinguish tasks of the same type.

virtual void cancelAsyncTask(TaskType task, IDT id) = 0

Cancel an existing asynchronous task.

Note

This is asynchronous API, the task might not be cancelled immediately.

Parameters
  • task – Type of task to cancel.

  • id – Unique identifier of the tasks to cancel.

virtual TaskStatusInterface::Ptr getTaskStatus(TaskType task, IDT id) = 0

Get task status.

Parameters
  • task – Type of task to check.

  • id – Unique identifier of the tasks to check.

class SLAMCoreInterface
#include <slam.hpp>

Core SLAM system functionality.

Subclassed by SLAMSystemInterface

Public Functions

virtual ~SLAMCoreInterface() = default
virtual void open(const char *name = nullptr) = 0

Open the SLAMcore device.

Parameters

name – Optional parameters.

virtual void openWithSession(const char *path, const char *name = nullptr) = 0

Open the SLAMcore device with preloaded session file.

Parameters
  • path – Path to the session file.

  • name – Optional parameters.

virtual void close() = 0

Close the SLAMcore device.

virtual bool isOpen() const = 0

Check if the SLAMcore device is already open.

virtual void start() = 0

Start streaming data.

virtual void stop() = 0

Stop streaming data.

virtual bool isRunning() const = 0

Check if we are streaming.

virtual bool isStreamEnabled(Stream s) const = 0

Check if a stream of data is enabled.

Parameters

s – Stream to check.

virtual void setStreamEnabled(Stream s, bool v) = 0

Enable/disable streaming of particular data.

Parameters
  • sslamcore::Stream to configure.

  • v – True/False to enable/disable respectively

class SLAMSubsystemAccessInterface
#include <slam.hpp>

Subsystem access interface.

Subclassed by SLAMSystemInterface

Check if subsystem is supported.

virtual bool isSubsystemSupported(const SubsystemType st) const = 0

Check if the given SubsystemType is supported

Parameters

st – SubsystemType to check.

template<typename ST>
inline bool isSubsystemSupported()

Get Subsystem interface.

template<typename ST>
inline std::shared_ptr<const ST> getSubsystem() const
template<typename ST>
inline std::shared_ptr<ST> getSubsystem()
virtual SubsystemInterface::CPtr getSubsystemImpl(const SubsystemType st) const = 0
virtual SubsystemInterface::Ptr getSubsystemImpl(const SubsystemType st) = 0

Public Functions

virtual ~SLAMSubsystemAccessInterface() = default
class SLAMSystemCallbackInterface : public SLAMSystemInterface
#include <slam.hpp>

Main object for creating, executing and interacting with the SLAM procedure. Use it as a standard device (open \(\rightarrow\) start streaming \(\rightarrow\) grab data \(\rightarrow\) close).

A standard way of getting SLAM up ‘n running would be the following. To simplify the procedure, error handling is not shown, see hello_world_all_streams.cpp for a minimal working example of this:

// Initialise the library
slamcoreInit()

// Create a system configuration
v0::SystemConfiguration cfg;

// create a SLAM System
slamcore::SLAMSystemCallbackInterface::Ptr slam = slamcore::createSLAMSystem(cfg);

// register any callbacks
slam->registerCallback<slamcore::Stream::Pose>(
 [](const slamcore::PoseInterface<slamcore::camera_clock>::CPtr& pose)
 {
   // do something with the pose!
 });
// ...

slam->open();

// enable the streams you need
slam->setStreamEnabled(slamcore::Stream::Pose, true);
// ...

slam->start();

// poll for data
while(slam->spinOnce(std::chrono::seconds(1)));

// cleanup SLAM
slam->stop();
slam->close();

// clean up the library
slamcoreDeinit();
See

createSLAMSystem

Public Functions

virtual ~SLAMSystemCallbackInterface() = default
template<Stream stream>
inline void registerCallback(const std::function<void(const std::shared_ptr<const StreamType_t<stream>>&)> &fn)

Register a callback.

   Can register one callback per stream, repeated calls with the same stream will overwrite
   the previously registered callback.

If the callback is empty then any registered callback on that stream will be removed

Template Parameters

stream – The stream to register the callback on

Parameters

fn – The function to register, must have a the signature void(const std::shared_ptr<const InterfaceT>&) where InterfaceT is the corresponding type to the stream.

template<typename Rep, typename Period>
inline bool spinOnce(std::chrono::duration<Rep, Period> timeout)

Spin waiting for data and invoke the corresponding registered callback (in the current thread)

Parameters

timeout

  • positive - Timeout,

  • zero - Wait indefinitely,

  • negative - Try to invoke a registered callback if is the data available, otherwise return immediately.

Returns

true A registered callback was invoked

Returns

false No callback was invoked before timing out

inline bool spinOnce()

Helper function to spin indefinitely.

Protected Functions

virtual void registerCallbackImpl(Stream, const std::function<void(const ObjectInterface::CPtr&)>&) = 0
virtual bool spinOnceImpl(std::chrono::nanoseconds timeout) = 0

Private Types

template<Stream stream>
using StreamType_t = typename StreamType<stream>::type
class SLAMSystemInterface : public PropertiesInterface<Property>, public SLAMCoreInterface, public SLAMSubsystemAccessInterface, public SLAMAsyncTasksInterface
#include <slam.hpp>

Subclassed by SLAMSystemCallbackInterface

template<Stream stream>
struct StreamType
#include <slam.hpp>
template<> ActiveMap >
#include <slam.hpp>

Public Types

using type = SparseMapInterface
template<> ErrorCode >
#include <slam.hpp>

Public Types

using type = ErrorCodeInterface
template<> FrameSync >
#include <slam.hpp>

Public Types

using type = FrameSyncInterface
template<> IMU >
#include <slam.hpp>

Public Types

using type = IMUListInterface
template<> LocalPointCloud >
#include <slam.hpp>

Public Types

using type = PointCloudInterface
template<> MetaData >
#include <slam.hpp>

Public Types

using type = MetaDataInterface
template<> Pose >
#include <slam.hpp>

Public Types

using type = PoseInterface<camera_clock>
template<> Velocity >
#include <slam.hpp>

Public Types

using type = VelocityInterface<camera_clock>
template<> Video >
#include <slam.hpp>

Public Types

using type = MultiFrameInterface
namespace v0
struct SystemConfiguration
#include <slam.hpp>

Configuration for the system.

The Mode member sets the positioning mode:

Public Members

DataSource Source = DataSource::RealSense

Input data source for SLAM.

std::string DatasetPath

Path to a dataset if DataSource::Dataset is set.

int DeviceID = 0

Device index for a camera device.

std::string ConfigFilePath

Path to a preset configuration file (optional)

bool DisableSLAM = false

Disable SLAM, just pass the data from the camera.

PositioningMode Mode = PositioningMode::SLAM

Positioning mode to use.

std::string LoadSessionFilePath

Session file to load (path)

bool GenerateMap = false

Generate height map in the session file.

bool EnableWheelOdometry = false

Enable wheel odometry.

bool EnableDepth = true

Enable depth stream.

bool EnableColor = false

Enable color stream.