lsst.ts.mthexapod Interface-gray.svg


The MTHexapod CSC controls the camera and M2 hexapods on the Simonyi Survey Telescope. Run one instance of the CSC for each hexapod, using index=1 for the camera hexapod and index=2 for the M2 hexapod.

User Guide

Start an MTHexapod CSC

run_mthexapod <index>

where <index> is 1 for the camera hexapod, 2 for the M2 hexapod

Use a Hexapod for Observing

  • Enable the CSC. If this fails see troubleshooting.

  • Enable compensation mode with the setCompensationMode command.

  • Use the move and/or offset commands to improve and maintain collimation.


The hexapod will refuse to go into ENABLED state if:

To recover from a low-level controller fault:

  • Figure out why the controller faulted and fix the problem.

  • Send the CSC to STANDBY state, then to ENABLED state.

Compensation Mode

The CSC is capable of applying compensation (correction) for mechanical changes induced by changes in gravity and temperature, in order to preserve collimation. Each effect is modeled independently; the corrections are added together to get the total compensation offset. The inputs to the model are telescope target elevation and azimuth, camera rotator target angle, and temperature. The CSC uses target positions in order to give the hexapods more time to get in position during a slew. The coefficients for the compensation model are specified in the CSC configuration.

The CSC starts with compensation disabled. To enable compensation: issue the setCompensationMode command with enable=True. Compensation is disabled when:

  • A user commands setCompensationMode with enable=False. This will remove the current compensation offset, which will move the hexapod by a small amount.

  • The CSC leaves the enabled state. This will not remove the current compensation offset.

  • An error occurs in the compensation loop. This will not remove the current compensation offset.

The move command specifies the uncompensated (aka nominal) position. Thus the specified position should produce (approximately) the same effect on collimation, regardless of the current telescope elevation, temperature, etc. If you wish to move the hexapod to a give mechanical position (with reproducible hexapod strut lengths), disable compensation before you command the move.

The compensated (aka corrected) position is the position sent to the low-level controller. If compensation is enabled but the CSC does not yet have all the inputs it needs for the compensation model (e.g. telescope target position or rotator target position), it will issue one warning logMessage event and keep trying. When all compensation inputs are available, compensation corrections will begin.

The compensation will continue to be updated in the background for changes in elevation, temperature, etc. In order to reduce heat generation in the hexapod, the configuration parameter min_compensation_adjustment specifies the smallest compensation offset the background compensation task will command. Compensation is only updated if abs(new_compensation_offset - current_compensation_offset) >= min_compensation_adjustment in any axis. Note that min_compensation_adjustment does not affect the move, offset, and setCompensationMode commands; these commands always apply compensation if compensation mode is enabled. Thus you can force a compensation update by issuing an offset command with x, y, z, u, v, and w all zero.

Relevant events:

  • uncompensatedPosition: the position commanded by the user. This event is output once in response to a move or offset command.

  • compensatedPosition: the compensated (corrected) position; the position sent to the low-level controller. This event is output once in response to a move or offset command and (if compensation is enabled) once each time the compensation loop applies a correction. This will match the uncompensated position if compensation is disabled or cannot be computed. In order to compute compensation a move must have been commanded since the MTHexapod CSC was started, and all inputs to the compensation model must have been published by the appropriate CSCs. Thus failure to compute a compensation correction is only likely when MTHexapod, or any of the CSCs that generate compensation inputs, have first been brought up.

  • compensation: inputs to the compensation model and the resulting compensation offset. Output when compensation is applied.


Configuration is specified in ts_config_mttcs following this schema. The most important settings are:


The CSC includes a simulation mode. To run using CSC’s internal simulator:

run_mthexapod <index> --simulate

Enable With the EUI

The control mode must be DDS in order for the CSC to control the low-level controller. If the control mode is GUI then you can use the EUI (aka GUI) to change it to DDS as follows:

  • In the main panel: change the state to state=Offline, offline_substate=Available.

  • Go to the Parameters panel to change the control mode to DDS.


  • The EUI shows the control mode on the main panel, but that display is read-only. You must use the Parameters panel to change the control mode.

  • If you issue any hexapod command in the EUI, control mode will switch back to GUI. So if you want the CSC to retain control, please be careful what you touch when using the GUI.

Developer Guide

Version History