GithubHelp home page GithubHelp logo

michaelgira23 / navigatar Goto Github PK

View Code? Open in Web Editor NEW
56.0 15.0 19.0 66.7 MB

Finding your way through buildings and campuses through the power of augmented reality

License: MIT License

Swift 97.57% Ruby 0.39% JavaScript 2.04%
augmented-reality indoor-maps arkit arkit-map arkit-navigation pear wwt-hackathon wwt-hackathon-2017 micds

navigatar's Introduction

navigatAR

Finding your way through buildings and campuses through the power of augmented reality

navigatAR is an iOS app that shows you where to go in an accessible, user-friendly way. No more asking for directions or searching for a map, you can use a simple app instead. navigatAR leverages the power of augmented reality to provide indoor directions to areas, rooms, and even events, displayed by arrows that show you where to go in real-time.

WARNING: This was the result of a 6-week hackathon. This is not polished nor fully functional but rather just a demo—use at your discretion.

Technologies

We created an native Swift iOS app that used ARKit for augmented reality and Indoor Atlas for indoor positioning. Throughout the development process we used Slack for communication and GitHub projects to keep track of what features were in progress.

Setup

Installation

First, install Xcode, navigate to the /navigatAR directory in the root of the project, then run:

$ pod install

Config

navigatAR uses Indoor Atlas for navigation. Create a free account and API credentials here. Configure the app to use these credentials by copying /navigatAR/navigatAR/config.example.plist into another file config.plist in the same directory. This should be in the .gitignore, so credentials won't be committed.

This should be your /navigatAR/navigatAR/config.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IAAPIKeyId</key>
	<string>YOUR_INDOOR_ATLAS_API_KEY</string>
	<key>IAAPIKeySecret</key>
	<string>YOUR_INDOOR_ATLAS_API_KEY</string>
</dict>
</plist>

Indoor Atlas

After putting Indoor Atlas API credentials into the config, you must map out your building(s) in the Indoor Atlas web interface. Upload floor plans, then use your Android device to walk around and map out Wi-Fi signals and electromagnetic waves. Once uploaded online, these changes should give more accurate location readings to navigatAR.

Usage

Creating a new Building

Navigate to the "User" page, register/login, then click "New Building." Enter the venue's name and how many floors it has.

Mapping out Points of Interest

Click the newly created building to bring up management options specific to the selected venue. "Manage Nodes" will show a list of "Nodes" associated with the building. A node is simply a point of interest that will show on the map. This can be a room, bathroom, etc. Add a "Pathway" node to map out hallway corners, path intersections, etc. that mark navigable pathways for the user that don't represent a point of interest.

Connecting Nodes

After mapping the locations of points of interest and pathways, connect them via the "Manage Nodes graphic interface" button. This brings up a map of the current building populates with the nodes. Tap one node then another to create a connection signified by a line. Tap existing lines to delete that node connection.

Managing Searchable Tags

The next option for each building is managing "tags." A tag is a customizable property that can be set for nodes. Examples include "Room Number" or "Teacher Name" for school classrooms.

Create a Custom Event

When there is a temporary event taking place at the venue, admins can create an event via the "New Event" button. This is a temporary connection to nodes for a predefined duration. An event will be searchable just like any other node, but will show a list of nodes the user can navigate to.

Demo

Demo of Search and Pathfinding

Hackathon

The MICDS team won third place out of 20 schools winning $2,500 for our school!

Team

navigatAR was made with the hard work of:

  • Jack Cai (2019)
  • Tanay Chandak (2020)
  • Nick Clifford (2020)
  • Alexander Donovan (2018)
  • Michael Gira (2019)
  • Alex Migala (2020)
  • Jack Petersen (2020)
  • Sophia Puertas (2019)
  • Andrew Zhao (2019)

Special thanks for the guidance of our faculty sponsors Mrs. Purdy and Mr. Borja!

Last but certainly not least, many thanks to our WWT mentors Satya Gudivada and Lisa Rains!

MICDS Team at WWT Hackathon 2018

navigatar's People

Contributors

jackcai1206 avatar michaelgira23 avatar nickbclifford avatar spuertas avatar stlgolfer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

navigatar's Issues

FirebaseArray: Codable error

hi,
this line in FirebaseArray.Swift:
let externalValues = try container.decode([Element: Bool].self) has the following error:
Ambiguous reference to member 'decode'

And another one:
try container.encode(values.reduce(into: [:], { $0[$1] = true })) has the following error:
'<Self, T where Self : SingleValueEncodingContainer, T : Encodable> (inout Self) -> (T) throws -> ()' requires that 'T' conform to 'Encodable'
Type 'T' does not conform to protocol 'Encodable'

Help me please.

thx.

Tell user where most convinient place to park is to get to a location

Not MVP, but like the title says, tell user where the closest parking lot is to their point of interest. It'd be awesome (but not likely) that we could also take into account how filled up each parking lot is and direct users to the next best parking lot if the first one is full.

firebase

no such module codabale firebase ..what is this error

About the Firebase

Could I know the firebase content, since when I tried to create a new user with a new building it keeps shutting down the application

Ambiguous reference to member 'decode'

In FirebaseArray - swift complier errors are showing

extension FirebaseArray: Codable {
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let externalValues = try container.decode([Element: Bool].self)

	values = Array(externalValues.filter { $0.value }.keys)
}

func encode(to encoder: Encoder) throws {
	var container = encoder.singleValueContainer()
	try container.encode(values.reduce(into: [:], { $0[$1] = true }))
}

}

errors are: '<Self, T where Self : SingleValueEncodingContainer, T : Encodable> (inout Self) -> (T) throws -> ()' requires that 'T' conform to 'Encodable'
Ambiguous reference to member 'decode'

Add interface for creating nodes

Add an administrator interface for creating nodes for a specific campus. User should be be prompted with what to label the type of node (indoor pathway, outdoor pathway, room, landmark, bathroom, etc.), searchable labels (name, people associated with room like teachers, other custom labels or nicknames). After that, user should be prompted with getting a GPS fix, where they press a button and it waits for a minute or so to get an accurate reading.

Add lines for what pathway the user should take

After creating the pathfinding algorithm to get to a location, we need to display this calculated path using lines on the floor or arrows to indicate where to walk. Possibly also create a 2D or AR compass telling them the direction to walk.

App Icon

We need to take the vector image and export it to the multiple sizes that xcode requires

How to give static lat long without using firebase?

I have three different lat long to navigate indoor. In this firebase are used for navigate. Is it possible to navigate without using firebase?
And i have upload floor map in indooratlas website. How can i navigate my floor map without firebase?

Cannot create a new building

Hi I tried the app but every time Im trying to add a new building it fails to do it and outputs a "Oh bother" in the console.
Any ideas?please help.

2D Map / Compass Fallback for phones that don't support ARKit

Not priority, but it would be nice to have a traditional 2D map shown if the phone doesn't support ARKit. If the phone does support ARKit, we could add the ability to swipe left and right for the different modes.

We can add an additional mode that is just an arrow/compass that points the user in the direction they're suppose to walk.

Create pathfinding algorithm for calculating path for user to take

Through the GPS nodes indicating pathway intersections and points of interest, map out these connections and find the fastest way to get to that point from the user's current location to destination.

For technical implementation, look at Dijkstra's algorithm or A*. There might be a library out there that can do the heavy-lifting for us

Unable to see new added buildings in list

Hello, I have run this project and configured project on firebase. Now after registered new user and I have added few buildings and I can see them on firebase. But on app in list unable to see them. This array is always nil in user struct
let admin: FirebaseArray?

Am I missing something or some configuration issue on firebase.

firebase

Can you please provide me some steps on how to work with firebase on this? :( . should i need to install it? i have no idea about firebase content..

Add option for disabling node connections

Disable connections between nodes when a pathway is temporarily unavailable (construction or something of the likes). Possibly have a timer or something (only disable for certain duration or disable it on this date). Maybe even have the option to disable nodes at certain regular intervals.

Pathfinding algorithm should account for this and treat disabled connections as if they haven't existed at all.

Xcode on windows

is this possible to try this one with xcode installed on windows virtual machine

User analytics for admins to see where people go

Ping each users's location every so often and save it in the database. We can generate a heatmap for building administrators, say how long it took to get to a destination, or see if users wandered off, etc.

app config

Is it ok to do the indoor atlas mapping part first , before doing the app configuration part?and as mentioned we need not to mark waypoints using indoor atlas just loading the floor plan and walking inside the premises is that enough?please let me know. 😢

New logo/icon

Hi, I am a graphic designer, I want to help others in graphic design.

After I reviewed your project, you have no logo on this project. Therefore I want to contribute to this project by creating a new logo / icon. what do you think?

Custom suggested events

In the admin ui, there should be a place for administrators to create custom events that last from a certain time that point to a specific node. For example, if a big conference is taking place, we could insert "WWT Hackathon Presentation" which lasts from February 24th from 8:00 to 3:00 which, upon selection, will navigate the user to a certain node.

When these suggested events are currently going on, they should be suggested someone in/by the search bar.

Search for nodes by type

Ability to search for the closest node of a certain type. This way the user can search for the closest bathroom, drinking fountain, or printer.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.