blob: a4ace8ac1f5916d95fbe24c1226e1c1488dbdcfe [file] [log] [blame]
Comran Morshede68e3732016-03-12 14:12:11 +00001#ifndef Y2016_ACTORS_AUTONOMOUS_ACTOR_H_
2#define Y2016_ACTORS_AUTONOMOUS_ACTOR_H_
3
4#include <memory>
5
6#include "aos/common/actions/actor.h"
7#include "aos/common/actions/actions.h"
Comran Morshed435f1112016-03-12 14:20:45 +00008
Comran Morshede68e3732016-03-12 14:12:11 +00009#include "y2016/actors/autonomous_action.q.h"
Comran Morshed435f1112016-03-12 14:20:45 +000010#include "frc971/control_loops/drivetrain/drivetrain.q.h"
11#include "frc971/control_loops/drivetrain/drivetrain_config.h"
Comran Morshede68e3732016-03-12 14:12:11 +000012
13namespace y2016 {
14namespace actors {
15
16class AutonomousActor
17 : public ::aos::common::actions::ActorBase<AutonomousActionQueueGroup> {
18 public:
19 explicit AutonomousActor(AutonomousActionQueueGroup *s);
20
21 bool RunAction(const actors::AutonomousActionParams &params) override;
Comran Morshed435f1112016-03-12 14:20:45 +000022
23 private:
24 void ResetDrivetrain();
25 void InitializeEncoders();
26 void WaitUntilDoneOrCanceled(::std::unique_ptr<aos::common::actions::Action>
27 action);
28 void StartDrive(double distance, double angle,
29 ::frc971::control_loops::ProfileParameters linear,
30 ::frc971::control_loops::ProfileParameters angular);
31 // Waits for the drive motion to finish. Returns true if it succeeded, and
32 // false if it cancels.
33 bool WaitForDriveDone();
34
35 double left_initial_position_, right_initial_position_;
36
37 const ::frc971::control_loops::drivetrain::DrivetrainConfig dt_config_;
Comran Morshede68e3732016-03-12 14:12:11 +000038};
39
Comran Morshed435f1112016-03-12 14:20:45 +000040typedef ::aos::common::actions::TypedAction<AutonomousActionQueueGroup>
41 AutonomousAction;
Comran Morshede68e3732016-03-12 14:12:11 +000042
43// Makes a new AutonomousActor action.
44::std::unique_ptr<AutonomousAction> MakeAutonomousAction(
45 const ::y2016::actors::AutonomousActionParams &params);
46
47} // namespace actors
48} // namespace y2016
49
50#endif // Y2016_ACTORS_AUTONOMOUS_ACTOR_H_