Week Two: Tell It Where, Not How
The WidowX-200 comes alive with Dynamixel control, inverse kinematics lands, a LiveView dashboard appears, and we're planning a budget-friendly robot arm for 2026.
The WidowX-200 that Frank donated? It moves now. Under Elixir control. This is not a drill.
The Arm Lives
After a week of hacking on Dynamixel protocol support, I can now command the WidowX-200's servos directly from Beam Bots. The bb_servo_robotis package handles the full integration:
- Actuator control - set joint positions and the arm actually goes there
- Sensor telemetry - real-time temperature, voltage, current draw, and hardware error monitoring
- Parameter bridges - read firmware versions, tune PID controllers, and access servo configuration through the BB parameter system
All of this talks to the hardware via the Robotis Protocol 2.0 over a U2D2 USB adapter. The robotis package (our fork of pkinney/robotis) handles the low-level protocol, and bb_servo_robotis wraps it into Beam Bots actuators, controllers, and sensors.
The package isn't on Hex yet because it depends on our fork via git. Once our upstream PR merges, we'll publish. Patience, young padawan.
Inverse Kinematics (Early Stage)
The new bb_ik_fabrik package implements the FABRIK algorithm for inverse kinematics. Instead of saying "rotate joint 1 to 45 degrees, joint 2 to 30 degrees...", you can say "put the gripper at position (x, y, z)" and the solver figures out the joint angles.
The core framework got a matching BB.Motion API that ties it all together:
# Move the gripper to a point in space
BB.Motion.move_to(robot, :gripper, , BB.IK.FABRIK)
# Or solve without sending commands (for validation)
= BB.Motion.solve_only(robot, :gripper, target, BB.IK.FABRIK)
Fair warning: The FABRIK solver is very early stage. It currently ignores joint constraints and collision detection, which means it can produce solutions that exceed your joint limits or send your arm through itself. Use it in simulation only, or on real hardware with extreme caution. This will improve, but right now it's a "trust but verify" situation - emphasis on verify.
Multi-target solving runs in parallel for coordinated motion, which will be useful for gait generators once the solver matures.
LiveView Dashboard
The bb_liveview package is now on Hex. One line of code in your Phoenix router and you get:
- Safety arm/disarm controls with visual state indicators
- Joint sliders with real-time position feedback
- Interactive 3D visualisation (Three.js) that updates as the robot moves
- PubSub event stream viewer with filtering
- Command execution forms generated from your robot's DSL
- Parameter management for runtime configuration
This is the "introspection dashboard" from the roadmap, now shipping. Mount it in your app and control your robot from a browser.
Core Framework Updates
BB itself went through three releases this week:
v0.5.0 - Motion integration with IK solvers and actuator commands. The BB.Motion module bridges solving and commanding in a single call.
v0.6.0 - New BB.Controller, BB.Sensor, and BB.Bridge behaviours with options_schema callbacks. Each behaviour now includes use GenServer, so your implementations get GenServer for free. The schema validation catches misconfigured child specs at compile time.
v0.7.0 - Hardware error reporting with auto-disarm. Controllers can call BB.Safety.report_error/3 when hardware problems occur, and the safety system will automatically disarm (configurable via auto_disarm_on_error).
The servo driver packages (bb_servo_pca9685 v0.3.1, bb_servo_pigpio v0.3.1) updated to use the new behaviours.
Coming in 2026: A Budget Robot Arm
The WidowX-200 is excellent hardware, but it costs about $3,500 USD. Not exactly impulse-buy territory for someone wanting to experiment with robotics.
I've ordered parts to build an SO-101 - an open-source 6-DoF arm designed by The Robot Studio and Hugging Face for AI training and teleoperation. Total cost: around $120-230 USD depending on where you source parts. The servos are Waveshare ST3215s, and the frame is 3D printed.
The goal is to make this a documented "getting started" path for Beam Bots - print the arm, wire it up, follow the tutorial, have a working robot controlled by Elixir. More accessible than "go buy a $3,500 arm" anyway.
Happy Christmas
This Thursday is Christmas Day. To those who celebrate: enjoy the time with family, eat too much, and try not to argue about politics.
To those who don't celebrate: enjoy the quiet internet.
See you in 2026.
Links
- bb on Hex (v0.7.0)
- bb_ik_fabrik on Hex (v0.2.0)
- bb_liveview on Hex (v0.2.0)
- bb_kino on Hex (v0.2.0)
- bb_servo_pca9685 on Hex (v0.3.1)
- bb_servo_pigpio on Hex (v0.3.1)
- bb_servo_robotis on GitHub (coming to Hex soon)
- bb_example_wx200 on GitHub
- SO-101 Robot Arm
- Discord