A SLAM algorithm for WebAssembly 🍔

Overview

🍔 Slamburger [in-progress]

This repo is meant to be an extremely teachable codebase for how to do SLAM. It's also meant to provide a library in WebAssembly.

Features

  • Greyscale and blur image
  • Identify image feature keypoints with orientation
  • Calculate BREIF descriptors per keypoint
  • Identify similar keypoints using hamilton distance
  • Calculate 3D transform of movement between two images' keypoints using 8-point algorithm and RANSAC
  • Test to verify things work and find bugs
  • See realtime preview of it working
  • Try to generate a 3D map ...

See the demo

What is SLAM?

SLAM, or Simultaneous Localization and Mapping, is a technique used by robots, drones, or other devices to create a map of their surroundings while simultaneously figuring out their own position within that map. To explain it in simpler terms, it's like giving a device the ability to "see" its environment and understand its location at the same time. This is particularly useful for devices that need to navigate through an unknown or changing environment.

The two main aspects of SLAM are identifying 3D transformations between images and creating 3D meshes of rooms. Let's break down these concepts further:

  • Identifying 3D transformations between images: This is about understanding how one image is related to another in terms of position, orientation, and scale. Imagine you are in a room and take a picture from one corner, then walk to the other corner and take another picture. The SLAM system needs to figure out how these two images are related, even though they have different perspectives. It does this by finding common features or landmarks in both images and determining how they have shifted, rotated, or scaled relative to each other. This information helps the system understand the device's movement in the 3D space.

  • Creating 3D meshes of rooms: A 3D mesh is a representation of a room's structure using interconnected points, lines, and faces. Think of it like a wireframe model of a room. By combining the information from multiple images taken from different perspectives, SLAM can create a 3D mesh that accurately represents the room's shape, size, and layout. The more images the system has, the more detailed and accurate the 3D mesh becomes.

So, in essence, SLAM enables a device to "see" its environment and understand its position within it by analyzing images, recognizing common features, and constructing a 3D mesh of the space. This technology is widely used in robotics, augmented reality, and autonomous vehicles to help them navigate and interact with their surroundings more effectively.

download (1)

You might also like...
A Rust ESP stack trace decoder that can also runs in your browser thanks to WebAssembly
A Rust ESP stack trace decoder that can also runs in your browser thanks to WebAssembly

ESP Stack Trace Decoder A Rust ESP stack trace decoder that can also runs in your browser thanks to WebAssembly. It is composed of a ⌨️ Rust library,

Simple file sharing with client-side encryption, powered by Rust and WebAssembly
Simple file sharing with client-side encryption, powered by Rust and WebAssembly

Hako Simple file sharing with client-side encryption, powered by Rust and WebAssembly Not feature-packed, but basic functionalities are just working.

bn.js bindings for Rust & WebAssembly with primitive-types support

bn.rs bn.js bindings for Rust & WebAssembly with primitive-types support Write Rust code that uses BN use std::str::FromStr; use primitive_types::{H1

A handy calculator, based on Rust and WebAssembly.
A handy calculator, based on Rust and WebAssembly.

qubit 💥 Visit Website To Use Calculator Example 💥 Visit Website To Use Calculator 2 + 2

A simple compile-to-WebAssembly language rewritten in Rust

chasm A very simple compile-to-WebAssembly language You can play with chasm online. This is a rewrite in Rust of the compiler for the language chasm.

Webassembly binding for Hora Approximate Nearest Neighbor Search Library
Webassembly binding for Hora Approximate Nearest Neighbor Search Library

hora-wasm [Homepage] [Document] [Examples] [Hora] Javascript bidding for the Hora Approximate Nearest Neighbor Search, in WebAssembly way. Features Pe

Stylist is a CSS-in-Rust styling solution for WebAssembly Applications.

Stylist Stylist is a CSS-in-Rust styling solution for WebAssembly Applications. This is a fork of css-in-rust. Install Add the following to your Cargo

A template project to demonstrate how to run WebAssembly functions as sidecar microservices in dapr
A template project to demonstrate how to run WebAssembly functions as sidecar microservices in dapr

Demo and tutorials Live Demo | Tutorial article | Tutorial video 1. Introduction DAPR is a portable, event-driven runtime that makes it easy for any d

A curly-braces infix language that compiles to WebAssembly

CurlyWas CurlyWas is a (still WIP) curly-braces, infix synatx for WebAssembly. The goal is to have as to a 1:1 mapping to the resulting wasm instructi

Owner
RICHΛRD ΛNΛYΛ
Data Engineer, Code Philosopher, & Robot Psychologist.
RICHΛRD ΛNΛYΛ
Sealed boxes implementation for Rust/WebAssembly.

Sealed boxes for Rust/WebAssembly This Rust crate provides libsodium sealed boxes for WebAssembly. Usage: // Recipient: create a new key pair let reci

Frank Denis 16 Aug 28, 2022
WebAssembly on Rust is a bright future in making application runs at the Edge or on the Serverless technologies.

WebAssembly Tour WebAssembly on Rust is a bright future in making application runs at the Edge or on the Serverless technologies. We spend a lot of ti

Thang Chung 129 Dec 28, 2022
WebAssembly modules that use Azure services

This is an experimental repository containing WebAssembly modules running on top of WAGI (WebAssembly Gateway Interface, which allows you to run WebAssembly WASI binaries as HTTP handlers) and using Azure services.

null 7 Apr 18, 2022
WebAssembly Service Porter

WebAssembly Service Porter.

henrylee2cn 12 Dec 12, 2022
🚀Wasmer is a fast and secure WebAssembly runtime that enables super lightweight containers to run anywhere

Wasmer is a fast and secure WebAssembly runtime that enables super lightweight containers to run anywhere: from Desktop to the Cloud, Edge and IoT devices.

Wasmer 14.1k Jan 8, 2023
WAGI: WebAssembly Gateway Interface

Write HTTP handlers in WebAssembly with a minimal amount of work

null 724 Jan 6, 2023
A console and web-based Gomoku written in Rust and WebAssembly

?? rust-gomoku A console and web-based Gomoku written in Rust and WebAssembly Getting started with cargo & npm Install required program, run # install

namkyu1999 2 Jan 4, 2022
WebAssembly development with Trunk & Vite.js

Trunk & Vite.js Demo Trunk is a WASM web application bundler for Rust, and Vite.js is next Generation Frontend Tooling. Ok, they are together now for

Libing Chen 6 Nov 24, 2021
darkforest is a console and web-based Roguelike written in Rust and WebAssembly.

darkforest darkforest is a console and web-based Roguelike written in Rust and WebAssembly. Key Features TBA Quick Start TBA How To Contribute Contrib

Chris Ohk 5 Oct 5, 2021
WebAssembly to Lua translator, with runtime

This is a WIP (read: absolutely not ready for serious work) tool for translating WebAssembly into Lua. Support is specifically for LuaJIT, with the se

null 43 Dec 31, 2022