Topic: Head and body tracking in Unreal Engine (IN3260)
Offered by: Carsten Griwodz
Unreal Engine are two game engines that are used two create games and many more applications. They are used for AR and VR applications and even to create visual effects for major Hollywood movies. While Unreal Engine's competitor Unity makes it easier to get started, its core cannot be changed. As a consequence, we cannot use it to develop complex AR/VR/XR applications where we have manipulate the relation between real-world and virtual-world motion. We need our bits and pieces to work on and with Unreal Engine.
We have conducted several studies on a technique called redirected walking, and are now facing a challenge for our upcoming research plans: we must be able to track the position of a player's head and body separately. In most VR games today, it is entirely sufficient to track the player's head and hands. The motion of the rest of their body is inferred, giving their avatars quite convincing motions in the virtual world.
But in our research, we modify the speed and angles of motion between the player's motion and the avatar's motion to achieve redirected walking. Deducing the body pose from the head and hand position alone is too unreliable, because people can in some situations walk sideways, or let their arms drop instead of ducking. For redirected walking, we need separate tracking of the human body (their torso).
In this work, you will create an Unreal avatar that shows the motion of a real-world player on screen in real-time. The player will wear and head tracking device and a body tracking device, and the avatar must follow both motions separately. The player's head motion is tracked in real-time using an Oculus Quest VR headset, the body motion is tracked either with an HTC Vive Tracker or a Rokoko Smartsuit. You will write, document and explain your software, and release it as open source on github.com/sinlab-uio.
Required background: Basic understanding of C. Interest to program Windows and Android in C++ and Java. Preferably some VR or AR experience.
Topic: Write a rust application for displaying live network quality graphs (IN3260)
Offered by: Magnus Skjegstad
Develop a tool for displaying live data from a Wi-Fi network to give the user an overview of the current network conditions. The tool that gathers the data has already been written, but we need a simple UI on top to visualise the results as a CDF for each node seen in the network. The graphs should then update automatically every second (or faster).
The UI will be written in rust so it can be linked against the existing codebase. Egui_plot could be used to display the plots, but other alternatives can also be considered. The UI should run on macOS and Linux.
The first version of the application should only display the live graphs based on what is specified on the command line. If there is time at the end of the project the UI could also be extended to provide controls for how the data is collected using egui.
Required background: some basic knowledge of ethernet/Wi-Fi networks, rust experience; interest in building rust UIs
Topic: Contribute to a popular simulation software developed at UiO (IN3260)
Offered by: Roman Vitenberg
Did you ever want to evaluate the impact of an improvement to an existing popular system or the damage of an attack on it? You cannot easily do it on an actual deployment of a popular system. If you run your own small-scale deployment, the results will not be representative of an actual system behavior. This is why software simulation is a powerful concept that imitates a sandbox deployment at a scale of thousands or even millions of machines. Popular simulators such as NS3 are utilized by millions of users in academia and industry.
The blockchain lab at UiO has developed a blockchain simulator that allows the user to simulate systems such as Bitcoin including different mining strategies and different attacks on the system, for a variety of underlying networks. The simulator has been used for IN5420 at UiO as well as for other educational courses in blockchain around the globe. The system has been tested for tens of thousands of nodes. The simulator includes over 10000 lines of code, most of which is written in Golang. We are now preparing a number of papers on the simulator, but there is a potential for more.
The simulator has been a work of 7 contributors including master and PhD students. It can be improved in several interesting ways, such as (a) implementing the actual Bitcoin communication protocol, (b) improving the event queue implementation, (c) visualizing its execution and results, and more. If you want to join the team, we would love to hear from you. The knowledge you will gain about simulators will be universally applicable beyond blockchain. We are not promising that you will earn more bitcoins, but understanding the impact of mining strategies would not hurt.
Required background: interest in Golang programming and professional software development, software management tools such as git. Experience in Python and visualization tools may come handy for specific tasks, but it is not generally required.
Topic: When Should We Trust an AI Network Monitor? (IN3260)
Have you ever wondered whether an automated network alert is actually reliable? A monitoring system may confidently report congestion or a server failure—but what if some measurements are missing, the data are noisy, or the situation is completely new? Behind the scenes, intelligent tools continuously analyse networks and computer systems to keep services running smoothly. Imagine building a system that not only detects and explains a problem, but also recognises when it is uncertain and asks a human for help instead of giving an overconfident answer.
Offered by: Poushali Sengupta
Can an intelligent monitoring system recognise when it does not know the answer?
Modern computer networks and distributed systems are continuously monitored using measurements such as latency, throughput, packet loss, CPU usage, memory consumption, and system logs. Machine-learning models can use this information to identify congestion, failures, unusual activity, or performance problems.
However, an automated monitoring system will normally produce an answer even when the available data are incomplete, noisy, or very different from what it has seen before. A confident but incorrect alert may waste an operator’s time, while a missed problem may affect many users.
In this project, you will build a small trust-aware monitoring system that not only detects possible network or system problems but also estimates whether its own result is reliable. When the evidence is weak, the system should be able to say:
I am not sufficiently confident about this case. Human review is recommended.
What the project is about.........
Imagine that students suddenly experience poor Wi-Fi performance on campus. A conventional monitoring tool might report:
“Network congestion detected.”
A trust-aware tool could provide a more useful message:
“High packet loss and increasing latency suggest network congestion. The signal quality is good, and similar patterns were observed in the training data. Confidence is high.”
For a different case, it might report:
“Unusual behaviour detected, but several measurements are missing and this pattern is unfamiliar. The result should be reviewed.”
The project investigates how an automated system can distinguish between cases where it has strong evidence and cases where it should ask for help.
You may work with data such as:
- Network latency, throughput and packet loss,
- CPU load, memory usage and disk activity,
- Network traffic measurements,
- Logs from networked or distributed services,
- Real, publicly available, or simulated system data.
What you will implement:
During the project, you will:
- Prepare and explore network or system monitoring data,
- Implement a simple method for detecting performance problems or unusual behaviour,
- Add a reliability or uncertainty measure to each result,
- Investigate how missing, noisy, or unfamiliar data affect reliability,
- Design a rule that decides whether to accept a result or refer it for review,
- Present predictions, explanations and reliability information through clear visualizations or a simple dashboard.
The basic detection method may use statistical thresholds, decision trees, random forests, or another suitable machine-learning model. Reliability can be studied using prediction confidence, repeated model runs, model agreement, calibration, or another uncertainty method appropriate for the project.
Students interested in a more advanced project may explore conformal prediction or out-of-distribution detection, but these methods are optional.
Example scenario:
Instead of reporting only:
“An anomaly was detected at 14:32.”
The system could report:
“High latency and packet loss were the main reasons for this alert. The result is considered reliable because the measurements are complete and the pattern is similar to previously observed congestion.”
Alternatively, it could report:
"The model detected a possible problem, but CPU measurements are missing and the models disagree. Human review is recommended.”
Questions the project may investigate:
- Does high model confidence always mean that a prediction is correct?
- Can the system identify noisy, incomplete, or unfamiliar cases?
- Which reliability measure works best for network or system monitoring?
- How many cases can be handled automatically without creating unacceptable errors?
- When should an automated monitoring tool ask a human operator for help?
- What information would make a reliability warning understandable and useful?
Outcome and learning goals:
By the end of the project, you will have developed a small but complete software prototype that:
- Monitors network or system behaviour,
- Detects possible performance problems,
- Explains the main reasons behind each alert,
- Estimates whether the result is reliable,
- And refers uncertain cases for further review.
You will gain practical experience in data preparation, network or system monitoring, basic machine learning, uncertainty estimation, explainable AI, and visualization.
The project is suitable for students interested in networking, operating systems, data analysis, trustworthy AI, or practical software development. Its scope can be adapted according to the student’s interests and technical background.
Required background:
Programming experience, preferably Python or a similar language; a basic understanding of computer networks or operating systems; and an interest in data analysis and visualization. Previous experience with machine learning is helpful but not required.
Topic: What does TCP do when an application doesn't have enough to send? (IN3260)
Offered by: Michael Welzl
The answer is: "it depends on the implementation", and investigating implementations is what this thesis is about. This can be done by writing test applications and analyzing the resulting behaviour, by reading and understanding kernel code (for open source OSes), or both. Investigate the Operating System(s) of your choice: e.g., Linux or FreeBSD, Windows or MacOS, Android or iOS - it's all ok.
Why is this interesting?
For example, when a sender transmits only one data packet per round trip time for minutes, the standard actually allows the congestion window to grow... basically forever. Then, all of a sudden, it would be allowed to transmit thousands of packets in one go! Rate-limited increase is our standards proposal (well on its way towards being an RFC) to fix this, but how is the status of implementations today?