The INDIGO Platform is a system of standards and frameworks for multiplatform and distributed astronomy software development designed to scale with a specific user’s needs. INDIGO is a product of the INDIGO initiative, a group of amateur/professional astronomers, software developers and hardware vendors. Users can now access the latest updates to the platform.
The INDIGO Platform is based on the INDI protocol which is designed to support control, automation, data acquisition and exchange among hardware devices and software frontends. INDI stands for the Instrument-Neutral-Distributed-Interface and was developed by Elwood C. Downey of the ClearSky Institute.
Control systems are often written for a specific device or range of devices. When one or more of the device parameters change, the software needs to be modified to accommodate the change. That is, the software frontend and hardware backend are tightly coupled.
INDI Control Protocol INDI resolves this problem by providing a framework that decouples low level hardware drivers from high level front end clients. That is, clients that use the device drivers are completely unaware of the device capabilities. In run time, clients communicate with the device drivers and build a completely dynamical GUI based on the services provided by the device.
In essence, INDI provides the capacity to describe any device and its parameters to any INDI-compliant client. Once you have a client, you can develop as many devices as you can without any changes on the client side.
But this is not all. Since INDI’s protocol is based on XML, it can be easily parsed and nested in other frameworks. For example, you can incorporate INDI in RTML to place observational constraints on your devices. Furthermore, remote control of devices is seamless with INDI’s server/client architecture. Distributed devices can be controlled from one centralized environment.
Finally, INDI drivers are scriptable using INDI scripting tools. You can use these command line tools in your favorite language to have complete control of the device. These tools enable developers to provide scheduling and automation frameworks for their devices.
The INDI driver is what communicates directly to your device. A driver may connect to one or more physical devices. It is responsible for controlling the device parameters and for defining them to clients. Drivers send a list of supported device properties to clients where they are parsed and presented to the end users.
The INDI server is the hub that sits between your devices and your clients. It reroutes traffic for control and data across distributed networks. Each device or client in the network is a node and may communicate with other nodes whenever desired. The server supports broadcasting, chaining, and marshalling of data. Moreover, the server support dynamic startup and shutdown of devices upon request.
INDI Clients are the software frontends that communicate with the hardware drivers. They usually communicate with INDI hardware drivers via INDI server, though they can communicate with the drivers directly. There are many types of clients, most notably:
– Generic GUI clients like KStars, jINDI, or Xephem. Such clients generate a dynamic GUI to offer users a control panel to control the device.
– Clients for tablets & smart phones (e.g. Andriod Client).
– Logger clients to record messages, alarms, and data exchanged between devices and clients.
– Watch dog clients to insure safe and proper operation of devices.
– Automated scripts to carry on complex operations and coordinate operations on devices.
Thanks to the generic nature of INDI, INDI can virtually control any device. While the focus is astronomical instruments, there is nothing that prevents you from writing an INDI driver for your toaster! Currently, the INDI Library supports a growing number of telescopes, CCD, focusers, filter wheels and video capture which are available on the INDI website devices page. If your device doesn’t exist in the devices list page, there is a couple of things you can do:
– Ask your device manufacturer to provide an INDI driver.
– Write your own INDI driver for the device. Refer to the INDI Developers Manual on driver development HOWTO, the manual also includes many tutorials and examples. INDI fully supports Arduino.
If you lack programming knowledge and have the technical specification for your device, you may send the information to the INDI Development mailing list available on the website. One of the developers might be interested in developing a driver for your device.
The INDI Library is shipped with many Linux distributions today by default. Check if your distribution includes one of INDI compatible clients. Ideally, GUI clients should take care of establishing INDI server and providing users with a list of supported drivers.
INDI is also available for Mac OS via Homebrew, MacPorts, the INDI Web Manager App, the INDI Starter App, as well as being bundled with KStars for Mac OS.
Support for Windows port of INDI Library is under progress. Nevertheless, you may opt to use wINDI which is a complete implementation of INDI under .NET. You may use the INDI version shipped with your client, or at your option, you may download the latest stable INDI release from the download section of the website.
All INDI compatible clients can also connect to local and remote INDI servers. So you should first start INDI server, then configure your client to connect to it. INDI server must be running on the same physical machine connected to the device. For example, to start INDI server to run the LX200 GPS telescope on localhost and listening on default port 7624, type: $ indiserver indi_lx200gps.
It is important to distinguish between the INDI Wire Protocol and INDI Library. The INDI Wire protocol is the complete set of XML-based language used to communicate between devices and clients. It includes protocol descriptions, semantics, and schemas as strictly defined by the INDI White Paper. The protocol can be implemented under any operating system and using any language.
INDI Library primary components are:
– Server: Central hub for communication between drivers and clients.
– Driver: Software to control device and provide its properties in a standard format.
– Client: Front-end software that enables the user to interact with the devices.
The INDI Library is a specific implementation of the wire protocol for a target platform or platforms.
– INDI Library: INDI Library is an open source implementation of the INDI wire protocol for POSIX compliant operating systems. Currently, there is support for Linux, BSD, and Mac OS. There is a Windows port in progress but it is in very early stages.
– INDI For Java: A free and open source implementation of the INDI wire protocol in Java, along with Java & Android clients.
– INDISharp: A MIT-Licensed C# implementation of INDI, including server, client and drivers coding possibilities, highly portable and cross-platform.
Why use the INDIGO Platform instead of ASCOM and what makes it different? INDIGO and ASCOM are two fundamentally different approaches to the same problem. First, INDIGO is multiplatform and ASCOM is Windows only.
Second, with ASCOM all your devices need to be connected to a single Windows host and all the user applications should run on this very PC, so no remote operation unless you use some sort of screen sharing. The INDIGO Platform is distributed and all devices can be connected to different hosts running different operating systems.
For example, you can have a camera connected to a Mac computer running MacOSX, guiding camera connected to Raspberry Pi running Raspbian and PC connected to the telescope mount and you can control all three from a single place thousands of miles from the observatory from your Mac, Windows, Linux PC or even your smart phone or your tablet. However, you can use INDIGO on a single host the same way as ASCOM.
The INDI Library is a particular implementation of the INDI protocol for POSIX operating systems. Currently, Linux, BSD, and OSX are supported. Windows support is under progress. Nevertheless, wINDI (3rd party software) is a complete .NET implementation of the INDI protocol and is available natively on Windows.
INDI is small and easy is parse. The INDI protocol can be nested within other XML elements such as RTML to add constraints for automatic scheduling and execution.
Clients learn the properties of a particular device at runtime using introspection. This decouples the device driver implementation from clients. The device driver may be updated completely independent of the client. There are drivers for numerous devices.
With INDI server/client architecture, you can communicate with devices either locally or remotely transparently. INDI accommodates intermediate servers, broadcasting, and connection topologies ranging from one-to-one on a single system to many-to-many between systems of different genre.
For astrophotographers using MacOSX products, the initiative offers INDIGO Dashboard, a versatile tool for a low-level control of embedded or remote INDIGO Servers. It combines the server itself, the control panel and the set of up to eight configurable dashboard workspaces. Each of them can contain any number of property widgets pinned from the control panel and arranged according your need.
You can learn more about the INDIGO Platform here.
And to make it easier for you to get the most extensive news, articles and reviews that are only available in the magazine pages of Astronomy Technology Today, we are offering a 1 year magazine subscription for only $6! Or, for an even better deal, we are offering 2 years for only $9. Click here to get these deals which only will be available for a very limited time. You can also check out a free sample issue here.