diff --git a/src/boards/Groundstation/Automated/Follower/Follower.cpp b/src/boards/Groundstation/Automated/Follower/Follower.cpp
deleted file mode 100644
index 0a5276059b8837df921f4f07e2eea5c7334733c3..0000000000000000000000000000000000000000
--- a/src/boards/Groundstation/Automated/Follower/Follower.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-/* Copyright (c) 2024 Skyward Experimental Rocketry
- * Author: Emilio Corigliano, Niccolò Betto, Federico Lolli, Nicolò Caruso
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#include "Follower.h"
-
-#include <Groundstation/Automated/Actuators/Actuators.h>
-#include <Groundstation/Automated/SMController/SMController.h>
-#include <Groundstation/Automated/Sensors/Sensors.h>
-#include <common/ReferenceConfig.h>
-#include <utils/AeroUtils/AeroUtils.h>
-
-#include <Eigen/Dense>
-#include <cmath>
-#include <iostream>
-
-using namespace Boardcore;
-
-namespace Antennas
-{
-
-Follower::Follower()
- : antennaCoordinates(
- Common::ReferenceConfig::defaultReferenceValues.refLatitude,
- Common::ReferenceConfig::defaultReferenceValues.refLongitude,
- Common::ReferenceConfig::defaultReferenceValues.refAltitude),
- targetAngles({0, 0})
-{
-}
-
-void Follower::setAntennaCoordinates(const Boardcore::GPSData& gpsData)
-{
- antennaCoordinates = {gpsData.latitude, gpsData.longitude, gpsData.height};
- Boardcore::Logger::getInstance().log(
- static_cast<LogAntennasCoordinates>(gpsData));
- antennaCoordinatesSet = true;
-}
-
-void Follower::setInitialRocketCoordinates(const Boardcore::GPSData& gpsData)
-{
- if (rocketCoordinatesSet)
- {
- LOG_ERR(logger, "Rocket coordinates already set");
- return;
- }
-
- initialRocketCoordinates = {gpsData.latitude, gpsData.longitude,
- gpsData.height};
- Boardcore::Logger::getInstance().log(
- static_cast<LogRocketCoordinates>(gpsData));
- rocketCoordinatesSet = true;
-}
-
-void Follower::setLastRocketNasState(const NASState nasState)
-{
- Lock<FastMutex> lock(lastRocketNasStateMutex);
- lastRocketNasState = nasState;
-}
-
-NASState Follower::getLastRocketNasState()
-{
- Lock<FastMutex> lock(lastRocketNasStateMutex);
- return lastRocketNasState;
-}
-
-bool Follower::init()
-{
- if (!antennaCoordinatesSet || !rocketCoordinatesSet)
- {
- LOG_ERR(logger, "Antenna or rocket coordinates not set");
- return false;
- }
-
- // Antenna Coordinates
- Eigen::Vector2f antennaCoord{antennaCoordinates.head<2>()};
- // Rocket coordinates
- Eigen::Vector2f rocketCoord{initialRocketCoordinates.head<2>()};
-
- initialAntennaRocketDistance =
- Aeroutils::geodetic2NED(rocketCoord, antennaCoord);
-
- LOG_INFO(logger, "Initial antenna - rocket distance: [{}, {}] [m]\n",
- initialAntennaRocketDistance[0], initialAntennaRocketDistance[1]);
-
- return true;
-}
-
-void Follower::step()
-{
- NASState lastRocketNasState = getLastRocketNasState();
-
- // Getting the position of the rocket wrt the antennas in NED frame
- NEDCoords rocketPosition = {lastRocketNasState.n, lastRocketNasState.e,
- lastRocketNasState.d};
-
- // Calculate the antenna target angles from the NED rocket coordinates
- targetAngles = rocketPositionToAntennaAngles(rocketPosition);
-
- VN300Data vn300 =
- ModuleManager::getInstance().get<Sensors>()->getVN300LastSample();
-
- // Calculate the amount to move from the current position
- AntennaAngles stepperAngles{targetAngles.yaw - vn300.yaw,
- targetAngles.pitch - vn300.pitch};
-
- // Rotate in the shortest direction
- if (stepperAngles.yaw > 180)
- {
- stepperAngles.yaw -= 360;
- }
- else if (stepperAngles.yaw < -180)
- {
- stepperAngles.yaw += 360;
- }
-
- // Calculate angular velocity for moving the antennas toward position
- float horizontalSpeed = std::abs((stepperAngles.yaw * 1000) /
- (360 * FollowerConfig::FOLLOWER_PERIOD));
- float verticalSpeed = std::abs((stepperAngles.pitch * 1000) /
- (360 * FollowerConfig::FOLLOWER_PERIOD));
-
-#ifndef NDEBUG
- std::cout << "[FOLLOWER] STEPPER "
- << "Angles: [" << stepperAngles.yaw << ", " << stepperAngles.pitch
- << "] "
- << "Speed: [" << horizontalSpeed << ", " << verticalSpeed
- << "] VN300 measure: [" << vn300.yaw << ", " << vn300.pitch
- << "]\n";
-#endif
-
- ModuleManager::getInstance().get<Actuators>()->setSpeed(
- StepperList::STEPPER_X, horizontalSpeed);
- ModuleManager::getInstance().get<Actuators>()->setSpeed(
- StepperList::STEPPER_Y, verticalSpeed);
-
- // Actuating steppers
- ErrorMovement actuation =
- ModuleManager::getInstance().get<Actuators>()->moveDeg(
- StepperList::STEPPER_X, stepperAngles.yaw);
-
- if (actuation != ErrorMovement::OK)
- LOG_ERR(logger,
- "Step antenna - STEPPER_X could not move or reached move "
- "limit. Error: ",
- actuation, "\n");
-
- actuation = ModuleManager::getInstance().get<Actuators>()->moveDeg(
- StepperList::STEPPER_Y, stepperAngles.pitch);
-
- if (actuation != ErrorMovement::OK)
- LOG_ERR(logger,
- "Step antenna - STEPPER_Y could not move or reached move "
- "limit. Error: ",
- actuation, "\n");
-}
-
-AntennaAngles Follower::rocketPositionToAntennaAngles(
- const NEDCoords& rocketNed)
-{
- // NED coordinates of the rocket in the NED antenna frame
- NEDCoords ned = {rocketNed.n + initialAntennaRocketDistance.x(),
- rocketNed.e + initialAntennaRocketDistance.y(),
- rocketNed.d};
-
- AntennaAngles angles;
- // Calculate the horizontal angle relative to the NED frame
- // std::atan2 outputs angles in radians, convert to degrees
- angles.yaw = std::atan2(ned.e, ned.n) / EIGEN_PI * 180;
-
- float distance = std::sqrt(ned.n * ned.n + ned.e * ned.e);
- // Calculate the vertical angle relative to the NED frame
- angles.pitch = std::atan2(-ned.d, distance) / EIGEN_PI * 180;
-
- return angles;
-}
-
-} // namespace Antennas