Safety & Support
What stops Buildo when something goes wrong, how to read its health before that point, and how to reach us when you need to.
Safety systems
Watchdogs
If a controller publishing commands goes silent for longer than command_timeout_ms (150 ms by default), the hardware interface treats it as a dropped connection and holds the
robot's last commanded position rather than acting on a stale command. Tune this in buildo_bringup/config/controllers.yaml if your control loop runs slower than the default
assumes — a timeout set tighter than your actual loop rate will trip on every cycle.
Torque limiting
Per-joint torque limits (15 N·m rated) are enforced in the hardware interface itself, below the controller. A runaway trajectory command is clamped before it reaches the actuator — this is a hard floor underneath whatever soft limits your own planning stack applies, not a substitute for them.
Collision behavior
MoveIt's self-collision matrix and the head camera's octomap stop a planned trajectory before
execution. There is no reactive collision avoidance once a trajectory is already executing
— if your application needs that, build it on top of the per-joint effort feedback in /buildo/joint_states, which updates at 200 Hz.
Diagnostics
/buildo/diagnostics rolls up per-actuator and per-subsystem health as a standard diagnostic_msgs/DiagnosticArray, so rqt_robot_monitor or any other standard
ROS 2 diagnostics viewer works against Buildo unmodified.
| Error code | Level | Meaning |
|---|---|---|
ACTUATOR_OVERCURRENT | Error | Joint drew current above its rated limit; actuator disabled until reset |
ACTUATOR_OVERTEMP | Warn → Error | Winding temperature approaching, then past, its safe limit |
ENCODER_FAULT | Error | Position feedback lost or inconsistent — run /buildo/calibrate_arm |
BUS_TIMEOUT | Error | An actuator stopped responding on the control bus |
BATTERY_LOW | Warn | Charge below 15% — swap the battery before it reaches 5% |
Firmware updates
Actuator and base-controller firmware update over the same connection as ROS 2 — no separate cabling or tooling required.
ros2 run buildo_firmware update --target all --version latest
# Or a single subsystem
ros2 run buildo_firmware update --target left_arm --version 2.4.1 An update holds the robot in STANDBY and refuses to start if any actuator is
mid-motion. Each unit checks for updates on boot and notifies over /buildo/diagnostics when one is available; it never installs automatically.
Support & resources
- Developer support: developers@starforgerobotics.com — integration questions, bug reports, firmware issues.
- Sales and fleet orders: contact@starforgerobotics.com
- Robot App Store: browse and publish use-case applications built on this API at portal.starforgerobotics.com.
When reporting an integration issue, include the output of ros2 doctor --report and the active firmware version (ros2 run buildo_firmware version) — the
two things we ask for first.