John Daly's Work
My name is John Daly and this is a site I've set up to gather my personal and research related information. I am currently a student in the PhD program at the University of Waterloo in Electrical Engineering. I am being supervised by Prof. Dave Wang. At the moment my research interests are, very broadly, in problems of nonlinear control. I'm interested in looking into control techniques for feedback linearizable systems under input constraints. To get a feel for the notion of input constraints, think of the gas pedal in your car. The gas pedal can only be pushed so far down to the floor until it can't go any farther. If we consider the amount the gas pedal is depressed as an input to the car's motor, we see that there is a constraint on the amount of gas we can supply to the car. This would be an example of an input constraint. This becomes a big issue in systems that are inherently unstable, like airplanes. What if I try to execute a maneuver, but mid-way through I run into the constraint on the throttle? It is these types of questions that I'm interested in looking at.
Prior to moving to Waterloo, I was employed at a company called Neptec in Kanata, Ontario as a Vision Systems Engineer. At Neptec they work in the field of computer vision, designing products for aerospace and defence. I worked largely on the side of algorithm development for target tracking using our laser camera system.
I have a Masters degree in Electrical Engineering from Carleton University, and I studied in the Department of Systems and Computer Engineering under Prof. Howard M. Schwartz. My research there was in the area of nonlinear adaptive control algorithms for robot manipulators. I find adaptive and learning systems very fascinating, and like their applications to systems and control.
Below you will find some software I've written that may or may not be useful to you. Likely it would be the source code and implementation details that are of interest, more than actually running the programs themselves.
- Backpropagation Neural Network trained with a steepest descent algorithm
This is a fairly straightforward neural network algorithm taken from Simon Haykin's book, "Neural Networks - A Comprehensive Foundation". I implemented it originally because I was finding the MATLAB Neural Network Toolbox to be very slow for training. Thankfully, I saw significant speed improvements when I wrote the C version. It's not particularly useful in its current form since it is not at all interactive. But, it could be easily expanded!
The input data for the network should be put in a file called indata.dat as a list of tab separated values, with each line representing one of the network inputs. Similarly, the desired output values should be placed in a file called outdata.dat as a list of tab separated values, with each line representing data from one of the network outputs. The program outputs the training error as a function of epoch number to a file, so you can see how effectively the network is learning. - Linux Kernel Module to interface with the Carleton University Direct Drive Robot
I'm particularly proud of this one. For the experimental side of my Masters research I was running adaptive control algorithms on a 2 degree of freedom robot manipulator belonging to my supervisor, Prof. Howard M. Schwartz. It had been a long time since someone had done experimental research with this platform, and so the most recent software was written as a DOS ISR! The memory limitations of DOS were too great for me, so I decided I would learn how to write a Linux kernel module to interface with the D/A and A/D cards connected to the robot. I bought an O'Reilly book on Linux Device Drivers and spent a couple of weeks getting more familiar with kernel programming than I'd ever hoped to. The result was my driver, and it worked! It allowed me to use a reasonably simple interface in my actual control software to communicate with the robot. Take a look if you want to do any Linux device driver programming, hopefully it will be useful. Also, here is the Makefile to build the driver.
