Showing posts with label Rotator. Show all posts
Showing posts with label Rotator. 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

Tuesday, October 3, 2023

KStars v3.6.7 is Released

KStars v3.6.7 is released on 2023.10.03 for MacOS & Linux. Windows build is still pending and should hopefully be released by 10th of October. It's a bi-monthly bugfix release with a couple of exciting features.

Image Overlay Component


Hy Murveit introduced a long requested feature: Custom Image Overlays!

With this new feature, a user can add their own processed/completed astro-images, and the system will display them scaled and rotated appropriately on the Sky Map.

The feature is controlled in the KStars Settings menu, in a new tab labelled Image Overlays. First the user needs to add files into a directory, parallel to the logs directory, called imageOverlays. Simply add the images there (typically jpegs). Ideally these aren't massive files for performance reasons, but probably width 1000 or 2000 are fine. I have been testing with larger files, which will also work be use more system resources on slower CPUs.


The user then uses the Image Overlays menu in KStars Settings to (one-time) plate-solve the images and check a box to enable the image display. Successful plate-solve info is stored in the user-db so that it doesn't have to be done again. The images should, from then on, appear in the SkyMap in the proper position. There is a way to easily navigate to the images without manipulating the SkyMap by selecting a row in the overlay table and clicking on the "Show" button. You can move from one image to the next with up/down arrow keyboard commands.

A user can adjust the plate-solve timeouts. As these are mostly blind solves (jpegs won't have any header info, and as currently implemented, no header info is used) the plate solving can be problematic. You can choose a default image scale (arcseconds-per-pixel) or leave that to 0.0 to not use scale. If there are files that won't solve, the user can add RA,DEC into the image's row in the table displayed, which would get the solver to use the sky position as a constraint. The user can also add the scale that way. In fact, if the user knows all the info for the image, he/she can populate all the fields on the image's row and simply set the status field to OK, and plate-solving would no longer be required.

Rotator Dialog Improvements



Toni Schriber continued simplifying the Rotator Dialog. Rotator Flip Policy was introduced. This (global) policy is an answer to this question and to this wish. It's now possible to define how the rotator reacts after a flip or if the result of a solved reference image reports a different pierside respective to the actual mount pierside. Preserve Rotator Angle will keep the rotator position and the camera is virtually rotated by 180°. Preserve Position Angle will keep the camera position angle.

The rotator always turns the camera to the original position angle and the image will show the original star arrangement. Flip Policy can be altered in the StellarSolver Options under Rotator Settings.

More File Placeholders


Due to popular demand, Wolfgang Reissenberger added support for camera temperature %C, gain %G, offset %O and pier side %P.


This is not only applicable to locally captured images, but also for images captured on a remote INDI server.