Showing posts with label Guider. Show all posts
Showing posts with label Guider. Show all posts

Sunday, August 9, 2026

KStars 3.8.4 Released

KStars v3.8.4 is released on 2026.08.09 for Windows, Linux, and MacOS.

For Linux users, it's highly recommended to use the official KStars Flatpak hosted at Flathub.

This release brings major improvements including the World's First AI powered Guider! Furthermore, KStars now ships with an MCP server which enables connection to any LLM for full control. In this release a limited subset of skills have been introduced, and we hope to make the MCP server feature complete by the next release. Additionally, we improved rotator calibration, guide camera streaming support, and scheduler performance with large job lists. We've also fixed dozens of stability issues and added comprehensive tilt correction for mosaic masks. Here are some highlights.

AI Guiding Assistant

Pavan Kumar is our brilliant Google Summer of Code student who spent the summer developing an AI assisted guider. He delivered the AI Guiding Assistant for Ekos, a mount specific predictive guiding architecture that trains custom models for worm gear, harmonic drive, and direct drive mounts. The wizard walks you through system identification protocols, exports training data, and loads trained models for feed forward correction.

The assistant adds a feed forward predictive layer on top of Ekos's existing proportional guiding controller. A one time characterization wizard runs a system identification pass on your mount, and the resulting data trains a small model specific to your mount class (worm gear, harmonic drive, or direct drive). During guiding, a confidence gated controller blends the AI's predicted corrections with the classic proportional fallback, so the system defers to the proven controller whenever its own confidence is low. It runs entirely on device with no cloud dependency and no GPU requirement, does not need retraining every session, and deliberately does not attempt to predict stochastic noise sources like atmospheric seeing.

  • AI Guide protocol separated from the wizard UI for better modularity
  • Fixed filter models and reworked the system identification protocol and trainer
  • Wizard navigation fixed when closing and reopening; export now only includes the latest session logs
  • Added button to read offline training instructions directly from the wizard
  • Oscillator improvements for better stability during training
  • Fixed the fingerprint builder to correctly validate model compatibility across sessions

The AI Assisted Guider is still in experimental stage. Help us by sharing your feedback and exporting logs to us to analyze.

Guide

Andreas R. landed a run of guiding fixes this release:

  • Fixed streaming guide mode calibration failures on fast and harmonic mounts. The pulse guard is no longer armed during calibration, preventing "Lost track of the guide star" aborts that starved the AI Guider's system identification run
  • Fixed dark guiding (GPG and AI feed forward) in streaming mode by distinguishing between frame prediction pulses from real correction pulses, so the measurement loop no longer starves at the 0.5 s dark interval
  • Fixed the AI feed forward block reading declination from FITS headers. OBJCTDEC is a sexagesimal string, but the code was calling toDouble(), so declination silently stayed 0.0 on every frame. Now reads altitude, declination, and pier side directly from the mount object instead of headers
  • Added per optical train persistence for Predictive Guiding (GPG) period length, so users switching between worm gear and harmonic drive mounts on the same machine no longer clobber each other's tuned period values
  • Fixed the GPG circular buffer losing insertion order after 8192 samples. The read offset (start) was never advanced when the buffer filled, corrupting the chronological sequence and breaking the Gaussian Process training after roughly 68 to 82 minutes of continuous guiding at short exposures
  • Fixed guide camera binning not restored from optical train settings on Ekos startup with real hardware. The combo box was empty when setAllSettings() ran, so the saved binning was silently dropped. Also fixed a false "not supported" detection that compared against the driver's current binning instead of its maximum
  • Added an "Assume DEC orthogonal to RA" calibration option, which bypasses independent DEC angle measurement when periodic error or backlash causes erratic DEC calibration datapoints, deriving the guide angle solely from the RA axis with DEC forced to a 90 degree offset

Rotator

  • Fixed rotator auto reverse detection and added direction parity correction. The wrong direction detector never fired because the PA error tracker was unconditionally cleared before the confirming solve could check it. Now detects reversed rotation, trials the parity flag, recalibrates the offset immediately, and persists the correction only once a retry confirms it worked
  • Renamed internal flag to m_RotatorParityRetried to avoid confusion with the rotator's own driver level reverse functionality
  • Exposed the learned parity as a "Rotator direction reversed" checkbox in Align settings (below Flip Policy), so it can also be set manually without touching the driver's ROTATOR_REVERSE switch
  • Clear previousPAError when rotator times out or fails, preventing false positive auto reverse triggers
  • Fixed false positive rotator wrong direction detection by resetting m_PreviousPAError at key state transitions (successful rotation, mount slew, PA error decrease)
  • Rotator motion commands are now only sent when necessary, reducing unnecessary chatter

Camera & Capture

  • Added simple option for camera warmup instead of requiring users to create a task action for it, so camera sensors can now pre warm before a session starts
  • Andreas R. fixed the filter combo not reflecting the selected job in the Sequence Editor. In standalone mode, filter name lookup always returned -1 because filterLabels() returned an empty list without an INDI connection. Now resolves by name against the combo box contents
  • Auto default remote directory based on frame type in the capture module: %h/Videos for Video frame type, %h/Pictures otherwise, whenever the field is empty or still holds a previously auto generated %h path
  • Fixed an issue where video frame type selections didn't properly disable preview and loop, and set remote directory to a sane value so INDI can successfully write the video file

Scheduler & Observatory Automation

Andreas R. contributed two fixes here:

  • Added a wall clock timeout to the guiding stage (reusing the existing CaptureOperationsTimeout setting, default 300s) to prevent infinite retry loops when PHD2 fails to find a guide star, preventing wasted nights on a single target
  • Cached .esq file content to eliminate O(N) disk I/O per evaluation cycle. With 80 jobs on a Raspberry Pi, the greedy scheduler was spending 9 to 10 minutes of pure overhead re reading and parsing XML files from the SD card per cycle. The cache is keyed by file path and modification time; XML is still re parsed per call but disk I/O is eliminated

Hy Murveit sped up loading large .esl files by not repeatedly calling currentPositionChanged. A 100 job file now loads in a second or two instead of 40 seconds.

Wolfgang Reissenberger made two scheduler improvements:

  • Replaced stderr output with debug log output in the scheduler for cleaner diagnostics
  • Changed doubled sequence validation to only emit a warning instead of blocking, allowing setups with multiple cameras to use the same sequence on different targets

Alignment & Mount Modeler

Christian Kemper fixed two solver related issues:

  • Fixed solver algorithm selection based on available hints, so constrained plate solves now run faster than blind solves on multi core machines. The patchMultiAlgorithm() logic now selects MULTI_DEPTHS when a position hint is present and the scale window is narrow enough, MULTI_SCALES otherwise. The 1 Default align profile is now created with sensible bounds so fresh installs benefit immediately
  • Fixed scale bounds being double widened. Align::startSolving() and PolarAlignmentAssistant::startSolver() were applying their own 0.8x/1.2x margin on top of the same widening in SolverUtils::prepareSolver(), producing a net [low × 0.64, high × 1.44] window instead of the intended [low × 0.8, high × 1.2]
  • Fixed several Sentry and user reported crashes on camera timeout and restart drivers; Focus, Align, and Capture now have consistent timeout behavior
  • Salman Naheed added mount model commands for programmatic access
  • Andreas R. fixed filter not being reset to Sequence Job filter post meridian flip if the filter was different in Align
  • Process JSON alignment data from INDI mounts for improved integration
  • When running plate solving manually, reset target position angle and previous PA error, since otherwise they remain forever until successful or another load and slew is called

FITS Viewer & File Handling

  • Fixed unwarranted 180 degree rotation when pier side differs from the FITS file used for Load and Slew
  • Andreas R. fixed the Statistics panel showing full image stats when ROI is active. When a new image loaded while the selection rectangle was active, the panel reverted to full image statistics and users had to "jiggle" the box to refresh. Now checks whether the selection rect is shown and recalculates the ROI buffer from the new image data automatically
  • Christian Kemper fixed a CFITSIO_LIBRARIES typo that was dropping cfitsio from the link line. The variable name was missing the trailing S, silently overwriting the library and causing undefined references at link time for targets that depend only on Qt::Core and cfitsio

Focus

  • Added Tilt Correction Advisory to the Aberration Inspector, which computes and displays suggested tilt plate adjustments after autofocus with a mosaic mask. Supports 3 point plates (ETA, Octopi, manual 3 screw) and 4 point plates (TouTek style corner screws). Includes a rear view diagram with color coded points, mode toggle (Relative or Push only), thread presets (M2.5 to M6, Wanderer ETA, Custom), camera rotation dial, and an "Apply to ETA" button that sends corrections directly to Wanderer ETA M54 via INDI

Thomas Nemer fixed two focus related bugs:

  • Fixed Focus::autoFocusLinear and scanStartPos passing measure as weight. Two callsites passed getLastMeasure() into a weight slot instead of getLastWeight(), corrupting the V curve fit and the weights exposed via Focus Advisor
  • Fixed Focus::focusOut ignoring caller supplied step count. A duplicate assignment was unconditionally overwriting any explicit value, so focusOut(100) always moved by the UI default

MCP Server (Remote Control)

Thomas Nemer established the MCP server foundation, an in process MCP server inside Ekos that lets external clients drive KStars over JSON RPC 2.0 over HTTP, with bearer token auth and an optional read only token. It includes transport, tool registry, server orchestrator, settings UI, and comprehensive unit tests. His additional work this release includes:

  • MCP mount control tool family (12 tools: coords, goto, goto_target, sync, park/unpark, abort, set_tracking, set_track_mode, set_slew_rate, get_slew_rates, set_meridian_flip)
  • MCP catalog search tool, which resolves fuzzy or user supplied names ("M42", "andromeda", "polaris") into canonical KStars names for use with mount_goto_target
  • Focuser tool family (status, move_absolute, move_relative, abort_move) with a shared device lookup helper
  • Image access tool family (image_last_info, image_last_thumbnail) with per camera frame cache
  • "Available tools" panel in MCP settings, so operators can see which tools are exposed, what each does, and enable or disable individual tools or entire families via checkboxes
  • Unit tests isolated from the real token keychain, so the test suite no longer clobbers the developer's stored MCP credentials
  • Silenced Wmissing field initializers warnings in tool registrations

Stability & Bug Fixes

  • Ilia Belov fixed a crash when a stale EkosLive dialog response arrives after the dialog was dismissed. KSMessageBox is a reused singleton, and buttons of a dismissed dialog stayed as its children; a remote response sent after dismissal clicked a stale button and crashed KStars with SIGSEGV
  • Andreas R. fixed missing i18n and null check crashes in BuildFilterOffsets: button labels, tooltips, and status text were untranslatable, and several methods accessed m_BFOModel.item() without null checks
  • Fixed a crash when building offsets by using showDialog properly
  • Made Build Filter Offsets accessible programmatically and via EkosLive
  • Set proper unique object names for both Filter Manager and Build Filter Offsets
  • Fixed an issue where combo boxes in global config were not getting saved; only write the combo's index when it is populated and has a valid selection
  • Fixed -1 corrupting persisted combo settings before device connects. Several combos (guide/CCD binning) are only populated once a device connects, so currentIndex() returned -1 and overwrote the saved option
  • Suppress pulses from reaching the mount when disabled
  • Mark state as aborted if user explicitly cancels the dialog
  • Shut the profile down instead of indefinitely waiting when checkINDITimeout fires
  • Correctly wait for remote drivers and add contribution of all sequence files

Build & Infrastructure

  • Attempt to make Flatpak arm64 builds use only 4 cores to work around OOM errors
  • Limit Eigen to 4 CPU cores so it can build on the arm64 Flatpak CI runner
  • Do not build testing, demos, docs, or Fortran in Eigen
  • KStars now compiles with OpenCV 5
  • Scarlett Moore added cmake root path env for Snapcraft

Other Improvements

  • Extended filter offsets maximum range to 1 million per user request
  • Added a script to generate indidrivers.xml
  • Fixed wizard state transition when stopped
  • Offset is now updated after each solve, with more logging to diagnose future issues
  • Guilherme Marçal Silva updated the kstars.notifyrc file

Christian Kemper made three additional fixes:

  • Added KSPaths bundle Resources/kstars/ search on macOS, so data files are now found directly in the app bundle
  • Corrected DST rule for countries that abolished daylight saving in citydb
  • Normalized the country column in citydb to ISO 3166 1 alpha 2 codes
  • Replaced the binary citydb.sqlite with a source built TSV format; the database is now generated at build time

Sunday, October 2, 2022

KStars v3.6.1 Released

KStars v3.6.1 is released on 2022.10.02 for MacOS, Linux, and Windows. It's a bi-monthly bugfix release with a couple of exciting features.

Due to major changes in this release, we are releasing it as Early Preview. We hope to release final stable release in a few weeks given the user feedback.

Optical Trains

Ekos introduces a new method to configure equipment by organizing them into Optical Trains. An optical train is a collection of devices arranged in orders from the telescope/lens up until the last imaging element. It includes everything in between including reducers, barlows, OAGs, rotators, filter wheels and so forth.

You will no longer select individual devices in Ekos modules, you simply select which train you want to use. Settings are now saved per-train basis so you can have different settings for each train. This is all done automatically and no need to save or load settings yourself.

For further explanation, check out this YouTube tutorial


Dark Guiding


Sophie Taylor is a new contributor to KStars and a highly talented scientific developer. She is a PhD student and has contributed a new internal guider feature: Dark guiding.

One of the primary benefits of the GPG guiding system is the ability to predict the behavior of the mount at any point in time; not just when guide camera images are received. Dark guiding introduces a rapid control loop that occurs several times per guide exposure, to correct for the predicted error. This way, not only can the benefits of long duration guide exposures be taken advantage of (e.g. capturing fainter guide stars), but some of the benefit of short-term exposures too; namely, quicker corrections to the mount.

For example, you can configure 5 seconds guiding exposures with 1 second dark guiding updates. Dark Guiding is an improvement to GPG, and part of the GPG menu in the Guider menu.

Internal Guider

Hy Murveit increased the number of usable MultiStar references. It was limited to 10 previously but now you can increase it as appropriate given the seeing conditions.


State Machines

Wolfgang Reissenberger continues work on dedicated state machines. This is the next step towards dedicated state machines for EKOS. This step contains:

  • Introduction of a dedicated meridian flip state machine encapsulating both the meridian flip state of the mount and the overall state. This state machine is shared between Capture and Mount, which avoids mutual state communication.
  • First functionality regarding the meridian flip is shifted from Capture and Mount to the state machine. Nevertheless, the complex operations are still part of the Capture code and will be addressed in one of the next refactoring steps.

More Fixes & Improvements

Hy Murveit           fix align solver disconnect crash, disable ssolver logging
Hy Murveit           Analyze target distance should be plotted as a property of the last capture.
Wolfgang Reissenberger Problem with guide calibration after meridian flip
Sophie Taylor        Proper support for loading compressed image statistics
Robert Lancaster     Attempting to patch Find Dialog Crash Bug on MacOS
Marius P             guidealgorithms use C++ initialization instead of memset
Hy Murveit           Reduce the resolution in drawing artificial horizon to 1 degree
Hy Murveit           Bugfix--scheduler was ignoring artificial horizon ceiling constraints
alfred herrhausen    Summary Screen layout improvements, Total RMS added
Wolfgang Reissenberger No separate JPLParser creation for check of epoch_mjd, since this causes crashes
Jasem Mutlaq         Add support for DSLR lenses. User can select either scope or lens in equipment
Hy Murveit           Fix bug where deprecated XML caused extra sequence jobs
Hy Murveit           PAA: use the index and healpix of the 3rd PAA calibration image at the start of the refresh phase.
Wolfgang Reissenberger State machines for meridian flip and Capture
Wolfgang Reissenberger Bugfix for restarting a paused capture sequence after a meridian flip
Hy Murveit           Call checkCamera before loading a sequenceQueue in case UI has not yet been updated.
Wolfgang Reissenberger Handling attempts sending an RPC call if no connection established
Hy Murveit           Do not draw star circles when printing HFRs
Jasem Mutlaq         Warn users if one or more devices fail to connect

Thursday, September 16, 2021

KStars v3.5.5 Released!

KStars v3.5.5 is released on September 16th for Windows, MacOS, and Linux. This release includes a number of new features and bug fixes.

Google Summer of Code 2021

Let's start with the highly successful Google Summer of Code project: KStars Deep-Sky-Objects Overhaul by Valentin Boettcher. This is mostly backend plumping and refactoring to enable KStars to process very large DSO catalogs without impacting memory or processor utilization. This required the development of a new Python-based catalog generator that consolidates and de-duplicates deep sky catalogs in a form usable by KStars.



The legacy system for handling DSO catalogs in KStars has grown rather organically and was a tangle between databases, CSV files and special case implementations. Many catalogs were hard-coded explicitly, making it hard to extend and generalize. Also, the sources of the catalogs and methods how they were transformed into the KStars format were inhomogeneous and hard to reproduce, making deduplication almost impossible.

De-duplication is a process to identify when different designations are used to denote the same deep sky object. For example, the infamous Andromeda Galaxy is known as M31 in the Messier catalog, whereas in the NGC catalog, its designation is 224, and in the PGC catalog, it is 2557 and so forth. Previously, when each catalog was loaded separately in KStars, there was no way to know whether these designations were actually referring to the same physical object. This led to interesting side-effects as these designations were sometimes loaded as separate unique objects in KStars. This is where de-duplication comes into play, it prevents duplication of the same object even when it is exists in multiple catalogs with different designations.

Another limitation for KStars deep sky catalog management is memory handling. KStars just loaded all the DSOs into memory and computed their position on the virtual sky for every draw cycle, which made all too large catalogs infeasible. Valentin task was to implement a unified catalog format which can be loaded into a central database and supports de-duplication. Furthermore, taking inspiration from the handling of star catalogs in KStars, the objects should be trixel indexed and cached in and out of memory (but only for large catalogs). Finally, it would be very desirable to make the creation/compilation of the catalogs reproducible and easily extendable to facilitate future maintenance.





Valentin developed a new python framework to generate KStars catalogs from sources. To learn how to create new DSO catalogs for KStars, please checkout the documentation.

While the above method is the recommended method to create highly efficient catalogs, you can still import DSOs using a basic CSV importer. This might be helpful to add a few DSOs of interest to some users.


With the previous legacy catalogs, the DSO object colors were hard-coded in the catalog itself. Now you can customize the color of each catalog to get the best experience possible suited to your needs.


Port Selector Tool

When creating a new Ekos Equipment profile, you will be presented with the Port Selector tool if any of your devices is a serial or networked device.

Your equipment profile may contain one or more serial and/or network-enabled devices. Although INDI performs an auto-search when you connect to your serial devices, it's recommended to select the appropriate ports and baud rates before connecting for the first time.


If a device is available on the network (WiFi or Ethernet), then you can configure the device host-name (or IP address) and port. It must be located on the same network where Ekos is running in order for them to communicate with each other. The port selector tool can be toggled at any time and not only during initial connection phase.

Re-usable Widgets


Wolfgang Reissenberger implemented new reusable widgets to be used across Ekos. These widgets replace the legacy raster-based pixmaps that were used in the Summary screen to report progress in focus, capture, and guide modules. Not only this reduces the memory footprint of KStars, but it also present fully interactive widgets at native resolution. 

You can switch back and forth between the available widgets to select the desired information to display.

Scheduler Artificial Horizon Restriction

Hy Murveit implemented a feature that was requested by our users for years: Artificial-Horizon -aware-scheduler! 

Users may define an artificial horizon zones where visibility is obstructed by natural or man-made structures. Furthermore, a terrain map can be superimposed to provide a 360 degree view of the horizon.

Artificial Horizon constraints, when enabled via the standard artificial horizon UI, will now be used by the scheduler to start or interrupt jobs. That is, if there is an artificial horizon constraint at a given azimuth, it will be used by the scheduler, along with the standard altitude constraint to determine if a job can start or continue. The scheduler uses the max of the altitude constraints as the constraint to enforce.

Ekos Internal Guider Improvements




Hy Murveit overhauled the Guider UI starting with simplifying the Guider Options Menu (GOM):
  • Dither options used to be in GOM's Guider Tab. Now the GOM has a Dither tab for dither parameters.
  • Moved the control parameters (e.g. DEC proportional gain = 133) to the GOM's Guide tab (where dither parameters used to be).
  • Removed the Control sub-tab from the Guide page (the sub-tab next to "Drift Plot" and "Calibration Plot").
  • Removed UI controls related to image guiding and rapid guiding
Furthermore, The standard control algorithm now uses calibration information when computing pulses. The control gain parameter for RA and (a separate one for DEC) now go from 0 to 1.0. It multiplies the error and the calibrated arcsec_per_ms_pulse. (Similar adjustments were made to the optional integral_gain.)
proportionalResponse = arcsecDrift * proportionalGain * arcsecPerMsPulse
The Proportional Gain was renamed to the industry standard name of Aggressiveness. The guider's min-pulse and max-pulse (both in milliseconds) parameters were changed to Min Error and Max Response, both with units of arc-seconds instead of milliseconds of pulse. Hopefully more intuitive to users. The derivative gain control was dropped since it was never used in the code before.

Users are highly recommended to revise their internal guider settings to achieve the best results.

More Improvements & Fixes

  • Add shortcuts for increasing and decreasing the time scale (by Nate Graham).
  • Control Mount with arrow keys (by Siyu Zhang)
  • Eliminating formerly required Python options for local astrometry.net on MacOS (By Robert Lancaster)
  • Stable alphabetical INDI device order (by Dušan Poizl)
  • Remove pre-calculated pixel-to-WCS lookup table which takes huge amounts of memory (two floats per pixel) and slows down image loading (by Jarno Paananen)
  • Broad Documentation updates with updated screenshots (by Antoni Bella Pérez)
  • Batch add option in the Observation Planner (by Akarsh Simha)
  • Better sectioning for translation (by Yuri Chornoivan)
  • Fix core computations in SkyPoint and StarObject, and a few other improvements (By Akarsh Simha)
  • Move focuser back to initial position when interrupted by a meridian flip (By Wolfgang Reissenberger)
  • Save Binning, Fits filter settings (guider), Camera gain (solver) and configure SEPMultistarOptions correctly (By Antonio Escriban)
  • Resize manager: change the size of the log view (By Jürgen Terpe)
  • Update skyculture sternenkarten simplifying some constellation lines adding new constellation lines for the southern hemisphere (By Edgar Scholz)