As of Feb 1, 2016 I have not committed any money to this project other than getting a Beagle Bone Black ARM cpu board from a co-worker. He had no use for it and I thought I might make it into the on-board low level motion control processor (and I wanted to play with a Linux ARM based system).
The Beagle Bone Black has quite a nice I/O mix: beaglebone-black-overview
I am a long time Linux user, staring with kernel 0.98, which I brought home from work on dozens of 5.25 inch floppy disks. All the machines in our house use Linux, including Mary’s desktop where she does all of her writing. We run a mixture of Mint-MATE based machines (switched from Ubuntu when they abandon the “good” user interface) and many versions of Puppy Linux. I like both of these distributions a lot. Each has different strengths that make one or the the other of them more suitable for a particular hardware platform.
We have several old netbooks that are still completely usable running Puppy, but which don’t have the CPU power, ram size or disk speed to host a full blown standard Linux system. Puppy is perfect for these machines. I always use the Puppy frugal install, which means that to install a new version I just copy three files to the boot directory, update the grub menu and reboot.
I can’t say that I miss the old Linux days, when getting the display configured was an art form, and getting sound to work was a struggle, and getting Ethernet to work was a struggle. Hunting for patches and unreleased drivers. Rebuilding the kernel over and over again. Now you just download the bootable system image to a thumb drive, reboot, select install and answer a few questions. In 15 minutes you have a brand new system running. And it all works. And it plays nicely with Windows and UEFI. Actually, I don’t know why anyone uses Windows any more unless they must run 3ed party programs that require it.
But I digress.
The first thing I did after deciding to go ahead with this project was to make a list of requirements, which included not only performance but also cost, technology issues, servicing (cleanliness) etc. I have that list somewhere and I should find it and plug it in here.
As will be obvious in the notes below I have now deferred thinking about most of the high level issues (the software design), and I am concentrating on the basic platform mechanics.
Basic platform hardware overview
- 6 legs, 3 joints on each leg (1 horizontal, two vertical)
- All muscles on the body hub with string tendons to the joints
- Muscles provide pressure but do not lock in position
- Joints use a clock escapement-like mechanism to latch positions
- Body hub has: air pump, air reservoir, batteries, low level cpu board and interface to all the motion control actuators, the cell phone, the mirrors/fiber optic lines to get both the hardware status and the view of the surroundings to the cell phone cameras.
- Each leg segment will have two digital control bits for muscle control (flex in, flex-out, neutral) and one bit for latch control (allow motion, lock). For status, I’ll need something to report actual joint position and probably some sort of stress or deflection indicators.
- The foot should have a contact indicator, and maybe an analog force indicator.
The above items need some diagrams to make things more clear, and to help me spot at least some of the obvious errors in mechanical design.
The whole area of feedback from the motion commands needs more thought. If something gets in the way of a leg, or there is uneven terrain, how do I detect it and what do I then do about it.
Skills I will need to develop (because…retired):
- 3d cad design for 3d printed parts (FreeCAD for design, xxx for part verification)
- Simple circuit design for leg actuator control from the ARM processor. Since each leg will have at least 9 digital-out bits for muscle and latch control and there will other digital I/O needs, I’ll need a multiplexor of some sort to get the 54 bits of digital output from the smaller number of pins available on the Beagle Bone ARM board.
I have a EE degree, but I have been strictly software for my entire working career, so designing and building even a simple digital circuit will be quit exciting. Getting back to my roots.
- Python seems to be the popular language for robotics these days, and I’d like to get proficient with it. I now do almost everything in bash, which I am not proud of, but it works.
- I’ll need to develop an Android app that lets me connect a phone to the ARM on-board CPU via Bluetooth. So I guess I’ll get to know the Android SDK and Java better than I do now. That app will have to control the cameras, do the image processing to determine the state of the vehicle, keep track of where we are and where we want to go, etc. I expect that all the higher level software smarts will run in the phone and the base platform will just deal with walking, including adapting to uneven terrain. The high level command to the base platform would be something like “rotate 120 degrees and move 4 meters” or something like that. The details of which leg does what and which joint does what, and dealing with low level recoverable failures should all stay in the low level platform. This represents a lot of serious work, but it is independent of the details of the platform.