Fix Version/s: None
Sprint:TSSW Sprint - Apr 12 - Apr 26
Team:Telescope and Site
The current low-level MT hexapod controller has a few issues that I would love to have cleaned up, if you can find the time:
- Commanding a motion requires two separate commands: SET_POSITION followed by MOVE (and something similar for offsets). This introduces a potential race condition if two users are trying to command the hexapod. It is also a nuisance. I believe it was originally chosen because of the MOVE_LUT command, but we don't use that anymore.
- Remove the unused MOVE_LUT command and any associated code that is easy to pull out. That includes removing the LUT tables and no longer reporting the LUT values in the configuration (making the configuration data much shorter).
Please also also consider removing the offset command. The CSC isn't using it (it supports offsets, but implements them by commanding absolute moves).
The hexapod EUI will be affected by this ticket and need to do the related modification.
- is triggering
DM-29664 Update the Hexapod CSC for DM-29577
- Won't Fix
DM-29720 Support the Command Queue in Low-Level Hexapod Controller
Wonderful. As far as the MOVE command goes: making it a single command may require a bit of subtlety because of the "sync" flag. Commands only support 6 parameters (other than the command code) and we need all six for x, y, z, u, v, w. Two ways out of this are:
- Have separate commands for "synchronized move" vs "non-synchronized move". This doesn't scale well if there are many move commands, but might be acceptable for one (move only) or two (move and offset). It is probably the simpler solution. If it's OK with you, I suggest it.
- Add a command parameter. I have no idea how invasive that would be. Does it matter if the command format is different for the hexapods than for the rotator?
Based on the EUI code, I realized it might not be a good idea to combine the POSITION_SET and MOVE. The first thing is that this is inconsistent with the design of Simulink model. In addition, the EUI needs to support the moves of hexapod position (x, y, z, rx, ry, rz) and raw position (distance for each actuator). The above two movements have the synchronic and asynchronic movements. In EUI's viewpoint, it is easier to separate these two commands.
For the possible race condition (although there should be no two users to command the hexapod in the same time), this will be fixed after I rewrite the low-level controller to support the queue of command (
Please help to review the PRs:
Removed the hexapod LUT in Simulink model.
Removed the moveLUT in commanding.c.
Removed the LUT related items in ddsConfigTelemetryStreamStructure_t. This triggers the
Remove the "LUT invalid" in the application status of EUI.