Real Machine

Technical Journal

3/17/2022

 

I have been working on this project off and on for many years now.  It was loosely based on other robotic simulator hobby projects I wrote earlier.  But it quickly became obvious that this was a whole different beast.  I could see it needed to be a lot more robust and rigorously “objectified”.

As the functionality progressed, several times I had to go back and overhaul the philosophy and code to accommodate ever more versatile needs.

 

Infrastructure

I selected a development framework that allowed me to develop the code on a Windows PC and painlessly port it to other platforms, like Android and Apple tablets and smartphones.  With little exception, I wrote everything from scratch because, well, that’s the fun part; but I also wanted to avoid bloating the load package with tons of superfluous options and irrelevant functionality.  I’m sure I could make faster progress and perhaps add additional cool features; but before then, I’d have to go research it to find that kind of stuff; so it just never happened.

I decided to rely on lots of menus rather than an abundance of icons and smart keys.  I wanted to keep the user interface as simple and intuitive as possible.  I know it’s always a balance between obfuscation to the beginner and convenience to the experienced.  I guess in time, I may need to go back and revisit that decision.

I also tried to include enough functionality to give users lots of useful options, while not burdening them with math and physics.  Sometimes that’s just a hard balance to strike, so I’m hoping with some beta testing and feedback I can keep both kids and adults entertained and challenged.  It is also a challenge for me to make the operation as intuitive as possible, as well as an engaging challenge to teach the additional skills.  Hopefully, it’s easy enough for beginners to jump into and paddle around, and complex enough for advanced users to dive deep to discover all kinds of treasures.

 

Functionality

I continually have to remind myself that my objective is to provide tools to build a broad variety of machines – both simple and complex – as easily as possible.  Not just balanced leavers and spinning wheels, but then, not automotive automatic transmissions either.  I consider machines everywhere I see in terms of what kinds of parts and behavior would I need to include in a toolbox to build that kind of mechanism in my game.

I also didn’t want to bog down the creative process with the “minutiae” of design details – like a CAD system that requires you to draw a lot of geometry that you “call” parts.  Instead, the design process in the game is to decide what kind of parts your machine will need, then select and configure them from a list.

For example, in CAD systems, a part could require innumerable clicks and all kinds of math. Then more mental gymnastics to mount and align them, and synchronize their movement properly. Then perhaps a ton of custom programming to provide features for yourself to integrate a complex assembly of moving parts. I always thought it just shouldn’t have to be so difficult for the user. I always tried to have users focus on their creativity and leave the mechanical details to the software.

In the game, you create a new gear by selecting it from a list, change some parameters like tooth size and the number of teeth, and the esthetics of the body (like spokes) if you want, and you’re done. You got a perfectly formed gear.  Make another gear the same way. Drag one over to the other one and the teeth know how to align themselves and they click together like building blocks.  Making a motor is just about as easy, attach it to one of the gears, place a switch on the screen, and boom!  In just a few clicks and no data entry, you’ve created a motorized mechanism.  Changing any of the parameters is just another couple of clicks and dragging a slider bar.  The game is even able to change the size of the teeth of all of the gears attached to one that you change manually.

Likewise, creating a chain mechanism is pretty quick and easy.  You start by selecting and creating the style and parameters of a chain link you want, then creating and placing the sprockets where they need to go, in much the same way you create gears, identify the sequence of the sprockets in the chain path; and ta-da!  It will create and place the correct number of links along the path so you got a fully functional, accurately articulated, totally awesome chain mechanism!  You can leave a sag in the chain, or the design process will help you go back and reposition one of the sprockets like an idler to tighten up the sag.

Parts that utilize paths that are functional as well as physical, like a chain or extrusion path, are explicitly created and displayed.  However other geometries whose physical representations don’t contribute to the functionality, like electrical wires or pull cables are not laid out or displayed – only the functionality and connections (as the case may be) are specified in the design process.

Normally, movements of complex assemblies are particularly troublesome to design. But not in RealMachine.  You could (graphically) pick up an end-part and drag it through 3D space.  The software will simplify it into a smooth 3D curve, compose the synchronized movement profiles for each of the joints, and program them onto a set of cams or electronic controllers to articulate the whole assembly just like that!  Then the motion can be tweaked by dragging around the curve nodes in space or timing events on a chart – all very intuitively.

A child can imagine, design, and build an autonomous multi-joint robotic arm with fingers that grab a ball from a hopper and toss it into a basket; then teach it how to throw, test it, tweak it, and be done – from conception to the 3-point score – in 20 or 30 minutes.

 

Exercises and Challenges

Beginners will be led through a set of exercises where they will learn everything they will need to know and do.  The exercises challenge you to explore, think logically and intuitively, figure things out, practice what you learned, and then discover more advanced features as you go. Accomplishing exercises enable additional features, hints, and explanations. And there are lots of tutorials and demos to spawn your imagination.  Plus, many more complex part geometries are accessible online.

There are then dozens of challenges, requiring various levels of skills and complexity of machine composition.  There are always lots of ways to accomplish the same goals, and there are frequently multiple ways to compose a mechanism to perform the same function.  You can even go off and build anything you please!

 

Workshop and Workbench

Machines are an assembly of 3D parts that are attached together and reside and operate on or near a workbench in a workshop.  At any time, you can fly around the shop to examine your machine as close up or far away as you please.

 

Parts

There are many categories of parts that compose dozens of different types of parts; all of which have configurable features, options, and parameters.  Inter-part connections even include alignment options, like keyways and cutouts.  Most are 3D machine parts, though some of them are images that can be mounted on the screen, like switches and gauges.  Some of them are currently functional, and I’m still working on others.  Parts are like these:

( Electrical and Mechanical )

·         Motor/Solenoid( Rotating/Linear )

·         Toggle Switch/Push Button/Slider/Touch-Pad

·         Programmable Motion Controller ( Electronic Cam )

·         Sound-effects player

·         Basic shapes ( Sphere/Cylinder/Box )

·         Complex shapes ( Cut, Extruded, or Rotated Patterns )

·         Cam ( Rotating/Linear )

·         Spring ( Spiral Coil like a Cylinder/Cone/Flat or Cantilever )

·         Gear ( Disk/Ring/Rack )

·         Sprocket/Pulley/Spool/Wheel

·         Chain/Belt/Rope with Sprocket/Pulley

·         Pull/Twist Wire-Cable

·         Analysis Gauge/Indicator

 ( Geometry )

·         3D Pattern ( Extrusion Alignment )

·         2D Pattern ( Cutting a Bracket from a Plate, or Extruding or Rotating a Cross-section )

·         2/3D Path ( Chain/Belt/Rope Path )

·         1.5D Profile ( Cross-section Twist or Scale along an Alignment )

·         1.5D Profile ( Cam/Controller )

( Sub-Assemblies )

·         Gearbox

·         Leverbox

·         Joint ( Hinge/U-Joint/Ball-Joint )

·         Damper ( Angular or Linear )

·         Drive Screw w/Nut

 

Routing

Most parts are as they appear, but some parts contain invisible components.  For example, switches are attached to motors “wirelessly” without routing power or control cables.  Likewise, both wire-cables ends are mounted, but they are “wireless” in between, without having to route the cable itself.

 

Physics

Some parts have physical properties or responsiveness that can be enabled or disabled, like:

·         Flexibility ( Bend/Compress/Stretch )

·         Gravity

·         Momentum/Inertia

·         Rebound ( Bounce )

 

Attachments

Attachments are the connectivity and interaction between parts, which can affect each other’s behavior.  Parts can be affixed or constrained to some degree.  They can be permanent, as most are, or temporary, like a ball that is only affected by a surface while it is in the process of bouncing.  Constraints affect the movement and/or rotation of a point or surface of one part on a point, line, or surface of one or more other parts, like this:

·         Fixed ( holding position and angles, like being welded )

·         Rotating ( holding on to one or more axiis, like a joint or a bearing )

·         Placed/Sliding/Rolling ( limiting movement and/or rotation )

·         Gear/Chain/Belt ( synchronizing alignment, movement, and rotations )

·         Floating ( freely moveing around untethered, including bouncing )

Inherent interactions between specific part types are intuitively managed ( like Gears and Chains ).

Complex multi-part interactions of leaver/connecting rod networks ( like a crankshaft or a stair climber ) and balls that will settle and flow through a slippery hopper - you could even create a fully articulated Jansen walking mechanism

 

Graphic Editors

Geometry can be created and modified graphically in a graphic editor, by clicking and dragging to compose context-appropriate geometry and attributes.

·         Some data is 3D ( like an Extrusion Alignment path ), some is 2D ( like a Cross-Section ), others are 1.5D ( like a Cam profile )

·         Some paths are open-ended ( like the Profiles ) and some are closed loops ( like a Chain Path )

·         Some paths can be as simple as a line or circle, or as complex as 3D banked and blended curves

·         Different kinds of geometry are composed of

o   lines or curves between points on a chart ( like Profiles )

o   lines and curves in 3D space ( like an Extrusion Alignment )

o   selected parts ( like a Chain Path between and around Sprockets )

o   blended simple shapes ( like a Pattern of merged outlines of circles, stars, and polygons, with rounded or flattened corners )

 

Extras

There are lots of additional goodies, like:

·         Notebook Library

·         Cloud-based resources

·         Demos/Tutorials/Explanations/Hints

·         Device interaction capture, editing, and playback

·         Screen snapshot/video capture with editable captions and audio overdubbing

·         Direct cloud-based feedback and software updates/upgrades

·         Bluetooth smartphone/PC interface for sharing data between devices and enhanced ( drone explorer ) flight control

·         Parts can be exported to 3D Printer files for physical fabrication

·         Import/Edit/Export files/parts/features

·         Robust encryption for secure Cloud I/O

·         File privacy with user-owned keys

 

Status

Presently, there’s not much game-play functionality yet, because I’ve been focused on other stuff, like:

·         software internal architecture

·         composing and rendering the various parts

·         reading and rendering machines

·         creating parts and attachments by editing features, options, and parameters

·         getting the various behaviors working correctly

·         flying around to explore the graphic environment

In each of those categories, I have made tremendous progress, and am continually adding new functionality.  The First Release spec is fairly stable, so there’s not much scope creep, but the tasks of regression testing and debugging are painfully demanding and time-consuming.

I try to isolate new functionality into external proof-of-concept utilities to streamline the development.  I’ve added some screenshots to the Gallery to show some of my work there.  The Gears and Chain are pretty cool.  Do you see the Gears and the robotic arm in the images? Those started out as utilities a little while ago, and have now been fully implemented. I’m working on Brackets and Chains right now, and will be done pretty soon and implement them too.

Some other functionality I’ll work on next will be the geometry editors, like cross-sections, alignments, profiles, and patterns.  The elephant in the room is the Attachment editor.  When I get all that done, then I’m getting pretty close to bundling it up and issuing a BETA release. Wahoo!

 

Miscellaneous

The whole chain utility is pretty cool.  The implementation will be awesome!  You can designate a movable sprocket as an idler to automatically keep the chain taut, otherwise, it will sag. It’s pretty cool to watch in action.

The geometry editors are pretty cool too.  You can design complex shapes by placing simple shapes and it stitches all their boundaries together.  Do you see the image of the bracket with 4 holes?  Do you see how it is composed from of a bunch of circles and rectangles?  You could easily design that whole thing right on your phone.  It’s really cool to see how easily you can do really hard things that turn out so awesome.

I put a lot of effort into making tools for the user to do hard things with easy steps.  Everything is easy to design and easy to tweak.  I keep everything as “figure-out-able” as I can.

I’ll inspire you with examples, teach you how to be creative with tutorials, and then give you tools to build your own inspirations in a virtual workshop so you can see them as realistically as if you were holding them in your hands.