update Subroutine

private subroutine update(self, sim_time, position, attitude, has_position, has_attitude)

The position and attitude at simulation time sim_time. has_position and has_attitude say whether each could be computed (and is being followed); otherwise position / attitude are left unchanged.

Type Bound

TrajectoryFollower

Arguments

Type IntentOptional Attributes Name
class(TrajectoryFollower), intent(inout) :: self
real(kind=wp), intent(in) :: sim_time

simulation time (s)

real(kind=wp), intent(inout) :: position(3)

the followed position (in the trajectories' frame)

real(kind=wp), intent(inout) :: attitude(4)

the followed attitude (quaternion [x, y, z, w])

logical, intent(out) :: has_position

(true: position / attitude set)

logical, intent(out) :: has_attitude

(true: position / attitude set)


Calls

proc~~update~2~~CallsGraph proc~update~2 TrajectoryFollower%update proc~state_at TrajectoryFollower%state_at proc~update~2->proc~state_at proc~chosen_trajectory chosen_trajectory proc~state_at->proc~chosen_trajectory proc~data_valid TrajectoryFollower%data_valid proc~state_at->proc~data_valid proc~interpolate_attitude interpolate_attitude proc~state_at->proc~interpolate_attitude proc~interpolate_position interpolate_position proc~state_at->proc~interpolate_position proc~time_index Trajectory%time_index proc~state_at->proc~time_index proc~wrapped_time wrapped_time proc~state_at->proc~wrapped_time proc~time_distance Trajectory%time_distance proc~chosen_trajectory->proc~time_distance proc~verify_data Trajectory%verify_data proc~data_valid->proc~verify_data proc~attitude~3 Trajectory%attitude proc~interpolate_attitude->proc~attitude~3 proc~num_attitudes Trajectory%num_attitudes proc~interpolate_attitude->proc~num_attitudes proc~quat_slerp quat_slerp proc~interpolate_attitude->proc~quat_slerp proc~num_points Trajectory%num_points proc~interpolate_position->proc~num_points proc~point_between Trajectory%point_between proc~interpolate_position->proc~point_between proc~point~2 Trajectory%point proc~interpolate_position->proc~point~2 proc~time_index->proc~time_distance proc~time_range~3 Trajectory%time_range proc~wrapped_time->proc~time_range~3 proc~point_between->proc~num_points proc~point_between->proc~point~2 proc~time_fraction Trajectory%time_fraction proc~point_between->proc~time_fraction

Called by

proc~~update~2~~CalledByGraph proc~update~2 TrajectoryFollower%update proc~update ReferenceFrame%update proc~update->proc~update~2 proc~drawable_update DrawableTrajectory%drawable_update proc~drawable_update->proc~update proc~fm_update FrameManager%fm_update proc~fm_update->proc~update proc~sphere_update Sphere%sphere_update proc~sphere_update->proc~update proc~terrain_update TerrainBody%terrain_update proc~terrain_update->proc~update

Source Code

    subroutine update(self, sim_time, position, attitude, has_position, has_attitude)
        class(TrajectoryFollower), intent(inout) :: self
        real(wp), intent(in) :: sim_time            !! simulation time (s)
        real(wp), intent(inout) :: position(3)      !! the followed position (in the trajectories' frame)
        real(wp), intent(inout) :: attitude(4)      !! the followed attitude (quaternion [x, y, z, w])
        logical, intent(out) :: has_position, has_attitude !! (true: position / attitude set)
        integer :: k
        real(wp) :: t
        call self%state_at(sim_time, position, attitude, has_position, has_attitude, t, k)
        if (self%n == 0) return
        self%last_time_ = t
        self%current = k
    end subroutine update