Slamcore SDK Logo

Introduction

  • Overview
    • Technology
    • Software
    • Hardware
  • Getting Started
    • Register
    • Download
    • Install
      • Install on a Headless machine
  • Run with Public Datasets
  • Setting up a Camera
    • Setting up an Intel® RealSense™ Camera
      • Install Intel® RealSense™ Kernel Modules
      • Verify RealSense Setup
      • Install the Camera Firmware
      • Register Your Camera
      • RealSense Camera Calibration (Optional)
    • Set up an OAK-D S2 Camera
      • Set Udev Rules on your Machine
      • Register the Camera
      • OAK-D Camera Calibration
  • Requirements
    • Minimum
    • ROS Wrappers
    • ROS1 Visualisation
    • Recording Datasets
  • Glossary
  • FAQs
  • Troubleshooting
    • Camera Issues
    • SLAM Issues
    • Connection Issues
    • Software Dependencies
    • Dataset Recording Issues
    • ROS Issues

Software Tools

  • Slamcore Visualiser
    • Usage - SLAM
      • Run SLAM on Live Camera Feed
      • Run SLAM on a Recorded Dataset
    • SLAM, Localisation, Mapping and Odometry Mode
      • SLAM mode
      • Localisation mode
      • Height Mapping Mode
    • Usage - Dataset Recording while running SLAM
    • Saving Trajectories
    • The Application
      • 3D Camera Controls
      • Menus
    • Command-Line Options
      • Dataset Subcommand Options
      • RealSense Subcommand Options
      • OAK-D S2 Fixed-Focus Subcommand Options
  • Slamcore Dataset Recorder
    • Usage
    • Application UI
    • Command-Line Options
      • RealSense Subcommand Options
      • OAK-D S2 Fixed-Focus Subcommand Options
  • Slamcore CLI
    • Dataset Recorder CLI
      • Command-Line Options
    • Dataset Compressor
      • Command-Line Options
    • Dataset Processor
      • SLAM, Localisation, Mapping and Odometry Mode
      • Dataset Recording during a SLAM Run
      • Command-Line Options
  • Slamcore Session Explorer
    • Usage
    • The Application
      • Top Menu Bar
      • Left Sidebar
    • Command-Line Options
  • Slamcore Scripts
    • Plot Trajectory
      • Dependencies
      • Usage
      • Command-Line Options
    • Plot Map
      • Dependencies
      • Usage
      • Command-Line Options

API

  • Slamcore C++ API
    • Overview
      • Introduction
      • Initialisation
      • Main SLAM interface
      • Subsystems
      • External Sensor Support
      • General remarks
    • Classes
      • Class slamcore::BadTaggedObjectAccess
      • Class slamcore::BasePoseInterface
      • Class slamcore::ConstImageView
      • Class slamcore::EncoderInterface
      • Class slamcore::EncoderListInterface
      • Class slamcore::ErrorCodeInterface
      • Class slamcore::FixedMeasurementPoint
      • Class slamcore::FrameInterface
      • Class slamcore::FrameSyncInterface
      • Class slamcore::GPSLocationInterface
      • Class slamcore::HeightMappingSubsystemInterface
      • Class slamcore::IMUListInterface
      • Class slamcore::IMUSensorDataInterface
      • Class slamcore::IMUTripletInterface
      • Class slamcore::IMUTripletListInterface
      • Class slamcore::ImageInterface
      • Class slamcore::LIDARScanInterface
      • Class slamcore::LandmarkInterface
      • Class slamcore::LogMessageInterface
      • Class slamcore::Map2DAccessInterface
      • Class slamcore::Map2DInterface
      • Class slamcore::MapChannel2DInterface
      • Class slamcore::Matrix
      • Class slamcore::MeasurementPoint
      • Class slamcore::MetaDataInterface
      • Class slamcore::MultiFrameInterface
      • Class slamcore::OptimisedTrajectorySubsystemInterface
      • Class slamcore::PointCloudInterface
      • Class slamcore::PoseInterface
      • Class slamcore::PoseListInterface
      • Class slamcore::PoseWriteInterface
      • Class slamcore::PropertiesInterface
      • Class slamcore::Range1D
      • Class slamcore::Range2D
      • Class slamcore::RangeIterator
      • Class slamcore::ReferenceFrame
      • Class slamcore::SLAMAsyncTasksInterface
      • Class slamcore::SLAMCoreInterface
      • Class slamcore::SLAMSubsystemAccessInterface
      • Class slamcore::SLAMSystemCallbackInterface
      • Class slamcore::SLAMSystemInterface
      • Class slamcore::SensorSourceInterface
      • Class slamcore::SensorsInfoInterface
      • Class slamcore::SparseMapInterface
      • Class slamcore::StaticPoseInterface
      • Class slamcore::SubsystemInterface
      • Class slamcore::TaskStatusInterface
      • Class slamcore::TrackingStatusListInterface
      • Class slamcore::TrajectoryHelper
      • Class slamcore::TransformationSample
      • Class slamcore::VelocityInterface
      • Class slamcore::Version
      • Class slamcore::WheelOdometrySample
      • Class slamcore::WheelOdometrySensorInterface
      • Class slamcore::slam_exception
    • Files
      • File base_pose.hpp
      • File basic.hpp
      • File clocks.hpp
      • File common.hpp
      • File const_image_view.hpp
      • File distortion_type.hpp
      • File encoder.hpp
      • File encoder_list.hpp
      • File error_code.hpp
      • File errors.hpp
      • File fixed_measurement_point.hpp
      • File frame.hpp
      • File frame_sync.hpp
      • File gps_location.hpp
      • File height_mapping.hpp
      • File image.hpp
      • File imu_list.hpp
      • File imu_sensor_data.hpp
      • File imu_triplet.hpp
      • File imu_triplet_list.hpp
      • File landmark.hpp
      • File lidar_scan.hpp
      • File logging.hpp
      • File map2d.hpp
      • File map2d_interface.hpp
      • File map_channel2d.hpp
      • File matrix.hpp
      • File measurement_point.hpp
      • File meta_data.hpp
      • File multi_frame.hpp
      • File multi_session_id.hpp
      • File optimised_trajectory.hpp
      • File point_cloud.hpp
      • File pose.hpp
      • File pose_list.hpp
      • File pose_write.hpp
      • File positioning_mode.hpp
      • File properties_interface.hpp
      • File property.hpp
      • File range.hpp
      • File range_iterator.hpp
      • File reference_frame.hpp
      • File reference_frame_category.hpp
      • File sensor_id.hpp
      • File sensor_source.hpp
      • File sensor_source_interface.hpp
      • File sensors_info.hpp
      • File slam_async_tasks.hpp
      • File slam_core.hpp
      • File slam_create.hpp
      • File slam_event.hpp
      • File slam_subsystem_access.hpp
      • File slam_system.hpp
      • File slam_system_callback.hpp
      • File slamcore.hpp
      • File sparse_map.hpp
      • File static_pose.hpp
      • File strcasecmp.hpp
      • File stream.hpp
      • File stream_type.hpp
      • File subsystem.hpp
      • File system_configuration.hpp
      • File tagged_object.hpp
      • File task_status.hpp
      • File tracking_status.hpp
      • File tracking_status_list.hpp
      • File transform.hpp
      • File transformation_sample.hpp
      • File velocity.hpp
      • File version.hpp
      • File wheel_odometry.hpp
      • File wheel_odometry_sample.hpp
    • Structs
      • Struct slamcore::CellCoordinates
      • Struct slamcore::ConstTaggedObject
      • Struct slamcore::GenericMultiSessionId
      • Struct slamcore::GenericMultiSessionId< detail::MultiSessionIdT::Base >
      • Struct slamcore::GenericMultiSessionId< detail::MultiSessionIdT::KeyFrame >
      • Struct slamcore::ImageFormatTraits
      • Struct slamcore::ImageFormatTraits< ImageFormat::Mono_16 >
      • Struct slamcore::ImageFormatTraits< ImageFormat::Mono_32 >
      • Struct slamcore::ImageFormatTraits< ImageFormat::Mono_64 >
      • Struct slamcore::ImageFormatTraits< ImageFormat::Mono_8 >
      • Struct slamcore::ImageFormatTraits< ImageFormat::Mono_F >
      • Struct slamcore::ImageFormatTraits< ImageFormat::RGBA_8 >
      • Struct slamcore::ImageFormatTraits< ImageFormat::RGBA_F >
      • Struct slamcore::ImageFormatTraits< ImageFormat::RGB_8 >
      • Struct slamcore::ImageFormatTraits< ImageFormat::RGB_F >
      • Struct slamcore::StreamType
      • Struct slamcore::StreamType< Stream::ActiveMap >
      • Struct slamcore::StreamType< Stream::ErrorCode >
      • Struct slamcore::StreamType< Stream::FrameSync >
      • Struct slamcore::StreamType< Stream::IMU >
      • Struct slamcore::StreamType< Stream::LocalPointCloud >
      • Struct slamcore::StreamType< Stream::MetaData >
      • Struct slamcore::StreamType< Stream::Pose >
      • Struct slamcore::StreamType< Stream::SmoothPose >
      • Struct slamcore::StreamType< Stream::Velocity >
      • Struct slamcore::StreamType< Stream::Video >
      • Struct slamcore::TaggedObject
      • Struct slamcore::Transform
      • Struct slamcore::TypeTraits
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< EncoderInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< EncoderListInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< ErrorCodeInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< FrameInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< FrameSyncInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< GPSLocationInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< IMUListInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< IMUSensorDataInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< IMUTripletInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< IMUTripletListInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< ImageInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< LIDARScanInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< LandmarkInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< Map2DInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< MapChannel2DInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< MetaDataInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< MultiFrameInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< PointCloudInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< SparseMapInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< StaticPoseInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< TaskStatusInterface, T >::type >
      • Struct slamcore::TypeTraits< T, typename enable_if_is_base_of< TrackingStatusListInterface, T >::type >
      • Struct slamcore::camera_clock
      • Struct slamcore::gps_clock
      • Struct slamcore::host_clock
      • Struct slamcore::imu_clock
      • Struct slamcore::lidar_clock
      • Struct slamcore::odometry_clock
      • Struct slamcore::v0::SystemConfiguration
    • Namespaces
      • Namespace slamcore
      • Namespace slamcore::detail
      • Namespace slamcore::internal
      • Namespace slamcore::v0
      • Namespace std
    • Examples
      • Example ascii_image.cpp
      • Example ascii_mapping.cpp
      • Example hello_world_all_streams.cpp
      • Example high_rate_pose.cpp
      • Example measure_slam_performance.cpp
      • Example multisession.cpp
      • Example plot_map.py
      • Example plot_trajectory.py
      • Example record_dataset.cpp
      • Example reset.cpp
      • Example save_load_session.cpp
      • Example wheel_odometry.cpp
      • Example write_map.cpp
      • Example write_trajectory.cpp
  • Python API
    • Download
  • Slamcore ROS1 Wrapper
    • Software Prerequisites
    • ROS1 Wrapper Layout
    • Installation
    • Usage - SLAM
      • Live SLAM
      • SLAM using a recorded dataset
      • VIO Mode
      • Localisation Mode
      • Height Mapping Mode
    • Usage - Dataset Recording
      • Dataset Recording during a SLAM run
      • Standalone Dataset Recorder
    • ROS1 Visualisation
    • ROS1 API
      • Advertised Topics
      • Advertised Services
      • Advertised Parameters
  • Slamcore ROS 2 Wrapper
    • Introduction
    • Usage - SLAM
      • Live SLAM
      • SLAM using a recorded dataset
      • VIO Mode
      • Localisation Mode
      • Height Mapping Mode
    • Usage - Dataset Recording
      • Dataset Recording during a SLAM run
      • Standalone Dataset Recorder
    • ROS 2 API
      • Lifecycles Nodes
      • Advertised Topics
      • Advertised Services
      • Advertised Parameters
  • Migrating from Earlier API Versions
    • Slamcore SDK v23.01
      • Session file format
      • JSON configuration file migration
      • Tracking Information
    • Slamcore SDK v21.06.85
      • Layout
      • Subsystems and I/O
      • Types and Objects

Configuration

  • Configuration Overview
    • Download
    • Usage
      • Visualiser, Dataset Recorder and CLI
      • ROS1 Wrapper
      • ROS 2 Wrapper
    • Configuration Files
      • Environment-Specific Presets
      • Feature-Specific Presets
      • Custom Configuration
  • RealSense Configuration
  • SLAM Configuration
    • Display Name
    • Positioning Mode
    • Estimator Parameters
    • Frontend Parameters
      • Tracking On Plane
    • Multisession Parameters
  • Height Mapping Configuration
    • EnableFeatureMap2D
    • Height Mapping Parameters
      • Occupancy Extraction Parameters
  • Point Cloud Configuration
    • Point Cloud Trimming
      • Vertical Height Trimming
      • Depth Trimming

Tutorials & Examples

  • Tutorial Overview
    • 1. Capturing Datasets
    • 2. Processing Datasets
      • Visual-Inertial Odometry (VIO)
      • Single-session SLAM mode
      • Localisation using a pre-built point cloud
    • 3. Multi-Agent Localisation
    • 4. Wheel Odometry Integration
    • 5. 2D Occupancy Mapping
    • 6. ROS1 Melodic Navigation Stack Integration
    • 7. ROS 2 Foxy Nav2 Integration
  • Capturing Datasets
    • Step 1 - Capture a Master Dataset of the entire test space
      • Step 1.1 - Launch the Dataset Recorder
      • Step 1.2 - Start the recorder
      • Step 1.3 - Move the sensor around the test environment twice
      • Step 1.4 - Stop recording
    • Step 2 - Capture Evaluation Datasets
  • Localisation Mode
    • Step 1 - Create a master configuration file
    • Step 2 - Create the Offline Master Point-cloud
      • Step 2.1 - Launch the slamcore_visualiser tool
      • Step 2.2 - Generate the Offline Master Point-cloud
      • Step 2.3 - Save the Point-cloud
    • Step 3 - Create an Evaluation Configuration File
    • Step 4 - Evaluation: Localise within the Point-cloud
      • Step 4.1 - Load the Evaluation Datasets
      • Step 4.2 - Load the Point-cloud to Run the Dataset Within
      • Step 4.3 - Process the Evaluation Dataset
    • Step 5 - Evaluate the System with a Live Sensor Feed
      • Step 5.1 - Launch the Positioning Tool
      • Step 5.2 - Load the Point-cloud to Use for Live Localisation
      • Step 5.3 - Run the System Live
  • Single Session SLAM Positioning Mode
    • Step 1 - Create a Configuration File
    • Step 2 - Process a Dataset
    • Step 3 - Try the System in Live Mode
  • Visual-Inertial Odometry Positioning
    • Step 1 - Create a Configuration File
    • Step 2 - Process a Dataset
    • Step 3 - Try the System in Live Mode
  • Multi-Agent Localisation
    • Step 1 - Create a Master Configuration File
    • Step 2 - Create the Offline Master Point-cloud
      • Step 2.1 - Launch the slamcore_visualiser Tool
      • Step 2.2 - Generate the Offline Master Point-cloud
      • Step 2.3 - Save the Point-cloud
    • Step 3 - Copy the Session Map File to any Compatible Machine
    • Step 4 - Run Localisation using a Pre-built Point-cloud
      • Step 4.1 - Launch the Positioning Tool on any Compatible Machine
      • Step 4.2 - Load the Point-cloud to Use for Live Localisation
      • Step 4.3 - Run the System Live
  • RealSense Camera Calibration
    • Requirements
    • Recording Environment
    • Capturing a Sequence
    • Send Files to Slamcore for Calibration
      • Dataset Folder Structure
      • Dataset Validation
      • Compress the files
      • Upload the sequences
      • Calibration Confirmation
  • Wheel Odometry Integration
    • Requirements
    • VI Calibration
    • VIK Calibration
      • VIK Calibration Dataset
      • Recording Procedure
      • Calibration Sequences
      • Dataset Folder Structure
    • Send to Slamcore for Calibration
      • Dataset Validation
      • Compress the files
      • Obtain the Camera-Odometry Frame of Reference Transformation
      • Email Slamcore
    • Run the system in VIK Mode
      • Run VIK SLAM on live camera (ROS)
      • Run VIK SLAM with a dataset
  • 2D Occupancy Mapping
    • Requirements
    • Usage
      • Step 1 - Record a dataset of the entire test environment
      • Step 2 - Prepare the mapping configuration file
      • Step 3 - Create a session map
      • Step 4 - Inspect Map in Session Explorer
      • Step 5 - Load Occupancy Map in ROS
  • ROS1 Navigation Stack Integration
    • Goal
    • Hardware Setup
    • ROS1 Navigation Stack Setup
    • Outline
    • Set up Dependencies
      • Set up Binary Dependencies
      • Set up ROS1 work workspace
    • Run Visual-Inertial-Kinematic Calibration
    • Compute the slamcore/base_link ➞ base_footprint Transformation
    • Record Dataset to Map the Environment
    • Create Session and Map for Navigation
      • Edit the Generated Session/Map
    • Specify the Session and the Configuration File Paths
    • Launch Live Navigation
      • Interact with the Navigation Demo
      • Waypoint Navigation
    • Appendix
      • Navigation Demo Video
      • Remote Visualisation of the Navigation Demo
      • Obstacle Avoidance
      • Troubleshooting
  • Nav2 Integration Overview
    • Goal
    • Hardware Setup
    • Nav2 - Slamcore Integration
    • How to Set Up and Run the Examples
  • Nav2 Integration Guide
    • Outline
    • Robot-specific Features and Changes When Using Slamcore
    • Initial Robot Set Up and Configuration
    • slamcore-ros2-examples Metapackage Set Up
    • Visualization Machine Set Up
    • Teleoperation
    • Visual-Inertial-Kinematic Calibration
    • The slamcore/base_link ➞ base_link Transformation
    • Mapping and Live Navigation
      • Navigation in Single Session SLAM Mode
      • Navigation in Localisation Mode Using a Pre-recorded Map
      • Interact with the Navigation Demo
      • Nav2 Configuration
    • Appendix
      • Troubleshooting
      • PS4 Button Mapping
      • Known Issues

Technical Guides

  • Guide to Trajectories
  • Tracking Information
    • Tracking Status
    • SLAM Events
  • Frames of Reference Convention
    • map and odom frames

Additional Information

  • Telemetry Data
  • Feature Roadmap
    • Coming Soon
    • Future
  • Feedback
  • Documentation License
  • Contact Information
  • Release Notes
    • Version 23.01
      • New
      • Breaking Changes
    • Version 21.06.3
      • Improved
    • Version 21.06.2
      • Fixed
    • Version 21.06.1
      • New
      • Improved
    • Version 21.06
      • New
      • Improved
      • Fixed
    • Version 21.05.3
      • Improved
    • Version 21.05.2
      • Improved
      • Fixed
    • Version 21.05.1
      • Improved
    • Version 21.05
      • New
      • Improved
    • Version 21.04.1
      • Improved
    • Version 21.04
      • New
      • Improved
      • Fixed
    • Version 21.03
      • New
      • Improved
      • Fixed
    • Version 21.02.1
      • Improved
    • Version 21.02
      • New
      • Fixed
    • Version 21.01.1
      • Fixed
    • Version 21.01
      • New
      • Improved
      • Fixed
    • Version 0.6
      • New
      • Improved
      • Fixed
    • Version 0.5.2
      • New
    • Version 0.5.1
      • Fixed
    • Version 0.5
      • New
      • Improved
      • Fixed
    • Version 0.4
      • New
      • Improved
      • Fixed
    • Version 0.3
      • New
      • Improved
    • Version 0.2
      • New
    • Version 0.1.0
Slamcore SDK
  • »
  • Nav2 Integration Overview
Previous Next

Nav2 Integration Overview

This page introduces users to a number of example implementations provided in the slamcore-ros2-examples repository which integrate the Slamcore SLAM algorithms into Nav2 (the ROS 2 Navigation Stack), using Slamcore as the core component to map the environment as well as to provide accurate positioning of the robotic platform, in ROS 2 Foxy or Galactic.

Note

This page covers an introduction to the Slamcore ↔︎ Nav2 Integration, the supported robot platforms and how to set them up, as well as any changes that are required to use Slamcore.

For the actual demo instructions, see the following page, Nav2 Integration Guide.

Goal

In these examples the Slamcore SDK is used as the main source of positioning during navigation as well as for mapping the environment before or during navigation. In the Nav2 documentation examples, localisation and mapping is done using SLAM Toolbox, an open-source 2D graph-based SLAM library which uses a 2D laser scan for these tasks. AMCL, which also uses 2D laser scans, is also suggested as a localisation alternative.

Instead, we’ll be using the 2D Occupancy Mapping capabilities of our SDK to generate an occupancy grid map and our visual-inertial SLAM positioning to localise in that map. Additionally, we will integrate wheel odometry into our SLAM system to increase localisation robustness.

Warning

To use wheel odometry, you will require a unique VIK calibration. Further details are provided in the Visual-Inertial-Kinematic Calibration section of the Nav2 Integration Guide.

_images/slamcore-ros-setup.png

Fig. 69 Using the Slamcore ROS 2 Wrapper for navigation

Hardware Setup

The slamcore-ros2-examples repository provides example launch and configuration files to use the Slamcore ROS 2 Wrapper with an Intel RealSense D435i camera, a compute module such as the NVIDIA Jetson Xavier NX or Raspberry Pi 4B, and one of the following robotic platforms:

  • iRobot Create 3

  • Clearpath Robotics TurtleBot 4 Standard or Lite

  • Yujin Robot Kobuki

We will also use a laptop as a visualisation machine. Images of each setup along with mounting instructions can be found in the tabs below.

_images/create3.png

Supported Software

  • ROS 2 Galactic

  • Slamcore SDK v23.01 v23.01

  • Create 3 Firmware G4.1

Mounting Hardware

In our example, we mounted the RealSense D435i camera using iRobot’s 3D printable camera mount, which can be downloaded from the Create3 docs Sensor Mounts Page. Mounts for the Raspberry Pi 4B or Jetson Xavier NX can also be found in their Compute Boards Page.

Mounting Instructions & Hookup Guide

For this example, the camera mount was placed right behind the Create 3 buttons and secured using 4x M3 self-tapping screws under the Create 3 plate, which screwed into the 3D printed mount from underneath. The compute board was mounted with another 3D printed mount in the cargo bay and connected to the Create 3 as explained in their Hookup Guides (Jetson Xavier NX, Raspberry Pi).

Make sure to also configure the software on your compute board to communicate with the Create 3 over USB correctly as explained in their Software Config pages (Jetson Xavier NX, Raspberry Pi).

Lastly, if you’d like to use wheel odometry, make sure you set up Chrony on your compute board following the Network Time Protocol page from the Create 3 docs, to ensure the Create 3 and compute board are on the same clock.

_images/turtlebot4.png

Supported Software

  • ROS 2 Galactic

  • Slamcore SDK v23.01

  • Create 3 Firmware G4.1

Mounting Hardware

The TurtleBot 4 models come pre-assembled and do not required any additional mounting hardware unless you want to replace the Raspberry Pi 4B with a different compute board.

Mounting Instructions & Hookup Guide

Simply replace the Oak-D camera with a RealSense D435i.

_images/kobuki.png

Supported Software

  • ROS 2 Foxy

  • Slamcore SDK v23.01

Mounting Hardware

We designed a custom mount for the Kobuki to hold the RealSense D435i and Jetson Xavier NX board. Download the STL file for 3D printing and SVG for laser cutting from the following links:

  • Camera mount

  • Mounting plates

Additional components required for mounting are listed in the assembly guide linked below.

Mounting Instructions & Hookup Guide

Follow the Kobuki Hardware Assembly Guide.

Nav2 - Slamcore Integration

Traditionally Nav2 requires the following components to be in place:

  • An occupancy grid map of the environment, either generated ahead of time, or live.

  • A global planner and a controller (also known as local planner in ROS1) which guide your robot from the start to the end location. The default choice for these are NavFn for the global planner and DWB for the controller. Other available options are discussed in the Selecting the Algorithm Plugins section of the Nav2 docs.

  • A global and local costmap which assign computation costs to the aforementioned grid map so that the planner chooses to go through or to avoid certain routes in the map.

  • A localisation module, such as SLAM Toolbox or AMCL.

As discussed earlier, we’ll be using Slamcore software to generate a map of the environment as well as localising the robot in the environment. On top of that, we’ll use the NavFn global planner and DWB controller for navigation. Lastly, we will be using the local point cloud published by our software for obstacle avoidance.

Positioning information is transmitted to Nav2 using TF, so we will need to make sure the correct transforms are set up and being broadcast for Nav2 to function correctly. A short introduction to the required transforms is provided in the Nav2 Setting Up Transformations tutorial page. As explained in the drop-down below, the Slamcore ROS Wrapper abides to REP-105 and will publish both the the map \(\rightarrow\) odom and odom \(\rightarrow\) base_link transforms required for navigation by default.

Abiding to REP-105 - map and odom frames

Note

Many popular ROS frameworks, like the navigation stack abide to the ROS Coordinate Frames convention - REP-105, and thus requires two transformations to operate:

  • map \(\rightarrow\) base_link

  • odom \(\rightarrow\) base_link

where base_link is the main frame of reference of the robot platform in use.

This way a ROS node that’s interested in the pose of the robot can query either map \(\rightarrow\) base_link or odom \(\rightarrow\) base_link. If it queries the former, it will get the most accurate estimation of the robot pose, however, that may include discontinuities or jumps. On the other hand, the odom \(\rightarrow\) base_link transform is drift-y and overall less-accurate but is guaranteed to change smoothly over time.

Traditionally the localisation module would compute the map \(\rightarrow\) base_link transform, and would use the latest odom \(\rightarrow\) base_link, as published by the odometry node (e.g. dead reckoning via wheel odometry) to eventually publish map \(\rightarrow\) odom and abide to REP-105.

To abide to this standard and also increase the overall accuracy of these transforms, the Slamcore ROS Wrappers incorporate the latest odometry information and publish both the map \(\rightarrow\) odom and odom \(\rightarrow\) base_link transforms. This way we can provide a smooth odom \(\rightarrow\) base_link transform that potentially uses the wheel-odometry, as well as information from the visual and inertial sensors.

For more on Slamcore’s frames of reference convention, see Frames of Reference Convention.

As seen above, Nav2 has similar requirements to the ROS1 Navigation Stack - you need a map, some sort of positioning (TF) and some sensor streams for obstacle avoidance, and these are all provided by our software. The main difference with ROS1 is that Nav2 no longer uses the move_base finite state machine and instead uses Behaviour Trees to call modular servers to complete an action (e.g. compute a path, navigate…). This allows the user to configure the navigation behaviour easily using plugins in a behaviour tree xml file. A detailed comparison with the ROS1 Navigation stack can be found in the ROS to ROS 2 Navigation Nav2 docs page.

_images/slamcore-nav2-setup.png

Fig. 70 Slamcore integration into Nav2

Nav2’s parameters and plugins, which can be configured for your unique use case, have been included and can be easily modified in the nav2-demo-params yaml file for each robot, in our repository. These parameters are based on the default configuration provided in the nav2_params.yaml file from the Nav2 repository. Specific details about Nav2 configuration and obstacle avoidance parameters when using Slamcore can be found in the Nav2 Configuration section of the Nav2 Integration Guide page.

How to Set Up and Run the Examples

To set up the examples and learn more about any changes required to your robot setup, visit the next page, Nav2 Integration Guide.

Previous Next

© Copyright 2021, Slamcore Limited.

Releases v: 23.01
21.06
23.01