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.