Robots · Robot arms

Robot arm teleoperation, model by model

From the SO-101 on a desk to a UR10e on a line: how each arm is driven remotely, what the data looks like, and what it takes to keep operators on it every shift.

Robot arm teleoperation, model by model
Illustration

Updated

Most teams that teleoperate a robot arm want one of two things: demonstrations to train a policy on, or a person who can finish the job when the policy cannot. Both depend on the same three choices, and the right answer changes with the arm.

The three choices that decide everything

The input device

A leader arm (a smaller copy of the robot, like the SO-101 leader or a GELLO-style arm) gives joint-for-joint control and natural demonstrations. A 3D mouse or VR controller drives the end effector in Cartesian space and works across arms. Keyboard and mouse are cheap but split X, Y and Z into separate motions, which shows up as jerky, hard-to-learn trajectories. Kinesthetic teaching (moving the robot by hand in free-drive) is fast to set up but most lightweight arms deflect too much for sub-millimetre work.

The control loop

Policies such as ACT, Diffusion Policy and smolVLA are usually trained on data recorded at 10 to 50 Hz. At 20 Hz each step is 50 ms, so a remote operator on a 150 ms round trip is always three steps behind the camera. Fine assembly needs operators close to the robot or a local controller that smooths and limits commands; coarse pick-and-place tolerates far more. Our latency guide breaks this down by task.

The data format

Decide before the first episode. LeRobot datasets (Parquet plus MP4 video, on the Hugging Face Hub) have become the default for open models; RLDS is common in the Open X-Embodiment world; HDF5 remains the ALOHA and robomimic standard. Converting later is possible but you lose time and sometimes metadata.

Research arms and production cobots are different jobs

Low-cost and research arms (SO-101, Koch, Trossen WidowX and ViperX, UFACTORY xArm, Franka Research 3, AgileX PiPER) are bought to collect demonstrations. The operator is producing a dataset, so consistency matters more than speed: the same grasp, the same approach, clean episode starts and ends, and honest failure labels.

Industrial cobots (Universal Robots, FANUC CRX, ABB GoFa, Doosan, Techman, KUKA LBR iiwa) usually run a program, and a remote operator steps in for exceptions: a part in the wrong place, a regrasp, a jammed fixture. There the operator is measured on response time and on keeping the cell running safely, and the controller's own safety system stays in charge.

What a remote operator team needs from you

Remote access to a workstation next to the arm, or our client installed on your side of a VPN. Remote desktop alone adds too much delay for fine work.
The task protocol: start pose, success criteria, what counts as a failure, how to reset the scene.
Someone on site, or a scheduled window, to reload parts and clear the workspace. Most teams cover this with one technician per shift.
Your input device if it is custom. Otherwise we set one up with you: leader arm, 3D mouse or VR.

We start every arm engagement with a one-week trial on your robot. It sets the baseline that matters, clean episodes per operator hour, before anyone signs a longer statement of work. If we cannot hit the rate you need at your latency, we say so in that week.

Pick your arm

Each page below covers one model: its specs and control interfaces, how people teleoperate it today, which datasets and policies use it, its usual failure modes, and how we staff it.

ModelTypeBest forDriven with
UFACTORY xArm 6UFACTORY6-axis lightweight cobotRobot-learning datasets, lab automation, light pick-and-placexArm Python/C++ SDK, ROS 2 + MoveIt 2, GELLO leader arm, SpaceMouse / gamepad
Franka Research 3Franka Robotics7-axis torque-sensing research armImitation learning datasets, contact-rich manipulation researchFCI via libfranka (C++), franka_ros2 + MoveIt 2, Franka GELLO leader arm, Meta Quest VR (DROID rig)
SO-101 (and SO-100)TheRobotStudio and Hugging FaceOpen-source low-cost leader/follower armFirst LeRobot datasets, smolVLA and ACT fine-tuningLeRobot so101_follower / so101_leader (built in), Bimanual bi_so_follower, SpaceMouse (community plugin), Phone / WebXR VR (community plugin)
Trossen WidowX AI (and Solo AI)Trossen Robotics6-axis research arm with leader/follower pairsLeRobot and OpenPi imitation-learning datasetslerobot_trossen plugin, WidowX AI leader arm, Trossen VR (Meta Quest), Trossen Arm driver (C++/Python)
Universal Robots UR5e (now UR7e)Universal Robots6-axis industrial cobotResearch datasets, machine tending, remote exception handlingRTDE (up to 500 Hz), UR ROS 2 driver + MoveIt 2, MoveIt Servo (3D mouse, gamepad), GELLO leader arm
Trossen ALOHA Stationary AITrossen RoboticsBimanual leader/follower workstation (ALOHA lineage)Bimanual ACT, smolVLA and π0 datasetsTwo WidowX AI leader/follower pairs, lerobot_trossen bimanual types, OpenPi (Pi0 / Pi0.5), Touchscreen data collection UI
AgileX PiPERAgileX Robotics6-axis low-cost research armLow-cost imitation learning rigs, bimanual setupspiper_sdk (Python over CAN), piper_ros (ROS 2 Humble) + MoveIt, Built-in master-slave leader mode, AgileX Universal Master Arm
Trossen Mobile AI (Mobile ALOHA)Trossen RoboticsMobile bimanual leader/follower kit (Mobile ALOHA lineage)Bimanual demonstrations in homes, labs and warehousesTwo WidowX AI leader/follower pairs, lerobot_trossen mobileai_robot, OpenPi (Pi0 / Pi0.5), On-device ACT / ACT++ training
UFACTORY xArm 7UFACTORY7-axis lightweight cobotDexterous and bimanual demonstration datasetsxArm Python/C++ SDK, xarm_ros2 + MoveIt 2 / MoveIt Servo, GELLO leader arm, VR hand tracking (BEAVR)
Kinova Gen3Kinova7-axis ultra-lightweight research armMobile manipulation, assistive and lab researchKortex API (C++, Python), ros2_kortex + MoveIt 2, Twist control (gamepad, 3D mouse), TACTIC leader arm
Trossen WidowX 250 S (discontinued)Trossen Robotics (Interbotix)Discontinued 6-axis Dynamixel research armBridgeData-style datasets and existing WidowX labsInterbotix X-Series ROS 2 (Galactic, Humble), Interbotix Python / ROS SDK, Meta Quest VR (BridgeData stack), Leader arm (ALOHA WidowX)
Enactic OpenArm (1.0 and 2.0)EnacticOpen-source 7-DOF humanoid bimanual armBimanual, contact-rich datasets in LeRobotLeRobot openarm_follower / bi_openarm_follower (built in), LeRobot openarm_leader and openarm_mini, openarm_teleop (unilateral / bilateral), OpenArm KER motorless leader (2.0)
Koch v1.1Jess Moss (after Alexander Koch's low-cost arm)Open-source Dynamixel leader/follower armLow-cost LeRobot datasets on Dynamixel servosLeRobot koch_follower / koch_leader (built in), Leader gripper as a spring-back trigger, Dynamixel SDK, Rerun live view
Universal Robots UR10e (now UR12e)Universal Robots6-axis industrial cobot, 12.5 kg classPalletizing, machine tending, remote exception handlingUR ROS 2 driver + External Control URCap, RTDE, Force mode and direct_torque, Dashboard server
UFACTORY Lite 6 (and UFACTORY 850)UFACTORY6-axis desktop cobotLow-cost tabletop datasets on the xArm SDKxArm Python / C++ SDK, ROS / ROS 2 packages, UFACTORY Studio (browser), GELLO Lite6 parts (community)
KUKA LBR iiwaKUKA7-axis torque-sensing industrial and research armContact-rich research, sensitive assembly, medical researchFRI (Fast Robot Interface) over UDP, lbr_fri_ros2_stack + MoveIt, kuka_drivers (ROS 2), Sunrise.OS Java applications
FANUC CRX series (CRX-10iA and siblings)FANUC6-axis industrial cobot seriesMachine tending, palletizing, remote exception handlingFANUC ROS 2 driver (Stream Motion), Remote Motion Interface (RMI), MoveIt 2, Tablet Teach Pendant
Flexiv Rizon 4Flexiv7-axis force-controlled adaptive robotContact-rich assembly, polishing, force-aware datasetsFlexiv RDK (C++, Python; 1 kHz RT), flexiv_ros2 (v1 line) + MoveIt 2, Flexiv TDK (LAN and WAN teleop), Flexiv Trainer (LeRobot episodes)
Trossen WidowX Core, Pro and Heavy (with Glide)Trossen Robotics6-axis research arm family with a passive leaderLeader/follower data collection, including mixed-arm fleetsGlide passive leader (joint or Cartesian), WidowX Core Leader, Trossen SDK (C++, MCAP recording), LeRobot v2 conversion
Unitree Z1 (Air and Pro)Unitree Robotics6-axis lightweight arm for mobile manipulationArms on quadrupeds and mobile bases, bimanual datasetsz1_sdk (C++ / Python), z1_ros (ROS Noetic, MoveIt), Community z1_ros2 (ros2_control, MoveIt), unitree_lerobot fork (data conversion)

Frequently asked questions

What is the best way to teleoperate a robot arm for data collection?
For most manipulation datasets a leader arm (a kinematic copy of the robot) gives the most natural demonstrations, because the operator controls every joint at once. A 3D mouse or VR controller is the better choice when you need one interface across several arm models or when no leader arm exists for your robot.
How much latency can robot arm teleoperation tolerate?
Coarse pick-and-place stays workable to roughly 200 to 300 ms round trip. Contact-rich or sub-millimetre tasks recorded at 20 Hz or faster degrade quickly above about 50 to 100 ms, so they need nearby operators, local smoothing or a shared-autonomy setup.
Can remote operators collect LeRobot datasets on our arm?
Yes. Operators record through the LeRobot tools or your own stack, and each session is delivered as episodes with task labels and outcomes, ready to push to the Hugging Face Hub or keep private.
Do you need our robot shipped to you?
No. The robot stays in your lab or plant; operators connect remotely. You ship only custom input devices, if your setup uses one.