What changing the bin’s shape did to my robot
Every bin my robot had ever picked from was the same box.
That’s fine in a simulator. It’s not fine anywhere else. A real cell has whatever bin the factory already owns: a bit wider, a bit longer, deeper than you’d like. Before I train my robot on bins of many shapes, I wanted to know what a new shape breaks on its own.
So I built four new bins in my bin-picking simulation: one wider, one longer, one shallower and one deeper than the standard. Then I ran two robots on each of them. The first is the planner that teaches my learned policy, the part that is supposed to just work. The second is the policy itself, which had only ever seen the standard bin.
Everything here is simulation. Each arm and each shape got 16 piles of 20 parts, and I counted two things: how many parts it placed in the first minute, and how many bins it emptied completely.
The first run dropped parts over the wall, and it wasn’t the robot’s fault
The very first wide-bin run went badly. The planner picked parts fine, carried them over and then dropped them outside the other bin.
The bug was in my world, not in the robot. When I widened the bin it picks from, the bin it places into quietly took the same new size in my code. The planner aimed its release over a bin that was wider than the real one, and let go over the wall.
Each bin now keeps its own size, and the place bin never moves closer to the pick bin than a fixed gap. A small fix, but it set the tone for the week: when a result looks strange, check the world before the robot.
Wider, longer, shallower: the planner barely noticed
With that fixed, the planner shrugged off most of the new shapes.
In the wider and the shallower bins it placed about 19 to 20 parts in the first minute and emptied every bin on the xArm6, the FR3, the LR Mate and the UR5e. The wider bin even helped one arm: the iiwa, which struggles to reach the far corner of the standard bin, emptied 69% of the wider bins against 22% of the standard ones. Its hardest corner had simply moved closer.
The longer bin cost one to one and a half parts a minute on three of the arms. Its far end is further from the robot, and every trip there takes a little longer. That’s not a bug. That’s distance.
The learned policy held on, until the rim moved
The policy had never seen any of these shapes, so I expected it to suffer everywhere. It didn’t.
In the wider and longer bins it stayed close to its standard-bin numbers. I tried it on three arms. On the xArm6 it placed about 17 parts a minute in both and emptied every bin. On the FR3 and the UR5e it emptied 94 to 100%.
The shallower bin was different. There it lost two to four parts a minute on all three arms I tried it on, and emptied only 62 to 75% of the bins. My guess at the reason: the policy doesn’t see how high the rim is, it only sees the parts. Every bin it trained on had its rim in the same place, and the shallow bin’s rim sits lower than any of them. Whatever it learned about clearing the wall, it learned for one wall.
That is the clearest argument I have for the next step: train it on worlds of several shapes, so the rim stops being a constant.
The deep bin: 94 seconds without closing the hand
The deeper bin is where the story turned.
Get Esteban Puello’s stories in your inbox
Join Medium for free to get updates from this writer.
I watched the planner on the xArm6. It started as fast as ever, ten parts in under 24 seconds. Then it reached the last parts, which had settled along the far wall, and it stopped closing its hand. From 50 seconds to 144 seconds, not a single grasp.
The video showed the same move again and again. The hand went down beside the wall, the safety check refused the move, the arm backed off and went down again. Four times a second.
I already had a rule for this. My first deep-bin run had shown the same loop for 12 seconds, so I’d taught the planner to give up on a spot after four refusals and pick somewhere else. In the deep bin that rule fired as designed, and it didn’t help. The next spot it chose was only 3 to 5 cm away, by the same wall, and it was refused the same way. Spot after spot, four refusals each. That’s where the 94 seconds went. It did empty the bin in the end, at 176 seconds.
It wasn’t the hand
My first suspect was the hand hitting the wall. It wasn’t.
The fingers on this gripper are long. In the standard bin, when the hand reaches the floor, the base of each finger is still above the rim. In the deeper bin it isn’t: the base of the outer finger ends up below the rim, a few millimetres inside the wall itself. No grasp at those spots was ever possible. The safety check was right every single time.
To be sure it was the depth and not the pile, I ran the same pile in bins of 1.0, 1.1, 1.2 and 1.3 times the normal depth and counted the refused moves in the first minute:
- 1.0, 1.1 and 1.2 times as deep: zero.
- 1.3 times as deep: 74.
The parts settle the same way in both bins, to within a few millimetres. It’s the wall.
Across all six arms, the planner emptied at most 38% of the deep bins. The learned policy, on the three arms I tried, emptied at most 12%.
What I changed, and what I didn’t
I didn’t make the planner smarter. A real cell would solve this with hardware: longer fingers or a shallower bin. Software that keeps trying a grasp the geometry forbids is just a slower way of failing.
So the training worlds stay at 1.2 times the standard depth or less, until each arm gets its own gripper with its own fingers. The four-refusal rule stays too, because it’s still the right answer when one spot is blocked and the next one isn’t.
And the learned policy gets its next job: training on bins of several shapes, so a lower rim stops surprising it.
What I’m taking from this
Three of four new shapes cost almost nothing, which is good news for a simulator meant to train for real cells. The one that hurt didn’t hurt because of learning or planning. It hurt because of a few centimetres of finger.
When a robot keeps retrying, check the geometry before the logic.
What’s the physical limit your software spent the longest trying to work around?










