A Portable Programmable Robot Controller
My objective was to design a portable controller which could be used to control wheeled robots in any environment, as well as receive sensor data. The attached figure shows the result.
The core of the programmer is Geoff's Explorer 100 board which uses a 100 pin pic32 running MMBasic Plus. This system has several advantages over other choices. A display (SD1963 LCD panel) can be plugged into the board. The display includes a SD card for data and program storage. MMBasic+ has a rich set of graphical commands, in addition to supporting keypads. The keypad can be programmed in different modes, effectively increasing the effective number of keys greater than 16. Most important, the keypad program runs in the background. An additional feature of the controller is a set of 8 push buttons which execute commands independent of the keypad. Communication is through an XBee.
When the programmer is powered on, the screen shows a list of robots recognized by the programmer. All robots must have the same command syntax. All my robots are controlled by propeller chips programmed in Tachyon Forth. RCL.pdf shows the structure of the control language. While only two-wheeled robots are shown, the programmer is designed to handle 1 to 4 wheeled systems. RCL_Keypad.pdf shows how commands are defined in different keypad modes.
This figure shows the display after a robot selection. It has the following features.
-- Current selected keypad mode - in this case, Defined Motions-2.
-- Area for entering parameters, eg, inches and degrees.
-- Settings specific to the selected robot, in this case, the BOE.
-- Description of the last entered command.
-- List of commands in order executed.
-- Dynamically updated data
- Wheel Speeds as % Duty - Encoders - Servo Angle (if enabled) - Ping Distance
- Heading & Acceleration (If enabled) - Execution Time of last entered command
When a robot is selected, the operation mode is displayed and the program executes a continuous loop, displaying updated sensor data. Executing a keyboard command, momentarily halts the loop.
This can be observed by simultaneously running a XBee connected terminal emulation.