# Add a supported SO-101

Save your robot, configure only what it needs and preserve calibration through one Mac workflow.

Canonical: https://roboty.dev/guide/setup/physical-robot
Content revision: 50
Platforms: iphone, mac, browser, agent

## Choose the experience

Open **Robots** in a matching Roboty for Mac development build. With no saved robots, choose **Add a robot**. The short guide asks for your kit and assembly state, then shows a review and the appropriate next step. A name is optional. Choose **Add robot** to save, or **Save for later** when identification or compatibility review is still needed. An unverified state is not a factory-default state.

The Add a robot workflow is in development and access is invitation-only. Powered owner commissioning and ordinary operation remain separately qualified. A public native installer is not available. The initial route supports the reviewed Seeed SO-ARM101 Standard or Pro follower profile on a compatible Apple Silicon Mac. Confirm the actual variant, servo labels, supply and controller. Unknown, custom or modified hardware needs compatibility review.

Your iPhone can accompany the Mac through the existing paired connection. It is optional and does not configure the controller by USB. A leader, camera, microphone, model, cloud account or Project is not required to add the follower. Simulation remains available without hardware.

A present adult operator must review the supported mounting, correct power supply, arm support and accessible disconnect before any powered step. Read the stopping procedure before connecting power. Saving a draft or reading this guide does not authorize hardware access.

## Your robots

With one saved robot, **Robots** opens that robot directly. **Add another robot** remains available. With multiple robots, select one in the Mac list or use the **Robot** picker in a compact view. Each page keeps its exact installation identity, name, saved details, original operations and next available action. A rename does not replace calibration.

**Add a robot** starts a new draft. **Cancel new robot** returns to the previous robot. If you entered details, choose **Keep draft** or **Discard draft**. Kept drafts remain on the originating device until saved to the selected Mac. Reconcile a pending operation before leaving it.

**Last viewed** records instruction-reading position. It does not record motor configuration or verified calibration. A completed guide never grants operating permission. **Library** contains reusable configurations, tasks, methods and scenes. A Project is optional.

## Parts and workspace

Your supplier owns mechanical assembly, wiring diagrams, firmware servicing and repairs. Roboty owns supported software configuration and calibration. Some kits assign motor IDs before assembly. Follow the supplier's sequence for your exact kit, then return to Roboty for the software step you need.

Review [Seeed's SO-ARM101 instructions](https://wiki.seeedstudio.com/lerobot_so100m_new/) for the exact Standard or Pro kit, motor configuration section and assembly order. The [upstream SO-101 guide](https://huggingface.co/docs/lerobot/so101) is another software/assembly reference. These resources were reviewed October 23, 2026. They do not establish compatibility for a different supply, board or modification. The written guide remains useful when a video is unavailable.

An assembled arm may need access to motor cables. Use the matching supplier connector guidance and minimize dismantling. If the intended connector or electrical isolation is uncertain, pause and ask the supplier. Do not guess from a motor response or cable color.

### Prepare the stopping procedure before power

A present adult operator must support the arm, secure its mounting, clear its workspace and keep the physical power-disconnect method accessible. Confirm the actual motor labels and power supply before following a powered step. A generic motor model response cannot establish the correct voltage.

Before changing cables, request Stop, wait for original device work to cease and follow the supported resting and power-disconnect procedure. Account for USB and external power as required by the actual board. Confirm the applicable sources are disconnected before rewiring. A software Stop button is not a physical emergency stop. Torque release can let the arm fall under its own weight or load.

## Founder assembly resources

### A note from Gabe

I’m assembling my own SO-101, and this is the video I’m using. I’m sharing it here in case it helps. I may add more resources as I go.

[Watch the assembly video](https://www.youtube.com/watch?v=mFnJjWp-K-A)

Follow your kit provider’s instructions for your exact hardware. This personal reference is not a Roboty assembly procedure. The note is available offline. The video needs internet access.

[View assembly resources](/guide/setup/assembly-resources). More resources coming soon.

## Save what you know

The guide retains answers locally as you move between **Kit**, **Assembly** and **Review your robot**. Back preserves your answers. The final **Add robot**, **Save for later** or **Save robot details** action saves to the selected Mac without opening hardware and returns to the robot’s page. Its primary action opens the relevant next task.

Use **Help identify my kit** to compare your order, packaging and actual labels with the supplier reference. Unknown, custom or modified hardware cannot use the ordinary connection route. An unknown assembly state also needs identification before guided hardware setup. You can save either for later without claiming readiness.

Motor settings are considered during controller preparation for unfinished kits. An assembled arm with unknown settings starts with the admitted connection check. Uncertainty alone never means settings should be overwritten. Calibration choices appear at the calibration step. User declarations and actual device observations stay separate.

**Kit details changed** and **Controller settings changed** have separate save controls. Save the relevant details or controller profile explicitly. Use Reload only when you intend to replace the local draft with its saved version. A failed read preserves unsaved work. On iPhone, **Continue offline** retains local input and instructions. Saving to the named Mac remains separate.

Pending saves retain their original identity. **Check original save**, **Retry original preparation save** and **Cancel pending preparation save** recover that metadata operation. They do not repeat hardware actions. Existing unfinished and older prepared-only records remain readable with their original calibration and uncertainty.

## Before final assembly

If your supplier calls for motor initialization before assembly, use only the supported isolated-motor step, then return to its assembly instructions. Calibration and ordinary operation require complete assembly and their own prerequisites. If the arm is already assembled, use the supported connector-access route instead of starting assembly over.

## Choose your USB controller

Connect the intended USB controller to your Mac with a data-capable cable. Choose it in **Choose your USB controller** and save the controller profile. This only selects the board. It does not open the motor connection or move the arm. Roboty manages its setup software, so you do not need a separate Python, conda or LeRobot installation.

If no controller appears, check the data cable and USB connection, then choose **Refresh devices and status**. If two boards look identical, connect and identify the intended board using its supplier instructions. Do not infer a leader or follower from port order.

For an unfinished kit, describe whether the supplier already configured the motors and follow its order for necessary motor setup and assembly. For an assembled arm with unknown settings, start with **Check all six joints** after reviewing the required hardware and power checks. If configuration is explicitly needed, review **Set up motor IDs**. A failed connection check alone does not establish that motor settings need changing. Preserve correct settings.

## Set up one motor at a time

A motor ID is the address Roboty uses to tell one joint from another. New motor configuration is currently follower-only. Use this route only when configuration is needed and the matching procedure is available. Select the physical joint. With original device work stopped and applicable power disconnected, electrically isolate that single motor using the supplier's connector instructions. Here, electrically isolate means only that selected motor is connected to the controller, using the supplier’s wiring diagram. Confirm the actual isolation. One address replying cannot prove that duplicate-address motors are absent.

Restore power only when the selected procedure permits it. Review the selected controller and motor. **Identify isolated shoulder pan motor** (or the selected joint) performs bounded discovery. Review its observed initial address and baud rate, then use **Configure shoulder pan motor as ID 1** (or the selected joint and ID) for that named joint. This is a consequential action that can disable torque, unlock configuration and change the motor ID and baud rate. It does not enable ordinary movement.

The profile owns the mapping: shoulder pan 1, shoulder lift 2, elbow flex 3, wrist flex 4, wrist roll 5 and gripper 6. Readback, not the number of completed screens, records progress. If an action is interrupted or its acknowledgement is missing, retain the original operation. Use the offered bounded observation/reconciliation path. Do not repeat the write, configure all six again or try a full-chain broadcast.

**Motor checklist** shows recorded results for this robot. **Choose next unchecked motor** changes only the selected joint. It never starts configuration. Results become recorded after the original session is closed and reviewed on the Mac. After all six results are recorded, **These motors are configured. Continue** saves your updated declaration. It does not replace the full-arm check.

Stop device work and confirm the supported power-off disposition before each cable change. An expected wiring disconnect pauses the procedure. Reconnecting never automatically resumes it. After all necessary motors are configured, restore the full chain with power off, then verify communication and the relationship between physical joints and addresses through the approved supervised procedure. Six identical model responses do not establish that mapping. No automatic sweep is used.

## Assemble your arm

Continue mechanical assembly with your supplier. Preserve its motor-before-assembly sequence if applicable. An already-assembled arm does not repeat this stage. When assembly is complete, choose **I’ve finished assembly. Update my robot**. Review support and power labels again, then continue to the full-arm check. Confirm completed assembly and support before calibration. The optional [founder note](#founder-assembly-resources) and [assembly resources](/guide/setup/assembly-resources) supplement the supplier's written instructions.

## Connection, calibration and control

Roboty checks its managed component before a physical session. You do not need to install Python, conda, LeRobot or LeLab separately. A missing or incompatible component needs a matching Roboty for Mac build from the installation maintainer.

Select the intended controller and review available device details. Passive discovery does not open the bus. Port names, discovery order and a remembered path do not identify the arm reliably. Identical boards or missing serial numbers may need explicit review. Leader and follower controllers must be distinct when both are used.

Save the controller profile, then use the Mac's local session review for the exact next procedure. The review can temporarily pause Roboty's host and request local authentication. It records finite permission, not hardware success. A paired phone cannot confirm that someone is beside the robot.

**Connection check** is a separately admitted observation. It does not initialize motors, rewrite calibration or enable motion. Preserve valid settings. Reconnection, changed hardware and expired permission require fresh checks without automatically repeating a write.

**Check all six joints** is the full-arm connection check. Before calibration, confirm the physical joint/address mapping in this connection session. Support the arm in the instructed posture. All six torque readings must already be off. Roboty refuses this observation if torque is enabled or unknown and does not silently disable it. Select one joint, take the before reading, manually move only that physical joint as instructed, then take the after reading. Review every channel and explicitly confirm the observed relationship. Repeat for all six joints. These raw readings and your confirmation are evidence, not an automatic movement sweep or an invented movement threshold. Close the successful original connection after its work ceases. Calibration admission requires that retained connection and all six operator-confirmed observations, not a saved checkbox. Confirm mapping inside the connection session. You do not need to predeclare it in the robot’s kit details.

## Preserve or create calibration

New calibration creation and application are currently follower-only. Existing leader calibration import, readback and qualified leader-following remain available. Choose the route that matches this arm. **Import original calibration…** reads inert local data. **Check existing calibration** reads the device for comparison. **Apply selected calibration** writes reviewed values. **Save new calibration** completes the admitted creation procedure. None of these actions means the same thing, and import never silently applies a file.

The calibration step starts with **Check existing calibration**. If you already have a file, import it, save the controller profile and verify it before considering any write. If you are unsure, use **Help find my calibration file** or ask whoever configured this arm. Roboty does not automatically search local folders. When no usable original file is available, deliberately choose **Create or apply calibration**. Uncertainty does not select new calibration for you. No write happens until you explicitly confirm it.

The supported file handoff is LeRobot 0.6.1 SO-101 calibration JSON for the exact arm and role. The upstream default directories are `~/.cache/huggingface/lerobot/calibration/robots/so_follower/` and `~/.cache/huggingface/lerobot/calibration/teleoperators/so_leader/`. A custom directory overrides them. Preserve the original file and select its exact revision before saving the controller profile.

Each file must match the selected six joint names, IDs and integer `drive_mode`, `homing_offset`, `range_min` and `range_max` fields. A file from another arm or unsupported exporter is not interchangeable. Import alone cannot establish its relationship to the actual hardware. A mismatch remains blocked until the supported review or explicit write procedure is admitted.

Opening the calibration connection is read-only. New calibration requires complete assembly, verified full-chain mapping and the profile's supported resting and manual-position instructions. First support the arm and explicitly choose **Prepare manual calibration**. This disables torque, unlocks configuration and sets the operating mode. Wait for all torque readings to confirm disabled before manually positioning each joint roughly in the middle of its permitted travel. Midpoint refers to each joint’s travel, not the arm’s height above the desk. The [official SO-101 calibration video](https://huggingface.co/docs/lerobot/en/so101#calibrate) illustrates the midpoint and range process. Use Roboty’s session controls for the current procedure, and the matching supplier instructions for your exact kit. **Set calibration midpoint** checks torque again before writing homing values. Then use **Record joint ranges**. The visible joint list shows where travel samples are still missing. Use **Save new calibration** after reviewing every permitted joint’s travel. Raw counts are sensor readings, not degrees or operating limits. **Apply selected calibration** is a separate explicit alternative before manual preparation or before setting the midpoint. Move only as instructed, without forcing stops. Wrist roll uses the pinned full-turn range and is not measured like the other bounded joints. Missing, discontinuous or implausible observations need review rather than invented limits.

Roboty preserves original calibration and records device writes separately from saving a successor file. If saving fails after a write, keep the original result and follow reconciliation. Do not assume nothing changed or repeat calibration to repair a missing file. After the original session is closed through protected cessation and power review, **Recover calibration file** can republish its retained planned JSON without hardware effects. This is an unverified candidate. Select it and perform separate readback before treating it as verified. Joint calibration does not establish workspace/camera registration or safe Cartesian motion.

On the robot page, open **Maintenance → I moved or changed something** routes mounting, cables/controllers, joints/motors and unexpected behavior to the relevant review. Preserve still-valid calibration. Replacement invalidates only the affected readiness while retaining history.

## Supervised control and Stop

Adding a follower finishes on the same named robot. **Continue later** retains progress. **Test & practice** remains the existing leader-following workflow and needs both prepared arms, verified calibration, matched poses, operating limits and separate qualification and permission. Adding a follower does not require that test or automatically start movement. After practice, the owning Mac can [review the retained recording and create a selected local dataset](/guide/setup/robotics-tools-and-data#what-can-travel-between-tools) when the original session is closed and a supported converter is available. Reading or exporting retained data does not start another capture.

**Stop robot** remains available for the original operation while reading Help, waiting, navigating and recovering errors. Cancellation requested, worker ceased and actual hardware disposition are different facts. A late response cannot turn an uncertain result into permission to continue. No new owner may bypass an unresolved original session.

Use **Close original connection** and protected original-Mac recovery for the retained session. Support the arm and follow the provider's power-disconnect procedure. Unknown effects remain unknown. Roboty never reconnects, resumes or repeats an uncertain hardware action automatically. A stopped session or sample count does not prove physical success.

## Save your setup and shut down

Save changed details and controller selections explicitly. Review configured, calibration-verified, unknown and operating requirements separately. Request Stop, establish original device-work cessation, support the arm and follow its documented power-disconnect procedure. Close and reconcile the original session as directed.

On a later return, reopen the same robot. Roboty rechecks controller and calibration continuity without reinitializing valid motors. A changed controller, motor, calibration or component needs the relevant fresh review. Relaunch restores context and original records, never expired authority.

## Understand your setup results

**Your setup results** shows saved robot details, individual motor results, the full-arm joint check and calibration readback separately. A prepared arm can pass the full-arm check without configuring all six motors again. Results come from closed, matching physical sessions on the original Mac. Reading a step, selecting a kit or importing a calibration file does not pass a check.

**Follower setup checked** appears only after the full-arm joint mapping and selected calibration have retained matching results, with changes saved and no original session needing attention. **Continue setup** returns to the earliest unfinished step. **Continue later** keeps the same named robot and its records. Optional **Test & practice** does not block follower setup or start automatically.

Content ID: hardware
Compiled digest: af5527f9879984135b7cb435600817a25078a3139445897523c30671b7c5197d
Language: en
