Skip to content
/ slamrs Public

My take on implementing and playing around with SLAM algorithms in Rust.

Notifications You must be signed in to change notification settings

antbern/slamrs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

slamrs

Github Pages Build & Test

This repository contains the code for my attempt to overcome the issues faced with the old gridmap-slam-robot project. The issues were mainly related to performance of the algorithms and the absense of a possibility to publish for the web. I have since also upgraded the system with a LIDAR unit from a Neato robot vacuum cleaner, such as those described in ssloy/neato-xv11-lidar, which also increases the amount of data being available to be processed.

Current Features

  • Home-grown immediate mode OpenGL shape drawing library using vertex buffers and shaders.

  • A fully typed topic-based publish-subscribe system.

  • A system of Nodes that communicate through the pub-sub system.

    • Fully declarative configuration file for enabling and connecting nodes to topics as well as configuring their parameters.
    • A simulator for a differential drive robot with a laser range scanner (a.k.a a LIDAR).
    • Ability to connect to and control the robot with a Neato LIDAR via the serial port or over a TCP connection.
    • Implementation of point-to-plane ICP for doing scan matching (link to videos and resources).
    • Implementation of grid-based SLAM using a particle filter and Bayesian log-odds update rules.
    • Fully flexible and customizable data visualization node.
  • Runs on desktop and in the browser through wasm! (except for nodes that load files or connects to the serial port)

  • Robot with a Neato XV11 LIDAR

Future Directions

An unfiltered (and unstructured) list of high-level ideas for future development:

  • A Node that can record and replay data on topics, with support for persistence and time-stamped messages.
  • Improve configuration for sensor and robot motion models, bot forward and inverse.
  • Improved pointmap map that can be used for more "global" mapping with ICP.
    • Need to drop points in a smart way to keep complexity of the ICP algorightm down.
    • Can we use this with a particle filter?
  • Extraction of "landmarks" from lidar data
    • Perhaps including the strength values from the LIDAR unit, would need to be added to the simulator.
  • Implement EKF or graph-based slam using the extracted landmarks.
  • Add "exploration mode" where driving commands are generated to explore the world and gain more knowledge about it.
  • Path generation and following by mouse click on the map.
  • Add dynamic "Obstacles" to the Simulator.
  • Saving and loading of maps (+global localization? could use particle filter with uniform starting locations for that)
  • Connection with "real robot", updated from my previous gridmap-slam-robot project. (#99)
  • Arbitrary input configuration for Nodes, i.e., node inputs can be connected to topics or constants. Same with outputs.
  • Async? Can we make us of that in a good way?
    • Right now only reasonable when waiting for a value to arrive through the pub-sub system, but might be relevant still.

About

My take on implementing and playing around with SLAM algorithms in Rust.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages