27
NURC - Partnering for Maritime Innovation BHV_OpRegionBounce: an OpRegion that can bounce you back Stephanie Kemna [email protected] MOOS-DAWG 2011 MIT, Cambridge, MA, USA

NURC- Partnering for Maritime Innovationoceanai.mit.edu/moos-dawg11/material/21-brief-kemna.pdf · OEX AUVs: Groucho & Harpo 3. PUBLIC RELEASE 4 MIT/moos-ivp: BHV_OpRegion If the

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

NURC- Partnering for Maritime Innovation

BHV_OpRegionBounce:

an OpRegion that can bounce you back

Stephanie Kemna

[email protected]

MOOS-DAWG 2011MIT, Cambridge, MA, USA

2PUBLIC RELEASE

NATO Undersea Research Centre: Underwater acoustics and ASW

− Cooperative Anti-Submarine Warfare

− Autonomous Naval Mine Countermeasures

− Ship and Port Protection

− Marine Mammal Risk Mitigation

− Maritime Situational Awareness

− Environmental Knowledge &Operational Effectiveness

1959: SACLANT

NATO maritime and transformational requirements

Seagoing research: Maritime innovation in NATO Nations

3PUBLIC RELEASE

OEX AUVs: Groucho & Harpo

3

4PUBLIC RELEASE

MIT/moos-ivp: BHV_OpRegion

If the vehicle hits the limit for perimeter, depth or altitude:

BHV_ERROR:

all DESIRED_* values to zero

Why is this a problem?

5PUBLIC RELEASE

March 2011 Engineering Trial

6PUBLIC RELEASE

March 2011 Engineering Trial (2)

Area with high fishing activity

Vehicle with waypoint close to perimeter

No communications with vehicle for a long, long time

Fear of the AUV having hit the perimeter and surfacing (due to positive buoyancy)

7PUBLIC RELEASE

Solution: Bounce

In case of OpRegion failure:

Perimeter: bounce away from perimeter

Depth/Altimeter: bounce to 'higher' depth

This will keep the vehicle at depth and safe.

8PUBLIC RELEASE

Behaviour Design

Starting from BHV_OpRegion

Add perimeter bounce (for every polygon)

– orthogonal to perimeter

Add depth bounce (for depth & altitude)

– bounce to 'higher' depth

Both: bounce buffer & no_zone

9PUBLIC RELEASE

Bounce buffer & no_zone

buffer ::activates bounce, utility: linear increasefor distance from buffer to limit.

no_zone_factor :: [ 0 – 1 ]buffer*factor = part with highest utility

10PUBLIC RELEASE

for every polygon

if distToPoly < bounce_buffer

then for every vertex i

if distToVertex < bounce_buffer

compute vertex angle a_i (from North)

a_i += 90 // orthogonal bounce

w_i = 1- (distToVertex – no_zone)

bounce_buffer

w_i *= maxutil

if w_i > maxutil

w_i = maxutil

Perimeter Bounce:calculate course vectors

weight w_i: 0 to maxutil, linear increase with distance

11PUBLIC RELEASE

Perimeter Bounce:combine course vectors

// rescale all weights so that the max is 100// scale the weight of the bhv inversely

for every a/w combodetermine maxWeight

factor = m_maxutil/maxWeight;w_i *= factor;m_pwt_course = m_priority_wt/factor;

for every a/w combo

create a ZAIC_PEAK component(a_i,w_i)

extract the ZAIC IvP course function

rescale, because bhv weight (pwt) rather than util should reflect bhv importance/ influence

12PUBLIC RELEASE

if depth > (max_depth - depth_buffer)

safe_depth0 = max_depth - depth buffer - no_zone

w0 = 1-(((max_depth-no_zone)-depth)/depth_buffer)

if w0 > maxutil

w0 = maxutil

Depth Bounce (1):calculate depth vector for Depth

max_depth

depth_buffer

no_zone

safe_depth

13PUBLIC RELEASE

if altitude < (min_altitude + depth_buffer)

wanted_alt = min_altitude + depth_buffer + no_zone

diff_altitude = wanted_alt - curr_alt

safe_depth1 = depth – diff_altitude

w1 = 1-((curr_alt-(min_alt+no_zone))/depth_buffer)

if w1 > maxutil

w1 = maxutil

Depth Bounce (2):calculate depth vector for Altitude

convert from altitude to depthforcorrectcommand

min_altitude

depth_buffer

no_zone

safe_depth

14PUBLIC RELEASE

if (depth emergency && altitude emergency)

if (w0 > w1)factor = maxutil/w0w0 = maxutilw1 = w1*factor

if (w1 > w0)factor = maxutil/w1w0 = w0*factorw1 = maxutil

if (w0 = w1)w0 = maxutilw1 = maxutil

Depth Bounce:combine depth vectors (1)

rescale so that utilities are normalized to [0 - maxutil] given the highest calculated weight

15PUBLIC RELEASE

if (m_priority_wt > 100)

w{0/1} *= m_priority_wt/100

m_pwt_depth = w0 if it was highest, else w1

for safe_depth0 && safe_depth1, if present,

create a ZAIC_PEAK component(safe_depthi,wi)

extract the ZAIC IvP depth function

Depth Bounce:combine depth vectors (2)

16PUBLIC RELEASE

if depth_emergency && perimeter_emergency

* rescale lower_pwt function by higher_pwt

final_pwt = higher_pwt

ipf = coupler.couple(course ZAIC, depth ZAIC, rel_pwt_course, rel_pwt_depth)

ipf->setPWT(final_pwt);

elseoutput the one, or the other, or neither

BHV_OpRegionBounce:couple course and depth functions

17PUBLIC RELEASE

BHV_OpRegionBounce:coupler issues

BUT coupler seems to not properly process

the relative weights, therefore:

BHV_OpRegionBounce

BHV_OpRegionBounceDepth

18PUBLIC RELEASE

Testing - simulation

depth ok depth ¬ok

perimeter ok

perimeter ¬ok

2 polygons ¬ok

depth ok depth ¬ok

perimeter ok

perimeter ¬ok

2 polygons ¬ok

altitude ok altitude ¬ok

19PUBLIC RELEASE

Testing – simulation, results

20PUBLIC RELEASE

Testing: at sea : Groucho

21PUBLIC RELEASE

Testing: at sea : results GrouchoPerimeter Bounce

22PUBLIC RELEASE

Testing: at sea : Harpo

23PUBLIC RELEASE

Testing: at sea : results HarpoPerimeter Bounce

24PUBLIC RELEASE

Testing: at sea : results HarpoDepth Bounce

25PUBLIC RELEASE

Summary

BHV_OpRegion's produced error upon

OpRegion failure is not (always) desirable

for AUVs.

BHV_OpRegionBounce creates a bounce

orthogonal for perimeter, up for depth

Tested in simulation and at sea

26PUBLIC RELEASE

Conclusions / Future

To be used for our future sea trials.

Danger: infinite loops

- careful mission planning

Distribute / merge into BHV_OpRegion

27PUBLIC RELEASE

Questions