evil-mad / robopaint

The software for your friendly painting robot kit!
126 stars 34 forks source link

Advanced Simulation Mode #157

Open RI0 opened 9 years ago

RI0 commented 9 years ago

Most of our thinking so far seems to be about RoboPaint connected to a WaterColorBot.

I was thinking about how my class could download RoboPaint at home or on lots of computers in the computer lab. The drawings could be made individually and saved to files ( like the MakerBot )

If the files were brought together, everyone could watch the the bot create the paintings as a group and it would be more fun.

To help people prepare the files, maybe RoboPaint could have some kind of advanced simulation mode that would allow us to create a simulated preview and then print the drawing to a normal Ink Jet printer as a rough draft.

oskay commented 9 years ago

Excellent idea. :)

techninja commented 9 years ago

Hrmm. Simulation of movements is certainly doable, but I don't think that's what you're after. This seems like a very mode specific endeavor, and how I imagine this for the edit/paint(print) modes:

  1. Create/import your art in edit mode
  2. Move to Print/Paint mode
  3. Change your settings (Paint set, fill style/options)
  4. Click "Preview this drawing", and a modal window/dialog pops up that will:
    • Display your Art with an assumed stroke width and available colors applied
    • Change all fills to match what the fill algorithm would fill it with (changing them into stroked lines of the correct color)
    • Include options to Print (using OS specific print dialog. I checked, this is totally in there), or to save out the SVG file generated. I don't think we need our own file format just yet :wink:

Does that sound about right?

RI0 commented 9 years ago

I was thinking of a sort of on-screen virtual WaterColorBot that could be used by people who want to see what their drawing will look like - approximately.

It should not try to be completely accurate, maybe even add some random error in the drawing so it looks more like a bot might have done it. Maybe the virtual painting speed could be adjusted so the onscreen carriage would race around the screen making high pitched buzzing sounds.

After the simulation is done, then I think it would be fun to be able to print this draft version using the standard printer driver.

techninja commented 9 years ago

Printing via a standard printer should fine, as long as we can generate the image.

Technically right now, simulation mode goes through all the standard motions, waiting for the bot to move around and do its thing as if it were really there. We can do that and apply it to an image in real time, or we can speed up the process a bit. Heck, we even have the power of WebGL and can use the CAD files and show the virtual bot moving around and "painting" onto a raster HTML canvas, which could then be printed. This would likely be its own mode.

Can you draw a sketch/picture of the ideal workflow a student would go through? A visual plan for this is probably the best path moving forward.

techninja commented 9 years ago

FWIW: I've found a very decent canvas brush drawing technique that could be used to simulate strokes: http://www.tricedesigns.com/2012/01/04/sketching-with-html5-canvas-and-brush-images/

techninja commented 9 years ago

@RI0 See if you can't answer my question above and when we work out the details I can figure out what release this feature can go in.

oskay commented 9 years ago

I don't think that it's important -- or even necessarily, a good idea -- to be particularly realistic. In RoboPaint RT (IIRC), we just use a constant-width line, with opacity that fades as a function of distance since the last re-inking. It gives an idea of what the output will look like. It's a bit like our "simulation" in scratch. Extra neat, when it will show what all the fills look like.

RI0 commented 9 years ago

@techninja - I will try to explain the virtual or simulation idea in more detail: My starting point is a classroom or group where several people have computers but there is only one robot. Many people will be competing for time with the robot so my idea is to do the following:

The first time someone starts up RoboPaint and no robot is attached, the user is asked if he would like to build a virtual WaterColorBot or a virtual EggBot.

The user will see a pile of components and then drag the parts into the right places a bit like a puzzle. The pieces will snap into place. If the X motor is in the y motor spot the robot will not work properly but it will work. This could be used as a way of letting everyone build the robots - not as much fun - but better than not doing it. To help make the robots unique and to get the full build experience, I think it would be fun to ask for a number between 1 and 10. This number could be multiplied by a random number between 0.1 and 3.0. The result is the error in the robot. This is the number of steps of error that will exist for this robot. The robot can be saved and the user can give it a name. The robot cannot be changed unless the robot is rebuilt. Maybe the builder will choose 1 next time and get one that is closer to error free. ( not sure 0 should be possible )

After the virtual robot is built then it can be used in the same way that a real robot can be used.

RoboPaint will treat it like a real robot. If a painting is sent to the virtual printer, the puzzle pieces come to life and robopaint the drawing in real time. Maybe there could be a turbo button to make it paint really fast but the little carriage must move around and follow the same instructions as the real robot. When the virtual robot is done it will make a little beep to indicate it is finished and then move back to home position. The following options become available :

Save the painting as JPG / PNG / PDF Save the painting as an animated GIF Save the painting as a set of instructions ( SVG or some other format ) that can be loaded in to the real robot and painted later Print the painting using a standard printer

The last option would use the default printer driver and could be used to create draft print outs before using the robot.

It seems like a lot of things can be done with RoboPaint even if using a virtual or shared WaterColor Robot or an EggBot Robot. This might also allow more people to experiment with the EggBot and create designs that could be shared.

RI0 commented 9 years ago

@techninja - I agree with your comments. I think this would probably be used for classrooms where there are 20 computers sharing 1 robot. It would allow people to do something instead of just waiting. It could also be used by classes who will probably never get a robot but would still like to do a RoboPaint project with their virtual robots.