Developer Guide

The MTHexapod CSC is implemented using ts_salobj and ts_hexrotcom.


The primary class is:

lsst.ts.mthexapod Package


check_negative_value(value, name, min_value)

Check that a numeric value is in range min_value <= value < 0.

check_new_position_limits(limits, max_limits)

Raise ExceptionClass if proposed new position limits are not with range of the maximum allowed position limits.

check_position(position, limits[, ...])

Raise ExceptionClass if a position is not within limits.

check_positive_value(value, name, max_value)

Check that a numeric value is in range 0 < value <= max_value.

check_range(value, name, min_value, max_value)

Check that a numeric value is range min_value <= value <= max_value.

check_symmetrical_range(value, name, max_value)

Check that a numeric value is in range -max_value <= value <= max_value.


Run the hexapod commander.

rot2d(xypos, ang)

Rotate a 2-d position by the specified angle.

rot_about_x(xyzpos, ang)

Rotate a 3-d position about the x axis.

rot_about_y(xyzpos, ang)

Rotate a 3-d position about the y axis.

rot_about_z(xyzpos, ang)

Rotate a 3-d position about the z axis.


Run the MTHexapod CSC.


CommandCode(value[, names, module, ...])

Values for the Command.code field.

Compensation(*, elevation_coeffs, ...)

Compute hexapod compensation for elevation, azimuth, camera rotation, and temperature.

CompensationInputs(elevation, azimuth, ...)

Input values for the compensation model.


MTHexapod configuration.


A real-valued Fourier series.

HexapodCommander(index, enable)

Command the MTHexapod CSC from the command line.

HexapodCsc(index[, config_dir, ...])

MTHexapod CSC.

MockMTHexapodController(index, log[, port, ...])

Mock MTHexapod controller that talks over TCP/IP.


Handle annoying order of strut_measured_posfiltvel telemetry fields.


Handle annoying order of strut_commanded_posvel telemetry fields.

Position(x, y, z, u, v, w)

The position and orientation of the hexapod pivot point.

PositionLimits(maxXY, minZ, maxZ, maxUV, ...)

Position limits.

RangedPolynomial(coeffs, min_x, max_x)

A polynomial that is linear outside a specified range.

SalIndex(value[, names, module, qualname, ...])

SetEnabledSubstateParam(value[, names, ...])

Substates for the ENABLED state.

SimpleHexapod(base_positions, ...)

Simple model of a hexapod: 6 linear actuators in an arbitrary arrangement.


MTHexapod telemetry.

Class Inheritance Diagram

Inheritance diagram of lsst.ts.mthexapod.enums.CommandCode, lsst.ts.mthexapod.compensation.Compensation, lsst.ts.mthexapod.base.CompensationInputs, lsst.ts.mthexapod.structs.Config, lsst.ts.mthexapod.fourier_series.FourierSeries, lsst.ts.mthexapod.hexapod_commander.HexapodCommander, lsst.ts.mthexapod.hexapod_csc.HexapodCsc, lsst.ts.mthexapod.mock_controller.MockMTHexapodController, lsst.ts.mthexapod.structs.PosFiltVel, lsst.ts.mthexapod.structs.PosVel, lsst.ts.mthexapod.base.Position, lsst.ts.mthexapod.base.PositionLimits, lsst.ts.mthexapod.ranged_polynomial.RangedPolynomial, lsst.ts.mthexapod.enums.SalIndex, lsst.ts.mthexapod.enums.SetEnabledSubstateParam, lsst.ts.mthexapod.simple_hexapod.SimpleHexapod, lsst.ts.mthexapod.structs.Telemetry

Build and Test

This is a pure python package. There is nothing to build except the documentation. MTHexapod
setup -r .
pytest -v  # to run tests
package-docs clean; package-docs build  # to build the documentation


ts_mthexapod is developed at You can find Jira issues for this package using labels=ts_mthexapod..