Long Live the King!...which is a round-about way of saying this blog has a new address!
When linking to anything on this blog, please use the new blog.machinekit.io domain. Of course any URLs you have stashed in bookmarks or web pages will still work thanks to the wonders of modern networking. :-)
Over the next several weeks, look for more additions to the machinekit.io network family, including a main website and some more technical posts on how the new architecture differs from the existing LinuxCNC, what bits-and-pieces are available, and how to build useful machines that work in hard real-time without spending man-years writing code.
Lots more details coming soon, as well as lots of handy usable software. I'll be releasing a major update to the PRU code which will support encoders (for full servo systems w/o an FPGA) and a consistent pin numbering system you won't have to be a programmer to understand.
What is MachineKit, I thought it was a BeagleBone uSD image?!?
What is MachineKit? I like to think of it as a "Robot Army Construction Set", but something like "controlling movable things" is probably better. Give us a bit to work up a good slogan...we're all engineering types here and marketing taglines are hard. :-)
But yes, the work I've done to get LinuxCNC running on the BeagleBone does have a downloadable image named MachineKit. However there is more to MachineKit than just an SD card image. MachineKit is Michael Haberler's vision for LinuxCNC being worked on by a small (but very talented and busy) group of folks. The idea is to take the "guts" of LinuxCNC back to it's modular roots and into the future by providing an assortment of pre-built, ready-to-use drivers, routines, and interfaces for machine control. Think something sort-of like Lab View, but with hard-real time performance and the ability to (safely) control anything from room-sized CNC machines to desktop 3D printers to self-balancing robots and autonomous quad-copter drones (hmm...did I mention Robot Army Construction Set?).
Background and dry technical overview to help you sleep tonight
One of the first major features of the new MachineKit code was porting LinuxCNC to run on a variety of real-time kernels. LinuxCNC used to support several real-time options but recently had degenerated to only working with RTAI. With the introduction of several new RTOS options (including Xenomai and RT_PREEMPT), it became possible to run LinuxCNC on the BeagleBone.
Other enhancements being worked on include a completely new messaging scheme to communicate between various components of the LinuxCNC/MachineKit world. This not only simplifies several existing use cases, but opens up many new exciting possibilities. Real-time and user-interface components will be able to be distributed across multiple platforms (ie: different physical CPUs connected via networking, shared memory, or some other means). The simple version of this is running the user interface on something like a tablet or desktop PC, while a BeagleBone or other embedded processor runs the real-time code. But even more is possible. The new scheme has been designed to allow multiple CPUs to participate in real-time operations, so you could potentially run floating-point real-time motion path generation on the ARM of the BeagleBone, use the PRUs as "first-class HAL citizens" (rather than the pseudo-hardware interface they are currently), and even something like an AVR or ARM CortexM to off-load various other bits of HAL code.
The vision of MachineKit is to return LinuxCNC to it's modular roots (you can theoretically swap out the motion planner, gcode processor, and other core parts of LinuxCNC, not that anyone does these days...it's code left over from the old times) and be able to more easily mix-and-match different pieces, potentially even having more than one component that performs the same or similar function. As a simple example, perhaps you have a linear delta 3D printer (Rostock or mini-Kossel). Usually, you want the motion controlled by the gcode processor for printing a part. But sometimes you may want a complex program directly communicating with the motion planner to do things like non-trivial homing and auto-calibration (auto-probe a bunch of points on the bed and do a bit of linear algebra magic to determine the real physical characteristics of your machine, like arm length and tower offset, rather than trying to measure everything to sub-millimeter accuracy). MachineKit intends to make this (and much more) not only possible, but easy to implement.