MicroSeeker Autonomous Controller/Simulator

The autonomous controller for MicroSeeker is written in Smalltalk. Right now it is running in Squeak, and it will continue to run in Squeak on the Axim, although somewhat slower than on my 1 GHz Dell laptop...

There are two pieces that I am running right now -- the autonomous controller and the simulator.

The autonomous controller is "unhooked" from the simulator completely -- as far as it is concerned, it is controlling the sub and getting feedback from the sensors. I've written simulated sensors for each real sensor that the sub will have, and the only communication between the autonomous controller and the simulator is getting the sensor values, and setting the motor speeds and thruster tilt, which is exactly what the real thing will do.

The basic thrust of what I'm trying to say is that none of this is faked. I need to work on the physics of the simulation a bit more, and I need to work on more closely approximating things like the latency of the compass when turning, but in general this is how it will work in real life.

Following are a few screenshots of the simulator running -- you can click on them to get full-size images...

Simulator-01-small.gif (14583 bytes) Here's the simulator as it starts up. The system picks four constrained random spots for the beacons, and picks one at random to be the active beacon. The active beacon shows up as yellow, so we can get a visual indication of that. Of course, the autonomous controller has no idea which one is active.

The pane at the botom right shows a side view of the sub, with the surface of the water and the bottom shown as gray lines. Right now I'm assuming we're running in a pool with a flat bottom.

Simulator-02-small.gif (15369 bytes) Here, we're a little over nine seconds into the simulation. The sub is heading towards its first waypoint (the green circle), and also getting down to operating depth, which is defined in this case as four feet off the bottom. The red line indicates the depth the sub "wants" to be at, which I call the "desired depth".

If the sub reaches the second waypoint (which is red because it is the last waypoint in the current set), it didn't find an active beacon, and so it turns around and goes back to the launch point.

Simulator-03-small.gif (16091 bytes) After the sub reaches the first waypoint, it turns on the hydrophones, and attempts to determine a bearing to the active beacon. In the simulation, the sensor generator figures this out and gives the sub a "ping bearing", which we represent on the screen as the small red line coming from the front of the sub. That angle is the only information that the sub has about the active beacon.
Simulator-04-small.gif (19878 bytes) Here we can see the sub has crossed over the top of the beacon, so it lines up to circle around do a north-bound run at the beacon. If the beacon had been north of the sub, it would have setup the waypoints for a south-bound run.

When the sub crossed over top of the beacon, it turned the hydrophones off,  changed the desired depth to be two feet off the bottom, and followed the new waypoint set which position and orient it for a run at the beacon.

Simulator-05-small.gif (16701 bytes) And finally, we're done (at least as far as I have done in the simulation).When the sub reached the finish waypoint in the last set (the red one), it shut the system down.

When I finish this, it will at this point turn on the camera, and attempt to navigate towards the beacon until it "sees" the marker.


If you have any comments or ideas, please email me...

Go back to my MicroSeeker page...
Go back to my Smalltalk page...