The task of self-replication can be made much simpler if the machine is composed of modular building blocks. Each of these blocks performs a certain, specialized function. These functions are then stitched together to create a machine capable of manipulating its own parts and building more of itself (albeit from coarse-grained building blocks).
Only a handful of primitives are needed in order to a self-replicating machine in this way.
The assembler is configured in the simplest x-y positioning system possible. One linear actuator is used for horizontal motion while one is used for vertical motion. In this way, the assembler can move along the grid in an inchworm-like manner.
Here, the assembler assembles many CBA logos by repeatedly picking and placing parts. The idea being, the materials at the edge of grid represent limitless cartirdiges of parts.
It becomes relatively easy then, for the assembler to assemble copies of itself when given a feedstock of its subparts.
Clearly there are still some unmodeled aspects of this self-replication approach: the most obvious being that I haven't implemented obstacle avoidance yet. Adding this will significantly affect the simulation and will lead to some interesting behaviors.
This assembly strategy becomes exciting with the addition of one more part type: a micro-positioning actuator (an actuator that can position within a cell). This would then enable the assembly of the macro-scale building blocks from smaller (more fundamental) building blocks.
Here are sketches of how the three block-types depicted above could be assembled from parts themselves: (from left to right: linear actuator, anchor, gripper)