Welcome to *pyobs*! =================== Overview -------- **pyobs** is a Python framework for building and operating **autonomous, robotic, or remote astronomical observatories**. It provides the software foundation to integrate and control telescopes, cameras, domes, weather sensors, and scheduling systems — all within a unified and modular environment. The framework’s design philosophy emphasizes *flexibility* and *extensibility*: users configure observatory systems declaratively (typically in YAML) by combining reusable modules for hardware control, data processing, scheduling, and supervision. pyobs allows a telescope to perform fully automated observation cycles, from calibration to data acquisition and archiving. The main project, :code:`pyobs-core`, provides the central infrastructure and abstract interfaces. Additional repositories (e.g. :code:`pyobs-asi`, :code:`pyobs-gui`, :code:`pyobs-alpaca`) implement specific hardware drivers or user interfaces. Key Features ------------ * **Hardware abstraction and drivers** — Uniform interfaces for cameras, telescopes, domes, filter wheels, and other devices. * **Automation and scheduling** — Enables robotic operation, observing task management, and integration with external schedulers such as Las Cumbres Observatory. * **Data acquisition and processing** — Supports image calibration, photometry, source extraction, and catalog creation through configurable processing pipelines. * **Distributed operation** — Modules can run across multiple machines and communicate via a networked messaging system. * **Configuration-based architecture** — Observatory setups are defined in YAML files, reducing the need for custom programming. * **Extensibility** — Users can develop their own modules or extend existing ones for new instruments, sensors, or observatory logic. * **Integration ecosystem** — Companion packages add support for specific cameras (ASI, SBIG, QHYCCD), focusing motors, GUIs, weather interfaces, and astrometry services. Architecture ------------ pyobs follows a **modular, event-driven design**. Each *module* represents a component of the observatory — for example, a camera controller, a scheduler, or a weather monitor. Modules communicate asynchronously, exchanging commands, data, and events across a network interface. The architecture is guided by several principles: * **Separation of concerns:** hardware drivers, control logic, and data handling are implemented as independent modules. * **Asynchronous operation:** observing workflows (e.g., exposures, readout, dome movement) are non-blocking and concurrent. * **Abstraction layers:** standardized interfaces define contracts for hardware and services, ensuring hardware independence. * **Declarative configuration:** module connections and behaviors are defined via configuration files rather than code. Ecosystem and Repositories -------------------------- The pyobs organization on GitHub hosts a family of repositories: - **pyobs-core** — The main framework providing interfaces, module management, and communication infrastructure. - **pyobs-asi**, **pyobs-qhyccd**, **pyobs-sbig** — Drivers for various astronomical cameras. - **pyobs-aravis** — Support for Aravis-compatible industrial cameras. - **pyobs-zwoeaf** — Module for ZWO EAF focus motors. - **pyobs-pilar** — Interface to the Pilar telescope control system. - **pyobs-alpaca** — ASCOM Alpaca bridge for interoperability with other software. - **pyobs-gui** — Graphical user interface for controlling and monitoring observatories. - **pyobs-astrometry** — Web service wrapper for `astrometry.net` solve-field operations. Together, these components form a complete, extensible observatory control system. Use Cases --------- pyobs can be employed in a wide variety of astronomical contexts: 1. **Fully autonomous telescopes** Execute entire observing nights automatically: select targets, take images, perform calibrations, and archive data. 2. **Remote operation** Allow human operators to control observatory components from remote locations through network interfaces or GUIs. 3. **Instrument prototyping** Rapidly integrate new instruments or devices by implementing small interface modules. 4. **Data-driven feedback** Integrate real-time image analysis (e.g., source detection or quality metrics) to influence scheduling or instrument control. 5. **Educational or small observatories** Run simplified setups for student projects or research with minimal overhead. Limitations and Outlook ----------------------- While powerful, pyobs remains an evolving system: * Configuration files can become complex in large installations. * Hardware-specific behavior may still require custom handling. * Full test coverage across all modules is an ongoing effort. * Performance tuning may be necessary for high-throughput environments. Despite these caveats, pyobs continues to mature as a robust, open-source platform for observatory automation and control. Telescopes ---------- *pyobs* currently runs on five telescopes around the world: - **MONET/North** (McDonald Observatory, Texas) and **MONET/South** (SAAO, South Africa) - **IAG 50cm** (Göttingen, Germany) - **IAG VTT** (Göttingen, Germany) - **ROTSE Namibia** (Hess site, Namibia) .. image:: /_static/monet.png :height: 100px .. image:: /_static/IAG_LogoRGB_small.gif :height: 100px .. image:: /_static/rotse.png :height: 100px Further Reading --------------- - Project site: https://github.com/pyobs/ - Core framework: https://github.com/pyobs/pyobs-core - Documentation: https://docs.pyobs.org/ - Scientific reference: *Frontiers in Astronomy and Space Sciences* (2022), “pyobs: A Modular Control System for Astronomical Observatories” Introduction ------------ .. toctree:: :maxdepth: 1 quickstart installing development overview cli Robotic Mode ------------ .. toctree:: :maxdepth: 1 api/robotic/index api/robotic/scheduling api/robotic/scripts api/robotic/serialization recipes/robotic Recipes ------- .. toctree:: :maxdepth: 1 recipes/simulation recipes/jupyter Config Examples --------------- .. toctree:: :maxdepth: 1 config_examples/iag50cm config_examples/iagvt API Reference ------------- .. toctree:: :maxdepth: 2 api/index modules/index addmod/index Affiliated projects ------------------- .. toctree:: :maxdepth: 1 pyobs-weather pyobs-archive Project details --------------- .. toctree:: :maxdepth: 1 project/changelog Team project/license project/3rdparty Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search`