Skip to content
Eric Wang edited this page Feb 21, 2021 · 5 revisions

Welcome to the isaacs_server wiki!

The ISAACS platform can be broken down into three main components:

  1. The Central Server (isaacs_server)
  2. The VR Interface (ImmersiveInterface2)
  3. The Client Layer (isaacs_[model])

This repository consists of the central server.

3 Part Diagram

We are the Isaacs Server seen on the diagram. Our purpose is to act as a translation layer between the VR interface and our drones.

  • To do so, we follow the ISAACS API for communication with the VR interface. This API will pass flight commands and request information about various drones and sensors.
  • On the Server <-> Drone side, we will subscribe to all of the drone's topics and will consolidate data from the various drones into one global understanding of the environment around us. In addition, the Server also redirects commands from the VR interface into service calls for the drone's native API (DJI or Mavros).
  • Finally, the Server also houses algorithms that can manipulate data and commands as they pass through. Some algorithms include Iterative Closest Point (ICP) sensor fusion from all of our different drones and Safe-Set calculation for obstacle avoidance.

Old documentation can be found here: https://docs.google.com/document/d/1g3dKYSgtFYrp6Fd4SA6JV8K353C8m3OqXH_cyjhj9-0/edit

[VR Overview]

A connection with the server is established ServerConnection.cs ServerConnection is going to query for the list of all drones available. Users can select which topics to subscribe to?

TODO: How to stream drone state data without creating a queue bottleneck Ideas: Dynamic subscriber classes with unique topics one topic with (id: state) published by server. Each drone has a VR instance created. The user selects the VR drone instance and issues commands. This command is sent to the ServerConnection with the drone id The ServerConnection sends this command to the server. Route callback to the drone and perform any action required

[VR User Commands]

The user selects drones by cycling through them. The user issues a command from a common menu. When a command is issued: Query the id of the currently selected drone Make the corresponding call in ServerConnection.cs (defined below)

Server Operator

This is the class that acts as the brains of the operation. It fields most of the service calls made to the server. While it mostly interacts with commands from the VR interface along with housekeeping from the drone client Server Drone Base Class + Client

For each drone we support, we should have a drone_type_class. Eg: M210_Class, M600_Class, Parrot_Class. Whenever a new drone is added, an instance of the corresponding class is created. This class converts the generalized user commands into the drones API calls. Therefore, the implementation of each class will differ based on drone API.

Clone this wiki locally