Proof of Concept
What Has Been Completed
The Proof of Concept software has been developed rather well so far, which shows our good progress as a team, and eliminates several of the risks we have identified.
The working functional components so far are:
- Organisations can set the core geographical information for their buildings
- Organisations can upload floor plan images for any number of floors, and generate the navigation graph manually
- A first building's navigation graph has been stored in Firebase and modifications to it are stored persistently
- Users can find the way to a room from another room in the same building, possibly on a different floor
As mentioned above, our main priority so far has been to complete features related to manual graph creation. The user interface for this functionality has also been kept simple with no extravagant features and a very limited backend so as to keep it easy to operate and fit for the purpose. More advanced interfaces can easily be added in the future, the more challenging functionality to implement is the automatic graph creation.
Problems During Development
During the AtRoom development so far, we have faced and dealt with several issues, ranging from a few basic bugs to the natural problems that occur when learning new frameworks and modern web development tools. We also foresaw the issue of using a Single-Page Application with Create React App, which is why we switched to Next.js which is a full stack React framework with support for different data fetching strategies.
In attempts to automatically generate a navigation graph for our pathfinding algorithm, we have encountered many issues regarding machine vision. We are currently attempting to use artificial intelligence and computer vision to detect doors, rooms, and junctions, but have not yet been able to successfully train a suitable model. Machine vision is a new concept to everyone in our group and there is a large learning curve when it comes to something so complex.
In the beginning of development, it was difficult to tie down the scope of our project as our team is very enthusiastic. Despite this we are also very focused, and we are excellent at making realistic yet ambitious decisions together as a team. The diversity in knowledge and point of view greatly contributed to this. With this diversity also came the advantage of learning from one another. We often used pair programming on higher level tasks, so that someone who already had experience with the subject could help someone else learn, which led to our team being overall more productive and everyone having a more comprehensive understanding of the project.
Next Steps
Currently, the graphs that our pathfinding algorithm uses are generated and edited manually by either a client administrator or a member from our organisation. We are currently working towards an automated graph generation system using machine vision that will detect rooms, doors, junctions and possibly other points of interest. We have already started in-depth research into this and made attempts with some rudimentary prototypes. We will need to do further prototypes to decide on which machine vision library we will use. For this, we will also use machine vision to normalise and remove unnecessary information from the floor plans, which would consist of removing text and other aspects that are irrelevant for the navigation graph creation. Our research and experiments to date have shown that this will make the graph generation faster and more accurate.
To make a distinction between users who can view the map and use the navigation system and the administrators who can create and edit floor plan images and the pathfinding graph, we are going to create a login system that will provide users with the appropriate access level. In addition to this, the website will have a different layout for administrators and normal users. This is due to the fact that administrators will need access to a lot more tools, whereas normal users will have a very simple and minimalist interface for navigation.
The pathfinding algorithm we have implemented works very well. We are currently using A*, but so far, we have only worked on pathfinding within one building. We plan to extend this to finding paths between buildings, too. We have a range of ideas as to how we will implement this, and we are currently looking to use the Google maps pathfinding API but have considered alternatives such as OpenStreetMap.