AMR Robot Arm Physical AI

Eleven Trainings of Approaching with Thousands of Simulated Robots — Four Collapsed on Gaps in the Reward Table

We used reinforcement learning to teach only one step, approaching the block, to an educational AMR robot arm. Of 11 trainings, four collapsed on reward loopholes such as "standing still," and one that looked good by training score never actually arrived. The final policy arrived in 199 of 200 simulated runs but fell short of the target time.

"Thousands of simulated robots learned to approach?" — some trainings collapsed on gaps in the reward table. Physical AI experiment thumbnail with the question and a graph diagram.

We trained 11 times, and four of them collapsed. This is a record of teaching an educational AMR robot arm one step, approaching the block, with reinforcement learning. We caught the collapsed trainings not by the training score but by a separate evaluation of 200 runs each. The final policy arrived at the target in 199 of 200 simulated runs, but it did not reach the target time we first set, even in simulation.

In part 5 we trained a small problem with two numbers on the CPU in a short time. This part is about a much larger problem, trained by moving thousands of simulated robots at the same time.


Why did we train only the "approach" step?

Picking up a block takes four steps. ① Find the block → ② Approach the block → ③ Circle around the block to adjust the angle → ④ Reach out and pick it up. When we ran the rules written by a person, the step that took the longest was ② approaching.

In this step, three goals collide with each other.

  • You have to go fast, but if you go fast the block drops below the bottom of the camera image and you lose it.
  • To see a nearby block you have to tilt the camera down, and the robot stops while it tilts.
  • You have to stand at the exact spot to pick it up, but if you go a little too far you push the block away.

The other three steps are solved exactly by calculation, and some movements, such as moving the arm, are dangerous if wrong, so we used the rules written by a person as they were.

Principle — Solve by calculation what can be solved by calculation, and use training only where the goals collide and the right answer is hard to fix.

How did we train it?

In Isaac Lab we trained by moving thousands of simulated robots at the same time. At short intervals, the robot looks at where the block appears, how far the camera is tilted, what it did just before and so on, and decides forward speed, sideways speed, and whether to tilt the camera. The rule that makes these decisions is called the policy.

Rendering the camera images of thousands of robots would be too slow, so instead of rendering images we calculated "whether the block is visible from this camera pose, and where on the image it appears" and fed that in. In exchange, we added values that arrive late and jitter, like a physical camera.

Before starting training, we reproduced the rules written by a person in the same way inside the simulation. At first we carried the rules over by guesswork, and 57 of 64 runs passed the block; only after we ported the physical robot's program as it was did we get a tendency that matched the physical robot's records. If the comparison baseline is wrong, we cannot say whether training improved anything.

How did we decide the reward table?

Reinforcement learning looks for the behavior that earns the most points. So the reward table is "what we want." We set the order of importance as not losing it, not overshooting > standing exactly > going fast.

ItemAdd/subtractMeaning
ApproachAddA little at a time as the robot gets closer to the block
ArrivalAddA lot when it arrives
TimeSubtractThe longer it takes, the bigger the loss
Losing the blockSubtractIt has to find it again
OvershootSubtractIf it goes past the target, the episode ends there
Camera tiltSubtractReduce needless tilting

Arrival was judged not by values measured through the camera but by the real distance inside the simulation. This is to block the loophole where a jittery measurement happens to fall inside the range and scores points.

What happened over the 11 trainings?

RunWhat we changedResult (200 simulated runs)
Run 1First trainingHardly moved — "standing still"
Run 2Some robots started near the blockStill standing still
Rule imitationMade it imitate the person's rules first0 arrivals (76 overshoots)
Run 3Started from the imitation and trained181 arrivals, median 22.4 s
Run 4Trained longerFaster, but with the camera angle off by ±3°, 33 overshoots
Run 5Added the camera error all at once, largeBack to standing still
Run 6Added the error gradually, from small185 arrivals
Run 7Trained longer with a larger error0 arrivals — the training score looked good
Run 8Added a smooth acceleration/deceleration reward200 arrivals, median 19.9 s
Run 9Added an assumption not confirmed on the physical robotNot faster, so discarded
Run 10Randomized the starting conditions199 arrivals — a habit of sidestepping to one side remained
Run 11Left-right symmetric training (last)The lean disappeared but 77 arrivals → not used

Run 1: a student too afraid of penalties to take the exam

The reward table cut a lot of points when the robot lost the block while approaching, and cut fewer when it stood still. The robot chose not to move at all. When there is a gap in the reward table, reinforcement learning finds exactly that gap.

Rule imitation: rare movements are not copied

When we first had it imitate the rules written by a person, it never tilted the camera. The moments of tilting are only a tiny part of all the examples, so learning "do not tilt" is right most of the time. Only after we gave a large weight to the rare tilting examples did it imitate tilting. Imitation alone did not reach the block, but training began to work from Run 3, which started here.

Run 5: make it hard all at once and it gives up

The Run 4 policy passed the block whenever the camera angle was even slightly off. So we added the error all at once, large, and the robot went back to standing still. It appears to have given up on approaching itself once overshoots became frequent. Only in Run 6, where we raised the error gradually from small values, did overshoots decrease.

Run 7: you cannot trust the training score alone

In Run 7, the average score earned during training looked normal. But when we tested it separately 200 times, it never arrived once. We estimate that easy attempts that start close to the block were mixed in and inflated the score. So for every run we also ran an evaluation of 200 runs under the same conditions, separate from the training score.

We asked for smooth movement, and it got faster

We added the condition "do not be abrupt, either when starting or when stopping." We did not put a limit on acceleration; we only added a reward that subtracts more as acceleration gets larger.

200 simulated runsRun 6Run 8 (smooth acceleration/deceleration)
Arrivals185200
Median arrival time21.0 s19.9 s
Maximum acceleration1.69 m/s²0.61 m/s²

We added one more condition and it got faster instead. The speed graph changed from the "square staircase" of sudden starts and stops to a "rounded hill." We did not test separately why it got faster; it appears to be because the time spent speeding up again after a sudden stop became shorter.

How did we choose the final policy?

Run 8 arrived in all 200 runs, but in a test that fed in the physical robot's driving records and looked only at the policy's answers, there were cases of sidestepping away from the block. We checked again with a "poke test," which changes only one input and looks at the answer. Run 10 did not remove the lean completely either, and Run 11, trained left-right symmetric, removed the lean but arrivals fell to 77.

So we stopped training at Run 11 and added one rule to the Run 10 policy. "If the block is to the side and the policy tries to sidestep the opposite way, change the sideways velocity to 0."

That one line created a new problem. In 200 mock runs that chain commands and results together without a robot, the robot kept standing still in 5 of them. The policy gave only a tiny sidestep in the opposite direction, and the rule turned it to 0, so the two blocked each other. After we added an escape rule, "if the command stays near 0 for a while, briefly use the command from the person-written rules," the robot moved in all 200 runs.

Final policy (200 simulated runs)Result
Arrived / overshot / lost199 / 0 / 0 (1 timeout)
Median arrival time21.7 s
Maximum acceleration0.59 m/s²
Camera angle off by ±3°198 arrivals, 0 overshoots

In the same simulation, the maximum acceleration of the person-written rules was 1.71 m/s². However, the rule figure is the median over all 200 runs while the policy figure is the median over the runs that arrived, so the ranges measured differ slightly.

What have we not achieved yet?

  • We did not reach the target time of 18 seconds or less. Even in simulation it is 21.7 seconds.
  • We could not build a fully left-right symmetric policy. For now it is blocked with one rule.
  • The evidence for the simulated robot's movement is weak. We tuned the simulated robot with values from a test on the physical robot, but the robot's movement record in that test was not its actual movement but a value calculated from the commands we sent (the same problem as in part 5). We re-evaluated assuming that at very low speed the robot actually moves less than commanded (80%, 60%). Arrivals did not waver, but how much faster the policy is than the person-written rules shrank from 3.8 seconds to 0.9 seconds at 60%. Only after re-measuring the actual movement can we state the gain from training accurately.

What did we learn from this?

  • A gap in the reward table will always be found. If "standing still" costs less, the robot stands still.
  • Look at the training score and the actual task evaluation separately. Run 7 had a good score but 0 arrivals.
  • Rare movements need extra weight to be copied. A movement that appears only occasionally, like tilting, disappears if left alone.
  • Raise the difficulty gradually. Raise it a lot at once and the training gives up.
  • Test the safety rule too. A line that blocks one problem can create another.

Frequently asked questions

Is a reinforcement learning policy better than rules written by a person?

All the comparisons in this post are values inside simulation. In simulation it moved more smoothly but did not reach the target time, and because the evidence for the simulated robot's movement is weak, how much faster it is must be measured again. The comparison on the physical robot will be described, with its conditions, in the next part.

How do you judge whether training is going well?

We did not look only at the score earned during training. Separately from training, we ran 200 tests under the same conditions and counted arrivals, overshoots and losses. Run 7 looked good by score but had 0 arrivals in this evaluation.

What computer do you need to run thousands of simulated robots?

We trained on one PC with a graphics card. We did not render camera images but substituted calculation, which let us run thousands at the same time.

Can this process be covered in a class?

The scope and method covered in a class are explained in an education consultation.

All the numbers in this post are values from the Isaac Lab 2.3.2 simulation. The simulated robot is driven by giving velocity directly to the body without turning the wheels, so the sideways slip of mecanum wheels is not reproduced.

Next step

In the next part, we plan to put this policy on the physical robot and describe the result of comparing it with the person-written rules in the same place, together with the conditions and limits. The method covered in a class is explained in an education consultation.


Version used: Isaac Lab 2.3.2

Sources: The educational AMR robot arm block-approach reinforcement learning that we carried out ourselves (2026-09-28). The detailed settings of the training environment (reward values, arrival criteria, neural network structure, training settings) are not included in this post.


The copyright of this post and its figures belongs to SV Robotics. Quotations that credit the original link are welcome; full reproduction, redistribution and reprinting as teaching material require permission.

  • #physical AI
  • #reinforcement learning
  • #Isaac Lab
  • #reward design
  • #robot simulation

MORE POSTS

More notes from the field

AMR Robot Arm Physical AI

Coloring a White Robot: Six Failures, Success on the Seventh, and Why We Had to Read Back in Code Instead of Trusting the Screen

The educational AMR robot arm we loaded into Isaac Sim was entirely white, so we tried to color each part. We created a material and bound it, but for six attempts the robot stayed white. The cause was neither the lighting nor the material type but "where the material was bound." This is a record of ruling out one cause after another behind the same symptom.

Read →

AMR Robot Arm Physical AI

We Moved an Approach Learned in Simulation to the Physical Robot — Why We Wrote Nine Limits Next to the Numbers

We put an approach policy trained with reinforcement learning in a simulated environment onto a physical AMR robot arm and compared it with a hand-written rule, three runs each from the same position. Approach time was 13.2 s versus 19.4 s, and the "lower the camera two steps at once" behavior learned in simulation appeared on the physical robot at about the same distance. The result comes with conditions attached, though - one position, three runs each, and a low battery.

Read →