Robots · Robot arms

Franka Research 3 teleoperation: remote demonstrations that respect the 1 kHz loop

The FR3 is the arm behind DROID and a large share of open manipulation data. Its control interface is strict about timing, so remote teleoperation has to be built around that, not in spite of it.

Franka Research 3, 7-axis torque-sensing research arm
AI-generated illustration of the Franka Research 3. For product photos, see Franka Robotics.
Degrees of freedom
7
Rated payload
3 kg
Maximum reach
855 mm
Position repeatability
<±0.1 mm (ISO 9283)
Torque sensing
Link-side torque sensor in all 7 axes
Arm weight
~18.3 kg
Real-time interface
Franka Control Interface (FCI), 1 kHz over Ethernet
Software
libfranka (C++), ROS 2 (franka_ros2), MATLAB & Simulink

Updated

The Franka Research 3 is a 7-axis arm with a torque sensor in every joint, a 3 kg payload and an 855 mm reach, sold as a research platform rather than a production cobot. Its older sibling, the Panda, is the robot in DROID, one of the largest open teleoperation datasets, and the FR3 is the research arm Franka sells today. Teleoperating it well comes down to one design decision: where the 1 kHz control loop runs, and what a remote operator is allowed to send into it.

Why FCI changes how you teleoperate this arm

Low-level control of the FR3 goes through the Franka Control Interface. FCI exchanges commands and robot state at 1 kHz, and Franka's system requirements are blunt about what that means: the round trip between your workstation and FCI, plus the run time of your control loop, plus the robot's own processing, must add up to less than 1 ms. Franka asks you to plug the workstation straight into the controller's LAN port, run a PREEMPT_RT kernel, and avoid relays in between because they add delay, jitter or packet loss.

When a packet misses its slot, FCI drops it and fills the gap: it extrapolates from previous waypoints for motion generators, or reuses the last torques for controllers. After 20 consecutive dropped packets the robot stops with a communication_constraints_violation error. Franka's troubleshooting page adds that large jumps between consecutive commands stop the motion with discontinuity errors, whether the jump came from your code or from lost packets.

The practical consequence: FCI never leaves the room. A remote operator cannot be in the 1 kHz loop over any public network. The operator sends low-rate targets to a real-time PC next to the arm, and that PC runs the 1 kHz controller, interpolates between targets and enforces limits.

Through libfranka that local controller can command joint torques (with gravity and friction compensation), joint positions or velocities, or Cartesian poses or velocities. For teleoperation, impedance control is the usual choice, and the FR3 makes it adjustable: the datasheet lists translational stiffness from 10 to 3000 N/m and rotational stiffness from 1 to 300 Nm/rad. That range matters more for remote work than for local work. With a stiff setting, a target that arrives late and slightly wrong turns into a hard contact. With a softer setting, the same error becomes a gentle push the operator can see and correct.

Three ways to drive an FR3 remotely

Franka GELLO (joint-space leader arm)

Franka now offers its own version of the open-source GELLO leader, plus a GELLO Duo for the dual-arm FR3 Duo. Per the Franka GELLO page, it does direct joint-level teleoperation and integrates with the FR3 through ROS 2, with Franka Hand and Robotiq grippers supported. You can print it from the open files or buy a pre-assembled unit; Franka lists both GELLO products under prototypes.

VR controllers (Cartesian)

DROID collected its demonstrations with an Oculus Quest 2 and its controllers, mapped to the end effector. If you want data that can be pooled with DROID, this is the input to copy. It suits operators who are not sitting next to a leader arm, and the same station can drive a different arm later.

Hand guiding (kinesthetic)

The FR3 supports hand guiding as a safety-rated collaborative mode, and the datasheet gives a guiding force of about 2.5 N, so pushing the arm around is easy. It is useful for setting start poses and for quick coarse demonstrations. It is not remote, and the demonstrator's hand and arm end up in every camera view, which a vision policy then has to learn to ignore.

A 3D mouse is also possible, but nothing official ships for it on this arm. DROID's own stack is built around the Quest, so a SpaceMouse means writing a bridge that turns its twist into Cartesian targets for your local controller. Keyboard control has the same one-axis-at-a-time problem it has on every arm, and on a 7-DoF arm it leaves the elbow wherever the inverse kinematics puts it.

Control rates and latency for a remote operator

Two rates coexist on a teleoperated FR3. The arm runs at 1 kHz. The data, and the policy trained on it, usually run far slower: the LeRobot port of DROID is recorded at 15 fps, and most ACT and Diffusion Policy setups sit between 10 and 30 Hz. At 15 Hz a control step is about 67 ms, and that is the yardstick for a remote operator's round trip:

Under one step (~60 ms)

The operator sees each command land before the next one goes out. Insertion, cable routing and other contact-rich tasks are realistic, especially with moderate stiffness.

Two to three steps (~120 to 200 ms)

Pick-and-place, drawer and door tasks, wiping and sorting remain comfortable. Precise contact gets slower, and lowering the Cartesian stiffness helps the operator approach surfaces without bouncing off them.

Beyond ~250 ms

Direct control of fine work becomes tiring and error-prone. Coarse moves under local limits still work, and supervising a policy (approve, correct, take over) works well.

Keep the network delay out of the 1 kHz side entirely: the local controller should hold the last target, smooth toward new ones and clamp velocity, so a late packet from the operator becomes a slightly late motion rather than a discontinuity fault. Our latency guide covers budgets by task in more detail.

Software: franka_ros2, libfranka and LeRobot

Franka maintains franka_ros2 on ROS 2 Jazzy, with a ros2_control hardware interface, example joint and Cartesian impedance controllers, MoveIt configuration for the FR3, gripper support and packages for the FR3 Duo and a mobile FR3 Duo. The README calls a real-time kernel essential and recommends Docker Engine over Docker Desktop to avoid UDP timeouts.

LeRobot itself does not ship a Franka driver. Its third-party robots page lists LeFranX, an extension for a Franka arm paired with a RobotEra XHand and Quest VR teleoperation, marked as an extension that may need custom setup rather than a drop-in plugin. The same page lists a drop-in GELLO teleoperator plugin for the 7-DoF GELLO. In practice most FR3 teams wrap their existing ROS 2 or libfranka stack in a small LeRobot Robot class, or record in their own format and convert.

One data point worth knowing before you plan a dataset: in a LeRobot GitHub thread about deploying VLAs on a Franka, a lab running LeRobot on an FR3 through ROS 2 reported that smolVLA did not perform smoothly on the arm after fine-tuning, while a Diffusion Policy trained from scratch worked much better. Their guess was that smolVLA's pretraining data came mostly from small SO-series arms. Whatever the cause, it argues for collecting in-domain 7-DoF demonstrations rather than counting on a pretrained model to transfer.

Data: building on DROID

Per the DROID project page, the dataset holds 76k demonstration trajectories, about 350 hours, across 564 scenes and 86 tasks, collected by 50 people at 13 institutions on the same hardware: a Franka Panda, two ZED 2 stereo cameras for third-person views, a ZED Mini on the wrist, and a Quest 2 for teleoperation, all on a portable desk. The LeRobot port lists 95,658 episodes at 15 fps with three camera streams, joint positions, Cartesian pose, gripper state, language instructions and a per-episode success flag.

Match the rig if you want to co-train

Same camera roles (two scene views and a wrist view), same action representation and the same record rate. A dataset that differs in all three is still useful, but it will not pool with DROID cleanly.

Pick one action space

Joint targets from a GELLO and Cartesian targets from a Quest are different datasets. Record the one your policy predicts, and log the other as an observation if you want it.

Record the elbow

A 7-DoF arm can reach the same gripper pose with different elbow positions. Store all seven joint positions, not just the end-effector pose, or the policy cannot learn which posture you intended.

Log controller settings

Stiffness, the active controller and the reason for any stop belong in episode metadata. Two weeks of data recorded at different stiffness values will not behave the same in training.

Our data collection guide covers episode structure and quality checks across arms.

What a good FR3 operator does

Keeps the elbow in a consistent posture across episodes. The redundant seventh axis is useful for avoiding obstacles, but if every operator lets it drift differently, the dataset teaches the policy nothing about posture.
Respects the joint limits, which are asymmetric on this arm: joint 4 runs from -176° to -7° and joint 6 from 25° to 265°, so the elbow never fully straightens. A leader arm that ignores this will happily command poses the follower cannot reach.
Approaches contact slowly and lets the impedance controller do the work, instead of pushing until a torque limit or reflex stops the arm.
Logs every stop with its cause. A communication_constraints_violation points to the local network or PC, not the operator, and should go to the on-site team.
Flags torque readings that look wrong. Franka added in-field torque sensor recalibration in system image 5.8, so a drifting sensor is fixable, but only if someone notices.

FR3, Panda or FR3 Duo?

The Panda is the arm in DROID, so a lot of public data and code assume it. Franka's current documentation and ROS 2 packages target the FR3, and the FR3 product page no longer mentions the Panda. If you are planning a new rig, plan it around the FR3. The FR3 Duo is Franka's dual-arm version, listed as a prototype, and franka_ros2 notes that it runs one controller at a time through the effort (torque) interface only. If you need a lighter or cheaper 7-DoF arm for the same kind of work, compare the Kinova Gen3 and the xArm 7.

How RoboPilots runs FR3 teleoperation

The arm and its real-time PC stay in your lab, wired the way Franka specifies. Operators connect to a client on your side of a VPN that sends targets at your record rate, and the 1 kHz loop never depends on our network. We agree the input device with you (your GELLO or Quest setup, or one we build with you), and we train a dedicated group of operators on your unit and your task protocol before any recorded episode counts.

One-week trial

A short run on your FR3 sets the baseline that matters: clean episodes per operator hour at your latency and stiffness settings. If the task needs a closer operator than we can provide, you hear that during the trial.

Coverage

Shifts in your time zone, including US Pacific hours, with someone on your side to reset scenes and handle hardware stops.

Data

Episodes labeled by task and outcome, with controller settings in the metadata, delivered as LeRobot, RLDS or HDF5. If you want DROID compatibility, we record to that layout.

Interfaces, specs and sources

  • FCI via libfranka (C++)
  • franka_ros2 + MoveIt 2
  • Franka GELLO leader arm
  • Meta Quest VR (DROID rig)
  • LeRobot via community extensions
  • MATLAB & Simulink

Specs are the maker's published figures, checked on . RoboPilots is not affiliated with Franka Robotics; product names are trademarks of their owners.

Frequently asked questions

Can you teleoperate a Franka Research 3 over the internet?
Not at the FCI level. FCI needs the round trip plus your control loop to finish within 1 ms, so a real-time PC must sit next to the arm. A remote operator sends lower-rate targets to that PC, which runs the 1 kHz controller locally.
Does LeRobot support the Franka Research 3?
Not with a built-in driver. LeRobot lists a community extension, LeFranX, for a Franka arm with a dexterous hand and Quest VR, plus a drop-in GELLO teleoperator plugin. Most FR3 teams write a small LeRobot Robot class around their existing ROS 2 or libfranka stack.
Is there a GELLO leader arm for the Franka?
Yes. Franka offers a GELLO for the FR3 and a GELLO Duo for the FR3 Duo, both open source and connected through ROS 2. They are listed as prototypes, and you can also print one from the open design files.
What is the difference between the Franka Research 3 and the Panda?
The Panda is the earlier Franka research arm used in DROID and many older datasets. The FR3 is the current research arm, and Franka's ROS 2 packages and documentation target it.
What rate should I record Franka teleoperation data at?
DROID's LeRobot port is recorded at 15 fps, and most imitation learning setups use 10 to 30 Hz. The arm itself still runs at 1 kHz; the local controller interpolates between the slower targets.
How much does a Franka Research 3 cost?
Franka does not publish a price on the FR3 product page; it sells through a buy button and quote requests. Contact Franka or a reseller for current pricing.