jimsynz

jimsynz

Ash Core Team

Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns.

Why?

When you look at ROS2’s architecture, so much of what it provides maps directly to BEAM/OTP patterns:

  • ROS2’s pubsub → Phoenix.PubSub, Registry, process messaging
  • ROS2’s Services → GenServer.call/3
  • ROS2’s Actions → supervised Task with progress messages
  • ROS2’s Controllers → GenServers with state machines
  • ROS2’s parameter system → ETS

The BEAM already gives you fault tolerance, concurrency, soft real-time performance, and good behaviour in resource-constrained environments. BB builds on that
foundation.

See harton.nz • Elixir for Robots for more

Features

  • Spark DSL for declarative robot definitions - your code mirrors your robot’s physical structure
  • Topology-based supervision - the supervision tree mirrors your robot topology for fault isolation
  • Physical units with the ~u sigil - ~u(90 degree), ~u(0.5 meter), ~u(10 newton_meter)
  • Forward kinematics using Nx (GPU-accelerated where supported)
  • Hierarchical PubSub for sensor data with message type filtering
  • URDF export for integration with ROS visualisation tools

Current Status

Early days - the framework compiles, tests pass, and the DSL works, but it hasn’t controlled physical robots yet. I’m currently building a rover to close that loop.
Looking for feedback and contributors.

Read harton.nz • Announcing Beam Bots: Resilient Robotics on the BEAM for more details.

Links

https://github.com/beam-bots/bb

Tutorials

See the tutorials for a guided introduction:

  1. Your First Robot - defining robots with the DSL
  2. Starting and Stopping - supervision trees
  3. Sensors and PubSub - publishing and subscribing to messages
  4. Forward Kinematics - computing link positions
  5. Commands and State Machine - controlling the robot
  6. Exporting to URDF - interoperability with ROS tools
  7. Parameters - runtime-adjustable configuration
  8. Parameter Bridges - bidirectional remote access

The DSL Reference documents all available options.

Showing Posts 1 to 10

pxp9

pxp9

Amazing, as far a I have read , this is intended to run in Nerves or any OS, right ?

I suppose it will be something like this if we go full Elixir stack:

Your entire stack will be a Nerves application.

You will just add the Robot done with BB to the Nerves supervision tree.

Let me know if I am wrong please.

jimsynz

jimsynz OP

Ash Core Team

Yeah, it’s will run anywhere. You define your robot in the DSL, add genservers for the various sensors and actuators and controllers and away you go. Nerves is optional, but I expect a lot of folks will want to use it.

joelpaulkoch

joelpaulkoch

Amazing! Thank you for the tutorials, I’ll work my way through them during the holidays

AstonJ

AstonJ

This looks neat! Curious to see what kind of Robots people will use it for - are there any particular types BB is suited to?

Videos of cute/cool robots powered by Elixir always appreciated too! :robot:

jimsynz

jimsynz OP

Ash Core Team

It should be generic enough to handle pretty much any kind of bot. You can load in a bunch of links and joints and use IK to move it through the world or you can use a single link and ignore kinematics altogether. The idea is to give you structure to help you model your robot without requiring you to do so.

AstonJ

AstonJ

Ah nice! If you position it as a framework it could be a nice way to not only be seen as a competitor to ROS, but as an inroad into Elixir too (people are generally attracted to frameworks, especially for new/unfamiliar territory).

jimsynz

jimsynz OP

Ash Core Team

That’s definitely the idea. I want to build it out to the point that it’s a no brainer if you want to build robots to use BB. I know I’m in for the long haul to build out the ecosystem of packages and device support but it’s something that I’ve wanted to exist for years, and now I’ve spent several years being shown how to lovingly own and evangelise a framework by @zachdaniel I think I can handle the challenge.

10
Post #7
codeanpeace

codeanpeace

Just thinking out loud, this could also be great for students as an approachable robotics kit for the classroom like what Arduino did with their starter kits

jimsynz

jimsynz OP

Ash Core Team

it’s definitely something I plan to do, starting with something very very simple.

jimsynz

jimsynz OP

Ash Core Team

Lots of work going on over in beam bots land. We’ve been adding new standard message types as well as publishing initial versions of bb_servo_pigpio and bb_servo_pca9685 which use the new message types to send and receive motion information. Something I’m particularly happy about is having a standardised position estimator for open loop joints (ie anything without position feedback) - and that it’s such a simple genserver.

Where Next? Top

Trending in Announcing Top

wojtekmach
Hey everyone! Req is an HTTP client for Elixir that I’ve been working on for quite some time. There is already a lot of HTTP clients out...
New
handnot2
Samly can be used to enable SAML 2.0 Single Sign On in a Plug/Phoenix application. This library uses Erlang esaml to provide plug enabl...
New
woylie
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries. offset-based pagination with...
New
MRdotB
I needed to reuse React components from my Chrome extension in my Phoenix/LiveView backend. I noticed that for Svelte/Vue, there are live...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
fuelen
Hi all! I want to present a small library which provides a mix task for generating an Entity-Relationship Diagram for Ecto schemas. You...
New
anuaralfetahe
Hello Published a new library - ProcessHub! ProcessHub is a library designed to manage process distribution within the Elixir cluster. ...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
AstonJ
This showed up on my feed.. anyone heard of it? Just hype? Ox Alpha is a reasoning model designed for coding, sustained ag...
New
sergio
It’s not that it’s vocabulary is too advanced. It’s something worse. I get lost trying to follow even a paragraph written by Claude. It’...
New
sorenone
Today we’re releasing Oban for Python. Not an Oban client in Python. Not a pythonx wrapper embedded in Elixir. Nope, it’s a fully operati...
New
akoutmos
@hugobarauna, Dr. Dimitrios Koutmos (my brother) and I (Alex Koutmos) have been hard at work on writing a book on how you can use Elixir ...
New
pferriby
Introductory paragraph I’ll be looking for a keen junior or someone that has a couple of years experience in the real world (so you’ve be...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews