From Nsnam
Revision as of 09:52, 6 July 2010 by Socket (Talk | contribs) (Mid Term Report)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

The work approach, has been described in the wiki page [1].

The steps I've followed during this period are resumed below.

Achieved goals

We have initially identified the key aspects of the implementation, we have defined the overall architecture of the module extension and, we have made some UML diagrams to fix the implementation concepts. We've defined an abstract interface for AUVs called UanAuvMobilityModel and two concrete subclasses implementing it, UanGliderMobilityModel and UanRemusMobilityModel.

Next, I've started looking at the implementation details for the two AUV classes. I've gathered as much information as possible on the AUVs, looking at the available datasheets, looking into literature, emailing the producers, etc.

Regarding the Seaglider, I've been able to gather a lot of useful information, about physical construction, about navigation, about propulsion and energy systems (thanks to Fritz Stahr and Charles Eriksen at UW). Unfortunately one of the papers [2] had some inaccuracies into the models and images. This has made me loose some time, trying to figure out the problem..

Regarding the REMUS AUV instead, I've been able to obtain very few information. I've emailed Capt. Ernest Petzrick at Hydroid Inc. (Sales Engineer) looking for information about batteries, etc. but he said me that the only publicly available information are those on the site. I think this is due to the use of REMUS AUVs by U.S. NAVY..

Anyway, with the available information I've started implementing the REMUS mobility class (UanRemusMobilityModel). It basically uses a constant velocity model to describe the AUV movement, and introduces the constraints related to the REMUS, like maximum operational depth, maximum pitch angle, maximum and minimum velocity. It has been implemented also a real-world navigation behaviour, stopping the vehicle when it reaches the water surface or the maximum depth.

Moreover, an emerging / submerging command has been implemented, that makes the vehicle emerge or submerge to a given depth as fast as possible and, when it reaches its target, it calls a callback, previously set by the user.

I've also implemented a UNIT test case for the mobility class to test its functioning.

Next, I've started implementing the Seaglider mobility model. It is quite close to the Remus model except for the buoyancy control. In fact, the Seaglider, doesn't have a electric propeller but instead it controls its velocity with a change in its buoyancy. Due to this behaviour, I've implemented the model for the buoyancy control exposed in [2]. So, when the user set a specific speed and pitch angle, the class computes the buoyancy needed to maintain the given velocity. It also computes the needed power to maintain the given buoyancy value. The class holds also the Seaglider's related constraints like max depth, maximum and minimum glide angles, max horizontal and vertical speed as well as maximum buoyancy value.

Finally I have implemented UNIT test for the seaglider mobility model. I've added the tests for both the remus and seaglider AUVs to a test suite called "auv-mobility".

For the end of the week I'm planning to release the helpers and example scripts for the two mobility classes, as from the project's schedule. The code produced until now, has been posted to the ns-3 mercurial repository [3] and into a codereview project [4].

Remaining tasks

I have now to implement all the energy related part of the project, thus two evergy source classes for the AUVs, an energy model for the umodem, modify the existing mac protocols to use the energy model, test cases and, of course, documentation.


[2] Eriksen et al. - Seaglider: A Long-Range Autonomous Underwater Vehicle for Oceanographic Research