The holidays have come to an end a while ago, and so have our summer internships. Thus, it seems to be a perfect moment for a rundown. To put you in the picture, every summer, we organise internships in NeuroSYS, in different business areas. We set up the projects before recruitment, so we can pick candidates that will be the best fit.
Last year, we had a group of R&D interns who dealt with microorganism detection with deep learning methods and some frontend interns who worked on an application for company equipment management.
This year, all seven interns were working on one common project: a telemetric system for go-karts. They were divided into four teams: backend, mobile app, augmented reality, and frontend. So, we can let the cat out of the bag and say that three of them have been offered to stay with us for longer and started working in NeuroSYS as junior developers. We agree that they’ve earned it fair and square!
The go-kart system overview
Our interns’ telemetric system consists of a mobile app for participants, a HoloLens 2 augmented reality app for drivers, and an admin panel for go-kart track owners. As always, a solid backend stood behind every element. And the general idea for the system creation was as follows.
When a group of friends meets on a go-kart track, they register in the mobile app. Then, the administrator opens a session for them to join as either participants or observers. The drivers can make use of augmented reality glasses to follow key parameters, such as current speed, acceleration and position, in front of their eyes. Real-time data tracking helps them to follow the competitors, make informed decisions, and achieve better results, not taking their eyes off the road.
The main function of the telemetric system consists of vehicle localization and data storage. Its backend enables managing users, sessions, and race participants. It also serves as a proxy between the frontend and the Sewio system that was incorporated into the project. Our team worked following the REST (RESTful API) architecture style with HTTP and WebSockets protocol.
Sewio is a real-time location system (RTLS) for indoor positioning and tracking. It consists of receivers, known as anchors, and transmitters called tags. Tags mounted on go-karts send signals, and anchors (set up on the track ceiling) receive them and send them further to the server. This way, Sewio can calculate go-kart location, with a frequency of 100ms, acceleration, and speed in real-time. Measuring the precise distance between vehicles is crucial to register collisions, skids, or barrier crashes.
Backend tech stack
NodeJS, TypeScript, PostgreSQL, NestJS, Knex.js
The mobile app
Intern team number two has dealt with the mobile app that allows users to create and manage their accounts and sessions and, in result, see current speed or position in the ranking. Currently, it operates in four language versions: English, Polish, German, and Ukrainian.
While working on the mobile app, our interns used the atomic design methodology. According to this approach, the interface was divided into five levels: atoms (the smallest components such as buttons), molecules (groups of atoms such as a sign-in form with a button), organisms (groups of molecules such as an advanced form that includes both a sign-in and sign-up form), templates (whole page structure), and pages (final app look with accurate content). Both design components and mockups were created from scratch, with the use of tools like Figma.
Mobile app tech stack
The third team was building a HoloLens 2 application for go-kart drivers. Creating the head-up display (HUD) elements, the team was inspired by car racing games, such as F1 2019, Forza Horizon 5, Assetto Corsa, HotShot Racing, and WRC. Our interns’ HUD shows data such as speed, acceleration, race time, and the vehicle’s current position on the racetrack layout.
The biggest challenge was to place the AR view in such a way that it’s clearly visible to the driver but doesn’t block the view. That’s why some parameters can be shown and hidden with head gestures. In addition, HUD had to be implemented in a way to be legible during a dynamic ride. The AR team achieved it with dynamic and smooth HUD positioning in a space in front of the steering wheel.
AR app tech stack
Unity, C#, Hololens2 and MRTK3 component library, Zenject dependency injection, RedBus signals; REST, JSON
The fourth team built an administrator panel to manage participants and sessions. In the dashboard, the go-kart track owners and managers can add/filter/delete users, browse their details, and manage tags and anchors.
React, Typescript, Storybook; libraries and tools: Material-UI, React-router-dom, React-redux, React-redux-toolkit, React-saga, React-query, i18next, Formik, Yup, Axios, Docker, Docker-compose, Postman, Git/Gitlab
How can the project be further developed?
Summer internships are time-restrained, but the system is designed in a way that can be easily expanded. The features we find useful and would develop in the next stage of the project are:
- The history of each drive,
- Recording of the whole ride,
- Repeating key moments in the form of animated 3D scenes,
- Marking the critical moments on the track map, such as collisions or overtaking other go-karts in a spectacular way,
- Statistics on each user,
- 3D visualisation of the track displayed in HoloLens,
- A ranking system,
- HUD improvements: warning of an approaching vehicle, recommended speed display, digital mirrors,
- Adding more tracks,
- Races in augmented reality for training purposes.
Last but not least, the project wouldn’t take place without our hardworking interns picking their supervisors’ brains about the development process. Kudos go to:
tutor: Szymon Bartczak, our Node.js Developer, and Rafał Sawicki, our Node.js Developer and the leader of the Node.js area in NeuroSYS
Mobile app team
Bartosz Dombrow – mobile app
Michał Ziółkowski – mobile app
tutor: Jakub Kossek, our Mobile Developer/Front-end Developer
Augmented reality team
tutor: Michał Adamski, our Unity Developer, and in lieu of him, Bartosz Urban, Junior Software Developer
tutor: Dawid Juszczak, our Front-end Developer