Answers.Body: <p>This seems pretty much bordering on the impossible, given the current state of (LEGO) engineering capabilities. What you are describing is a <a href="http://en.wikipedia.org/wiki/Self-replicating_machine">Von Neumann Machine</a> and as far as I know nobody succeeded in creating one, not just in LEGO but in general.</p>
  
  <p>The problems you'd have to overcome:</p>
  
  <ul>
  <li>The robot must be capable to exert sufficient force to overcome the clutch power of the LEGO bricks. This could be done with a suitable set of gears. However the gears themselves eat up a lot of the motor's force due to friction. Pneumatics is absolutely out of the question for these parts.</li>
  <li>The robot must be capable of positioning the LEGO pieces with sufficient accuracy. I have no hard data available on the precision of the various LEGO actuators (motors, pneumatics, linear actuators, what else?) but in my previous LEGO experience electric motors can be tricky to program to operate with enough precision, but it can be done with enough testing and refining iterations for a given physical design. Again, gearing down would in theory help a lot, but all gears have some inaccuracy. LEGO gears are not among the most precise ones. You could easily test this by linking about a dozen cogwheels together in a chain, holding one end tight and testing how much can the other end of the chain rotate. Pneumatics are also out here, you can't get them to stop reliably anywhere but the end positions.</li>
  <li>The robot must be capable of picking up, holding and placing every type of LEGO piece it is constructed from. This means either an universal actuator that itself can handle every element or more than one actuator, each specialized for a subset of all elements. The actuator(s) should also be capable of orienting the pieces in 3D space, this requires at least <a href="http://en.wikipedia.org/wiki/Degrees_of_freedom_%28mechanics%29#Six_degrees_of_freedom">6 degrees of freedom</a> </li>
  <li>The robot must be capable of finding and distinguishing between different pieces. The hardest version would have the robot sift through a bin full of pieces, but you could "cheat" by letting it use pre-sorted, pre-positioned stacks or queues of individual piece types. Even that would bring many problems, the robot must know which element is where, how high/far is the current part in each stack/queue, etc.</li>
  <li>In the strict sense the robot should transmit it's program to the newly built robot. I'm not familiar with the current lineup of programmable bricks to state confidently whether it is possible at all for a LEGO brick to program another, but even if it's possible it would require some serious programming.</li>
  </ul>
  
  <p>In your examples you can see how complicated, huge and slow can these creations can become. But you can also see how highly does the LEGO community think of these creations, each of which does only a small fraction of your proposed project. I'm not saying that it's impossible, but I don't think it would be an understatement to say that this would be the single biggest achievement in the world of LEGO and in general engineering too.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2014-05-05T21:20:47.483Z
Answers.Text: Looks like you're right. Thanks for the detailed analysis and pointers to Von Neumann's machine.
Answers.UserDisplayName: GreyCat
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2014-04-30T18:46:49.780Z
Answers.LastActivityDate: 2014-04-30T18:46:49.780Z
Answers.UserDisplayName: zovits
Body: <p>I'd like to try building a robot that can build a copy of itself. Basically, I guess that involves:</p>
  
  <ul>
  <li>having some means of navigating around (i.e. wheels, tracks, something to move on)</li>
  <li>having some manipulator, capable of taking parts and arranging them together</li>
  </ul>
  
  <p>What would be the standard set of problems I'll encounter if I'll try to do it?</p>
  
  <p>For example, I already understand that CPU and array of sensors provided with NXT or EV3 is, well, very-very basic by todays standards to say at the very least, so probably it can't be helped to replace it with some more advanced controlling unit, for example, Arduino-based and a full-blown camera + Kinect. What else? For example, I'm a bit hesitating about:</p>
  
  <ul>
  <li>Is it possible to navigate a robot on wheels/tracks with decent precision, enough to be able to do such building work?</li>
  <li>Is it possible to construct a manipulator (i.e. an arm with some degrees of freedom) that would be able to put together basic Lego/Technics joints? Would it be precise enough?</li>
  <li>Should I use motors / pneumatics for the arm? Pros/cons of both of these types?</li>
  <li>If I'll use standard Mindstorms motors for the arm, what's the typical maximum weight it can handle?</li>
  <li>If standard Technics/Mindstorms parts won't be good enough, maybe some 3rd party parts (such as Matrix Robotics) parts will do?</li>
  <li>What are the good examples of minimalistic Technic/Mindstorms robots / arms, easy to assemble?</li>
  </ul>
  
  <p>And, the main question of them all — why hasn't anyone done that yet? I've found people building <a href="http://www.youtube.com/watch?v=oF0pMILT7_Y" rel="noreferrer">CNC 3D mills</a>, <a href="http://www.youtube.com/watch?v=_bapIwyY7VY" rel="noreferrer">guys who assemble lego models by hand <em>instead</em> of 3D printing</a>, <a href="http://www.youtube.com/watch?v=GQ3AcPEPbH0" rel="noreferrer">a very simple lego "assembly" factory model</a> and <a href="http://www.youtube.com/watch?v=NbEkRUTA8Qc" rel="noreferrer">a very basic lego 3D scanner &amp; "printer"</a>. </p>
  
Tags: <mindstorms><motor><robotic><wheel>
Title: Robot that builds a copy of itself
UserDisplayName: GreyCat
ThreadText: # Robot that builds a copy of itself
  
  (Asked by: username_0 on 2014-04-29)
  
  I'd like to try building a robot that can build a copy of itself. Basically, I guess that involves:
  
  * having some means of navigating around (i.e. wheels, tracks, something to move on)
  * having some manipulator, capable of taking parts and arranging them together
  
  What would be the standard set of problems I'll encounter if I'll try to do it?
  
  For example, I already understand that CPU and array of sensors provided with NXT or EV3 is, well, very-very basic by todays standards to say at the very least, so probably it can't be helped to replace it with some more advanced controlling unit, for example, Arduino-based and a full-blown camera + Kinect. What else? For example, I'm a bit hesitating about:
  
  * Is it possible to navigate a robot on wheels/tracks with decent precision, enough to be able to do such building work?
  * Is it possible to construct a manipulator (i.e. an arm with some degrees of freedom) that would be able to put together basic Lego/Technics joints? Would it be precise enough?
  * Should I use motors / pneumatics for the arm? Pros/cons of both of these types?
  * If I'll use standard Mindstorms motors for the arm, what's the typical maximum weight it can handle?
  * If standard Technics/Mindstorms parts won't be good enough, maybe some 3rd party parts (such as Matrix Robotics) parts will do?
  * What are the good examples of minimalistic Technic/Mindstorms robots / arms, easy to assemble?
  
  And, the main question of them all — why hasn't anyone done that yet? I've found people building [CNC 3D mills](http://www.youtube.com/watch?v=oF0pMILT7_Y), [guys who assemble lego models by hand *instead* of 3D printing](http://www.youtube.com/watch?v=_bapIwyY7VY), [a very simple lego "assembly" factory model](http://www.youtube.com/watch?v=GQ3AcPEPbH0) and [a very basic lego 3D scanner & "printer"](http://www.youtube.com/watch?v=NbEkRUTA8Qc).
  
  **Tags:** mindstorms, motor, robotic, wheel
  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_1 on 2014-04-30. Score: 7 | Accepted answer
  
  This seems pretty much bordering on the impossible, given the current state of (LEGO) engineering capabilities. What you are describing is a [Von Neumann Machine](http://en.wikipedia.org/wiki/Self-replicating_machine) and as far as I know nobody succeeded in creating one, not just in LEGO but in general.
  
  The problems you'd have to overcome:
  
  * The robot must be capable to exert sufficient force to overcome the clutch power of the LEGO bricks. This could be done with a suitable set of gears. However the gears themselves eat up a lot of the motor's force due to friction. Pneumatics is absolutely out of the question for these parts.
  * The robot must be capable of positioning the LEGO pieces with sufficient accuracy. I have no hard data available on the precision of the various LEGO actuators (motors, pneumatics, linear actuators, what else?) but in my previous LEGO experience electric motors can be tricky to program to operate with enough precision, but it can be done with enough testing and refining iterations for a given physical design. Again, gearing down would in theory help a lot, but all gears have some inaccuracy. LEGO gears are not among the most precise ones. You could easily test this by linking about a dozen cogwheels together in a chain, holding one end tight and testing how much can the other end of the chain rotate. Pneumatics are also out here, you can't get them to stop reliably anywhere but the end positions.
  * The robot must be capable of picking up, holding and placing every type of LEGO piece it is constructed from. This means either an universal actuator that itself can handle every element or more than one actuator, each specialized for a subset of all elements. The actuator(s) should also be capable of orienting the pieces in 3D space, this requires at least [6 degrees of freedom](http://en.wikipedia.org/wiki/Degrees_of_freedom_%28mechanics%29#Six_degrees_of_freedom)
  * The robot must be capable of finding and distinguishing between different pieces. The hardest version would have the robot sift through a bin full of pieces, but you could "cheat" by letting it use pre-sorted, pre-positioned stacks or queues of individual piece types. Even that would bring many problems, the robot must know which element is where, how high/far is the current part in each stack/queue, etc.
  * In the strict sense the robot should transmit it's program to the newly built robot. I'm not familiar with the current lineup of programmable bricks to state confidently whether it is possible at all for a LEGO brick to program another, but even if it's possible it would require some serious programming.
  
  In your examples you can see how complicated, huge and slow can these creations can become. But you can also see how highly does the LEGO community think of these creations, each of which does only a small fraction of your proposed project. I'm not saying that it's impossible, but I don't think it would be an understatement to say that this would be the single biggest achievement in the world of LEGO and in general engineering too.
  
  > **Comments:**
  > **username_0**: Looks like you're right. Thanks for the detailed analysis and pointers to Von Neumann's machine.  
  
  ---
  
  