Hardware

Last Updated: Sep 02, 2026

What is at your station: the arm, the gripper, the camera, and how it is all powered and connected.

Contents

Station Overview

A full Arm Lab station: an aluminium frame over the table carrying the camera, the Lite 6 arm behind a gridded board with AprilTags at its corners, a laptop to the left and the red emergency stop in the foreground

Every station has the same parts:

  • the Lite 6 arm, bolted to the back edge of the board
  • the board, marked with a 50 mm grid and carrying an AprilTag near each corner
  • the aluminium frame spanning the table, with the RealSense camera mounted on the top rail looking down
  • the 24 V power supply, under the board
  • the laptop, running the control station
  • the emergency stop, loose on the table beside the arm, the red button in the foreground above

UFactory Lite 6 Arm

The arm is a UFACTORY Lite 6, a 6-DOF collaborative arm with the control electronics built into its base, so there is no separate controller cabinet. It is commanded over Ethernet from the station laptop using the xArm Python SDK.

Specification Value
Degrees of freedom 6
Reach 440 mm
Payload 600 g
Repeatability ±0.5 mm
Weight 7.2 kg
Max TCP speed 500 mm/s
Max joint speed 180 °/s
Power 24 V DC
Communication Ethernet
Tool flange ISO 9409-1-50

Joints

The six joints are numbered from the base outwards. You will see these numbers in the web interface, in the control station readouts, and in every error message the arm produces.

The Lite 6 with each joint labelled, Joint 1 at the base through Joint 6 at the tool flange

Each joint also has a sign convention, which way counts as a positive angle:

The Lite 6 with a plus and minus marked on each joint showing the positive direction of rotation

Check a joint’s sign here before you assume your maths is wrong. A forward-kinematics result that is right in magnitude but wrong in sign is usually a joint turning the opposite way to what you assumed.

Joint travel limits are not symmetric:

Joint Range
J1 ±360°
J2 ±150°
J3 −3.5° to 300°
J4 ±360°
J5 ±124°
J6 ±360°

J5 (±124°) and J3 (−3.5° to 300°) are the limits you will actually run into. An inverse-kinematics solution can be mathematically correct and still unreachable because it asks one of these joints to go somewhere it cannot. See the Lite 6 Arm & SDK Guide for how this shows up in the software.

The 600 g payload includes whatever is bolted to the flange, but the gripper is only about 50 g, so roughly 550 g is left for the object. The wooden blocks used in this lab weigh a small fraction of that, so payload is not a constraint you will run into here.

Zero position

At the zero configuration, with all six joint angles at 0, the arm stands straight up, and the tool flange sits 87 mm out in x and 154.2 mm up in z from the base frame origin.

Line drawing of the Lite 6 at its zero configuration, dimensioned 87 mm in x and 154.2 mm in z from the base to the tool flange

These two numbers are a free check on your forward kinematics. Feed your FK all zeros and it should put the flange at (87, 0, 154.2) mm. If it does not, the error is in your DH table or your zero offsets, and it is much easier to find here than anywhere else.

The arm is otherwise unmodified for this course. The only change is the custom gripper on the tool flange.

The emergency stop is on the table next to the arm. Find it before you power the arm on. Safety rules for the lab will be covered by the staff in person.

Gripper / End Effector

The gripper is custom-built for this lab, mounted on the Lite 6’s ISO 9409-1-50 tool flange. It is commanded with the standard Lite 6 gripper calls: open_lite6_gripper(), close_lite6_gripper() and stop_lite6_gripper(); see the Lite 6 Arm & SDK Guide.

It is a binary open/closed device: no width control, no force control, and no feedback about whether a grasp succeeded.

Close-up of the custom parallel-jaw gripper on the Lite 6 tool flange, its driver board exposed and a cable looping back to the arm

It is a parallel-jaw design: two flat fingers that travel together, driven by the board visible behind them.

Property Value
Grasp stroke 50 mm
Overall length 100 mm
Mass ~50 g
Flange to finger centre 85 mm

The 85 mm offset is the number your kinematics needs. Forward kinematics gives you the pose of the tool flange; the point that actually grasps a block sits 85 mm further along the tool axis. Leave it out and every pick will aim 85 mm short.

The gripper hangs 100 mm below the flange. Coming down on a block from above, the flange has to stay more than 100 mm above the board or the fingertips reach it first. The readout and your FK both report the flange, so that clearance is yours to keep track of.

A 50 mm stroke sets the ceiling on what you can pick up, and the board’s grid squares are 50 mm, which makes them a convenient check on whether a block will fit in the jaws.

Power and Network

The Lite 6 has no separate controller cabinet. The control electronics are inside the arm’s base. Power comes from a 24 V power supply mounted underneath the board the arm is bolted to.

The arm talks to the station laptop over Ethernet, through a USB-to-Ethernet adapter. That adapter is what gives the laptop a second Ethernet port.

Item How it connects
Arm power 24 V supply mounted under the board
Arm data Ethernet → USB-to-Ethernet adapter on the laptop
Internet The laptop’s built-in Ethernet port
Camera USB 3.x to the laptop

Do not plug the arm into the laptop’s built-in Ethernet port. That port is reserved for internet access and sits on a different IP address and subnet. The arm must go through the USB-to-Ethernet adapter, or it will not be reachable.

Each arm has its own IP address, printed on a label on the back of the arm. You set it in the code during setup.

RealSense Camera

Perception uses an Intel RealSense LiDAR Camera L515. Unlike the stereo RealSense models, the L515 measures depth with a solid-state MEMS LiDAR, which gives it a clean, low-noise depth image at close range, well suited to looking down at blocks on a board.

Specification Value
Depth technology Solid-state MEMS LiDAR
Operating range 0.25 – 9 m
Depth field of view 70° × 55°
Depth stream used in this lab 1024 × 768 @ 30 fps
Color stream used in this lab 1280 × 720 @ 30 fps
Depth accuracy ~5 mm at 1 m
Connection USB 3.x (Type-C)
Size 61 mm diameter × 26 mm

The depth and color streams come from two physically separate sensors, so camera.py aligns depth to color before anything else. After alignment a pixel (u, v) means the same point in both images.

USB 3.x is required. On a USB 2 port the full-resolution profiles are unavailable and the camera will not stream at the settings the control station asks for. Check the connection type with rs-enumerate-devices -s.

The L515 is an indoor sensor: its LiDAR competes with ambient infrared, so strong sunlight degrades the depth image. It is also discontinued by Intel, which is why the lab pins librealsense to 2.54.2, the last version that supports it.

The camera runs in the Short Range visual preset. Without it the firmware discards depth closer than about 411 mm, which would blank out the near part of the workspace.

See the Camera Guide for the RealSense Viewer and calibration.

The camera is mounted on an aluminum frame above the arm, looking down at the board. Its aim is adjustable: loosen the screw with a hex key, rotate the camera to where you want it, then tighten the screw again.

Aiming the camera invalidates your extrinsic calibration. The calibration solves for where the camera sits relative to the robot, so any time you loosen that screw you have to run Calibrate again before world coordinates mean anything.

The RealSense L515 held in a black bracket bolted to the aluminium rail above the board, with the hex screw that sets its aim

The hex screw in the bracket is the one to loosen when you re-aim the camera. The camera sits roughly 1 m above the board.

That 1 m working distance is where the L515’s quoted ~5 mm depth accuracy applies, and it is comfortably inside the sensor’s 0.25–9 m range.

Board and Workspace

The arm is mounted on a board carrying AprilTags at fixed positions.

Measure the board yourself. You need the grid spacing, the position of the robot frame origin, the direction of its axes, and the location of each tag relative to that origin. Those measured tag positions are exactly what goes into TAG_WORLD_POINTS in camera.py. Your extrinsic calibration can be no better than these measurements, so take them carefully and record them in your report.


This site uses Just the Docs, a documentation theme for Jekyll.