Awards & Nominations

Open Source has received the following awards and nominations. Way to go!

Global Nominee

3D ISS Tracker

High-Level Project Summary

The project is a web application. It includes all the basic requirements of the challenge, as well as some of the additional ones.The main goal is real-time tracking of the International Space Station, with the addition of capabilities to position the station in the past, as well as predict the location in the future.The ISS is presented in the form of a 3D model that moves over the globe in real time. It refreshes every 5 seconds.Information about the location of the station, speed of movement, visibility and orientation of the solar panels is provided in text format.

Detailed Project Description

Purpose and main goal of project:


  - approximately in real time will give coordinates for the movement process, the update will happen every 5 seconds.

  - history of how it has moved so far and possibly in the future how it will continue to move

  - approximately indicate the exact location


History of the ISS:



  • WHAT IS THE ISS?

In the mid-1980s, President Ronald Reagan directed NASA to build an international space station within a decade, declaring that it would “permit quantum leaps” in science research.

First, the U.S. partnered with Europe and Japan; it then invited Russia into the enterprise in 1993 because that nation had the most extensive experience operating orbital space stations.

The ISS was conceived as a series of linked, cylindrical modules that are solar powered and cooled by loops that radiate heat.

These are divided among the station’s two larger segments: the Russian Orbital Segment, operated by Russia, and the U.S. segment, which includes contributions from many countries.

The station today spans the area of a U.S. football field and is typically occupied by at least three astronauts, or as many as six.

Construction is still ongoing, with Russia getting ready to send a new science module to the station.

The International Space Station (ISS) took 10 years and more than 30 missions to assemble.

It is the result of unprecedented scientific and engineering collaboration among five space agencies representing 15 countries.

The space station is approximately the size of a football field: a 460-ton, permanently crewed platform orbiting 250 miles above Earth.

It is about four times as large as the Russian space station Mir and five times as large as the U.S. Skylab.




  • WHY THE ISS MATTERS?

Everything on Earth evolved to thrive in its home environment and not the alien surroundings of space, which can challenge lifeforms in surprising ways. The space station is by far the best place to practice living and working in these unfamiliar conditions, and to better understand how space affects our complex biology.

Most importantly, surviving in space means dealing with microgravity (the near-absence of gravity) and increased radiation exposure— two conditions that can dramatically impact biological functions.

Life in orbit also means tolerating a small, closed environment, limited human contact, and high-pressure situations that might require rapid teamwork to survive.




  • MODERN JOURNEYS TO THE ISS

Until 2011, astronauts were ferried to the station by the U.S. space shuttles and the Russian Soyuz spacecraft.

After the U.S. retired the space shuttle program, Soyuz became the only ride into orbit—until private company SpaceX successfully flew a crewed mission to the station in May 2020.


Operational parameters of the ISS:



  • Altitude

The altitude of the ISS is determined primarily by safety and logistics considerations. It needs to be low enough to optimize transportation flights but also needs to be kept above 278 km (the so-called Minimum Recoverable Altitude) to avoid the danger of re-entry.

The ISS altitude profile is also managed to conserve propellant and minimize crew radiation exposure, and provide optimal orbital characteristics for ISS vehicle traffic.



  • Standard Mode


Standard Mode is the primary mode of ISS operation. It provides full support for research payloads.

Although Standard Mode is designed to offer a consistent scientific microgravity environment, at certain times - such as the control of the ISS attitude by propulsive means - the microgravity environment specifications are exceeded.


Platform Interface

Figure 1. Platform Interface


Figure 1 shows the platform interface. In the uppermost part, across the entire width, there is a header, which currently contains almost no information, but in the future, new options could be added. The rest is divided into two columns.

In the uppermost part of the left column there is an option to change the time according to which the ISS will be positioned. Then a list of all the people who are currently on the ISS is presented. Finally, there is an option to subscribe to notifications of ISS flyover the user's location. At the end of this same column, information is presented in real time about the position of the ISS, the speed of movement, visibility, as well as the position of the solar panels.

The other column shows a globe above which the ISS moves. The ISS moves in real time. On the globe, day and night are represented in real time, as well as the position of the sun.Depending on whether the current time or a specific time is selected, the ISS can be positioned where it will be at a future time or where it was at a past time. When the time changes, day and night on the globe change, as well as the position of the sun. If a specific time is selected, automatic position updates are stopped.


Code Documentation:



  • Frontend

 useEffect(() => {

    wwd.current = new WorldWind.WorldWindow("canvasOne");

    wwd.current.addLayer(new WorldWind.BMNGOneImageLayer(), {

      category: "background",

      minActiveAltitude: 0,

    });

    const now = new Date();

    atmosphereLayer.current = new WorldWind.AtmosphereLayer();

    atmosphereLayer.current.time = now;

    starfieldLayer.current = new WorldWind.StarFieldLayer();

    starfieldLayer.current.time = now;

    wwd.current.addLayer(atmosphereLayer.current);

    wwd.current.addLayer(new WorldWind.CompassLayer());

    wwd.current.addLayer(new WorldWind.CoordinatesDisplayLayer(wwd.current));

    wwd.current.addLayer(new WorldWind.ViewControlsLayer(wwd.current));

    wwd.current.addLayer(starfieldLayer.current);

    modelLayer.current = new WorldWind.RenderableLayer();

    wwd.current.addLayer(modelLayer.current);

  }, []);


The code snippet presented above is executed when the application is initially loaded. It loads the planet, as well as any other accompanying components that do not need to be reloaded at a later stage or have the ability to be reloaded without the need to call their constructors again. "wwd", "atmospehreLayer", "starfieldLayer" and "modelLayer" are also used in other code snippets, so they are defined globally using the useRef hook to avoid reloading them on every rerender. 


useEffect(() => {

    if (!location) {

     return;

    }

    if (!current) {

      return;

    }

    const now = new Date();

    atmosphereLayer.current.time = now;

    starfieldLayer.current.time = now;

    let position = new WorldWind.Position(

      location.latitude,

      location.longitude,

      location.altitude * 1000

    );

    const config = {

      dirPath: WorldWind.configuration.baseUrl + "images/collada_models/iss",

    };

    let colladaLoader = new WorldWind.ColladaLoader(position, config);

    colladaLoader.load("/ISS.dae", function (colladaModel) {

      colladaModel.scale = 400000;

      modelLayer.current.removeAllRenderables();

      modelLayer.current.addRenderable(colladaModel);

    });

    wwd.current.redraw();

}, [location, current]);


This code snippet is used to create and position the ISS at the correct location on the globe. Thanks to the useEffect hook, the code inside it can be executed whenever the coordinates change. This way, this code is executed on initial initialization and then when receiving new coordinates from the backend via web sockets, which happens every 5 seconds.

Selecting a specific time runs quite similar to this code, but is limited to a single run. When switching back to the current time, the update every 5 seconds is restored.

On initial execution, as well as when manually changing the time, additional code is executed that rotates the globe to the position where the ISS is located.


const successCallback = (position) => {

    setPosition(position);

  };


  const errorCallback = (error) => {

    console.log(error);

  };


  useEffect(() => {

    navigator.geolocation.getCurrentPosition(successCallback, errorCallback);

  }, []);


  const handleSubmit = async (e) => {

    e.preventDefault();

    const data = {

      email: e.target.email.value,

      latitude: position.coords.latitude,

      longitude: position.coords.longitude,

    };

    const response = await addEmail(data);

    if (response.status >= 400) {

      setError(response.data);

    }

    if (response.status === 200) {

      setMessage("Email added successfully!");

    }

  };


The last code presented runs in another file and is required for email notifications. The first thing that is executed is the code found in the useEffect hook. It intercepts the user's location. On successful interception it is stored in a variable which is set via useState hook. On failure, the error is temporarily output to the console.

The "handleSubmit" function is executed when the email notification form is submitted. Through it, the necessary information is transmitted to the backend and a response is expected from it. Depending on the response, a success or failure message appears on the screen.




  • Backend

cron.schedule("*/5 * * * * *", async () => {

  const data = await getLocationFn();

  io.emit("update", data);

  await sendNotifcation(data);

});


The code presented above is responsible for much of what the user sees. It runs every 5 seconds and intercepts the ISS location information. The user receives this information thanks to a websocket connection managed by socket.io. The last thing this shortcode does is check the location of everyone who wants to be notified of the ISS passing over their location and send an email to the required email addresses. This can be seen in the code below.


const sendNotifcation = async (position) => {

  const emails = await Notification.find({

    latitude: { $gte: position.latitude - 0.2, $lte: position.latitude + 0.2 },

    longitude: {

      $gte: position.longitude - 0.2,

      $lte: position.longitude + 0.2,

    },

  });

  for (const email of emails) {

    sendEmail(email.email);

  }

};


This code finds all the required email addresses in the database and calls the function that sends emails to them. Sending these emails is handled by nodemailer.


const addEmail = async (req, res) => {

  const notification = new Notification({

   email: req.body.email,

    latitude: req.body.latitude,

    longitude: req.body.longitude,

  });


  const emailExist = await Notification.findOne({ email: req.body.email });

  if (emailExist) return res.status(400).send("Email already exists!");


  try {

    const savedNotification = await notification.save();

    res.send(savedNotification);

  } catch (error) {

    res.status(400).send(error);

  }

};


The last backend function we will look at is responsible for adding new email addresses to the database. A new record is created for this purpose. After that, a check is made to see if the given email is already saved, if it is, an error is returned to the user, which is displayed on the screen. If the email address is not yet saved in the database, an attempt is made to save it. If the attempt is successful, information about the new record is returned and a success message is displayed on the user's screen. Otherwise, an error is displayed.


Used Techology:



  • IDE - Visual Studio Code
  • Frontend:

- React

- MUI - for design



  • Backend

- Node.js

- Express.js

- MongoDB

- Socket.io

Space Agency Data

NASA:



  • Web WorldWind
  • 3D Models of Spacecrafts

Hackathon Journey

I would describe our first participation as exciting and interesting. 

We learned interesting facts about the International Space Station and space in general.

Team Open Source choose this topic, because it caught our attention very quickly, and we believed we could do it.

The goal in the beginning was to get information from reliable sources to be sure of what we do.

The distance between your dreams and reality is called action, no failures. 

I can thank the other person in our team for the ideas and pleasant working environment.