-
Notifications
You must be signed in to change notification settings - Fork 0
/
batteryManager.asl
82 lines (70 loc) · 2.02 KB
/
batteryManager.asl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
batteryMin(0.50).
batteryMax(0.95).
/**
* When the battery perception is below the minimum, we need to pickup the goal
* of !chargeBattery, if we haven't already.
*/
health(battery).
// Check if I'm on a mission, if so, I'll need to launch the mission again
// once the battery is charged.
// Also need to confirm that I'm not already charging the battery.
+battery(State)
: charging(false)
& lowBattery(State)
& mission(Goal,Parameters)
& (not managingBattery)
<- .drop_all_intentions;
.broadcast(tell, battery(chargingNeeded));
!chargeBattery;
.broadcast(tell, battery(chargingFinished));
!mission(Goal,Parameters).
// No mission on the go, just need to charge the battery if I'm not already
// dealing with it.
+battery(State)
: charging(false)
& lowBattery(State)
& (not managingBattery)
<- .drop_all_intentions;
.broadcast(tell, battery(chargingNeeded));
!chargeBattery;
.broadcast(tell, battery(chargingFinished)).
/**
* !chargeBattery
* The plan for getting the battery to battery(full) if needed.
*/
health(chargeBattery).
// I'm not docked. Go to the docking station and dock.
// This is rerursiuve as we need to wait for the battery to charge.
+!chargeBattery
: lowBattery(_)
& charging(false)
& chargerLocation(ChargeStation)
<- .broadcast(tell, chargeBattery(chargingNeeded));
+managingBattery;
!navigate(ChargeStation);
.broadcast(tell, chargeBattery(atDock));
station(dock);
.broadcast(tell, chargeBattery(docked));
!chargeBattery.
// Battery is full, undock the robot
+!chargeBattery
: fullBattery(_)
& charging(true)
<- .broadcast(tell, chargeBattery(charged));
station(undock);
-managingBattery;
.broadcast(tell, chargeBattery(unDocked)).
+!chargeBattery
<- .broadcast(tell, chargeBattery(waiting));
!chargeBattery.
lowBattery(State)
:- battery(State)
& batteryMin(Min)
& State <= Min.
fullBattery(State)
:- battery(State)
& batteryMax(State).
atStation
:- position(X,Y)
& locationName(ChargeStation,[X,Y])
& chargerLocation(ChargeStation).