The eyes are the mirror of the soul

I have created a deterministic procedural eye generator. This allows agents to have completely unique iris shape and pattern.

I will integrate this  into the expression code soon, but until then, here are a few screenshots. I think it turned out pretty alright for 2 days work:


How to judge a 3D printer.

In this post I want to list the things that matter when you buy a 3D printer:
Creality CR10

Bed sizeWhile many crave a huge print-bed, I have found that most things I print are small. Why? Because most 3D printers are much slower than you think. In fact most points on this list are about speed vs. quality. But if you have a fast printer that prints high quality, or if you really need to print big and have the required patience, then bed-size is still important.
Motor speedHow fast can the motors transport the extruder around the work?
Motor torqueHow fast and steady can the motors accelerate?
Extruder max temperatureWill the extrude cope with the high-temperature filaments?
Extruder temperature stabilityWill the extruder manage to hold temperature steadily during printing, even at higher temperatures?
Extruder temperature speedHow fast will the extruder warm up from room temperature at the start of the print?
Bed max temperatureWill the bed cope with the high-temperature filaments?
Bed temperature stabilityWill the bed manage to hold temperature steadily during printing?
Bed temperature speedHow fast will the bed warm up from room temperature at the start of the print?
Enclsure temperature controlSome filaments like ABS may require the temperature around the work being managed using an enclosure and heater.
Direct vs. Bowden filament feedThe size of the print head directly affects the speed and accuracy of your printer. A big head will slow down and cause the printer to wobble if it is not rigid enough. To get around this many printer manufacturers look for ways to decrease the size of the head. One feature, the "bowden tube" allows the extruder motor to sit on the frame instead of the head. However this reduces the filament capacity somewhat which in turn affects print speed.
Interchangeable extruder headYou might only care about the standard 1.75 mm filament through 0.4 mm nozzle size. However there are lots of options out there when it comes to nozzle sizes. Having an easily interchangeable head/nozzle is desirable, and a printer that can handle the higher heat requirements of a larger nozzle/filament of course.
Multiple extruder headHaving more than one extruder provides some benefits, for example if you are printing with more than one material per part. Example usages are: flexible filament for rubber seals, washable support material, dual color prints etc.
NoiseRemember your printer will be running for a long time. Print times are usually measured in hours, and sometimes in days..
Build quality & basic featuresThis qill require a lot of "getting to know" the printer. Basically all sorts of small practical details such as positioning of the user interface, display size, where is filament dispensed from, how are the wires connected? etc. etc. You can often get an impression of these things by looking at printer reviews on YouTube.


3D Printed case for iMacwear W1 (DM98)

I made a protective case for the W1 Android watch.

iMacwear W1 in protective 3D printed case with servo mount.

The idea was to make a case for it that would protect it while also providing better mounting options. The current version of the case sports a native RC servo horn mount, but I am also looking at different mounting options including a gimbal mount and a simple "screw me on" mount.

I submitted the whole thing on thingiverse here if you want to check out the details. It includes source CAD file, lots of pictures and details etc.


Printing faster on Creality CR10

OK, so it is official. We are now on the 3D printing bandwagon.

The proverbial We got a Creality CR10 3D printer shipped to the shop straight from PRC, and it has had lots of use the last weeks. As a complete beginner I had a lot to learn, however yesterday I put out my first ever DIY design on Thingiverse.

The printer is awesome. It feels like I suddenly got a new super power; the power to create anything. But there is one big hurdle, and that is time. It takes forever to print even the tiniest of things!

So I have experimented a bit with settings and found some optimizations that I would like to share.

First a general note on optimizations; this will most probably only work on the Creality CR10, using gcode generated by Cura, and even using the exact PLA brand I am using (Gold Camel).

So what will affect the print speed?

  1. Infill percentage
  2. Layer height
  3. Print speed
  4. Travel speed
  5. Retraction speed
  6. Retraction distance
  7. Raft margin
  8. Raft layer count

I found the standard/default/recommended settings to be way conservative. Here are my new settings that cuts the total print speed in almost half:

Infill percentage10%100%How is this even possible? You do it by making sure your model contains the necessary structural elements by hollowing it out where you need less structural strength and filling in when you need more. This has a bonus benefit that you can shape your custom "infills" to improve the weaknesses in the structure.
Layer height0.8 mm2 mmWill affect appearance, the model will look more coarse.
Print speed60 mm/s100 mm/sIf you go too high, the motors might start skipping steps or the extruder might not be able to put down enough PLA.
Travel speed100 mm/s300 mm/sIf you go too high, the motors might start skipping steps.
Nozzle temp200 ℃205 ℃This provides better layer adhesion, and might be required if you increase print speed.
Bed temp50 ℃70 ℃This provides better bed sticktion on clean glass with raft, and might be required if you increase print speed.
Retraction speed25 mm/s60 mm/sIf you go too high, the extruder motor might start skipping steps or retraction might not work as expected.
Retraction distance6.5 mm1 mmIf you go too low, you might get artifacts such as stringing.
Raft margin15 mm5 mmThere are many ways to do adhesion. I like best a clean glass plate with a small raft, and raft margin gets really important for small parts.
Raft layer count21I found 1 layer is more than enough for the raft.



OctoMY™ has a huge ambition when it comes to the way the agent will localize itself and map environment.

OctoMY™ SLAM (Simultaneous Localization And Mapping)
When a robot is looking at it's environment through it's sensors, it will get a pattern of data. It then has to process this pattern to identify it's location in the environment, and also accumulate meaningful information about the structure of this environment for future use (creating a map).

The data could be as simple as the readings of an ultrasonic range finder or as complex as the video streams from a stereoscopic pair of cameras. And the algorithms an heuristics that are used to derive meaningful localization and mapping data is loosely fit under the term SLAM (Simultaneous Localization And Mapping).

Stereo Camera Sensor

And there are about as many approaches to SLAM as there are implementations out there. This is a really hard set of problems with no "best" solutions. Many of the implementations are crafted for specific sets of performance, constraints and trade-offs such as

  • Available processing power ("must run in real-time on smartphone").
  • Indoor only or outdoor as well.
  • 2D or 3D mapping
  • Sparsity/size of map data
  • Accuracy of localization
  • Loop detection (detection and resolution of circular pathways in environment).
  • Scalability with size of environment
  • Must be GPU/FPGA/DSP accelerable.
  • etc.
So now that you have a grasp on what SLAM is, it's time to move on to how this is planned for OctoMY™.

Since we are basically building a platform on top of which we hope you will add all the cool plugins and features, there really arn't any limitations to what kind of SLAM methods can become part of OctoMY™. But since SLAM is such an essential concept, we will have to provide a pretty darn good default implementation from the get-go that you can get started with right away.

Nothing is set in stone yet, but here are some of the thoughts about SLAM in OctoMY™:

  • Should be unsupervised as far as possible
    • Automatic camera lens/other sensor calibration
    • Automatic environment scale detection
    • Automatic tweaking of parameters to get the best result in general
  • Should generate detailed and accurate 3D map of high accuracy.
  • Should support huge maps
  • Should support distributed data model that allows  sharing of data between agents all over the world.
  • Should support input from whatever sensors are available, and make the most of it.
  • Should adapt to the processing hardware available:
    • Make use of hardware acceleration through OpenCL when available.
    • Use less resources on lower-end platforms such as old smart phones.
  • Should use less hand-crafted and more "learned" methods.
In conclusion, yes ambitions are sky high for the central problem of localization and mapping of environment. In later articles we will surely explore parts of this problem in more detail.