During the first half of spring of 2022, I was part of a team working on a system for mapping a room using a drone. This was a project I was part of in the course M7012E at Luleå University of Technology.


To accomplish this, we developed a system consisting of three parts:

  1. An android app controlling the drone and collecting points from the drone's sensor.
    Responsible for sending the point cloud to the server.
  2. A service, with access to a database, that stores and fetches point clouds.
    Stores points under a specific session name given by the user.
  3. A program for fetching and showing point clouds. Communicates with the database.
    Applies post-processing to remove statistical outliers from the data.

I was responsible mostly for the first part. The app was developed using Java and Android Studio.

A problem we discovered early on was that the drone, a DJI Air 2S, did not keep track of its own position. Therefore we had to manually calculate the position of the drone from the velocity of the drone. The app also keeps track of the rotation of the drone. This amount of information was needed, as the points from the ultrasonic sensors will be in relation to the drone. To be able to build a map using these points, the points have to be in relation to a starting position.

Below is a screenshot of the app. Not a lot of effort was put into the UI, as can be seen!

Drone App

In contrast, somewhere where a lot of effort went in was using the DJI SDK. The SDK is a library that allows us to link to and communicate with the drone. This was probably the biggest road bump for the team. It was quite fiddly to get started.

Primarily it was difficult to connect the app to the drone, and to correctly fetch the points from the drone’s sensors. The drone’s horizontal sensors stores points in an array, where each element is a point separated by four degrees from its neighbors.

Point Cloud

For the full report, see diva