|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
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...
||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.
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
||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.
||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
||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
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.
||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.