Robots · Robot arms

Kinova Gen3 teleoperation: high-level twist or 1 kHz low-level, leader arms and LeRobot data

The Gen3 is light enough to put on a mobile base or a wheelchair and open enough to control at 1 kHz. For teleoperation, the first decision is which of its two control layers to talk to, and most teams pick the wrong one first.

Kinova Gen3, 7-axis ultra-lightweight research arm
AI-generated illustration of the Kinova Gen3. For product photos, see Kinova.
Degrees of freedom
7 (6-DoF version available)
Payload
4.0 kg mid-range, 2.0 kg full-range (continuous, no gripper)
Maximum reach
902 mm
Total weight
8.2 kg (7-DoF); 7.2 kg (6-DoF)
Max Cartesian speed
50 cm/s
Control system frequency
1 kHz
Actuator sensors
Torque, position, current, voltage, temperature, accelerometer, gyroscope
Optional vision module
Color up to 1920×1080 at 30 fps; Intel RealSense depth up to 480×270 at 30 fps

Updated

The Kinova Gen3 is a 7-axis arm that weighs 8.2 kg, reaches 902 mm and carries 4 kg in its mid-range (2 kg across its full range), with torque sensors in every actuator and an optional wrist vision module. Per Kinova's spec sheet, it runs on 24 VDC at 36 W average power, which is why it turns up on mobile bases and in assistive research as often as on lab benches. Teleoperating it well starts with understanding that the Gen3 has two very different control layers.

High-level or low-level: pick the right layer

Kinova's Kortex API, in C++ and Python, exposes both. High-level control accepts Cartesian and joint positions or velocities, forces and torques, and the arm's own base controller handles the trajectory. Low-level control talks to the actuators directly at the 1 kHz system frequency, in position, velocity, current or torque.

Low-level mode is tempting for teleoperation because it sounds fast. In practice it is the wrong layer for a remote operator. In a Kortex GitHub thread, a Kinova maintainer explained that low-level servoing expects a command every millisecond: it tolerates some jitter, but "a 100Hz command rate will not work." In that mode only actuator-level safeties remain active, and collisions between non-consecutive links are not avoided. The Kortex inverse kinematics call goes through the base over TCP and is "simply not designed for real-time application"; the user in that thread measured about 20 ms per call. A "following error" safety stays active in every mode, so the position field must always hold a sensible value, usually the last feedback.

Rule of thumb: a person, a VR headset or a policy produces targets at 10 to 40 Hz. Send those to the Gen3's high-level layer (twist or joint velocity commands) and let the base controller smooth them. Use low-level servoing only for a local, real-time controller you write yourself, in C++ on a real-time OS, and never put the network inside that loop.

Ways to drive a Gen3 remotely

Twist control through ros2_kortex

ros2_kortex has Humble, Jazzy and Rolling branches, supports the Gen3 in 6 or 7 DoF and the Gen3 lite in 6 DoF, and ships MoveIt 2 configurations. Its default joint_trajectory_controller is for planned motion; its twist_controller is what a gamepad, SpaceMouse or VR controller would drive. The README notes the twist controller only works on real Kinova hardware, and warns that in this mode you are responsible for collision checking, including self-collisions.

TACTIC leader arm (joint-space)

Cornell's EmPRISE Lab published TACTIC, an open-hardware leader that mirrors the Gen3 7-DoF joint for joint. It is built from seven Dynamixel XL330 servos plus one in the trigger handle that starts and stops recording, with vendor parts listed at $278.69 plus 3D-printed structure. Joint velocities are mapped to robot velocity commands at 40 Hz, which is the high-level pattern described above. The software repository was not yet released when we checked.

Kinova's web app and gamepad control

Kinova's web app connects from any desktop or mobile device, and the arm can be jogged with an Xbox controller. It is a quick way to move the arm and a reasonable fallback for a remote operator, but it is not a recording pipeline, and joystick control produces one-axis-at-a-time motion that is hard to learn from.

Latency and control rate for a remote operator

Because high-level commands are smoothed by the arm's own controller, the Gen3 tolerates network delay better than a raw servo interface does. The limit is the operator, not the arm. At a 20 Hz record rate each step is 50 ms:

Under ~50 ms round trip

Fine grasps, assistive tasks near a person and contact work are realistic, with conservative speed limits.

~100 to 200 ms

Pick-and-place, fetching, opening drawers and most mobile-manipulation tasks remain comfortable. The 50 cm/s Cartesian speed cap helps: the arm cannot run far ahead of the video.

Above ~250 ms

Direct control of fine work becomes slow and tiring. Supervising a policy or approving planned moves works better.

On a mobile base, the network is usually Wi-Fi or cellular, so jitter matters as much as average latency. Keep the client on the robot's side of a VPN and have it stop the arm if commands stop arriving. Our latency guide covers budgets by task.

ros2_kortex quirks worth knowing

Gripper under twist control

A ros2_kortex issue reported a Robotiq 2F-85 moving slowly and shakily while twist_controller was active on Humble; the reporter traced it to twist control using single-level servoing at roughly 40 Hz rather than low-level servoing. The maintainer confirmed the Jazzy branch works, with the gripper controller changed to ParallelGripperCommand. If you teleoperate with twist and a gripper, start on Jazzy.

Firmware and API versions

Kortex releases are tied to firmware: the latest listed are 2.8.0 for the Gen3 and 2.3.4 for the Gen3 lite. Match the API to the arm's firmware before debugging anything else.

Kinematics need calibration

The same Kinova maintainer noted that accurate kinematics require the arm's calibration parameters from Kinova support. Ask for them before you compute end-effector poses for a dataset.

Torque sensing and compliant teleoperation

Every Gen3 actuator measures torque, and high-level control accepts force and torque targets as well as positions and velocities. That makes the arm attractive for contact-rich and assistive teleoperation, where the operator should feel or at least respect contact. It also comes with a learning curve. In another Kortex thread, a user streaming torques computed in MATLAB found that commanding the torque the arm already read at rest seemed to add to it. Kinova's maintainer explained that the torque controller drives the sensor reading toward the commanded value, that noise means you need a closed loop around it for reliable behavior, and that MATLAB has real-time limitations, so C++ is the better host. He pointed to a compliant torque controller published by the EmPRISE Lab as a working reference. For remote operators, the practical version is simpler: keep the operator on velocity or twist commands, and put any compliance in a local controller next to the arm.

Mobile and assistive setups

Power

The Gen3 runs from 18 to 30 VDC (24 VDC nominal) at 36 W average, which a mobile base battery can supply. Budget for peaks when the arm moves fast or carries load.

Connectivity

The base offers USB, Ethernet, HDMI, Wi-Fi and digital I/O; the end-effector interface adds RS-485, Ethernet, GPIO, UART and a 24 V supply at 1 A for grippers and tools.

Environment

Kinova lists an operating range of -30 °C to 35 °C and IP33, so outdoor and warm-room work needs care.

Getting Gen3 data into LeRobot

There is no Gen3 driver in LeRobot, and no Kinova plugin on its third-party robots page. That leaves three routes:

Write a Robot class on the Kortex Python API

Connect, read joint state and camera frames, send high-level twist or joint velocity actions. It is a few hundred lines and gives you the standard LeRobot record and train tools.

Bridge ros2_kortex

LeRobot's third-party page lists two ROS 2 bridges, leros2 and lerobot_robot_ros2_zenoh. leros2 maps ROS 2 topics and actions to LeRobot features through a YAML config, with joint-state, pose and image inputs and pose or array actions.

Record ROS 2 bags, convert later

The leros2 README actually recommends teleoperating natively over ROS 2 and recording a bag, to avoid added latency and keep native rates and resolutions, then converting with leros2-convert.

Public Gen3 data in LeRobot format is still thin. One example, rdoshi21/kinova-pick-place, has 50 episodes at 10 fps with a wrist and a top camera at 640×480 and an 11-value state and action vector, in LeRobot v2.1. If you have the vision module, record its color stream as the wrist camera and its depth as a separate stream. Our data collection guide covers episode structure.

What a good Gen3 operator does

Remembers that joints rotate continuously. Kinova lists the actuator range after start-up as infinite, a software limitation, so the same pose can show up with joint angles 360° apart. Datasets should store unwrapped angles consistently, and operators should avoid winding a joint round and round.
Respects the payload envelope: 4 kg only in mid-range, 2 kg across the full reach. A load that is fine near the body can be too much at full extension.
Keeps the elbow posture consistent across episodes, as on any 7-axis arm.
On a mobile base, stops the arm before the base moves unless the task requires both, and reports Wi-Fi dropouts rather than pushing through them.
Near people, keeps speeds low and treats the arm's IP33 rating as a reason to keep liquids away.

Gen3, Gen3 lite or another 7-axis arm?

The Gen3 lite is a smaller 6-DoF sibling that the Kortex API also supports and that ros2_kortex drives in 6 DoF only; check its specifications separately rather than assuming Gen3 numbers. Against the Franka Research 3, the Gen3's 8.2 kg weight and 24 VDC supply make it the easier arm to put on a mobile base or an assistive platform, while the Franka is built around its 1 kHz FCI for tabletop research. The xArm 7 is the budget 7-axis option.

How RoboPilots runs Gen3 teleoperation

The arm stays where it is, on a bench, a mobile base or an assistive platform. We agree the input device and control layer with you (high-level twist from a 3D mouse or VR, or a joint-space leader such as TACTIC), install the operator client on your side of a VPN, and train a dedicated group of operators on your unit and your task protocol before any recorded episode counts.

One-week trial

A short run sets the baseline: clean episodes per operator hour at your latency. If your network or task needs an operator closer than we can provide, you hear that during the trial.

Coverage

Shifts across time zones, including US Pacific hours, with someone on site for resets and battery swaps on mobile platforms.

Data

Episodes labeled by task and outcome, with firmware version and calibration noted, delivered as LeRobot, RLDS or HDF5.

Interfaces, specs and sources

  • Kortex API (C++, Python)
  • ros2_kortex + MoveIt 2
  • Twist control (gamepad, 3D mouse)
  • TACTIC leader arm
  • Web app and Xbox controller
  • LeRobot via ROS 2 bridges

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

Frequently asked questions

How do you teleoperate a Kinova Gen3?
Send high-level twist or joint velocity commands, either through the Kortex API or the ros2_kortex twist controller, from a gamepad, 3D mouse, VR controller or a leader arm such as Cornell's TACTIC. The arm's base controller smooths the targets.
Should I use Kinova low-level control at 1 kHz for teleoperation?
Usually not. Low-level servoing expects a command every millisecond, keeps only actuator-level safeties, and does not avoid collisions between non-consecutive links. It is meant for real-time controllers running next to the arm, not for remote operators.
Does LeRobot support the Kinova Gen3?
There is no built-in driver and no Kinova plugin on LeRobot's third-party list. Teams write a small Robot class on the Kortex Python API or bridge ros2_kortex to LeRobot with a ROS 2 bridge such as leros2.
Is there a leader arm for the Kinova Gen3?
Yes. TACTIC from Cornell's EmPRISE Lab is an open-hardware leader that mirrors the Gen3 7-DoF joint for joint, with vendor parts listed at about $279 and joint velocities mapped to the robot at 40 Hz.
What payload does the Kinova Gen3 carry?
Kinova specifies 4.0 kg continuous in mid-range and 2.0 kg across the full range, both without a gripper, with a maximum reach of 902 mm.