Move y2017 auton actor to use common class
This should give it the drivetrain helpers right off the bat.
Change-Id: I7f88d30c2451da632acc2a85fd57d2bc1772f041
diff --git a/y2017/BUILD b/y2017/BUILD
index 7730a93..fd32ae2 100644
--- a/y2017/BUILD
+++ b/y2017/BUILD
@@ -43,6 +43,7 @@
'//aos/common/util:wrapping_counter',
'//aos/linux_code:init',
'//third_party:wpilib',
+ '//frc971/autonomous:auto_queue',
'//frc971/control_loops/drivetrain:drivetrain_queue',
'//frc971/control_loops:queues',
'//frc971/wpilib:joystick_sender',
@@ -59,7 +60,6 @@
'//frc971/wpilib:ADIS16448',
'//frc971/wpilib:dma',
'//y2017/control_loops/superstructure:superstructure_queue',
- '//y2017/actors:autonomous_action_queue',
],
)
diff --git a/y2017/actors/BUILD b/y2017/actors/BUILD
index 6766422..b1cacc9 100644
--- a/y2017/actors/BUILD
+++ b/y2017/actors/BUILD
@@ -9,16 +9,6 @@
],
)
-queue_library(
- name = 'autonomous_action_queue',
- srcs = [
- 'autonomous_action.q',
- ],
- deps = [
- '//aos/common/actions:action_queue',
- ],
-)
-
cc_library(
name = 'autonomous_action_lib',
srcs = [
@@ -28,12 +18,13 @@
'autonomous_actor.h',
],
deps = [
- ':autonomous_action_queue',
'//aos/common/util:phased_loop',
'//aos/common/logging',
'//aos/common/actions:action_lib',
+ '//frc971/autonomous:base_autonomous_actor',
'//frc971/control_loops/drivetrain:drivetrain_queue',
'//frc971/control_loops/drivetrain:drivetrain_config',
+ '//y2017/control_loops/drivetrain:drivetrain_base',
],
)
@@ -44,7 +35,7 @@
],
deps = [
':autonomous_action_lib',
- ':autonomous_action_queue',
'//aos/linux_code:init',
+ '//frc971/autonomous:auto_queue',
],
-)
\ No newline at end of file
+)
diff --git a/y2017/actors/autonomous_action.q b/y2017/actors/autonomous_action.q
deleted file mode 100644
index 52873ca..0000000
--- a/y2017/actors/autonomous_action.q
+++ /dev/null
@@ -1,29 +0,0 @@
-package y2017.actors;
-
-import "aos/common/actions/actions.q";
-
-message AutonomousMode {
- // Mode read from the mode setting sensors.
- int32_t mode;
-};
-
-queue AutonomousMode auto_mode;
-
-struct AutonomousActionParams {
- // The mode from the sensors when auto starts.
- int32_t mode;
-};
-
-queue_group AutonomousActionQueueGroup {
- implements aos.common.actions.ActionQueueGroup;
-
- message Goal {
- uint32_t run;
- AutonomousActionParams params;
- };
-
- queue Goal goal;
- queue aos.common.actions.Status status;
-};
-
-queue_group AutonomousActionQueueGroup autonomous_action;
diff --git a/y2017/actors/autonomous_actor.cc b/y2017/actors/autonomous_actor.cc
index ad4b87c..52f3df2 100644
--- a/y2017/actors/autonomous_actor.cc
+++ b/y2017/actors/autonomous_actor.cc
@@ -9,7 +9,7 @@
#include "aos/common/logging/logging.h"
#include "frc971/control_loops/drivetrain/drivetrain.q.h"
-#include "y2017/actors/autonomous_action.q.h"
+#include "y2017/control_loops/drivetrain/drivetrain_base.h"
namespace y2017 {
namespace actors {
@@ -25,28 +25,13 @@
}
} // namespace
-AutonomousActor::AutonomousActor(actors::AutonomousActionQueueGroup *s)
- : aos::common::actions::ActorBase<actors::AutonomousActionQueueGroup>(s) {}
+AutonomousActor::AutonomousActor(
+ ::frc971::autonomous::AutonomousActionQueueGroup *s)
+ : frc971::autonomous::BaseAutonomousActor(
+ s, control_loops::drivetrain::GetDrivetrainConfig()) {}
-void AutonomousActor::WaitUntilDoneOrCanceled(
- ::std::unique_ptr<aos::common::actions::Action> action) {
- if (!action) {
- LOG(ERROR, "No action, not waiting\n");
- return;
- }
-
- ::aos::time::PhasedLoop phased_loop(::std::chrono::milliseconds(5),
- ::std::chrono::milliseconds(5) / 2);
- while (true) {
- // Poll the running bit and see if we should cancel.
- phased_loop.SleepUntilNext();
- if (!action->Running() || ShouldCancel()) {
- return;
- }
- }
-}
-
-bool AutonomousActor::RunAction(const actors::AutonomousActionParams ¶ms) {
+bool AutonomousActor::RunAction(
+ const ::frc971::autonomous::AutonomousActionParams ¶ms) {
monotonic_clock::time_point start_time = monotonic_clock::now();
LOG(INFO, "Starting autonomous action with mode %" PRId32 "\n", params.mode);
@@ -72,11 +57,5 @@
return true;
}
-::std::unique_ptr<AutonomousAction> MakeAutonomousAction(
- const ::y2017::actors::AutonomousActionParams ¶ms) {
- return ::std::unique_ptr<AutonomousAction>(
- new AutonomousAction(&::y2017::actors::autonomous_action, params));
-}
-
} // namespace actors
} // namespace y2017
diff --git a/y2017/actors/autonomous_actor.h b/y2017/actors/autonomous_actor.h
index ef63b8e..3c179ed 100644
--- a/y2017/actors/autonomous_actor.h
+++ b/y2017/actors/autonomous_actor.h
@@ -6,32 +6,24 @@
#include "aos/common/actions/actions.h"
#include "aos/common/actions/actor.h"
+#include "frc971/autonomous/base_autonomous_actor.h"
#include "frc971/control_loops/drivetrain/drivetrain.q.h"
#include "frc971/control_loops/drivetrain/drivetrain_config.h"
-#include "y2017/actors/autonomous_action.q.h"
namespace y2017 {
namespace actors {
using ::frc971::ProfileParameters;
-class AutonomousActor
- : public ::aos::common::actions::ActorBase<AutonomousActionQueueGroup> {
+class AutonomousActor : public ::frc971::autonomous::BaseAutonomousActor {
public:
- explicit AutonomousActor(AutonomousActionQueueGroup *s);
+ explicit AutonomousActor(::frc971::autonomous::AutonomousActionQueueGroup *s);
- bool RunAction(const actors::AutonomousActionParams ¶ms) override;
+ bool RunAction(
+ const ::frc971::autonomous::AutonomousActionParams ¶ms) override;
private:
- void WaitUntilDoneOrCanceled(::std::unique_ptr<aos::common::actions::Action>
- action);
+ // TODO(phil): Implement this.
};
-typedef ::aos::common::actions::TypedAction<AutonomousActionQueueGroup>
- AutonomousAction;
-
-// Makes a new AutonomousActor action.
-::std::unique_ptr<AutonomousAction> MakeAutonomousAction(
- const ::y2017::actors::AutonomousActionParams ¶ms);
-
} // namespace actors
} // namespace y2017
diff --git a/y2017/actors/autonomous_actor_main.cc b/y2017/actors/autonomous_actor_main.cc
index 21c7e7a..eb18c58 100644
--- a/y2017/actors/autonomous_actor_main.cc
+++ b/y2017/actors/autonomous_actor_main.cc
@@ -1,14 +1,14 @@
#include <stdio.h>
#include "aos/linux_code/init.h"
-#include "y2017/actors/autonomous_action.q.h"
+#include "frc971/autonomous/auto.q.h"
#include "y2017/actors/autonomous_actor.h"
int main(int /*argc*/, char * /*argv*/ []) {
::aos::Init(-1);
::y2017::actors::AutonomousActor autonomous(
- &::y2017::actors::autonomous_action);
+ &::frc971::autonomous::autonomous_action);
autonomous.Run();
::aos::Cleanup();
diff --git a/y2017/wpilib_interface.cc b/y2017/wpilib_interface.cc
index cf2dcad..b8fdd62 100644
--- a/y2017/wpilib_interface.cc
+++ b/y2017/wpilib_interface.cc
@@ -31,11 +31,11 @@
#include "aos/common/messages/robot_state.q.h"
#include "aos/common/commonmath.h"
+#include "frc971/autonomous/auto.q.h"
#include "frc971/control_loops/control_loops.q.h"
#include "frc971/control_loops/drivetrain/drivetrain.q.h"
#include "y2017/constants.h"
#include "y2017/control_loops/superstructure/superstructure.q.h"
-#include "y2017/actors/autonomous_action.q.h"
#include "frc971/wpilib/wpilib_robot_base.h"
#include "frc971/wpilib/joystick_sender.h"
@@ -354,7 +354,7 @@
}
{
- auto auto_mode_message = ::y2017::actors::auto_mode.MakeMessage();
+ auto auto_mode_message = ::frc971::autonomous::auto_mode.MakeMessage();
auto_mode_message->mode = 0;
for (size_t i = 0; i < autonomous_modes_.size(); ++i) {
if (autonomous_modes_[i]->Get()) {