blob: 9809cc65f7dac55ca8e8f952b3d2bdd7e718a417 [file] [log] [blame]
Austin Schuh69792662015-02-22 21:39:52 -08001#include <math.h>
2
3#include "aos/common/time.h"
4#include "frc971/actors/lift_actor.h"
Austin Schuh69792662015-02-22 21:39:52 -08005#include "frc971/constants.h"
Austin Schuh6e242ac2015-03-07 17:08:21 -08006#include "frc971/actors/fridge_profile_lib.h"
Austin Schuh69792662015-02-22 21:39:52 -08007
8namespace frc971 {
9namespace actors {
10namespace {
Austin Schuh6e242ac2015-03-07 17:08:21 -080011constexpr ProfileParams kArmMove{0.6, 2.0};
12constexpr ProfileParams kElevatorMove{0.9, 3.0};
Austin Schuh69792662015-02-22 21:39:52 -080013} // namespace
14
15LiftActor::LiftActor(LiftActionQueueGroup *queues)
Austin Schuh6e242ac2015-03-07 17:08:21 -080016 : FridgeActorBase<LiftActionQueueGroup>(queues) {}
Austin Schuh69792662015-02-22 21:39:52 -080017
18bool LiftActor::RunAction(const LiftParams &params) {
Austin Schuh813b9af2015-03-08 18:46:58 -070019 control_loops::fridge_queue.status.FetchLatest();
20 if (!control_loops::fridge_queue.status.get()) {
21 return false;
22 }
23
Austin Schuh69792662015-02-22 21:39:52 -080024 // Lift the box straight up.
Austin Schuh813b9af2015-03-08 18:46:58 -070025 DoFridgeProfile(params.lift_height, 0.0, kElevatorMove, kArmMove,
26 control_loops::fridge_queue.status->grabbers.top_front,
27 control_loops::fridge_queue.status->grabbers.bottom_front,
28 control_loops::fridge_queue.status->grabbers.bottom_back);
29 if (ShouldCancel()) return true;
30
Austin Schuh69792662015-02-22 21:39:52 -080031 // Move it back to the storage location.
Austin Schuh6e242ac2015-03-07 17:08:21 -080032 DoFridgeProfile(params.lift_height, params.lift_arm, kElevatorMove, kArmMove,
Austin Schuh813b9af2015-03-08 18:46:58 -070033 control_loops::fridge_queue.status->grabbers.top_front,
34 control_loops::fridge_queue.status->grabbers.bottom_front,
35 control_loops::fridge_queue.status->grabbers.bottom_back);
Austin Schuh69792662015-02-22 21:39:52 -080036
37 return true;
38}
39
40::std::unique_ptr<LiftAction> MakeLiftAction(const LiftParams &params) {
41 return ::std::unique_ptr<LiftAction>(
42 new LiftAction(&::frc971::actors::lift_action, params));
43}
44
45} // namespace actors
46} // namespace frc971