Luos: the OS for robotics - Jump start your Robot
Switch branches/tags
Nothing to show
Clone or download
Latest commit 3eda128 Feb 21, 2018

README.md

Luos: robotic product development made easy

Build Status

Luos is an end-to-end system to fully orchestrate your robot, all the way from hardware control to high level behaviors and Apps management.

It includes out of the box sensors acquisitions and filtering, drivers for advanced motor control for precise and eye-pleasing smooth motion. In the future, most commonly used robotic and AI algorithms will also be available.

Its sandboxed multi-layer architectures and elegant APIs allows for efficient and productive programming.

more information on our website>>

Getting started

Follow our tutorials and go from zero to blinking an Led in Rust in under 30 minutes!

Architecture

Luos is written in Rust and built around 2 main concepts:

  • drivers defines standardized API as Rust traits for common robotics parts (e.g. a servo motor, a position encoder, a distance sensor, etc.). This enforces compatibility amongst drivers and let you seamlessly switch from one actuator/sensor implementation to another without breaking the rest of your code.
  • core represents a physical boards and its associated local drivers. It handles automatically the communication with the other cores - and thus the remote drivers - so you can develop your project with a modular approach.

Development

Luos is lightweight, it can run on low-cost microcontrollers. We currently use the ARM Cortex M0 and develop on STM32F0 µC.

Discover our development boards to test and use Luos.

Example

A typical example of an app developed with Luos will look like this. You can define your own drivers based on the pre-defined traits or use already developed ones. Then, they can be easily composed to make complex behaviors.

extern crate luos;
use luos::{AngleEncoder, Motor};

extern crate luos_driver;
// We use a pre-defined driver for a known motor
use luos_driver::PololuluServoMotor;

// We define our implementation for our own encoder
struct MySpecificEncoder { ... }
impl AngleEncoder for MySpecificEncoder {
    // The API is standardized by traits
    // also enforcing units
    fn get_angle(&self) -> Degrees { ... }
}

fn main() {
    let encoder = MySpecificEncoder { pin: hal::GPIO::PA9 };
    let motor = PololuluServoMotor { pin: hal::GPIO::PB10 };

    asserv::loop(&encoder, &mut motor).run();
}

Join the community

We'd love you to join and contribute to Luos!

We'd love you to contribute to Luos! You can:

You can also contribute by becoming a patron of the project. It will give you exclusive access and content for a monthly donation.

License

This project is licensed under the Apache License, Version 2.0, (LICENSE-APACHE).

Please respect the attribution condition by adding a link to www.luos.io and the following powered by luos logo on any communication and documentation of your project.

This logo is also available in black and white for optimal integration in your design.