Install the SDK and Connect
Unit 2 of the OpenArm learning path. Install the OpenArm Python SDK, run a live connection test, and fix the three most common connection errors. ~1.5 hours.
Unit 2 of 6 · SDK & Connection · ~1.5 hours
Get the OpenArm Python SDK installed, confirm your arm is reachable from Python, and fix the most common connection issues before they block you mid-path.
What You Will Accomplish
At the end of this unit you will have a Python virtual environment with the OpenArm SDK installed, and running a 5-line test script will return True from arm.ping(). That confirmation means your Python code has a live communication channel to the arm — which is the foundation everything in Units 3–6 builds on.
The complete SDK installation and configuration documentation is at hardware/openarm/software. This unit frames that process with the context you need and covers the most common failure modes.
Install the SDK
Work through the software setup guide for full SDK installation. The short version:
# Create an isolated environment for this path python3 -m venv ~/openarm-env source ~/openarm-env/bin/activate # Install the SDK and its dependencies pip install openarm-sdk lerobot torch torchvision
Installation takes 5–15 minutes depending on your internet connection. The torch and lerobot packages are large but you'll need them in Units 4 and 5, so install them now.
Quick Python Connection Test
With ROS 2 running (from Unit 1) and your virtual environment activated, run this test. It is the fastest way to confirm your full stack is working end-to-end:
# Make sure ROS 2 is running first (from a separate terminal) # source ~/openarm_ws/install/setup.bash && ros2 launch openarm_bringup real.launch.py from openarm import OpenArm arm = OpenArm() # connects via ROS 2 action server print(arm.ping()) # should print: True print(arm.get_joints()) # should print: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] arm.close()
If arm.ping() returns True and arm.get_joints() returns the current joint angles, you are done. Move on to the troubleshooting section only if you see errors.
Troubleshooting: The 3 Most Common Connection Errors
Error 1: ConnectionRefusedError or timeout on OpenArm()
ROS 2 is not running or the action server has not started yet. Check that ros2 node list shows /openarm_controller. If not, go back to your ROS 2 terminal and confirm the launch completed without errors. A common sub-cause: you forgot to source your workspace before launching — see Unit 1, critical step 2.
Error 2: can0: Network is down in ROS 2 terminal
The SocketCAN interface dropped. This happens if you unplugged and replugged the USB-CAN adapter without re-running the ip link set command. Run sudo ip link set can0 up type can bitrate 1000000, then restart the ROS 2 launch. Add this command to a startup script so it runs automatically on boot: sudo nano /etc/network/interfaces.d/can0.
Error 3: arm.get_joints() returns all zeros even when arm is not homed
This is not an error — it means the arm is reporting its joint state, but calibration may not be complete. If your arm is physically at the zero pose, zeros are correct. If your arm is at a different angle but still reporting zeros, re-run calibration from the web UI (Unit 1, critical step 4). Joint encoders need the homing sequence to establish absolute position.
Unit 2 Complete When...
arm.ping() returns True in your Python terminal. The test script runs without errors from start to finish. You can see joint angle values change in real-time when you physically move the arm while arm.get_joints() is polled in a loop. You are ready for Unit 3.







