blob: e87e0645b012fc9ea56fd7643a3c07b54a8d7b57 [file] [log] [blame]
Stephan Massaltd021f972020-01-05 20:41:23 -08001#include "y2020/actors/autonomous_actor.h"
2
3#include <inttypes.h>
4
5#include <chrono>
6#include <cmath>
7
8#include "aos/logging/logging.h"
9#include "frc971/control_loops/drivetrain/localizer_generated.h"
10#include "y2020/control_loops/drivetrain/drivetrain_base.h"
James Kuszmaul5f6d1d42020-03-01 18:10:07 -080011#include "y2020/actors/auto_splines.h"
Stephan Massaltd021f972020-01-05 20:41:23 -080012
13namespace y2020 {
14namespace actors {
15
16using ::aos::monotonic_clock;
17using ::frc971::ProfileParametersT;
18using frc971::control_loops::drivetrain::LocalizerControl;
19namespace chrono = ::std::chrono;
20
21AutonomousActor::AutonomousActor(::aos::EventLoop *event_loop)
22 : frc971::autonomous::BaseAutonomousActor(
James Kuszmaul5f6d1d42020-03-01 18:10:07 -080023 event_loop, control_loops::drivetrain::GetDrivetrainConfig()),
24 localizer_control_sender_(event_loop->MakeSender<
25 ::frc971::control_loops::drivetrain::LocalizerControl>(
26 "/drivetrain")) {}
Stephan Massaltd021f972020-01-05 20:41:23 -080027
28void AutonomousActor::Reset() {
29 InitializeEncoders();
30 ResetDrivetrain();
James Kuszmaul5f6d1d42020-03-01 18:10:07 -080031
32 {
33 auto builder = localizer_control_sender_.MakeBuilder();
34
35 LocalizerControl::Builder localizer_control_builder =
36 builder.MakeBuilder<LocalizerControl>();
37 // TODO(james): Set starting position based on the alliance.
38 localizer_control_builder.add_x(0.0);
39 localizer_control_builder.add_y(0.0);
40 localizer_control_builder.add_theta(0.0);
41 localizer_control_builder.add_theta_uncertainty(0.00001);
42 if (!builder.Send(localizer_control_builder.Finish())) {
43 AOS_LOG(ERROR, "Failed to reset localizer.\n");
44 }
45 }
Stephan Massaltd021f972020-01-05 20:41:23 -080046}
47
48bool AutonomousActor::RunAction(
49 const ::frc971::autonomous::AutonomousActionParams *params) {
50 Reset();
51
James Kuszmaul5f6d1d42020-03-01 18:10:07 -080052 SplineHandle spline1 =
53 PlanSpline(AutonomousSplines::BasicSSpline, SplineDirection::kForward);
54
55 if (!spline1.WaitForPlan()) return true;
56 spline1.Start();
57
58 if (!spline1.WaitForSplineDistanceRemaining(0.02)) return true;
59
Stephan Massaltd021f972020-01-05 20:41:23 -080060 AOS_LOG(INFO, "Params are %d\n", params->mode());
61 return true;
62}
63
64} // namespace actors
65} // namespace y2020