Master's thesis · FAU Erlangen-Nürnberg and Fraunhofer IIS · 2026

Learning contactfrom motor current

The servos in my robot arm report how much current they draw. I wanted to know whether that number could tell a learned policy when the peg it holds has touched the hole.

Jaydeepkumar RanpariyaSO-101 · STS3215Peg-in-hole · 0.35 mmACT · Diffusion Policy

I spent six months trying to teach a cheap robot arm to push a peg into a tight hole. The trouble starts when the peg gets close. Through the wrist camera I could not tell a peg that was lined up from one resting on the rim or one beginning to jam, and neither could the policy. A force sensor would have settled it, but my arm has none. What it has is six servos, and each reports its own motor current for nothing. So I asked three plain questions of that number. Does it carry any information about contact? Does a policy I train take notice of it? And with the number in hand, does the policy put the peg in more often?

The task. This is me teaching it. I move a second, identical arm and this one follows. The wrist camera on the left is the only picture my policies ever see. I added the side camera on the right so that I could watch.
6servos, each reporting its current
100demonstrations I recorded
4head-to-head comparisons I ran on the robot
30trials for each policy

Visual occlusion

As the peg nears the hole, the gripper and the peg itself block the wrist camera's view of the rim. From the picture alone I cannot tell whether the peg has touched.

  1. 1

    The picture barely changes. When I look through the wrist camera, a peg lined up with the hole, one resting on the rim, and one that has started to jam all look much alike. Each calls for a different move.

  2. 2

    Touch sensors cost money and trouble. A force sensor or a tactile skin would tell the cases apart. I would have had to buy one, fit it, wire it, and calibrate it, and so would anyone who wanted to repeat my work.

  3. 3

    The servos already measure current. Each of my six servos keeps a register of the current it draws. I can read it with every camera frame, thirty times a second, and it costs me nothing.

  4. 4

    It is a crude number. About half the readings I get are exactly zero. The value depends on how the arm is posed as much as on what it touches, and I have no way of turning it into a force.

First question

Does the current carry any information about contact?

Second question

Do the policies I train take notice when the current changes?

Third question

Does a policy that sees the current put the peg in more often?

My arm and the task

I ran the whole study on a hobby arm. The one thing I added to what it normally observes is a register its servos keep anyway.

The SO-101 arm with its wrist camera on a white table, with the black peg fixture in front of it
My arm on its table. The camera rides on the wrist. The peg and its fixture stand in front of the base.
My arm
An SO-101 with six STS3215 servos
I have a second arm of the same kind as the leader. I move it by hand, and the first arm follows, thirty times a second.
What it senses
One camera on the wrist, and the current in each servo
I used no force sensor, no tactile skin, and no simulator. I kept the current just as the servo reports it, in steps of 6.5 mA.
The task
Push a printed peg into a hole 0.35 mm wider than the peg
I printed the peg and left the hole without a chamfer, so nothing guides the peg in. It stands on end and the arm picks it up from the side.
The policies
Action Chunking Transformer and Diffusion Policy
I trained each one twice: once from the camera and the joint angles, and once with the six current readings added.

Characterisation of the current signal

Before I trained any policy, I put the register to the simplest test I could think of. Does it change when the arm touches something?

Gripper current when it closes on air and when it closes on something
I had the gripper close fifteen times on each of four things and kept the highest current from each close
0 40 80 120 Peak gripper current (counts) Miss (air) Success (pen) d = 3.4 Stiff (pen) d = 3.5 Soft (towel) d = 13.5

Closing on any of the three objects sends the current well above closing on air. The smallest of the three differences is 3.4 standard deviations. Before the test I had set 0.8 as the least I would count.

d = 3.4the smallest gap between gripping something and gripping nothing
95 %of the demonstrations show the elbow current rise above 5 counts near the end
30 Hzreadings a second. A touch lasts three to nine of them
0forces I can measure. Pose, gear friction, and the weight in the gripper all move the number too
How often the elbow current rises as the peg goes in
Of my hundred demonstrations, the number in which the elbow current passes each level during the last ten seconds
above 5 counts
95/100
above 10 counts
82/100
above 15 counts
61/100

The middle value is 18.5 counts and the largest is 77. I let the last ten seconds stand in for the moment of insertion, because I did not mark the frames one by one.

What I took from this

The current does move when my arm touches something. I read it alongside the joint angles and the picture, and I never treat it as a force.

Dataset

I taught the task myself, moving the leader arm through a hundred insertions. For every frame I kept the wrist picture, the six joint angles, the six currents, and where my hand had put the leader arm.

One of my demonstrations, cut into its five phases
The demonstration in the film above: 945 frames, 30 a second
How long each phase usually took me

The boundaries were marked by hand from the films. I used them to check my analysis, and I never showed them to the policies.

100demonstrations, all mine
99,831frames, all in step
30frames a second, picture and numbers together
1operator: me
6 + 6joint angles and currents in every frame
45 %of the current readings are exactly zero
The same recordings, seen two ways

I train the policies with and without current on the same frames, the same pictures, and the same actions. All I change is the list of numbers describing the arm: six joint angles, or six joint angles and six currents.

Why I had to clean the number

Nearly half the readings are zero, and the rest trail off into a long tail. When I scaled them the usual way, a rare spike landed tens of standard deviations out. So for the later policies I cut each channel off at the value that 99.5 per cent of the training readings fall below, and scaled it after that.

Multimodal policies

For each comparison I trained two policies on the same demonstrations and ran them on the same day, turn and turn about. The only thing I changed between them is how the current gets into the network.

Comparison Without current With current
ACT, raw currentThe wrist picture and the six joint angles.I added the six currents to the list of numbers, just as the servos report them.
ACT, cleaned currentThe same network as before, which I ran again on the same day.I cut the currents off and scaled them with figures from the training data before they go in.
ACT, learned encoderThe same network again, which I ran a third time.I gave each joint a short history of its current and let a small network boil it down into six extra tokens.
Diffusion Policy, learned routeI trained it end to end without current.I froze that network and added a learned path that lets the current nudge each of its blocks a little.
30trials I ran for each policy
6trials in a block, the two policies taking turns
45 sto pick up the peg, carry it, and seat it
1training seed, so my trials test the robot and not the dice

I count a trial only if the peg ends up all the way in before time runs out. I give every success rate with a 95 per cent confidence interval and put every pair to Fisher's exact test. Before the trials began, I fixed ten percentage points as the smallest gain I would call worth having.

Evaluation

For each policy I have picked one attempt that went in and one that did not, filmed from the side. They are single trials, and I chose them to show what the two outcomes look like. The counts come next.

Policy
Outcome

Sees the wrist picture and the joint angles, nothing more.

ACT without currentWent in

Results

I ran thirty trials for each policy, the two policies of a pair taking turns on the same day. I never set one pair against another, and for good reason: the same network, without current, put the peg in 17 times out of 30 on one day and 7 times on another.

Trials in which the peg went in, out of thirty, with 95 per cent confidence intervals

I count a trial when the peg is all the way in within 45 seconds

0 10 20 30 40 50 60 70 80 90 Successful trials (per cent) ACT, raw current 19/30 8/30 ACT, normalised current 17/30 15/30 ACT, learned encoder 7/30 12/30 Diffusion Policy 9/30 12/30

Only in the first pair do the two intervals come apart, and there the policy with current did worse (p = 0.0089). In the other three the difference may well be nothing. The learned encoder came out 16.7 points ahead, more than the ten I had set as worth having, but no more than chance can produce in thirty trials (p = 0.267). Rest the pointer on a marker to see the figures.

Data table
ComparisonWithout currentSuccessesWith currentSuccessesFisher p
ACT, raw current Vision only 19/30 (63.3%)
[45.5, 78.1]
With raw current 8/30 (26.7%)
[14.2, 44.4]
0.0089
ACT, normalised current Vision only 17/30 (56.7%)
[39.2, 72.6]
With normalised current 15/30 (50.0%)
[33.2, 66.8]
0.796
ACT, learned encoder Vision only 7/30 (23.3%)
[11.8, 40.9]
With a learned current encoder 12/30 (40.0%)
[24.6, 57.7]
0.267
Diffusion Policy Vision only 9/30 (30.0%)
[16.7, 47.9]
With a learned current route 12/30 (40.0%)
[24.6, 57.7]
0.589
The gap between the two, with current minus without

Percentage points with 95 % confidence intervals

-60 -40 -20 0 +20 +40 better without current better with current Percentage points ACT, raw current -36.7 ACT, normalised current -6.7 ACT, learned encoder +16.7 Diffusion Policy +10.0

A filled marker means the interval leaves out zero. Only the raw current manages that, and in the wrong direction. None of the intervals is tight enough to say the two policies of a pair are as good as each other.

When my policies with current failed, they mostly failed at the hole. They dropped the peg or missed the opening; they seldom fumbled the grasp. The two learned encoders lean the way I had hoped, but my thirty trials cannot tell that lean from luck.

Modality-use analysis

A policy might carry the current along and never act on it. To find out, I swapped the current for its average over the training data and left the picture and the joint angles alone. How far the chosen action moved is my measure.

How far the action moves when the current is taken away
I averaged this over frames from my demonstrations. The larger the bar, the more the policy leans on the current.
ACT, raw current
0.080
ACT, early current encoder
0.079
ACT, feature modulation (defective)
0.324
Diffusion Policy, raw current
0.065

All four policies change their actions when the current is taken away, so none of them ignores it. The one that changes most is the one that never got the peg in at all. Taking notice of a number and profiting from it are two different things.

What I took from this

My policies use the current. Using it did not help them.

What I learned

First question

Yes. The current carries information about contact.

When I close the gripper on an object, its current climbs far above what it draws closing on air. When the peg meets the rim, the elbow current climbs as well. The number is noisy, often zero, and changes with the pose of the arm. It tells me the motor is working hard. It does not tell me how hard the peg is pressing.

Second question

Yes. The policies take notice of it.

When I take the current away from any policy I trained with it, its actions shift. Whether they shift for the better is another matter, and this test of mine cannot settle it.

Third question

No. The peg went in no more often.

When I gave ACT the raw current, it did worse. When I gave it the cleaned current, it did neither better nor worse that I could measure. My two learned encoders came out ten to seventeen points ahead of their baselines, and thirty trials cannot tell that from luck.

What follows

I found a signal that is real and, so far, no use.

The number held the information and my networks took it up, and still the robot put the peg in no more often. If I were to trust a sensor like this again, I would measure the signal, check that the policy responds to it, and then count successes on the real robot. I have learned that nothing short of the last step will do.

Where my evidence stops
  • I had one arm, one task, one operator (myself), one training seed, and thirty trials for each policy.
  • I still do not know whether the learned encoder beats simply appending the current. I never ran the two on the same day.
  • The current does not show me the peg slipping in the gripper. At thirty readings a second it may not tell a slip from ordinary movement.

Citation

@mastersthesis{ranpariya2026contact,
  author = {Jaydeepkumar Ranpariya},
  title  = {Learning Contact Representations from Zero-Cost
            Proprioceptive Effort Signals for Contact-Rich
            Visuomotor Imitation Learning},
  school = {Friedrich-Alexander-Universit{\"a}t Erlangen-N{\"u}rnberg},
  year   = {2026},
  note   = {In cooperation with Fraunhofer IIS},
  url    = {https://contact-from-current.pages.dev/}
}