Uploaded image for project: 'Data Management'
  1. Data Management
  2. DM-25243

Fix the Bugs of Trajectory If No Track Command Received In the Tracking

    XMLWordPrintable

    Details

      Description

      The path generator will continuously update the demand position even if there is no new track command received in the SlewAndTrack sub-state. The initial suspect is that this comes from the non-zero target velocity in the final received track command. This will continue to update the position command. The initial idea to fix this is to reset the velocity command to be zero if no new track command received.

      The following figure (x-axis: time in seconds, y-axis: value such as position in degree) shows this problem. There are two targets (positions = 1.2 degree and 3 degree. velocity = 0.01 deg/sec and -0.01 deg/sec). The track command does not continue after the time equals 6 seconds. We could see the rotator position is at 3 degree when time is at 8 seconds but the demand position is decreasing after time=8 seconds (rotator's position keeps the same) because of the second target has the velocity of -0.01 deg/sec.

       

        Attachments

        1. moveWithStop.png
          66 kB
          Te-Wei Tsai
        2. track_v0_1_long_enterFault.png
          59 kB
          Te-Wei Tsai
        3. trackStopAfterSlewDone.png
          54 kB
          Te-Wei Tsai
        4. trackStopBeforeSlewDone.png
          56 kB
          Te-Wei Tsai
        5. trackWithoutNewTrackCmd.png
          36 kB
          Te-Wei Tsai
        6. trackWithSomeNewTrackCmdAndNoCmd.png
          36 kB
          Te-Wei Tsai
        7. trackWithSomeNewTrackCmdAndNoCmdMagnify.png
          37 kB
          Te-Wei Tsai
        8. trackWithStopAnd3rdTarget.png
          71 kB
          Te-Wei Tsai
        9. trackWithStopAnd3rdTargetOfPosNow.png
          67 kB
          Te-Wei Tsai
        10. trackWithStopAnd3rdTargetOfPosNowAndRewiteCmdPosAndVel.png
          63 kB
          Te-Wei Tsai
        11. trackWithStopAndSecondTargetSmaller.png
          59 kB
          Te-Wei Tsai
        12. trackWithStopAndSecondTargetSmaller.png
          59 kB
          Te-Wei Tsai

          Issue Links

            Activity

            Hide
            ttsai Te-Wei Tsai added a comment - - edited

            If I issue two targets:
            (1) position = 1.2 deg, velocity = 0.01 deg/sec
            (2) position = 0.7 deg, velocity = -0.01 deg/sec

            with the stop and startTrack commands in between, I have the following image:

            This implies two things:
            1. The rotator Simulink model should be able to do the tracking of multiple targets as long as the rotator position and target's position >= 0 deg. Maybe the plant model really has the problem.
            2. The stop command does not stop the slewing of unfinished target.

            Show
            ttsai Te-Wei Tsai added a comment - - edited If I issue two targets: (1) position = 1.2 deg, velocity = 0.01 deg/sec (2) position = 0.7 deg, velocity = -0.01 deg/sec with the stop and startTrack commands in between, I have the following image: This implies two things: 1. The rotator Simulink model should be able to do the tracking of multiple targets as long as the rotator position and target's position >= 0 deg. Maybe the plant model really has the problem. 2. The stop command does not stop the slewing of unfinished target.
            Hide
            ttsai Te-Wei Tsai added a comment - - edited

            The behavior of "stop" command is different between the point-to-point movement and track. For the former, a trigger of newPt2PtCommand is needed in the state machine. The positionSet command will set the trigger to 1 and the value will be 0 once the system enters the MovingPt2Pt sub-State (the logic of trigger=0 is at Pt2PtMove block). This is why the rotator can not move again after the stop in the movement (positionSet = 1.5 happens at time=0.5 sec):

            For the track, there is no such trigger of newSlewCommand. Therefore, the stop command behaves more like a pause command actually. It looks like the track process can not use the same method as the point-to-point movement to erase the history. The MOOG developer also left the following comment in MATLAB script: "NOTE: slews must be completed before new slew?".

            Show
            ttsai Te-Wei Tsai added a comment - - edited The behavior of "stop" command is different between the point-to-point movement and track. For the former, a trigger of newPt2PtCommand is needed in the state machine. The positionSet command will set the trigger to 1 and the value will be 0 once the system enters the MovingPt2Pt sub-State (the logic of trigger=0 is at Pt2PtMove block). This is why the rotator can not move again after the stop in the movement (positionSet = 1.5 happens at time=0.5 sec): For the track, there is no such trigger of newSlewCommand. Therefore, the stop command behaves more like a pause command actually. It looks like the track process can not use the same method as the point-to-point movement to erase the history. The MOOG developer also left the following comment in MATLAB script: "NOTE: slews must be completed before new slew?".
            Hide
            ttsai Te-Wei Tsai added a comment - - edited

            After the tests of Simulink model, to solve the problem of stop command in track, the only way is to rewrite the data of "LsstCmdSet" after the stop completes (Flags_stopComplete).

            There are two ways to do this:
            (1) Update the rotator controller code once Flags_stopComplete == 1.
            (2) Let rotator CSC do by sending the new track command. However, there is no way for rotator CSC to know this at this moment. In addition, we prefer to use the command acknowledgement to know the stop command is finished or not in a latter time.

            Therefore, only the option 1 can work as a temporary solution at this moment. Another possibility is to add a reset command or something similar to let the rotator_controller update the position and velocity of LsstCmdSet after the stop command is done. It looks like ts_rotator has the telemetry of flags_stop_complete already. This might be used as a temporary solution as well.

            I do not prefer the option 1 because there will be multiple places to write the data into the global variable of LsstCmdSet.

            Show
            ttsai Te-Wei Tsai added a comment - - edited After the tests of Simulink model, to solve the problem of stop command in track, the only way is to rewrite the data of "LsstCmdSet" after the stop completes (Flags_stopComplete). There are two ways to do this: (1) Update the rotator controller code once Flags_stopComplete == 1. (2) Let rotator CSC do by sending the new track command. However, there is no way for rotator CSC to know this at this moment. In addition, we prefer to use the command acknowledgement to know the stop command is finished or not in a latter time. Therefore, only the option 1 can work as a temporary solution at this moment. Another possibility is to add a reset command or something similar to let the rotator_controller update the position and velocity of LsstCmdSet after the stop command is done. It looks like ts_rotator has the telemetry of flags_stop_complete already. This might be used as a temporary solution as well. I do not prefer the option 1 because there will be multiple places to write the data into the global variable of LsstCmdSet.
            Hide
            ttsai Te-Wei Tsai added a comment - - edited

            Please help to review the PRs:

            1. https://github.com/lsst-ts/ts_mt_hexRot_simulink/pull/6
            2. https://github.com/lsst-ts/ts_rotator_controller/pull/5

            The comments of second link has the details of code update. Thanks!

            PS. I will create another Jira ticket for the stop command in the tracking mode. The remove of trajectory's history can be done in the rotator controller or rotator CSC. I think it is better for us to discuss first. Thanks!

            The ticket to solve the problem of stop command is DM-25441.

            Show
            ttsai Te-Wei Tsai added a comment - - edited Please help to review the PRs: 1.  https://github.com/lsst-ts/ts_mt_hexRot_simulink/pull/6 2.  https://github.com/lsst-ts/ts_rotator_controller/pull/5 The comments of second link has the details of code update. Thanks! PS. I will create another Jira ticket for the stop command in the tracking mode. The remove of trajectory's history can be done in the rotator controller or rotator CSC. I think it is better for us to discuss first. Thanks! The ticket to solve the problem of stop command is DM-25441 .
            Hide
            rowen Russell Owen added a comment -

            Approved on github

            Show
            rowen Russell Owen added a comment - Approved on github

              People

              Assignee:
              ttsai Te-Wei Tsai
              Reporter:
              ttsai Te-Wei Tsai
              Reviewers:
              Russell Owen
              Watchers:
              Russell Owen, Te-Wei Tsai, Tiago Ribeiro
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:
                Start date:
                End date:

                  Jenkins

                  No builds found.