blob: f5d4c3f1f509afd19c216fcab2dd8dc5821d73f4 [file] [log] [blame]
Tyler Chatowf31da682017-01-22 01:39:40 +00001#ifndef Y2017_ACTORS_AUTONOMOUS_ACTOR_H_
2#define Y2017_ACTORS_AUTONOMOUS_ACTOR_H_
3
4#include <chrono>
5#include <memory>
6
John Park33858a32018-09-28 23:05:48 -07007#include "aos/actions/actions.h"
8#include "aos/actions/actor.h"
Philipp Schrader996a2a22017-02-22 05:02:48 +00009#include "frc971/autonomous/base_autonomous_actor.h"
Tyler Chatowf31da682017-01-22 01:39:40 +000010#include "frc971/control_loops/drivetrain/drivetrain.q.h"
11#include "frc971/control_loops/drivetrain/drivetrain_config.h"
Austin Schuh624088a2017-03-22 22:36:16 -070012#include "y2017/control_loops/superstructure/superstructure.q.h"
Tyler Chatowf31da682017-01-22 01:39:40 +000013
14namespace y2017 {
15namespace actors {
16using ::frc971::ProfileParameters;
17
Philipp Schrader996a2a22017-02-22 05:02:48 +000018class AutonomousActor : public ::frc971::autonomous::BaseAutonomousActor {
Tyler Chatowf31da682017-01-22 01:39:40 +000019 public:
Austin Schuh1bf8a212019-05-26 22:13:14 -070020 explicit AutonomousActor(::aos::EventLoop *event_loop);
Tyler Chatowf31da682017-01-22 01:39:40 +000021
Philipp Schrader996a2a22017-02-22 05:02:48 +000022 bool RunAction(
23 const ::frc971::autonomous::AutonomousActionParams &params) override;
Austin Schuhbfb04122019-05-22 21:16:51 -070024
Tyler Chatowf31da682017-01-22 01:39:40 +000025 private:
Austin Schuh624088a2017-03-22 22:36:16 -070026 void Reset() {
27 intake_goal_ = 0.0;
28 turret_goal_ = 0.0;
29 vision_track_ = false;
30 hood_goal_ = 0.6;
31 shooter_velocity_ = 0.0;
32 indexer_angular_velocity_ = 0.0;
33 intake_max_velocity_ = 0.5;
Austin Schuh10475d72017-04-16 19:17:48 -070034 gear_servo_ = 0.66;
35 use_vision_for_shots_ = false;
Austin Schuh624088a2017-03-22 22:36:16 -070036 InitializeEncoders();
37 ResetDrivetrain();
38 SendSuperstructureGoal();
39 }
40
Austin Schuh402722c2019-06-29 21:27:06 -070041 ::aos::Fetcher<::y2017::control_loops::SuperstructureQueue::Status>
42 superstructure_status_fetcher_;
43 ::aos::Sender<::y2017::control_loops::SuperstructureQueue::Goal>
44 superstructure_goal_sender_;
45
Austin Schuh624088a2017-03-22 22:36:16 -070046 double intake_goal_ = 0.0;
47 double turret_goal_ = 0.0;
48 bool vision_track_ = false;
49 double hood_goal_ = 0.6;
50 double shooter_velocity_ = 0.0;
51 double indexer_angular_velocity_ = 0.0;
52 double intake_max_velocity_ = 0.5;
Austin Schuh10475d72017-04-16 19:17:48 -070053 double gear_servo_ = 0.66;
54 bool use_vision_for_shots_ = false;
Austin Schuh624088a2017-03-22 22:36:16 -070055
56 void set_intake_goal(double intake_goal) { intake_goal_ = intake_goal; }
57 void set_turret_goal(double turret_goal) { turret_goal_ = turret_goal; }
58 void set_vision_track(bool vision_track) { vision_track_ = vision_track; }
59 void set_hood_goal(double hood_goal) { hood_goal_ = hood_goal; }
60 void set_shooter_velocity(double shooter_velocity) {
61 shooter_velocity_ = shooter_velocity;
62 }
63 void set_indexer_angular_velocity(double indexer_angular_velocity) {
64 indexer_angular_velocity_ = indexer_angular_velocity;
65 }
66 void set_intake_max_velocity(double intake_max_velocity) {
67 intake_max_velocity_ = intake_max_velocity;
68 }
Austin Schuh10475d72017-04-16 19:17:48 -070069 void set_gear_servo(double gear_servo) {
70 gear_servo_ = gear_servo;
71 }
72 void set_use_vision_for_shots(bool use_vision_for_shots) {
73 use_vision_for_shots_ = use_vision_for_shots;
74 }
Austin Schuh624088a2017-03-22 22:36:16 -070075
Austin Schuh19e15d72017-06-24 13:34:47 -070076 void WaitForHoodZeroed() {
77 ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
Austin Schuhd32b3622019-06-23 18:49:06 -070078 event_loop()->monotonic_now(),
Austin Schuh19e15d72017-06-24 13:34:47 -070079 ::std::chrono::milliseconds(5) / 2);
80 while (true) {
81 if (ShouldCancel()) return;
82
Austin Schuh402722c2019-06-29 21:27:06 -070083 superstructure_status_fetcher_.Fetch();
84 if (superstructure_status_fetcher_.get()) {
85 if (superstructure_status_fetcher_->hood.zeroed) {
Austin Schuh19e15d72017-06-24 13:34:47 -070086 return;
87 }
88 }
89 phased_loop.SleepUntilNext();
90 }
91 }
92
Austin Schuh624088a2017-03-22 22:36:16 -070093 void SendSuperstructureGoal() {
Austin Schuh402722c2019-06-29 21:27:06 -070094 auto new_superstructure_goal = superstructure_goal_sender_.MakeMessage();
Austin Schuh624088a2017-03-22 22:36:16 -070095 new_superstructure_goal->intake.distance = intake_goal_;
96 new_superstructure_goal->intake.disable_intake = false;
97 new_superstructure_goal->turret.angle = turret_goal_;
98 new_superstructure_goal->turret.track = vision_track_;
99 new_superstructure_goal->hood.angle = hood_goal_;
100 new_superstructure_goal->shooter.angular_velocity = shooter_velocity_;
101
102 new_superstructure_goal->intake.profile_params.max_velocity =
103 intake_max_velocity_;
104 new_superstructure_goal->turret.profile_params.max_velocity = 6.0;
105 new_superstructure_goal->hood.profile_params.max_velocity = 5.0;
106
107 new_superstructure_goal->intake.profile_params.max_acceleration = 5.0;
108 new_superstructure_goal->turret.profile_params.max_acceleration = 15.0;
109 new_superstructure_goal->hood.profile_params.max_acceleration = 25.0;
110
111 new_superstructure_goal->intake.voltage_rollers = 0.0;
112 new_superstructure_goal->lights_on = true;
113 new_superstructure_goal->intake.disable_intake = false;
Austin Schuh10475d72017-04-16 19:17:48 -0700114 new_superstructure_goal->intake.gear_servo = gear_servo_;
115 new_superstructure_goal->use_vision_for_shots = use_vision_for_shots_;
Austin Schuh624088a2017-03-22 22:36:16 -0700116
117 new_superstructure_goal->indexer.angular_velocity =
118 indexer_angular_velocity_;
119
120 if (indexer_angular_velocity_ < -0.1) {
121 new_superstructure_goal->indexer.voltage_rollers = 12.0;
122 new_superstructure_goal->intake.voltage_rollers = 6.0;
123 } else {
124 new_superstructure_goal->indexer.voltage_rollers = 0.0;
125 }
126
127 if (!new_superstructure_goal.Send()) {
Austin Schuhf257f3c2019-10-27 21:00:43 -0700128 AOS_LOG(ERROR, "Sending superstructure goal failed.\n");
Austin Schuh624088a2017-03-22 22:36:16 -0700129 }
130 }
Tyler Chatowf31da682017-01-22 01:39:40 +0000131};
132
Tyler Chatowf31da682017-01-22 01:39:40 +0000133} // namespace actors
134} // namespace y2017
135
136#endif // Y2017_ACTORS_AUTONOMOUS_ACTOR_H_