jimsynz

jimsynz

Ash Core Team

Beam Bots - Resilient Robotics on the BEAM

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

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.

Most Liked

jimsynz

jimsynz

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 #8
jimsynz

jimsynz

Ash Core Team

Week four progress update for Beam Bots - the Elixir robotics framework.

Highlights:

  • Collision detection system (broad phase AABB + narrow phase primitives)
  • IK solvers can now reject self-colliding solutions
  • Commands converted from Tasks to GenServers for interruptibility (E-stop actually stops mid-motion now)
  • New Parameters widget for Livebook
  • WidowX 200 arm running real motions with DLS inverse kinematics
jimsynz

jimsynz

Ash Core Team

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

Where Next?

Popular in Announcing Top

asiniy
Hey there! I wrote a download elixir package which does exactly what its name about - an easy way to download files. I saw solutions ...
New
danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29305 241
New
ityonemo
Currently just starting out on a new mini-project - getting zig NIFs to run in elixir. The idea here is to make the zig NIFs be “embed...
New
seancribbs
Today I released a new dialyzer Mix task as the dialyzex package! At the time we started writing this task, the existing dialyzer integra...
New
kip
ex_cldr provides localisation and internationalisation support based upon the data from the Unicode CLDR project. Unicode released CLDR ...
407 12799 120
New
achempion
Hi, I would like to tell about my initiative to further maintain and develop Waffle project which is the fork of Arc library. The progre...
New
New
Qqwy
TypeCheck: Fast and flexible runtime type-checking for your Elixir projects. Core ideas Type- and function specifications are const...
336 14302 100
New
scohen
Lexical Lexical is a next-generation language server for the Elixir programming language. Features Context aware code completion As-you...
New
kevinlang
Hey all, We have made an Ecto3 Adapter for SQLite3, ecto_sqlite3! We have successfully on-boarded the full suite of integration tests (...
New

Other popular topics Top

siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement