declarative programming for modular robots ashley-rollman, de rosa, srinivasa, pillai, goldstein,...

18
Declarative Programming for Modular Robots Ashley-Rollman, De Rosa, Srinivasa, Pillai, Goldstein, Campbell November 2, 2007

Post on 19-Dec-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

Declarative Programming for Modular Robots

Ashley-Rollman, De Rosa, Srinivasa, Pillai, Goldstein, Campbell

November 2, 2007

11/2/2007 Declarative Programming for Modular Robots2

Locally Distributed Predicates (LDP) &Meld

• Two very different approaches to declarative programming for modular robots

– Meld - logic programming– LDP - distributed pattern matching

• Both achieve higher goals– Dramatically shorter code– Automatically distributed– Automatic messaging

11/2/2007 Declarative Programming for Modular Robots3

LDP Overview

• Originated in Distributed Watchpoint system– Needed to describe and detect incorrect distributed state configurations

• Locally Distributed Predicates– Locally Distributed: involving a bounded number of connected modules– Predicates: boolean expressions over state, temporal, and topological

variables

• An LDP program consists of a number of predicates, each with one or more attached actions– Every predicate/action pair is executed in parallel

11/2/2007 Declarative Programming for Modular Robots4

Meld Overview

• Logic programming language– Inspired by P2 [Loo et. al. 2005]– Consists of facts and rules for deriving new facts

• When a fact changes, derived facts are automatically deleted

• Programs typically consider local neighborhoods

• Additional support for making non-local neighborhoods

11/2/2007 Declarative Programming for Modular Robots5

LDP and Meld: A Comparison

LDP Meld

ApproachPredicate Matching

Proof Search

Concise Code (vs. C++/Java)

Automatic Messaging

Operations over all neighbors count forall

Quantified (Variably-Sized) Expressions

Automatic Fact Retraction

State Management By Programmer

By System

11/2/2007 Declarative Programming for Modular Robots6

Example: 3D Shape Change Algorithm

• <20 lines of Meld or LDP• Connectivity maintenance guaranteed by algorithm

QuickTime™ and a decompressor

are needed to see this picture.

11/2/2007 Declarative Programming for Modular Robots7

Example 1: Setting Module State

• If the module is the seed

• Set the seed’s state to FINAL

• For every module inside the target shape

• If it is next to a module in FINAL state

• Set the module’s state to FINAL

forall (a)

where (a.isSeed)

do a.state = FINAL;

forall (a,b)

where (a.state = FINAL) & (b.inside)

do b.state = FINAL;

type state(module, min int).

state(A, FINAL) :-

isSeed(A).

state(B, FINAL) :-

neighbor(A, B),

state(A, FINAL),

in(B).LDP Meld

11/2/2007 Declarative Programming for Modular Robots8

LDP and Meld: A Comparison

LDP Meld

ApproachPredicate Matching

Proof Search

Concise Code (vs. C++/Java)

Automatic Messaging

Operations over all neighbors count forall

Quantified (Variably-Sized) Expressions

Automatic Fact Retraction

State Management By Programmer

By System

11/2/2007 Declarative Programming for Modular Robots9

Example 2: Evaluation Over all Neighbors

• A module can only be deleted if none of its neighbors are children

• We first determine which neighbors are not children

• If there are no children, the module can be deleted

type deletable(module).

type notChild(module, module).

notChild(A, B) :-

neighbor(A, B),

parent(B, C),

A != C.

deletable(A) :-

forall neighbor(A, B)

notChild(A, B).

forall(a,b)

where (b.parent != a.id)

do a.$notChild.add(b.id);

forall(a)

where size(a.$notChild)

= size(a.$neighbors)

do a.delete();

LDP Meld

11/2/2007 Declarative Programming for Modular Robots10

LDP and Meld: A Comparison

LDP Meld

ApproachPredicate Matching

Proof Search

Concise Code (vs. C++/Java)

Automatic Messaging

Operations over all neighbors count forall

Quantified (Variably-Sized) Expressions

Automatic Fact Retraction

State Management By Programmer

By System

11/2/2007 Declarative Programming for Modular Robots11

Example 3: Self-deleting Gradients

QuickTime™ and aYUV420 codec decompressor

are needed to see this picture.

11/2/2007 Declarative Programming for Modular Robots12

Example 3: Self-deleting Gradients

• Meld deletes all dependent facts when the root fact is deleted

• LDP directly manipulates state variables, so retraction must be manual

• LDP must specify the maximum number of neighbors

forall (a,b) where (a.value > b.value)

do a.value = b.value + 1;

forall (a,b[0,6]) where

count(a.value > b[i].value) = 0 &

a.value != 0

do a.value = INF;

type gradient (module, min int).

gradient(A, N) :- neighbor(A, B),

gradient(B, M),

N = M + 1.

LDP Meld

11/2/2007 Declarative Programming for Modular Robots13

LDP and Meld: A Comparison

LDP Meld

ApproachPredicate Matching

Proof Search

Concise Code (vs. C++/Java)

Automatic Messaging

Operations over all neighbors count forall

Quantified (Variably-Sized) Expressions

Automatic Fact Retraction

State Management By Programmer

By System

11/2/2007 Declarative Programming for Modular Robots14

Example 4: Spanning Tree Creation

QuickTime™ and aYUV420 codec decompressor

are needed to see this picture.

11/2/2007 Declarative Programming for Modular Robots15

Example 4: Spanning Tree Creation

• Newer versions of Meld use the “first” aggregate to ensure uniqueness

• This qualifier is not sufficient for more complex situations

type parent(module, first module).

parent(A, A) :- root(A).

parent(B, A) :- neighbor(B, A),

parent(A, _).

forall (a) where (a.isRoot = 1)

do a.parent = a.id;

forall (a,b) where (a.parent != -1)

& (b.parent = -1)

do b.parent = a.id:

11/2/2007 Declarative Programming for Modular Robots16

Example 4b: Spanning Tree Creation

• Without “first”, Meld must use timestamps to ensure exactly one unique parent

• LDP uses a single state variable, and thus can never have more than one parent

forall (a) where (a.isRoot = 1)

do a.parent = a.id;

forall (a,b) where (a.parent != -1)

& (b.parent = -1)

do b.parent = a.id:

type possibleParent(module, module, int).

type bestParent(module, min int).

type parent(module, module).

parent(A, A) :- root(A).

possibleParent(B, A, T) :- neighbor(A, B),

parent(A, _) ,

T = localTimeStamp().

bestParent(B, T) :- possibleParent(B, _, T).

parent(B, A) :- possibleParent(B, A, T),

bestParent(B, T).

11/2/2007 Declarative Programming for Modular Robots17

LDP and Meld: A Comparison

LDP Meld

ApproachPredicate Matching

Proof Search

Concise Code (vs. C++/Java)

Automatic Messaging

Operations over all neighbors count forall

Quantified (Variably-Sized) Expressions

Automatic Fact Retraction

State Management By Programmer

By System

11/2/2007 Declarative Programming for Modular Robots18

Future Research

• Performance enhancements/optimizations

• Additional language features– Support transactions

• Applicability to other application domains

• Explore tradeoffs between automated and manual state control– Find a balance that allows programmers to maintain state while gaining

some or all of the benefits of automated state

Interested in Meld/LDP? Email [mderosa,mpa]@cs.cmu.edu