Week Five: Tasks Get Orchestrated, Roadmaps Get Transparent
Reactor sagas arrive for task orchestration, the SO-101 hardware lands, Feetech servo support begins, and the proposals repo lets you see what's coming.
Four new repositories in one week. One of them warranted its own blog post. Not bad for the first full work week of the year.
Turns out the secret to productivity is being on holiday with nothing to do but tinker with robots. Amazing what happens when nobody expects you to be anywhere.
BB Reactor: Task Orchestration Done Properly
The headline release this week is bb_reactor, which brings Reactor saga orchestration to Beam Bots. I wrote a whole separate post about why we went this direction instead of behaviour trees, but the short version:
- Compensation and rollback - When a step fails, earlier steps can undo their work. Your robot doesn't get left in a weird state.
- Dependency-driven concurrency - Independent steps run in parallel automatically. No explicit parallel nodes needed.
- Event-driven, not poll-driven - Steps wait for actual messages, not tick cycles. Much better for embedded systems.
- Safety integration - E-stop while a reactor is running? It halts immediately. No more steps execute.

defmodule PickAndPlace do
use Reactor, extensions: [BB.Reactor]
wait_for_state :ready, states: [:idle]
command :move_to_pick do
command :move_to_pose
argument :target, input(:pick_pose)
wait_for :ready
compensate :return_home # If downstream fails, go home
end
command :grip do
command :close_gripper
wait_for :move_to_pick
end
wait_for_event :grip_confirmed do
path [:sensor, :force_torque]
filter &(&1.payload.force > 5.0)
wait_for :grip
end
# ... continue to place position
end
If the grip fails, the reactor automatically runs :return_home to compensate. Behaviour trees don't give you that for free.
The Proposals Repo
What's next for Beam Bots? Now you can find out without reading my mind.
The new proposals repository is a lightweight RFC system. Want to know what features are planned? Check the PRs. Want to propose something? Open a PR using the template.
Currently open for discussion:
- bb_teleop - Teleoperation framework (spacemouse, gamepad input)
- bb_policy - Behaviour cloning and policy learning
- bb_dataset - Recording and replaying robot trajectories
- bb_mcp - Model Context Protocol integration (yes, AI-assisted robotics)
- bb_tui - Terminal UI for robot control
- bb_motion_planning - Path planning with obstacle avoidance
No committees. No final comment periods. Just drafts, discussion, and implementation. If something in there looks interesting and you want to help build it, say hi in Discord.
SO-101 Hardware Arrives
The parts for the SO-101 showed up from AliExpress. It's a 6-DOF arm designed by TheRobotStudio that uses Feetech STS3215 servos - much more affordable than Dynamixels, though with some trade-offs.
Supporting it required two new packages:
-
feetech - Low-level protocol driver for Feetech/WaveShare STS and SCS series servos. Handles the serial communication, register access, and synchronised multi-servo operations.
-
bb_servo_feetech - BB framework integration with controller, actuator, and parameter bridge modules. Same architecture as the Robotis driver.
Fair warning: The Feetech driver is still buggy. The protocol is quirky - load is reported as a percentage rather than mA, status bytes are interpreted differently, and there are some timing sensitivities I'm still working through. Don't use it for anything you can't afford to break just yet.
Reactive Controllers
BB v0.13.0 added off-the-shelf controllers that monitor PubSub messages and trigger actions:
# Disarm if servo current exceeds limit
controller :over_current, {BB.Controller.Threshold,
topic: [:sensor, :servo_status],
field: :current,
max: 1.21,
action: command(:disarm)
}
# React to proximity sensor
controller :collision, {BB.Controller.PatternMatch,
topic: [:sensor, :proximity],
match: fn msg -> msg.payload.distance < 0.05 end,
action: command(:disarm)
}
Useful for safety interlocks and event-driven behaviours without writing custom controller modules.
Simulation Mode Improvements
BB v0.13.1 fixes a paper cut: joint sliders in simulation mode now actually update the 3D visualisation.
The problem was that simulated actuators publish BeginMotion events but the visualisation needs JointState messages. The fix automatically creates OpenLoopPositionEstimator sensors for each actuator when running with simulation: :kinematic. One less thing to configure manually.
bb_servo_robotis on Hex
Finally pushed the button. bb_servo_robotis v0.2.1 is on Hex. Nothing exciting, just structured errors in the parameter bridge. But it's no longer "release imminent" - it's actually released.
Structured Errors Everywhere
Speaking of structured errors, bb_servo_pca9685 v0.5.0 migrated to the same system. All servo drivers now return proper error structs instead of bare tuples. Debugging is easier when error messages tell you what actually went wrong.
All The Releases
Since January 5th:
| Package | Version | What changed |
|---|---|---|
| bb | v0.13.1 | Auto-add position estimators in simulation mode |
| bb | v0.13.0 | Reactive controllers (Threshold, PatternMatch) |
| bb_reactor | v0.2.0 | Reactor saga orchestration for task sequencing |
| feetech | v0.2.0 | Feetech/STS/SCS protocol driver |
| bb_servo_feetech | v0.2.0 | BB integration for Feetech servos (experimental) |
| bb_kino | v0.3.2 | Filter omitted bridges in simulation mode |
| bb_kino | v0.3.1 | Fix direct actuator commands |
| bb_liveview | v0.2.3 | Handle simulation mode and command completion |
| bb_liveview | v0.2.2 | Fix direct actuator commands |
| bb_liveview | v0.2.1 | Support BB 0.13+ command API |
| bb_servo_robotis | v0.2.1 | Structured errors in parameter bridge |
| bb_servo_pca9685 | v0.5.0 | Migrate to structured error system |
What's Next
Getting the Feetech driver stable is the priority. Once that's working reliably, the SO-101 becomes a much more accessible reference platform than the WidowX-200.
After that: probably one of the proposals. The teleoperation framework is tempting - it would be nice to wave a spacemouse around and have the arm follow.
Links
- bb on Hex (v0.13.1)
- bb_reactor on Hex (v0.2.0)
- feetech on Hex (v0.2.0)
- bb_servo_feetech on Hex (v0.2.0)
- Beyond Behaviour Trees blog post
- Proposals repo on GitHub
- Discord