wikillm

Concept · 1 paper · updated 2026-10-24

Virtual model control (VMC)

Builds a robot controller from virtual springs, dampers and masses attached to robot points. Their forces map to joint torques through Jacobian transposes, so no inverse kinematics is needed. Six reaching and obstacle designs are given, tested on one humanoid arm. Results are author-reported and include no accuracy or optimality figures. One card so far.

robot-controlcompliancereachingobstacle-avoidancetorque-control

Markdown5 min read

AI-compiled overview, updated 2026-10-24, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

Overview

Virtual model control (VMC) designs a controller from imaginary mechanical parts: springs, dampers and, in some designs, masses. Each part is attached to a point on the robot and produces a virtual force there. Every force is mapped to joint torques through the transpose of that point's Jacobian, and the torques from all parts are summed 2610.05695 §2.1 [arxiv:2610.05695 eq. 1]. The controller never computes a joint-space target, so it needs no inverse kinematics 2610.05695 §3.

The rule in eq. 1 is shared by every variant. What differs is the layout of the virtual parts. The paper credits Pratt et al. (2001) with introducing VMC for walking bipedal robots 2610.05695 §5; that paper is not in this wiki. The one card so far, Virtual model control for compliant reaching under uncertainties, applies the method to a humanoid arm.

Variants

Simple reaching

A spring and a damper join the end effector to a fixed target. The force is a PD law in end-effector space, and orientation uses rotational springs and dampers in the same way 2610.05695 §2.2 2610.05695 eq. 2. On hardware the paper compares 15 and 45 N/m stiffness at 1.5 Ns/m damping. The stiffer run gave smaller error and faster motion. At 15 N/m the spring force did not overcome friction at the end of the reach 2610.05695 §4.1 fig. 4. Card: Virtual model control for compliant reaching under uncertainties.

Geometric reaching

The end effector is joined by a spring and a damper to a virtual L-shaped rigid body. That body has its own inertia, rotational spring and damper, and its geometry sets the position the end effector is pulled toward 2610.05695 §2.2. The card gives no values for the body's parameters and reports no result for this design.

Moving-reference reaching

The target moves along a straight line from start to goal. A scalar ramps from zero to one in finite time, and the spring law is applied to the moving target 2610.05695 §2.2. The paper says this limits the force needed over long distances 2610.05695 §2.2. Compared with simple reaching, the card reports lower peak force and less lateral deviation at 0.1 and 0.5 m/s, with a final error of about 5 cm 2610.05695 §4.1 fig. 5.

Force-driven reaching

A virtual cart with mass and viscous friction is attached to the end effector through a spring and a damper. A constant force pulls the cart along a straight path. If the end effector is blocked, the cart stops too, so the robot force is bounded by that pull 2610.05695 §2.2. The cart's mass and friction are not stated, and the card reports no result for this design.

Obstacle avoidance

Each obstacle is joined to the end effector by a repulsive, nonlinear spring and damper. Stiffness and damping grow as the separation shrinks, and the forces from several obstacles add up 2610.05695 §2.3 2610.05695 §4.2. The paper uses one piecewise stiffness law. It falls to zero at 20 cm, and the damping law is not stated 2610.05695 §4.2. The card tests one 10 cm cylinder, two 6 cm cylinders, and a non-convex pair. The first two were avoided. With the non-convex pair the end effector fluctuated near a local minimum of the obstacle springs. All three results are qualitative 2610.05695 §4.2 fig. 6.

When to use which

SituationUseWhy
No inverse kinematics solver is available or wantedAny VMC designThe controller maps virtual forces straight to torques through Jacobians 2610.05695 §3
A person or object may block the armSpring-damper reachingWith a human hand blocking the end effector at 40 cm, peak contact force was up to 4.53 N. The IK-based PID baseline reached 35.77 N. The baseline gains are not stated, so this is one comparison 2610.05695 §4.3 fig. 8
Long moves where peak force should stay lowMoving referenceThe paper reports lower peak force and less lateral deviation than simple reaching 2610.05695 §4.1
The arm must reach the goal exactlyNot shown by this cardThe moving reference ends about 5 cm short, and no other accuracy figure is given 2610.05695 §4.1
Force needs a hard capForce-driven cartThe robot force is bounded by the cart pull 2610.05695 §2.2, but the card has no measured result and no cart parameters
Obstacles are known before the motionRepulsive obstacle springsObstacle position and radius are entered by hand, and no vision is used 2610.05695 §3
Obstacles are only found on contactMoving reference at higher speedWith an undetected acrylic plate, the card reports contact for about 0.5 s, then sliding and arrival at the goal. The run was at 0.5 m/s and the card gives no outcome count 2610.05695 §4.3 fig. 9
Stiffness is lowCheck friction firstAt 15 N/m the spring force did not overcome friction at the end of the reach 2610.05695 §4.1
Team has no time for hand tuningPlan for trial and errorEach virtual mechanism is designed by hand per task and tuned by trial and error, and the paper names optimal design as open 2610.05695 §5

Implementation sketch

The sketch sums the torques of several virtual parts, as eq. 1 states. The force law for each part comes from the design chosen above. Only the spring-damper law eq. 2 is written out in the card, so the other laws appear as placeholders.

Pseudocode
# One control cycle with several virtual parts  [eq. 1] [§3]
# Input:  q, dq (joint state), parts (virtual springs, dampers, masses)
# Output: tau (joint torques)

def vmc_step(q, dq, parts):
    # Read each attachment point and its Jacobian from the joint state  [§3]
    points, jacobians = forward_kinematics(q)
    # Update each part's state: spring extension, damper velocity  [§3]
    states = part_states(parts, points, dq)
    # Virtual force of each part, e.g. k x + c dx for a spring-damper  [eq. 2]
    forces = [part_force(p, s) for p, s in zip(parts, states)]
    # Sum the Jacobian-transposed forces into joint torques  [eq. 1]
    tau = sum(J.T @ f for J, f in zip(jacobians, forces))
    return tau

Conversion to motor current is a hardware step. On the Dynamixel motors the paper uses a linear approximation read from the motor's performance graph 2610.05695 §3. It is not included here. Gravity compensation is not stated 2610.05695 §3, so check whether the target robot needs it.

Contradictions

No disagreements between papers, since the page has one card. Within that card:

  • The 5 cm error of the moving reference is attributed to low stiffness, "as in the previous case". The previous case used 15 N/m, while the moving-reference run used 45 N/m 2610.05695 §4.1. The stated cause does not clearly match the run it is attached to.
  • The damping term for a moving target is ambiguous. eq. 2 uses the error rate, and the text does not say whether the target's velocity enters 2610.05695 §2.2.
  • The obstacle damping is written with two different arguments in §2.3, and no damping law is given. The distance unit in the piecewise stiffness law is not stated. Centimetres fit the piece boundaries, which is an inference 2610.05695 §4.2.

Papers

Source and license

Compiled from the papers listed on this page, all published under CC BY, CC BY-SA or CC0, with citations. See each paper's page for its authors and license.