@@ -247,7 +247,11 @@ def _zero_gateway_msgs(self) -> None:
247247 self .attGuidMsg .write (messaging .AttGuidMsgPayload ())
248248
249249 def _make_task_list (self ):
250- return [self .MRPControlTask (self ), self .NadirPointTask (self )]
250+ return [
251+ self .MRPControlTask (self ),
252+ self .NadirPointTask (self ),
253+ self .TrackingErrorTask (self ),
254+ ]
251255
252256 class MRPControlTask (Task ):
253257 """Task to control the satellite attitude magically (i.e. without actuators)."""
@@ -315,6 +319,38 @@ def action_nadir_point(self) -> None:
315319 BasicFSWModel .NadirPointTask .name + self .satellite .name
316320 )
317321
322+ class TrackingErrorTask (Task ):
323+ """Task to convert an attitude reference to guidance."""
324+
325+ name = "trackingErrTask"
326+
327+ def __init__ (self , fsw , priority = 90 ) -> None : # noqa: D107
328+ """Task to convert an attitude reference to guidance."""
329+ super ().__init__ (fsw , priority )
330+
331+ def _create_module_data (self ) -> None :
332+ self .trackingError = self .fsw .trackingError = (
333+ attTrackingError .attTrackingError ()
334+ )
335+ self .trackingError .ModelTag = "trackingError"
336+
337+ def _setup_fsw_objects (self , ** kwargs ) -> None :
338+ self .trackingError .attNavInMsg .subscribeTo (
339+ self .fsw .dynamics .simpleNavObject .attOutMsg
340+ )
341+ self .trackingError .attRefInMsg .subscribeTo (self .fsw .attRefMsg )
342+ messaging .AttGuidMsg_C_addAuthor (
343+ self .trackingError .attGuidOutMsg , self .fsw .attGuidMsg
344+ )
345+
346+ self ._add_model_to_task (self .trackingError , priority = 1197 )
347+
348+ @action
349+ def action_attitude_mrp (self , mrp : np .ndarray ) -> None :
350+ """Point the satellite to the specified attitude."""
351+ self .attRefMsg .write (messaging .AttRefMsgPayload (sigma_RN = mrp ))
352+ self .simulator .enableTask (self .TrackingErrorTask .name + self .satellite .name )
353+
318354
319355class BasicFSWModel (FSWModel ):
320356 """Basic FSW model with minimum necessary Basilisk components."""
@@ -327,7 +363,6 @@ def _make_task_list(self) -> list[Task]:
327363 return [
328364 self .SunPointTask (self ),
329365 self .RWDesatTask (self ),
330- self .TrackingErrorTask (self ),
331366 ] + super ()._make_task_list ()
332367
333368 def _set_config_msgs (self ) -> None :
@@ -538,32 +573,6 @@ def action_desat(self) -> None:
538573 raise ValueError (f"{ self .desatAttitude } not a valid desatAttitude" )
539574 self .simulator .enableTask (self .TrackingErrorTask .name + self .satellite .name )
540575
541- class TrackingErrorTask (Task ):
542- """Task to convert an attitude reference to guidance."""
543-
544- name = "trackingErrTask"
545-
546- def __init__ (self , fsw , priority = 90 ) -> None : # noqa: D107
547- """Task to convert an attitude reference to guidance."""
548- super ().__init__ (fsw , priority )
549-
550- def _create_module_data (self ) -> None :
551- self .trackingError = self .fsw .trackingError = (
552- attTrackingError .attTrackingError ()
553- )
554- self .trackingError .ModelTag = "trackingError"
555-
556- def _setup_fsw_objects (self , ** kwargs ) -> None :
557- self .trackingError .attNavInMsg .subscribeTo (
558- self .fsw .dynamics .simpleNavObject .attOutMsg
559- )
560- self .trackingError .attRefInMsg .subscribeTo (self .fsw .attRefMsg )
561- messaging .AttGuidMsg_C_addAuthor (
562- self .trackingError .attGuidOutMsg , self .fsw .attGuidMsg
563- )
564-
565- self ._add_model_to_task (self .trackingError , priority = 1197 )
566-
567576 class MRPControlTask (Task ):
568577 """Task to control the satellite attitude using reaction wheels."""
569578
0 commit comments