AME 3623: Project 3

For this project, you will be reading "image slip" data from a set of cameras and estimating the distance traveled by the hovercraft in a given period of time. A key part of this project will be the construction of a mathematical model that captures this relationship. This model will allow us, in the long run, to estimate the velocity of the hovercraft in a coordinate frame centered on the craft.

Each group will be issued: a hovercraft, equipped with a power conditioning system and three downward looking cameras.

At the end of this project, you should be able to:

Component 1: Microcontroller Circuit

Your hovercraft is equipped with power circuit and three downward-looking cameras. When turned on, the power circuit delivers +5V to the top deck (where your circuit will be located) and to the red LEDs that are part of the camera system.



The CJMCU-110 Optical Flow Camera pin-outs are shown below:

The common lines that are shared across all cameras (and should be connected together) are:

In addition, each camera has its own Yellow line that is used to select the camera for communication. Each camera must have a unique digital output pin assigned to it.

Component 2: Camera Interface Software for Data Collection

Create a new project in your Arduino environment; copy over the code that you have developed so far.

The library is in the lib directory of your Dropbox. Within the Arduino environment, select Sketch menu / Include Library / Add .ZIP Library. Navigate to and select You will not need to repeat this step in the future.

Write a data collection program:

Component 3: Data Collection

Component 4: Sensor Model

The result of your data collection process is a matrix of 30 rows and 6 columns, representing the accumulated slip measured by each camera for 30 different cases. This matrix is appended to another matrix of 30 rows and 3 columns, representing the movement of the chassis along X, Y and theta. We will use multi-regression to derive a linear function from the accumulated slip values to the chassis movement values.

Specifically, we wish to solve for functions of the following form:

X = a0 + a1 * adx1 + a2 * ady1 + a3 * adx2 + a4 * ady2 + a5 * adx3 + a6 * ady3

where a0 ... a6 are the coefficients of our function, adx?/ady? are the accumulated slip values for the x and y directions for each camera, and X is the motion along the chassis' X direction. Note that we will have corresponding functions (and coefficients) for Y and theta.

See the instructions for performing multi-regression in Excel. See the instructions for configuring Excel for regression if you have not yet used Excel to perform regression tasks.

In the Summary Output from the regression process, you will find a column labeled Coefficients. These are the parameters of the linear model that result from the regression process (a0 ... a6) from above.

Component 5: Implement the Model

Implement a function of the form:
void compute_chassis_motion(int32_t adx[3], int32_t ady[3], float[3] motion);

where adx and ady are arrays representing the accumulated slip values from each of the cameras, and motion is an array representing the motion along X, Y and theta, respectively. This function will take as input adx and ady, and fill in the values for the motion array. The motion values are in units of meters, meters, and degees, respectively. Note that when you pass an array to a function in C, you are passing the memory location for the array (and not the array values themselves). Hence, any change to motion by this function will be visible to the calling function.

Component 6: Testing

What to Hand In

Submit to your project3 folder of your subversion tree by Tuesday, March 6th at 5pm: Other components:


andrewhfagg --

Last modified: Tue Feb 27 02:00:28 2018