Robotics as an engineering science is about as multi-disciplinary as it gets. There’s electronics, motion control, hardware, dynamics, kinematics, user interface, and a whole slew of other very complicated components that eventually create a useful robot. As a contract programmer, I usually only touch the high-level software side. However, with a few weeks to myself recently, I’ve been taking steps to more fully understand the rest of the picture.
Fair warning: this post is a little different from the ones I’ve written so far. It’s not terribly practical or immediately relevant to programming robots so feel free to move along. However, if you’re interested in the steps I’m taking to ultimately build my own completely functional robot arm from scratch, read on. (There might even be some pretty pictures towards the end.)
There’s an amazing amount of great material online for free. Sites like Coursera and edX give anyone access to some of the world’s best professors and courses. There are many other massive online open source (MOOC) platforms out there, but I’ve found the engineering-type material is best on these two.
I’m currently taking/auditing-as-I-find-the-time-and-motivation Control of Mobile Robots from Georgia Institute of Technology, Machine Learning from Stanford, Compilers from Stanford, Autonomous Mobile Robots from ETH Zurich, Entrepreneurship 101 from MIT and Robot Mechanics and Control, Part 1 from Seoul National University. It’s a lot. I figure it’s similar to taking 18-24 credits from world-class universities, but the great thing about being 28 is that I have a little bit different perspective than I had at age 18. I have more responsibility but fewer distractions and more motivation.
Why these classes? Well, you may have read about TP+, the programming language I created back in January. The current implementation is written in Ruby, and is a bit of a hack. It works really well, but I’m the only one using it. I’d like to add more semantic analysis and optimization before releasing it as a finished product.
I was working on simulating some articulated and delta robots in unity. The great thing about simulating these things is that you can bypass some real-world constraints: gravity, friction, momentum, etc. However, that won’t give you a very realistic simulation. Unity uses the NVIDIA® PhysX® physics engine, and I wanted to see how realistic I could get. This drove me down the rabbit hole of control systems and dynamics, hence the courses on control. I’d taken some control systems courses in college, but it’s probably been 8 years since I had to create or implement a proper PID controller.
Machine learning is getting increasingly more common, and I think that it is very applicable to the high-speed visual line tracking work that I do.
I have a very simple business model: charge customers hourly and hopefully get enough work to get by. It’s a good gig, but it’s not exactly scalable. I have tons of ideas for new products, but ideas are a very small part of what makes a succesful product. Here’s a great quote from Steve Jobs on the “tremendous amount of craftsmanship in between a great idea and a great product.” Hopefully the fine people over at MIT will help me fill in the gaps.
I built a 3D printer a few weeks ago.
It was a trying experience in which I burned off most of my fingerprints (turns out 195°C is pretty hot.) Since the printer was built from a kit and not one of those fancy $2000+ commercial-grade ones, it took some trial and error, but now it puts out some pretty nice prints. Mostly just owls and octopi, but I have managed to print out a few robot parts here and there:
I also joined a hackerspace here in Chicago called Pumping Station: One. My little 3d printer can only do so much, and this place has all sorts of cool toys. More importantly, there are cool people who know a lot more than I do about electronics, metalworking, woodworking and probably just about everything else in the world. (Did I mention there’s a scanning electron microscope?)
I will design and build a delta robot first, since the kinematics and mechanical requiremens are actually much simpler, but I would like to eventually design and build a small articulated arm for testing FANUC TP programs. How cool would it be to have a small arm mounted to your desk for testing? As as far as platforms go, I’d like to create one that supports standard HandlingTool TP, TP+ and possibly ABB’s RAPID and whatever KUKA uses.