Beam Bots - Resilient Robotics on the BEAM

Beam Bots progress update — the quiet fortnight edition:

  • Gus Workman gave Beam Bots a shoutout in his Nerves Meetup EU talk about the official Nerves Starter Kit — balance bot plans brewing
  • Servo driver architecture rework underway for smoother coordinated moves and better serial bus management across Feetech and Robotis integrations
  • Nx 0.11.0 bumped in bb core — FP8 support, multi-device execution via Nx.Mesh, and Nx.runtime_call/3
  • Dependabot kept the ecosystem tidy while I was elbow-deep in serial protocols

Full post: Week Eleven: The Quiet Fortnight | Beam Bots

2 Likes

Beam Bots Progress Update — Week Thirteen

The latest from the Beam Bots project:

  • First community-built driver — GitHub - BeautifulGirlCoffee/bb_ufactory: Beam Bots integration for uFactory cobot arms · GitHub by @oullette integrates uFactory xArm cobots (xArm5/6/7, Lite6, xArm850) with joint/Cartesian motion, force/torque
    sensing, collision detection, and a 100Hz control loop
  • bb_policy proposal picked up — @joelpaulkoch is working on an implementation to run learned behaviours (e.g. HuggingFace LeRobot models) on the BEAM via ONNX
  • Elixir 1.20.0-rc.2 is out — ~10% faster compilation, type inference across clauses, redundant clause detection. Phoenix and LiveView already shipping compatibility fixes
  • Kino 0.19.0 adds :min/:max/:step to number inputs — useful for constraining joint angle controls in Livebook
  • The usual Dependabot gardening across the ecosystem

Full post: Week Thirteen: Other People's Robots | Beam Bots

1 Like

Beam Bots Progress Update — Week Fifteen

The latest Beam Bots progress update is out:

  • Servo driver rework shipped — both bb_servo_feetech and bb_servo_robotis v0.2.2 replace GenServer message passing with an ETS-backed 100Hz fixed-rate control loop. Batched
    writes, observable state from any process, and safer arming that prevents stale-goal jumps.
  • Code Camp Wellington — gave a talk based on Zach Daniel’s “Building on Bedrock: Elixir’s Fundamental Design Advantage” with a Beam Bots aside.
  • Next up — PR to pkinney/robotis for sync_write_raw support to bring Robotis write batching on par with Feetech.

Breaking changes in the servo drivers if you’re using them — details in the post.

Full update: Week Fifteen: Ticks and Talks | Beam Bots

2 Likes

Beam Bots progress update for April 2026 — a quiet month from me but a busy one from the community.

Highlights:

  • bb_tui — @mcass19 built a full terminal dashboard for BB robots using his own ex_ratatui library (Elixir bindings to Rust ratatui via Rustler). Safety controls, joint manipulation, event streams, parameter editing, and remote
    node attach — all from the terminal. Near feature-parity with bb_liveview. Repo
  • bb_ufactory on real hardware — @houlette’s community-built uFactory xArm driver has been tested against a real xArm unit. First community driver to hit that milestone. Video
  • bb_jido proposal accepted — Jido autonomous agent framework integration is a go. Where bb_reactor handles workflows, Jido agents handle goal-directed decision making.
  • Dependency gardening: Spark 2.6.1, Igniter 0.7.7, LiveView 1.1.28 bumped across the ecosystem.

Also moving to monthly updates going forward.

Full post: April 2026: Chocolate Eggs and Terminal UIs | Beam Bots

2 Likes

The May progress update for Beam Bots is up.

Two Goatmire 2026 sessions confirmed, the first Nerves Starter Kit boards are back from the fab, and the rest of the org has been quietly grazing.

  • Talk: Beam Bots: Robotics on the BEAM — supervision trees as a hardware-resilience strategy, message passing for distributed control, hot code reloading on a running robot, and the DSL story for describing geometry and kinematics.
  • Workshop: Achieving Balance in the Workshop — assemble a balance bot on a custom Nerves Starter Kit carrier board, then drive it from your phone via Phoenix LiveView. Free; limited capacity.
  • First NSK boards (Allwinner T113, designed by Gus Workman / Protolux Electronics) are back from the fab. Gus has Nerves system support landing on the support-nsk branch of nerves_system_trellis.
  • Mauricio Cassola kept shipping bb_tui — SSH transport, ex_ratatui 0.7 → 0.8 migration, UI refresh on the new primitives, and six ex_ratatui releases along the way. - Genuinely quiet month for the core repos. No releases. Two tutorial fixes in bb. Dependabot kept the lights on.

Full post: May 2026: The Calm Before the Goat | Beam Bots

6 Likes

This month Beam Bots grew a sense of orientation. bb went 0.15 → 0.20, and the thread running through it is state estimation:

  • BB.Estimator — a new behaviour + DSL entity for turning noisy sensor data into something you can steer by (proposal 0018, shipped in 0.20.0)
  • bb_estimator_ahrs — three 6-DOF IMU fusion filters (Madgwick, Mahony, Complementary), ported with permission from gworkman/ahrs ( GitHub - gworkman/ahrs: AHRS implemention in Elixir, including Madgwick, Mahony and complementary filters · GitHub )
  • bb_sensor_bmi323 — driver for the Bosch BMI323 IMU over I2C
  • mix bb.from_urdf — import an existing URDF robot description straight into the BB DSL, transmissions and all
  • New packages: bb_mcp (drive robots from LLM agents over MCP) and bb_so101 (TheRobotStudio SO-101 arm); bb_jido went from placeholder to a real Jido-backed agent implementation

Heads-up on breaking changes in 0.16: BB.Message now carries wall-clock time + originating node, force-disarm moved to the topology supervisor, units migrated to localize, and reverse?
left the servo packages for motor-space transmission blocks. There’s a mix bb.upgrade task to ease the move.

There’s also a video of the new stack running on real hardware — a BMI323 fused through a complementary AHRS filter, with live orientation in LiveView matching the device as it moves.

Full write-up: June 2026: Getting Our Bearings | Beam Bots

2 Likes

Here’s what landed in June for Beam Bots, resilient robotics on the BEAM:

  • bb’s kinematics core moved to Nx defn — forward kinematics, all-link transforms and analytical Jacobians instead of finite differences.
  • Both IK solvers cashed in: bb_ik_dls now uses the analytical Jacobian; bb_ik_fabrik is now composable defns.
  • Servo disarm got honest — confirms torque is actually off rather than reporting false success on a dead controller.
  • Continuous commands cancel cleanly — no more “cancellation logged as a crash”, plus cancel controls in bb_kino and bb_liveview.
  • @mcass19’s ex_ratatui + bb_tui now render a live 3D view of your robot in the terminal.
  • Whole ecosystem is on Elixir 1.20 now.
  • Balance bot for the Goatmire workshop is rolling its wheels; learned-policy package (bb_policy) has started.

I’ll be at Goatmire in September and the Ash Summit on 3 October in Varberg — the Ash Summit CFP is open, so submit a talk.

Full write-up: July 2026: Show Your Working | Beam Bots

2 Likes

Beam Bots — August 2026 progress update

bb 0.230.25 rework how commands reach an actuator: all three transports now converge on one required handle_command/2, actuators can be addressed by name or full path, and a driver can declare which command payloads it accepts. Arm state is enforced centrally as a result — it used to be each driver’s job, and three of five weren’t doing it.
Breaking, but the migration is short and the compiler names every module that needs it. All four servo drivers have shipped their versions.
Also in the post: Stop finally stopping, Andrew Houllette’s bb_jido audit, and Damir Batinović running teleop on two SO-101 arms he built himself.

3 Likes

Monthly update for Beam Bots. Eight releases of bb (0.26 → 0.31), about forty across the satellites.

The headline is that a decision I made a few months ago was wrong. BB.Math.Vec3, Quaternion and Transform held Nx tensors, on the grounds that machines running BB have ample CPU headroom. On a two-core Cortex-A7 closing a 100 Hz loop, that premise is false — and the balance bot that couldn’t hold itself up is what told me. They’re plain BEAM floats now, and the numbers off real hardware are worse than I’d have guessed: 6.9× fewer reductions, and about a whole CPU core handed back on a board that has two.

Also in there:

• Multi-DoF joints (:planar, :floating) — both were in the enum and both silently returned identity from forward kinematics

BB.Loop — the framework owns periodic timing now, because everyone’s hand-rolled tick loop was drifting 13%

set_position/4 is synchronous, so a refused command can finally say so

• Trajectories turned out to be broken on any joint with a transmission — five of six on an SO-101

Write-up, with the measurements:

2 Likes