|
| 1 | +@startuml |
| 2 | + |
| 3 | +participant "Simulation" as sim |
| 4 | +participant "Filter" as filter |
| 5 | +participant "Satellite" as sat |
| 6 | +participant "Consensus (PoISE)" as poise |
| 7 | +participant "Ledger (DAG)" as dag |
| 8 | + |
| 9 | +== Initialisation & Truth Generation == |
| 10 | +sim -> sim: simulate_truth_and_meas(N, steps, dt) |
| 11 | +note right |
| 12 | + Generates truth_hist (ground truth orbits) |
| 13 | + and z_hist (noisy ISL measurements) |
| 14 | +end note |
| 15 | + |
| 16 | +sim -> filter: Create EKF instances (initialised with truth[0]) |
| 17 | +sim -> sat: Create Satellite nodes |
| 18 | +sim -> dag: Initialise DAG with PoISE |
| 19 | + |
| 20 | +== Simulation Loop == |
| 21 | +/' |
| 22 | +The simulation generates all possible observation records for a |
| 23 | +maximum possible ISL range set at 5000km. This way, the ISL range |
| 24 | +I want to test PoISE against can be set dynamically (up to the |
| 25 | +5000km maximum), but also physically impossible observations |
| 26 | +(such as 2 satellites at opposite sides of the earth seeing each |
| 27 | +other) are not created as this wastes computational effort. |
| 28 | +This is sufficient and efficient for research and testing. |
| 29 | +'/ |
| 30 | + |
| 31 | +loop for each timestep k |
| 32 | + sim -> filter: predict() & update(z_hist[k]) |
| 33 | + note right: Filter estimates state based on noisy measurements |
| 34 | + filter -->> sim: ObservationRecords (with NIS) |
| 35 | + note right: Observation records generated for Max ISL for 5000km |
| 36 | + |
| 37 | + sim -> sat: update_position(truth_hist[k]) |
| 38 | + |
| 39 | + group In-Range Observation |
| 40 | + sim -> sat: load_sensor_data(ObservationRecord) |
| 41 | + note right: Only loads observations within specified ISL range |
| 42 | + sat -> dag: submit_transaction(queue) |
| 43 | + end |
| 44 | +end |
| 45 | + |
| 46 | +== Consensus (Async) == |
| 47 | +dag -> dag: listen() to queue |
| 48 | +dag -> poise: validate(transaction, reputation) |
| 49 | +poise -->> dag: validation_result |
| 50 | +dag -> sat: update_reputation() |
| 51 | + |
| 52 | +@enduml |
0 commit comments