Vision-Guided Jelly-Roll Peeling

Initial research into battery unrolling, vision and force feedback, and DQI development.

Public project log complete · Development continuing privately

I’m exploring how vision and force feedback could guide the peeling and unrolling of a battery’s jelly roll, and how process measurements could support DQI development.

I’m happy to share that I received a lab position related to this project. I’ll continue developing this work more privately with the lab, so this public project log concludes with Day 9.

Gloved hands peeling apart the layers of a cylindrical battery jelly roll

I’ve watched the battery peeling and unrolling process in the video to better understand how the layers separate and how the peel front moves.

Reading now

I’m carefully reading Prof. Yunzhu Li and coauthors’ Real-to-Sim Robot Policy Evaluation with Gaussian Splatting Simulation of Soft-Body Interactions, alongside Vision-Guided Dual-Arm Humanoid Robotic Disassembly of End-of-Life 18650 Lithium-ion Battery Packs.

My annotated papers in Goodnotes:

Tentative two-week plan

  • Days 1–3: Map research gaps, collect and annotate video frames, define candidate DQI features, and establish a classical vision baseline.
  • Days 4–5: Train and evaluate a lightweight peel-front model; estimate position, orientation, and confidence over video.
  • Days 6–7: Build a simplified MuJoCo peeling surrogate and synchronize simulated vision, force, and displacement.
  • Days 8–10: Compare open-loop motion with force feedback, then combine vision and force for closed-loop control.
  • Days 11–12: Explore lightweight predictive control and test robustness to changing conditions.
  • Days 13–14: Connect process features to a future material-quality validation plan and document findings, limitations, and next steps.

The initial work will use video and simulation. Force, energy, and tracking measurements would be candidate DQI predictors; assessing recovery quality and contamination would require later material measurements.

Daily notes

Day 1

Preprint: Vision-Guided Dual-Arm Humanoid Robotic Disassembly of End-of-Life 18650 Lithium-ion Battery Packs

Questions about the approach

  • Why use “humanoid” in the title? I’m not yet convinced that the demonstrated system has enough humanoid features to justify the term.
  • On page 5, the authors describe role specialization as a way to simplify bimanual planning. Why, then, allow the arms to exchange roles? On page 6, they say this extends the effective workspace. How does that improve coverage, and by how much?

Reading clarification: My interpretation is that the roles remain specialized within each phase: one arm stabilizes while the other extracts. In Section 4.5, the authors describe switching roles when the extracting arm reaches its workspace boundary, allowing extraction from the opposite side. They claim this effectively doubles the covered workspace; I still want to understand how that gain is measured. Source: extraction and support-transfer procedure.

To read and learn

Day 2

3D printing parts for the SO-101 follower arm. Next, I’ll 3D print the leader arm.

SO-101 follower-arm parts being 3D printed.

I was also studying the battery disassembly video and brainstorming ideas:

  • How much do the black filaments falling from the layers affect AQI, and do we want to recover them? They appear very brittle and fragile.
  • The person uses a razor blade. Would we want to mimic this approach, have one of the robot arms perform the initial cut, or use a more specialized machine?

Day 3

I’ve ordered the motors, driver, and power supply. I’m still looking for camera modules at a good price.

Continuing my reading: Vision-Guided Dual-Arm Humanoid Robotic Disassembly of End-of-Life 18650 Lithium-ion Battery Packs.

Questions about the paper

  • Success rates: On page 13, I wanted to understand why they show the success rate for each phase as 10/10. It feels like too small a test sample, given that the goal is a safe and reliable system to disassemble batteries.
    What I found: Showing 10/10 makes it clear how many tests they ran, which is useful. But ten successful tests don’t mean it will always work. With independent trials and a fixed success probability, the exact two-sided 95% confidence interval is about 69.2–100%. So my concern about the small sample still stands. NIST explanation.
  • Wrist-camera offset: On the same page, the offset for the camera’s lateral mounting relative to the tool centre point is “measured once by a one-time calibration experiment.” Is that enough? Also, doesn’t this wording feel redundant?
  • Re-grasping: On page 14, they say the descend-and-re-grasp step removes any residual error introduced during transport. Is that a good statement? It sounds like it removes all the error. Is that even possible?
    What I found: They don’t show a measurement proving that the error becomes zero. “Reduces the error introduced during transport” seems more reasonable to me. It would be nice to see the pose error before and after re-grasping. §4.2.
  • Grip force: On pages 14 and 15, they mention a 10% reduction and then say Stage 3 uses reduced grip force. Were these reductions learned, chosen through experiments, or arbitrary? Also, is switching between “grip-force” and “grip force” a typo?
    What I found: These settings are hand-tuned. The reduction in Stage 2 lets the assembly slide out under gravity, but I still don’t see how they chose the exact setting. The hyphen makes sense in “grip-force reduction,” where the words describe the reduction, so that part isn’t necessarily a typo. §3.2 · §4.3.
  • Camera streams: On page 18, the camera streams are between 15 and 30 fps. I don’t understand if this is supposed to vary. Wouldn’t it be better to have them all capture at the same time to make synchronization easier?
  • Real battery packs: It would be nice to see this done on a real battery pack instead of a mock-up.

New concepts to study

  • TSAI, PARK, HORAUD, ANDREFF, DANIILIDIS: Five hand-eye calibration methods for estimating the rigid camera-to-gripper transform from robot and target observations, commonly expressed as AX = XB. Tsai–Lenz, Park–Martin, and Horaud–Dornaika solve rotation and translation separately; Andreff–Horaud–Espiau and Daniilidis solve them simultaneously. Daniilidis uses dual quaternions. I’ll compare their assumptions and sensitivity to noise and pose diversity. OpenCV calibration reference and original-paper citations.
  • HSV gating: Keep pixels within chosen hue, saturation, and value ranges to create a color mask. In this paper, that mask is combined with a depth gate to isolate the lid. Thresholds can depend on lighting and object color. OpenCV: color thresholding · §4.3.

Day 4

I’ve set up the Python environment and added the first battery model to the project repository. The setup checks cover MuJoCo, OpenCV, and PyTorch/TorchVision on CPU and CUDA.

The first model is a rigid 18650 cylinder in MuJoCo, using nominal dimensions of 18 × 65 mm and an assumed mass of 45 g. It’s a starting point for the simulation; peeling, adhesion, and layer deformation still need to be added. Next, I’m planning to work on the roll and a simple peeling model. Setup and modeling notes.

First MuJoCo model of a cylindrical 18650 battery on a plane
First rigid battery model in MuJoCo.
Edge-detection output outlining the simulated battery
OpenCV edge-detection output from the setup check.

The leader-arm print is done, and the servos arrived. I noticed that some of the printed parts fit too tightly, even though I checked the gauge beforehand. I’m planning to file them down instead of printing them again.

Finished blue 3D-printed leader-arm parts beside the newly arrived servos
Finished leader-arm parts and the servos that arrived.

Day 5

I’ve added the SO-101 arm to the MuJoCo scene, with a desk close to the size of mine and a target for the battery. The arm model comes from MuJoCo Menagerie.

I’m using numerical inverse kinematics to move through a basic pick-and-place sequence: approach, lower, grasp, lift, transfer, place, release, and retreat. The battery is picked up through simulated contact with the gripper. This is a scripted sequence, with friction values that still need validation.

Pick-and-place simulation. The battery tips onto its side after release.

The simulation passes the lift and placement checks without physics warnings, but the battery ends up on its side, about 3.4 cm from the target center. So there’s still work to do on the release and placement. Next, I want to try peeling a layer with the battery fixed in place, and possibly add the second arm.

I still need to file down the 3D-printed parts. I’ll be doing that tomorrow.

Day 5 code update · Scene details and assumptions

Day 6

I also watched this video about Lumafield’s battery research, which gave me some amazing insights I wasn’t aware of. The main point I took from it is that 18650 batteries can have very different qualities depending on the manufacturer, or whether they are knockoffs of famous brands. Lumafield did some great research on the quality of different brands and the possible risks. This is useful information for the actual implementation of this research, which might deal with many different batteries.

This made me think about adding a thermal camera system to continuously monitor the battery’s temperature and stop the robot’s instructions if it starts to warm up. I’m also thinking about a protocol for moving the battery to a containment box. I initially thought of a sealed box, but I still need to understand what containment would be appropriate and whether moving a warming battery would be safe.

The robot needs to be robust enough to deal with the small, but important, mechanical differences between batteries.

I also wonder if it would be necessary to build a separate machine specifically to cut the protective layer, and then let the robotic hands do the peeling and unrolling.

I watched this battery disassembly video too, and I really like the idea of using a pipe cutter to cut the top and bottom of the battery. I could design a way to drive it with a motor and possibly control the force or torque applied. It’s an idea I want to explore for the cutting stage.

Video still showing a small pipe cutter positioned around the end of a cylindrical battery
Pipe-cutter idea. Still from the battery disassembly video linked below.

Image and video credit: original battery disassembly video on YouTube.

I’m having some difficulty figuring out how to build the battery model in MuJoCo, since the jelly roll is a soft body. I’ve been looking at the <flex> element introduced in MuJoCo 3.0, but the definitions seem quite low-level to me, and I’m not very familiar with that yet.

After reading one of the papers related to PhysTwin, I’m trying my best to see if I could model the jelly roll using their framework instead of MuJoCo. I’m still figuring out whether it would work for this problem.

While reading their README, I also found a small typo: “wiht” instead of “with.”

PhysTwin README screenshot with the misspelling wiht highlighted
The typo I noticed in the PhysTwin README.

Peeling simulation and synchronization

I’ve added a simplified peeling experiment to the project repository. It is an elastic-perfectly-plastic strip surrogate, so it is useful for learning the timing and control loop, but it is not yet a model of battery material or a validated DQI predictor.

MuJoCo peeling simulation with an orange strip, blue puller, and fixed tangent point
Mid-peel frame from the synchronized MuJoCo experiment. The orange strip is a visual surrogate, the blue block is the puller, and the red marker is the fixed peel-front proxy.

The simulation advances physics at 500 Hz, updates the control command at 100 Hz, records force and displacement at 100 Hz, and captures RGB frames at 25 Hz. Each frame is joined to the exact sensor sample from the same simulation state, which gives me a clean starting point for testing vision and force-based control.

The 11-second trial produced 1,101 sensor samples and 276 frames. The simulated strip peeled 47.2 mm, with a peak force of 0.8 N. These are synthetic process features for now; the next step is to replace the fixed-tangent abstraction with a more physical peeling and roll model.

Day 6 code update · Peeling and synchronization notes

Day 7

I’ve been working on synchronization and the gripper trajectories for the peeling phase, as well as how to model this in MuJoCo.

One thing I noticed is that the minimum gap between the SO-101 gripper’s fingers is larger than the strip, so I increased the strip’s size for now. Later, I want to start testing other simulation alternatives that are more closely related to the research being developed in Prof. Yunzhu Li’s lab.

I should be done tomorrow with the initial code, but the complexity has increased a bit. I want to make sure I understand the steps I need to take and check whether my rationale makes sense and is relevant to this exploration.

I also worked on a more physical battery model that includes adhesion between the jelly roll and the core, along with MuJoCo’s native flexcomp for the deformable outer layer. The current model uses a two-dimensional flexible shell with contact, membrane stretching, and bending. Adhesion is represented separately by breakable point constraints, so it is still a custom, uncalibrated approximation rather than a native fracture model.

This proved very difficult to implement in a short amount of time. To test whether my plan was feasible, I used GPT-5.6 Sol to help with the implementation. My main focus was therefore to review the code and determine whether the simulation behaved as intended.

Day 8

I used a Young’s modulus of 3 MPa for the flexible shell, but this is a demonstrator assumption rather than a calibrated battery-material value. I found papers reporting higher stiffness values at other scales and under different loading conditions. Tang, Zhang, and Cheng report radial and axial moduli of 260 MPa and 1,200 MPa for a homogenized single-cell model, and equivalent battery-module values of 55 MPa and 90 MPa for two packing arrangements. Santosa and Fadillah use 20 GPa and 47.9 GPa as model inputs for dry and wet jelly-roll specimens under dynamic axial compression. However, I could not determine how those whole-cell, module, and compression values should translate to this thin-shell peeling demo. Tang et al. (2017) · Santosa and Fadillah (2024)

For now, I am keeping 3 MPa as an explicit assumption and treating the simulation as a way to examine behavior and implementation, not as a validated material model.

Day 9

Major update: the SO-101 now pulls a pre-grasped deformable ribbon from a fixed cylindrical core. The ribbon is a native MuJoCo flexcomp with 114 vertices and 148 triangles. The custom adhesion model releases one bonded row at a time after its reaction force remains above the assumed threshold.

In the 14-second simulation, all 32 releasable rows detached, corresponding to 58 mm of unwrapped material. The run recorded 1,401 sensor samples and 351 synchronized frames, with no MuJoCo warnings. Both regression tests also passed: one checks the scene geometry, grasp, contact, and pulling path; the other checks force-triggered release and sensor/camera synchronization.

MuJoCo simulation of the SO-101 pulling a deformable, adhesively bonded jelly-roll surrogate from a fixed core.

When I inspect the simulation visually, the adhesion behavior appears to work. The main issue is that the jelly roll seems to overlap the battery model about halfway through the run. Neither regression test detected this visual problem, and MuJoCo produced no warnings. I will investigate whether this is a limitation of the model, a contact-visualization effect, or an implementation problem.

My main goal was to see how easily I could carry out the plan. I believe that if an LLM can solve a research question or implementation too easily, then the question may not be challenging enough. I will now focus on understanding how other researchers have approached battery disassembly and on identifying a stronger research question.

Day 9 code update · Model, assumptions, and verification notes