Wishful Coding

Didn't you ever wish your
computer understood you?

Fast PyCAM on Mac using Homebrew

Ever since I started working on my CNC mill, I have been looking for decent software to generate G-code for it.

I wrote a G-code interpreter for my machine, after I found out LinuxCNC doesn’t support my type of LPT stepper driver, but finding good software to turn a 3D model into G-code turned out to be hard.

I went down this list, but most of them where hard to install or impossible to configure. In 2D I had some luck with the Inkscape plugin, but I was lost for 3D.

With the mill in a working state, and nothing to mill, I decided to push forward with PyCAM. I skipped PyCAM previously, because of its dependencies, which weren’t all available in Homebrew.

Some experimentation revealed a few important things:

  • It runs okay on my Ubuntu netbook.
  • Toolpath calculations take a looong time.
  • Its CLI runs without OpenGL and GTK+
  • It supports multiple and distributed processors.

After I cancelled the Ubuntu calculations, I ran it headless on my Mac. While somewhat faster, it still took a long time to generate G-code.

The real speedup came later, when I found PyCAM supports Psyco. But rather than messing with Psyco, I followed the advice on the Psyco homepage, and found the headless PyCAM runs great, and very fast, on PyPy.

Psyco is unmaintained and dead. Please look at PyPy for the state-of-the-art in JIT compilers for Python.

After successfully running PyCAM headless, I finally put my teeth in the dependencies. Installation steps using Homebrew follow:

  1. Download PyCAM.
  2. Apply my patch to make sure it finds pygtk.
  3. brew install pygtk
  4. sudo easy_install PyOpenGL
  5. Wait for my pygtkglext Formula to be merged, or get it from my branch.
  6. brew install pygtkglext or brew install https://raw.github.com/pepijndevos/homebrew/master/Library/Formula/pygtkglext.rb

Now you should be able to just run ./pycam to see the GUI pop up. However, I use the following 2 commands to run a server on PyPy, for extra speed.

pypy pycam --start-server-only --server-auth-key=fietspomp --number-of-processes=4

python pycam --enable-server --remote-server=localhost --server-auth-key=fietspomp --number-of-processes=0

I’ll blog about the mill itself later. This morning I tried to mill a small sample project, but the mill is very inaccurate and jammed after a few layers.

Crazy Seq

crazy-seq, the solution to all your head-holding induced memory problems.

(defn crazy-seq [head f]
  (reify
    clojure.lang.ISeq
    (first [_] head)
    (more [_] (crazy-seq (f head) f))
    (next [this] (rest this))
    (seq [this] this)
    (equiv [_ _] false)))

(def s (crazy-seq 0 inc)) ; hold head
(dorun (take 100000000 s)) ; low fat
(nth s 10) ; recomputes
;=> 10

A normal lazy seq is made up of a car and a function that returns the cdr, which is then cached.

This means that if you store the first item and walk to the millionth, it will keep all these million items in memory.

What crazy-seq does, is that it simply does not cache the value. So you can walk to the millionth item, and it will only store the first and the current, the others are GC’d.

This means that walking twice will cost more CPU cycles, and it means that you get in trouble if the fn is not side-effect free.

Have fun.

Published on

RCX Snow Plow

Over here in the Netherlands we usually have just a few days or weeks of snow per year. When the time comes, there are three things that absolutely have to happen.

  1. Go sledging
  2. Go ice skating
  3. Build a robot to drive in the snow

I wont bother you with the first two items, but I thought you might like number three.

I was surprised that I couldn’t find a single video of  a snow plow, plowing real snow. There are robots pushing LEGO around, and static models of a snow plow. This is what I made.

The robot is a regular half-track, but uses a triangular tread configuration to keep the motor out of the snow. It also has a rotation sensor on the unpowered front wheels, to detect the robot isn’t moving.

I’m not sure if you are interested in the software or building instructions, because it uses the RCX with parts from Ultimate Accessories and Ultimate Builders sets, as well as miscellaneous red parts. Are you?

Published on