Safe Obstacle Avoidance of Autonomous Robo5c Ground - - PowerPoint PPT Presentation
Safe Obstacle Avoidance of Autonomous Robo5c Ground - - PowerPoint PPT Presentation
Safe Obstacle Avoidance of Autonomous Robo5c Ground Vehicles Stefan Mitsch, Khalil Ghorbal and Andr Platzer Computer Science Department Carnegie Mellon
.:: ¡
RSS’13 ¡
Obstacle ¡Avoidance ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Sta5onary ¡ Obstacles ¡ Moving ¡ Obstacles ¡ Robot ¡ Kinema5cs ¡ Control ¡ Choices ¡ Drive ¡ Variants ¡ Robot ¡ Shape ¡ Obstacle ¡ Shape ¡ Sensor ¡ Uncertainty ¡ Actuator ¡ Disturbance ¡ Sensor ¡ Failure ¡
.:: ¡
RSS’13 ¡ 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5
Obstacle ¡Avoidance ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Sta5onary ¡ Obstacles ¡ Moving ¡ Obstacles ¡ Robot ¡ Kinema5cs ¡ Control ¡ Choices ¡ Drive ¡ Variants ¡ Robot ¡ Shape ¡ Obstacle ¡ Shape ¡ Sensor ¡ Uncertainty ¡ Actuator ¡ Disturbance ¡ Sensor ¡ Failure ¡
How ¡can ¡we ¡build ¡a ¡ robot ¡that ¡is ¡safe? ¡
.:: ¡
RSS’13 ¡ 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5
Obstacle ¡Avoidance ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Sta5onary ¡ Obstacles ¡ Moving ¡ Obstacles ¡ Robot ¡ Kinema5cs ¡ Control ¡ Choices ¡ Drive ¡ Variants ¡ Robot ¡ Shape ¡ Obstacle ¡ Shape ¡ Sensor ¡ Uncertainty ¡ Actuator ¡ Disturbance ¡ Sensor ¡ Failure ¡ What ¡is ¡safe? ¡
.:: ¡
RSS’13 ¡
Safety ¡Defini5ons ¡
Sta>c ¡safety ¡ Passive ¡safety ¡ Passive ¡friendly ¡safety ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5
.:: ¡
RSS’13 ¡
Safety ¡Defini5ons ¡
Sta>c ¡safety ¡ Passive ¡safety ¡ Passive ¡friendly ¡safety ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5
.:: ¡
RSS’13 ¡
Safety ¡Defini5ons ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Sta>c ¡safety ¡ Passive ¡safety ¡ Passive ¡friendly ¡safety ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5
.:: ¡
RSS’13 ¡
Safety ¡Defini5ons ¡
Sta>c ¡safety ¡ Passive ¡safety ¡ Passive ¡friendly ¡safety ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 1 2 3 4 5 6 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5
How ¡to ¡design ¡ ¡ a ¡safe ¡controller? ¡
.:: ¡
RSS’13 ¡
Constraints ¡of ¡a ¡Safe ¡Controller ¡
Name ¡ Invariant ¡ Switching ¡ Sta5c ¡ safety ¡ Passive ¡ safety ¡ Sensor ¡ ¡ uncertainty ¡ Actuator ¡ ¡ disturbance ¡ Sensor ¡ ¡ failure ¡ Passive ¡ friendly ¡ safety ¡
kpr pok∞ > v2
r
2b + ✓A b + 1 ◆ ✓A 2 ε2 + εvr ◆ vr = 0 _ kpr pok∞ > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ k˜ pr pok∞ > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ + Up kpr pok∞ > v2
r
2bUm + V vr bUm + ✓ A bUm + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ k˜ pr pok∞ > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(v + V ) ◆ + Up + g∆ vr = 0 _ kpr pok∞ > v2
r
2b + V 2 2bo + V ⇣vr b + τ ⌘ + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
.:: ¡
RSS’13 ¡
Constraints ¡of ¡a ¡Safe ¡Controller ¡
Name ¡ Invariant ¡ Switching ¡ Sta5c ¡ safety ¡ Passive ¡ safety ¡ Sensor ¡ ¡ uncertainty ¡ Actuator ¡ ¡ disturbance ¡ Sensor ¡ ¡ failure ¡ Passive ¡ friendly ¡ safety ¡
kpr pok∞ > v2
r
2b + ✓A b + 1 ◆ ✓A 2 ε2 + εvr ◆ vr = 0 _ kpr pok∞ > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ k˜ pr pok∞ > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ + Up kpr pok∞ > v2
r
2bUm + V vr bUm + ✓ A bUm + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ k˜ pr pok∞ > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(v + V ) ◆ + Up + g∆ vr = 0 _ kpr pok∞ > v2
r
2b + V 2 2bo + V ⇣vr b + τ ⌘ + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
How ¡to ¡find ¡& ¡jus>fy ¡those? ¡
.:: ¡
RSS’13 ¡
Formal ¡Verifica5on ¡to ¡the ¡Rescue ¡
Hybrid ¡System ¡ Drive ¡Variants ¡
- Differen5al ¡
- Omnidirec5onal ¡
pc pr dr dx
r
dy
r
Move ¡on ¡circle ¡ Stay ¡in ¡the ¡box ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Control ¡
- Steer ¡
- Accelerate… ¡
Physics ¡
- Newtonian ¡rigid ¡
body ¡dynamics ¡
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
- 0 = vx
- , py
- 0 = vy
- , v0
dL ¡Model ¡
.:: ¡
RSS’13 ¡
Model ¡and ¡Proof ¡
ψps ! [dwps] ✓ (vr = 0) _ ⇣ kpr pok > v2
r
2b + V vr b ⌘◆
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘
- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
(˜ pr := (⇤, ⇤); ?(k˜ pr prk Up + δr) ctrlr ⌘ (ar := b) [ (?vr = 0; ar := 0; ωr := 0) [ (ar := ⇤; ?b ar A; ωr := ⇤; ? Ω ωr Ω; pc := (⇤, ⇤); dr := (⇤, ⇤); po := (⇤, ⇤); ?feasible ^ safe) feasible ⌘ k˜ pr pck > 0 ^ ωrk˜ pr pck = vr ^ dr = (˜ pr pc)? k˜ pr pck safe ⌘ k˜ pr pok > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ + Up + g∆ dyn ⌘ (t := 0; px
r 0 = vrdx r, py r 0 = vrdy r, dx r 0 = ωrdy r, dy r 0 = ωrdx r,
px
- 0 = vx
- , py
- 0 = vy
- , v0
r = ar, ω0 r =
ar kpr pck, t0 = 1, g0
r = 1, δ0 r = ∆
& vr 0 ^ t ε)
Theorem: ¡
Ini5al ¡Condi5ons ¡→ ¡[Hybrid ¡System] ¡(Requirements) ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Passive ¡Safety ¡
.:: ¡
RSS’13 ¡
Model ¡and ¡Proof ¡
ψps ! [dwps] ✓ (vr = 0) _ ⇣ kpr pok > v2
r
2b + V vr b ⌘◆
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘
- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
(˜ pr := (⇤, ⇤); ?(k˜ pr prk Up + δr) ctrlr ⌘ (ar := b) [ (?vr = 0; ar := 0; ωr := 0) [ (ar := ⇤; ?b ar A; ωr := ⇤; ? Ω ωr Ω; pc := (⇤, ⇤); dr := (⇤, ⇤); po := (⇤, ⇤); ?feasible ^ safe) feasible ⌘ k˜ pr pck > 0 ^ ωrk˜ pr pck = vr ^ dr = (˜ pr pc)? k˜ pr pck safe ⌘ k˜ pr pok > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ + Up + g∆ dyn ⌘ (t := 0; px
r 0 = vrdx r, py r 0 = vrdy r, dx r 0 = ωrdy r, dy r 0 = ωrdx r,
px
- 0 = vx
- , py
- 0 = vy
- , v0
r = ar, ω0 r =
ar kpr pck, t0 = 1, g0
r = 1, δ0 r = ∆
& vr 0 ^ t ε)
Theorem: ¡
Ini5al ¡Condi5ons ¡→ ¡[Hybrid ¡System] ¡(Requirements) ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Obstacle ¡Behavior ¡
.:: ¡
RSS’13 ¡
Model ¡and ¡Proof ¡
ψps ! [dwps] ✓ (vr = 0) _ ⇣ kpr pok > v2
r
2b + V vr b ⌘◆
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘
- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
(˜ pr := (⇤, ⇤); ?(k˜ pr prk Up + δr) ctrlr ⌘ (ar := b) [ (?vr = 0; ar := 0; ωr := 0) [ (ar := ⇤; ?b ar A; ωr := ⇤; ? Ω ωr Ω; pc := (⇤, ⇤); dr := (⇤, ⇤); po := (⇤, ⇤); ?feasible ^ safe) feasible ⌘ k˜ pr pck > 0 ^ ωrk˜ pr pck = vr ^ dr = (˜ pr pc)? k˜ pr pck safe ⌘ k˜ pr pok > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ + Up + g∆ dyn ⌘ (t := 0; px
r 0 = vrdx r, py r 0 = vrdy r, dx r 0 = ωrdy r, dy r 0 = ωrdx r,
px
- 0 = vx
- , py
- 0 = vy
- , v0
r = ar, ω0 r =
ar kpr pck, t0 = 1, g0
r = 1, δ0 r = ∆
& vr 0 ^ t ε)
Theorem: ¡
Ini5al ¡Condi5ons ¡→ ¡[Hybrid ¡System] ¡(Requirements) ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Robot ¡Sensing ¡
.:: ¡
RSS’13 ¡
Model ¡and ¡Proof ¡
ψps ! [dwps] ✓ (vr = 0) _ ⇣ kpr pok > v2
r
2b + V vr b ⌘◆
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘
- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
(˜ pr := (⇤, ⇤); ?(k˜ pr prk Up + δr) ctrlr ⌘ (ar := b) [ (?vr = 0; ar := 0; ωr := 0) [ (ar := ⇤; ?b ar A; ωr := ⇤; ? Ω ωr Ω; pc := (⇤, ⇤); dr := (⇤, ⇤); po := (⇤, ⇤); ?feasible ^ safe) feasible ⌘ k˜ pr pck > 0 ^ ωrk˜ pr pck = vr ^ dr = (˜ pr pc)? k˜ pr pck safe ⌘ k˜ pr pok > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ + Up + g∆ dyn ⌘ (t := 0; px
r 0 = vrdx r, py r 0 = vrdy r, dx r 0 = ωrdy r, dy r 0 = ωrdx r,
px
- 0 = vx
- , py
- 0 = vy
- , v0
r = ar, ω0 r =
ar kpr pck, t0 = 1, g0
r = 1, δ0 r = ∆
& vr 0 ^ t ε)
Theorem: ¡
Ini5al ¡Condi5ons ¡→ ¡[Hybrid ¡System] ¡(Requirements) ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Robot ¡Control ¡
.:: ¡
RSS’13 ¡
Model ¡and ¡Proof ¡
ψps ! [dwps] ✓ (vr = 0) _ ⇣ kpr pok > v2
r
2b + V vr b ⌘◆
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘
- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
(˜ pr := (⇤, ⇤); ?(k˜ pr prk Up + δr) ctrlr ⌘ (ar := b) [ (?vr = 0; ar := 0; ωr := 0) [ (ar := ⇤; ?b ar A; ωr := ⇤; ? Ω ωr Ω; pc := (⇤, ⇤); dr := (⇤, ⇤); po := (⇤, ⇤); ?feasible ^ safe) feasible ⌘ k˜ pr pck > 0 ^ ωrk˜ pr pck = vr ^ dr = (˜ pr pc)? k˜ pr pck safe ⌘ k˜ pr pok > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ + Up + g∆ dyn ⌘ (t := 0; px
r 0 = vrdx r, py r 0 = vrdy r, dx r 0 = ωrdy r, dy r 0 = ωrdx r,
px
- 0 = vx
- , py
- 0 = vy
- , v0
r = ar, ω0 r =
ar kpr pck, t0 = 1, g0
r = 1, δ0 r = ∆
& vr 0 ^ t ε)
Theorem: ¡
Ini5al ¡Condi5ons ¡→ ¡[Hybrid ¡System] ¡(Requirements) ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Safe ¡Curve ¡
.:: ¡
RSS’13 ¡
Model ¡and ¡Proof ¡
ψps ! [dwps] ✓ (vr = 0) _ ⇣ kpr pok > v2
r
2b + V vr b ⌘◆
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘
- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
(˜ pr := (⇤, ⇤); ?(k˜ pr prk Up + δr) ctrlr ⌘ (ar := b) [ (?vr = 0; ar := 0; ωr := 0) [ (ar := ⇤; ?b ar A; ωr := ⇤; ? Ω ωr Ω; pc := (⇤, ⇤); dr := (⇤, ⇤); po := (⇤, ⇤); ?feasible ^ safe) feasible ⌘ k˜ pr pck > 0 ^ ωrk˜ pr pck = vr ^ dr = (˜ pr pc)? k˜ pr pck safe ⌘ k˜ pr pok > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ + Up + g∆ dyn ⌘ (t := 0; px
r 0 = vrdx r, py r 0 = vrdy r, dx r 0 = ωrdy r, dy r 0 = ωrdx r,
px
- 0 = vx
- , py
- 0 = vy
- , v0
r = ar, ω0 r =
ar kpr pck, t0 = 1, g0
r = 1, δ0 r = ∆
& vr 0 ^ t ε)
Theorem: ¡
Ini5al ¡Condi5ons ¡→ ¡[Hybrid ¡System] ¡(Requirements) ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Con5nuous ¡Dynamics ¡
.:: ¡
RSS’13 ¡
Model ¡and ¡Proof ¡
ψps ! [dwps] ✓ (vr = 0) _ ⇣ kpr pok > v2
r
2b + V vr b ⌘◆
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘
- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
(˜ pr := (⇤, ⇤); ?(k˜ pr prk Up + δr) ctrlr ⌘ (ar := b) [ (?vr = 0; ar := 0; ωr := 0) [ (ar := ⇤; ?b ar A; ωr := ⇤; ? Ω ωr Ω; pc := (⇤, ⇤); dr := (⇤, ⇤); po := (⇤, ⇤); ?feasible ^ safe) feasible ⌘ k˜ pr pck > 0 ^ ωrk˜ pr pck = vr ^ dr = (˜ pr pc)? k˜ pr pck safe ⌘ k˜ pr pok > v2
r
2b + V vr b + ✓A b + 1 ◆ ✓A 2 ε2 + ε(vr + V ) ◆ + Up + g∆ dyn ⌘ (t := 0; px
r 0 = vrdx r, py r 0 = vrdy r, dx r 0 = ωrdy r, dy r 0 = ωrdx r,
px
- 0 = vx
- , py
- 0 = vy
- , v0
r = ar, ω0 r =
ar kpr pck, t0 = 1, g0
r = 1, δ0 r = ∆
& vr 0 ^ t ε)
Theorem: ¡
Ini5al ¡Condi5ons ¡→ ¡[Hybrid ¡System] ¡(Requirements) ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
✔ ¡Verified ¡in ¡KeYmaera ¡
- ‑
Proof ¡
- ‑
Switching ¡constraints ¡
- ‑
Design ¡implica>ons ¡& ¡trade-‑offs ¡
.:: ¡
RSS’13 ¡
Provably ¡Safe ¡Obstacle ¡Avoidance ¡
Sta>c ¡safety ¡ Passive ¡ safety ¡ Friendly ¡ safety ¡ Sensor ¡ uncertainty ¡ Actuator ¡ disturbance ¡ Sensor ¡failure ¡ KeYmaera ¡
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
- 0 = vx
- , py
- 0 = vy
- , v0
dL ¡Model ¡ Sφnx ¡
dwps ⌘ (ctrlo || (senser; ctrlr); dyn)⇤ ctrlo ⌘ vo = (⇤, ⇤); ?kvok V senser ⌘- (δr := 0; gr := 0) [ (δr := δr; gr := gr)
- ;
- 0 = vx
- , py
- 0 = vy
- , v0
✔ ¡Proof ¡
Stefan ¡Mitsch ¡– ¡Computer ¡Science ¡Department ¡– ¡Carnegie ¡Mellon ¡University ¡
Visit ¡us ¡at ¡
symbolaris.com ¡
Case ¡Studies ¡ Tools ¡