Inspiration

We kept reading about ships that just disappear. A vessel turns off its AIS, drops off the map, and hours later shows up somewhere it was never supposed to be. Analysts are stuck stitching together radar feeds, satellite passes, and old broadcast data by hand, and by the time they figure out what happened, it's already too late to matter. We wanted to see if we could build something that does that stitching automatically, in real time, so a person can just click on a ship and actually understand what's going on instead of digging through five different systems.

What it does

Sentinel ISR pulls together AIS, radar, RF, satellite imagery, and ADS-B into one live map of everything moving in an area. If a ship goes dark and stops broadcasting, you can click on its last known position and the system will use its heading, speed, and identifying signals to work out the most likely paths it could have taken, along with how confident it is in each one. Behind the scenes it's constantly comparing new signals against everything it already knows, flagging things that look unusual, and writing up plain English summaries of what it thinks is happening.

How we built it

Everything is built around a live graph where every ship, sensor reading, and event is a node, and the connections between them represent what we believe is related. Instead of writing a big pipeline that processes data in one direction, we used Jac to let small programs called walkers move through that graph on their own. One walker looks for matches between sensor readings, another looks for anomalies, another looks for patterns over time, and when something suspicious turns up, it can spawn a new walker to dig deeper right then and there. On top of that we layered a language model that turns whatever the walkers find into an actual written report instead of raw data.

Challenges we ran into

The hardest part honestly wasn't any single piece of tech, it was getting the sensor data to agree with itself. AIS, radar, and RF don't come in the same format and don't always describe the same object the same way, so a lot of our early time went into just getting confident that two signals were actually the same ship before we could do anything smart with them. We also had to rethink how we structured the graph a couple times once we realized the walkers needed to be able to create new work for each other instead of running in a fixed order.

Accomplishments that we're proud of

We're proud that we actually got the whole pipeline working end to end in the time we had, from raw sensor data all the way to a written threat report. Getting the walkers to spawn each other dynamically based on what they find, instead of us hardcoding every step, was the moment it really clicked for us. We also managed to keep the whole thing understandable to someone who isn't technical, which mattered a lot to us since this kind of tool is useless if an analyst can't trust or explain what it's telling them.

What we learned

We learned a lot about how much of this kind of problem is really about data fusion and trust, not just detection. It's one thing to spot an anomaly, it's another to know how confident you should be in it. We also came away with a much better sense of how Jac's graph and walker model changes the way you think about multi agent systems. Instead of planning out a rigid sequence of steps, you start thinking in terms of what should happen when something specific is discovered, and the coordination mostly takes care of itself.

What's next for Sentinel-ISR

We'd like to bring in more sensor types and test the system against messier, more realistic data instead of the cleaner datasets we used during the hackathon. We're also interested in letting analysts give feedback directly on the graph, so if a scenario turns out to be wrong the system can learn from that correction over time. Longer term we think this approach could extend past maritime tracking to anywhere you need to fuse a lot of noisy, disagreeing sensors into one coherent picture.

Built With

Share this project:

Updates

Submission history