AMI (Autonomous Mobile Intelligence)
This is my current robot platform and the base for my research.
Hardware specifications:
- Processor: MRM v1.1 from robominds
- Motors: some big Matsushita 24v motors with built in 1850 cpr optical encoders
- Motor control board: A mosfet based board designed by David Smith and modified slightly by me.
- Power Distribution: Uses a National Semiconductor switching regualator for maximum efficency
- Body: combination of Acrylic and aluminumn
Software:
The software for AMI is all written in ANSI C using the Eclipse IDE, and compiled using the GNU tools. I use a laptop running Gentoo Linux as my development workstation, and transmit compiled binaries to AMI via a serial cable link using kermit.
Most of the base code for accessing the various periperials and functions of 68332 is from the Motorobots library. This is an open source library of 68k code primarily aimed at the 68332 ( specifically the MRM ) but much of it is suitable for other 68k based processors such as the Motorola Coldfire.
Proportional Integral Derivative (PID) closed loop motor control: I implemented a PID algorithm to give very precise control over AMI’s motors, and thus motion. There are a number of decisions that needed to be made prior to implementing any PID control code. Things that need to be considered were:
- What PWM resolution should I use?
- What PWM frequency should I use?
- Should I use locked anti-phase or sign-magnitude to control my motors?
- Should I implement velocity control, or position control?
- What PID loop frequency should I use?
I decided to use a resolution of 255. This had the advantage of being able to store the PWM value in a single byte. After discussing the issue of PWM frequency with a bunch of people from the Seattle Robotics Society I decided to use a frequency of ~100hz. This was deemed to be fast enough to give good performance while not eating too much of the processors time. AMI’s motors have built in 1850 count per revolution optical encoders.
The next step in the process was integrating some grid based navigation software into the mix. I did some initial research and after reading some papers I found on the web I settled on an algorithm discussed in a paper written by Tucker Balch from Georga Tech. I modified the sample C code he wrote quite heavily to fit into the framework of AMI’s existing software.
The algorithm uses a occupancy grid in conjunction with a cost grid to work out the optimum (lowest cost) path from the start position to the goal.