Releases: sdss/jaeger
Releases · sdss/jaeger
jaeger 0.14.0
🚀 New
- #177 When
jaeger configuration load
is called with a design that has the same targets as the currently loaded (as it happens for multi-exposure fields), the existing configuration and metadata are copied but decollision is not run and new paths are not generated. - #175 Added alert system.
- #176 Refine configuration focal plane scale using the guider measured scale.
- Addded a scale factor when loading a configuration.
- Allow to load a design from the queue.
✨ Improved
- #178 Major refactor of the chiller code.
- #179 Refactored FVC code to use coordIO's
FVCTransformAPO
. - Add jaeger, kaiju, and coordio versions to confSummary.
- Allow to disable chiller watcher.
- Store positioners in trajectory data file. Dump trajectory data even if trajectory fails.
🔧 Fixed
jaeger status
now won't output additional information if the status of a single positioner is requested.
jaeger 0.13.1
🚀 New
- Added
jaeger configuration slew
command. - Added chiller control.
- A keyword
folded
is updated after a trajectory indicating if the array is folded. Injaeger unwind
, if the array is already folded (with a tolerance of 1 degree), it does nothing.jaeger unwind --status
only reports the folded status. - Report
alive_at
every 60 second. - Add commands to enable and disable a positioner during runtime.
✨ Improved
- Check that the rotator is halted before exposing the FVC.
- Added wok coordinates to summary files.
🔧 Fixed
- Increased length of
optical_prov
inconfSummary
files.
jaeger 0.13.0
🚀 New
- #163 The to and from destination trajectories are saved when
BaseConfiguration.decollide_and_get_paths()
is called. The reverse path can be sent from the actor usingconfiguration reverse
. The paths can be generated in advance when loading the design. An--epoch-delay
parameter can be passed when loading the design to create a configuration for some time in the future. - #167 Add the ability of loading a configuration from the current positions of the robots.
- #169 Move
ieb power
andieb switch
to simplypower
. - #173 Added
DitheredConfiguration
class.
✨ Improved
- #166 During
BaseConfiguration.decollide_and_get_paths()
the paths are decollided and deadlocks resolved while trying to maintain as many robots on target as possible. The fibre table is updated. - #168 Functional version of design loading. Collisions are solved by first attempting to remove unassigned targets. Deadlock resolution uses the same logic as the random configuration creation.
fiberId
is not added to the summary file. Snapshots for each configuration are created. - #172 The FVC centroids are now derotated according to the rotator angle, allowing to run the FVC loop at any rotator position.
- #174 Improved metadata handling in FVC loop.
- Snapshots are run in a process pool executor and are saved automatically at the end of a trajectory or when
TrajectoryError
is raised. jaeger.commands.goto.goto()
generateskaiju
-valid trajectories by default.- FVC RMS fit only takes assigned robots into account.
- Added a check when loading a design to confirm that the design exists and is for the current observatory.
- Unassigned robots in a configuration as scrambled and are the first to be decollided.
🔧 Fixed
- #168 Fixed use of proper motions that were being applied as if the JD epoch was the Julian year.
🔥 Removed
Positioner.goto()
has been removed. Usejaeger.commands.goto.goto()
instead.
jaeger 0.12.0
jaeger 0.12.0
jaeger 0.11.0
🚀 New
- #152 FVC IEB support and actor commands.
- Add commands
GET_HALL_CALIB_ERROR
,GET_ALPHA_HALL_CALIB
, andGET_BETA_HALL_CALIB
for hall sensor calibration querying. - The actor status command now returns the number of trajectories executed.
✨ Improved
- Add
Trajectory.start_time
andTrajectory.end_time
that can be used to determine when the trajectory failed.send_trajectory
now allows to return the unsent or non-started trajectory. - When running the actor as a daemon in detached mode, log stdout and stderr to file.
- By default, do not fail when a command receives an
UNKNOWN_COMMAND
reply; this usually means that the positioner firmware does not support that command yet. This can be disabled by initialising theCommand
withignore_unknown=False
. - It's now possible to switch the SYNC line relay (
ieb switch sync
). The SYNC line may be left closed if there's an uncaught exception while it's being actuated, or if the script is killed during that time. This allows to restore it to open. TrajectoryError
now includes the originalTrajectory
object asTrajectoryError.trajectory
.FPS.send_trajectory()
now raises aTrajectoryError
if it fails.- Better logging of the reason for failure in
Trajectory
. In particular,Trajectory.failed_positioners
contains a dictionary with the reason why a give positioner failed to receive or execute the trajectory, if that information is known.
🔧 Fixed
- Avoid clipping the current position to
(0, 360)
when calculating the trajectory ingoto()
. This prevents usinggoto()
when the positioner is at a negative position.
jaeger 0.10.0
🚀 New
- #149 Added an
FPS.goto()
method that sends a list of positioners to a given position using trajectories. By defaultPositioner.goto()
now also uses trajectories, butGOTO_ABSOLUTE_POSITION
can still be used. - #150 Allow to skip positioners that are connected to the bus but that we want to ignore. Also allow to disable collision detection for a list of positioners. See configuration options
fps.skip_positioners
andfps.disable_collision_detection_positioners
.
✨ Improved
Trajectory()
now sends data points using a single command per trajectory chunk.- Warn about individual replies that return without
COMMAND_ACCEPTED
. - Remove check for whether a positioner has started to move after sending the goto command. It sometimes produced false positives on very short moves.
- Disable precise moves by default.
- Improve reloading the FPS.
- Remove
bootloader
commands from actor. FPS.locked_by
now reports what positioner id(s) locked the FPS on a collision.- Actor
ieb fbi
now accepts multiple devices. - Use coil space for IEB relays.
- Use 8 message per positioner by default when upgrading the firmware.
🔧 Fixed
- When sending multiple message per positioner per command, assign different UIDs.
- Fix address of IEB RTD12.
- Fix upgrade firmware script in the case of a single test sextant.
- Turn off all sextants before upgrading the firmware.
- Fixed and tested the power on and power off IEB sequences.
jaeger 0.9.0
🚀 New
- #131 Breaking change. This version includes a major rewrite of the internals of
Command
and how it is used throughoutjaeger
. In addition to acception a singlepositioner_id
,Command
can now receive a list of positioners to command. When the command is awaited it will wait until all the positioners have replied or the command has timed out. For the most part this is equivalent to using the oldFPS.send_to_all()
which has now been deprecated, but with the advantage that a singleFuture
is created. This seems to significantly decrease the overhead thatasyncio
introduces when creating and await many tasks.FPS.send_command()
now also accepts a list of positioners, thus replacingsend_to_all()
. For the most part low level initialisation of commands, as long as they are used to address a single positioner, should not have changed. To address multiple positioners at once usesend_command()
. - #127 Implemented positioner LED on/off commands.
- #128 Deprecated the use of
python-can
buses since they block in a non-asynchronous way. This caused significant inefficiencies when controller >200 robots, especially on computers with old CPUs. This PR implements the major changes, including refactingJaegerCAN
andFPS
to initialise the buses asynchronously, and a reimplementation ofCANNetBus
,VirtualBus
, andNotifier
. This PR also includes some general performance gains such as a better implementation ofparse_identifier
. - #134 Added a new actor command
reload
that will reinitialise theFPS
instance and reload any new robots after a sextant power cycle. - #142 Added an
ieb info
actor command to show information about the IEB layout to users. - #119 Allow to manually add and initialise a single positioner.
✨ Improved
- #135 Cleaned up initialisation methods for
JaegerCAN
andFPS
. Objects can now be instantiated and initialised at the same time using the async classmethod.create()
. - #141 The
jaeger upgrade-firmware
command will now upgrade the firmware of one sextant at a time to avoid powering on too many power supplies at the same time. - #124 Collisions are handled better. If a move command is running when the FPS is locked, the command is cancelled.
Postioner.goto()
andsend_trajectory()
now continuously check if the FPS has been locked during the move. If it is, they fail in a non-verbose way.FPS.send_trajectory()
now logs an error but doesn't raise an exception if the trajectory fails.
🧹 Cleaned
- #129 Removed the use of the database and predefined layouts for the FPS. Default mode is that positioners are always auto-discovered.
- #133 Completely removed the use of
python-can
. A conditional import is done for theslcan
andsocketcan
interfaces for whichpython-can
does need to be installed. - #130 Removed engineering mode.
- #132 Merged
JagerCAN._send_commands()
and.send_to_interfaces()
intoJaegerCAN.send_commands()
. RenamedFPS.send_command()
synchronous
parameter tonow
.
jaeger 0.8.0
🚀 New
- #122 Precise moves can now be disabled for all positioners by setting the configuration parameter
positioner.disable_precise_moves
. Also implements the CAN commandsSWITCH_[ON|OFF]_PRECISE_MOVE_[ALPHA|BETA]
. - New
debug
parameter in the configuration file. If it isfalse
, some warnings will be silenced andJaegerCAN
will not log tocan.log
. - #126 Use furo Sphinx theme. Add
noxfile
forsphinx-autobuild
.
🔧 Fixed
- Bug preventing the FPS from being initialised when upgrading the firmware if one was not power cycling the electronics from software.
✨ Improved
- Improved the performance when upgrading the firmware. When calling
load_firmware
one can specify how manymessages_per_positioner
to send at once. Too many messages at once will overflow the buffer, but the right number can optimise performance. By default, logging to the CAN log will be suspended during the firmware upgrade to boost performance.
jaeger 0.7.0
🚀 New
- #96 Raise error if sending a bootloader command while not in bootloader mode.
- #109 Added JSON schema for the actor.
- #97 Implement low temperature handling. When the air temperature is less than 0 degrees, the motor RPM is set to 3000. When the temperature is less than -10, the beta motor holding current is increased to 30%.
- #15 Allow to disable a positioner. If the positioner is disabled, a non-safe command sent to the FPS will raise an error. In
send_to_all
, a broadcast will be only sent to the non-disabled positioners. Trajectories that include disabled positioners will fail. - #116 Safe mode to prevent the beta arm to go below 160 degrees.
✨ Improved
- #121 Improve the use of the database to define the FPS layout.
🧹 Cleanup
- #96 Discontinue the use of
sdsscore
. Improved the handling of user configuration files. - #95 Support Python 3.9.
- Require
drift>=0.2.2
to fix a bug in setting the relay values. - Stop using
releases
for the changelog and migrate to using CHANGELOG.md. Release information for previous version is available here.
jaeger 0.6.0
- #89: Implement daemon.
- #90: Remove the option to initialise datums in
Positioner
. - #91: Implement additional commands for powering up/down hall sensors, and setting the open/closed loop. In the process,
Positioner
was cleaned and streamlined. Most functions now raise aPositionerError
if they fail, instead of failing silently with a log message. - Do not pass context to actor commands.
- Fix starting status server.
- Initialise FPS during
upgrade-firmware
. If the FPS is not initialised and a layout is not loaded there is no way for the upgrade script to know what positioners may be connected or their statuses. - Allow to skip cogging calibration.
- Remove QA database features since they need a full rethink.
- Update
sdss-drift
to0.1.5
to fixpymodbus
import. - Wrap message from
CANNetBus
in custom message class with additional__slots__
. This fixes a deprecation introduced inpython-can>=3.3.4
. motor_steps
andtime_step
are now defined in the configuration file underpositioner
.- The default logging level for the console is not warning. In the CLI, the logging level can be adjusted using the
-v
flag.-v
will set the logging level toINFO
;-vv
will set the level toDEBUG
;-vvv
will also set the CAN logging level toDEBUG
.