Merge "actually support running non-realtime on not-robots"
diff --git a/frc971/actors/actors.gyp b/frc971/actors/actors.gyp
index 951a590..90b57b2 100644
--- a/frc971/actors/actors.gyp
+++ b/frc971/actors/actors.gyp
@@ -258,6 +258,53 @@
],
},
{
+ 'target_name': 'lift_action_queue',
+ 'type': 'static_library',
+ 'sources': ['lift_action.q'],
+ 'variables': {
+ 'header_path': 'frc971/actors',
+ },
+ 'dependencies': [
+ '<(AOS)/common/actions/actions.gyp:action_queue',
+ ],
+ 'export_dependent_settings': [
+ '<(AOS)/common/actions/actions.gyp:action_queue',
+ ],
+ 'includes': ['../../aos/build/queues.gypi'],
+ },
+ {
+ 'target_name': 'lift_action_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'lift_actor.cc',
+ ],
+ 'dependencies': [
+ 'fridge_profile_action_lib',
+ 'lift_action_queue',
+ '<(AOS)/build/aos.gyp:logging',
+ '<(AOS)/common/actions/actions.gyp:action_lib',
+ '<(DEPTH)/frc971/frc971.gyp:constants',
+ '<(DEPTH)/frc971/control_loops/claw/claw.gyp:claw_queue',
+ ],
+ 'export_dependent_settings': [
+ '<(AOS)/common/actions/actions.gyp:action_lib',
+ 'lift_action_queue',
+ ],
+ },
+ {
+ 'target_name': 'lift_action',
+ 'type': 'executable',
+ 'sources': [
+ 'lift_actor_main.cc',
+ ],
+ 'dependencies': [
+ '<(AOS)/linux_code/linux_code.gyp:init',
+ '<(AOS)/common/actions/actions.gyp:action_lib',
+ 'lift_action_queue',
+ 'lift_action_lib',
+ ],
+ },
+ {
'target_name': 'claw_action_queue',
'type': 'static_library',
'sources': ['claw_action.q'],
diff --git a/frc971/actors/lift_action.q b/frc971/actors/lift_action.q
new file mode 100644
index 0000000..10e169c
--- /dev/null
+++ b/frc971/actors/lift_action.q
@@ -0,0 +1,25 @@
+package frc971.actors;
+
+import "aos/common/actions/actions.q";
+
+// Parameters to send with start.
+struct LiftParams {
+ // Lift height
+ double lift_height;
+ // Arm goal.
+ double lift_arm;
+};
+
+queue_group LiftActionQueueGroup {
+ implements aos.common.actions.ActionQueueGroup;
+
+ message Goal {
+ uint32_t run;
+ LiftParams params;
+ };
+
+ queue Goal goal;
+ queue aos.common.actions.Status status;
+};
+
+queue_group LiftActionQueueGroup lift_action;
diff --git a/frc971/actors/lift_actor.cc b/frc971/actors/lift_actor.cc
new file mode 100644
index 0000000..8e8de47
--- /dev/null
+++ b/frc971/actors/lift_actor.cc
@@ -0,0 +1,63 @@
+#include <math.h>
+
+#include "aos/common/time.h"
+#include "frc971/actors/lift_actor.h"
+#include "frc971/actors/fridge_profile_actor.h"
+#include "frc971/constants.h"
+#include "frc971/control_loops/claw/claw.q.h"
+
+namespace frc971 {
+namespace actors {
+namespace {
+
+static constexpr double kArmVelocity = 0.40;
+static constexpr double kArmAcceleration = 1.0;
+static constexpr double kElevatorVelocity = 0.5;
+static constexpr double kElevatorAcceleration = 2.2;
+
+} // namespace
+
+LiftActor::LiftActor(LiftActionQueueGroup *queues)
+ : aos::common::actions::ActorBase<LiftActionQueueGroup>(queues) {}
+
+namespace {
+
+void DoProfile(double height, double angle, bool grabbers) {
+ FridgeProfileParams params;
+
+ params.elevator_height = height;
+ params.elevator_max_velocity = kElevatorVelocity;
+ params.elevator_max_acceleration = kElevatorAcceleration;
+
+ params.arm_angle = angle;
+ params.arm_max_velocity = kArmVelocity;
+ params.arm_max_acceleration = kArmAcceleration;
+
+ params.top_front_grabber = grabbers;
+ params.top_back_grabber = grabbers;
+ params.bottom_front_grabber = grabbers;
+ params.bottom_back_grabber = grabbers;
+
+ ::std::unique_ptr<FridgeAction> profile = MakeFridgeProfileAction(params);
+ profile->Start();
+ profile->WaitUntilDone();
+}
+
+} // namespace
+
+bool LiftActor::RunAction(const LiftParams ¶ms) {
+ // Lift the box straight up.
+ DoProfile(params.lift_height, 0.0, true);
+ // Move it back to the storage location.
+ DoProfile(params.lift_height, params.lift_arm, true);
+
+ return true;
+}
+
+::std::unique_ptr<LiftAction> MakeLiftAction(const LiftParams ¶ms) {
+ return ::std::unique_ptr<LiftAction>(
+ new LiftAction(&::frc971::actors::lift_action, params));
+}
+
+} // namespace actors
+} // namespace frc971
diff --git a/frc971/actors/lift_actor.h b/frc971/actors/lift_actor.h
new file mode 100644
index 0000000..5f5f57e
--- /dev/null
+++ b/frc971/actors/lift_actor.h
@@ -0,0 +1,30 @@
+#ifndef FRC971_ACTORS_LIFT_ACTOR_H_
+#define FRC971_ACTORS_LIFT_ACTOR_H_
+
+#include <stdint.h>
+
+#include <memory>
+
+#include "aos/common/actions/actions.h"
+#include "aos/common/actions/actor.h"
+#include "frc971/actors/lift_action.q.h"
+
+namespace frc971 {
+namespace actors {
+
+class LiftActor : public aos::common::actions::ActorBase<LiftActionQueueGroup> {
+ public:
+ explicit LiftActor(LiftActionQueueGroup *queues);
+
+ bool RunAction(const LiftParams ¶ms) override;
+};
+
+typedef aos::common::actions::TypedAction<LiftActionQueueGroup> LiftAction;
+
+// Makes a new LiftActor action.
+::std::unique_ptr<LiftAction> MakeLiftAction(const LiftParams ¶ms);
+
+} // namespace actors
+} // namespace frc971
+
+#endif // FRC971_ACTORS_LIFT_ACTOR_H_
diff --git a/frc971/actors/lift_actor_main.cc b/frc971/actors/lift_actor_main.cc
new file mode 100644
index 0000000..792f535
--- /dev/null
+++ b/frc971/actors/lift_actor_main.cc
@@ -0,0 +1,15 @@
+#include <stdio.h>
+
+#include "aos/linux_code/init.h"
+#include "frc971/actors/lift_action.q.h"
+#include "frc971/actors/lift_actor.h"
+
+int main(int /*argc*/, char* /*argv*/ []) {
+ ::aos::Init();
+
+ ::frc971::actors::LiftActor lift(&::frc971::actors::lift_action);
+ lift.Run();
+
+ ::aos::Cleanup();
+ return 0;
+}
diff --git a/frc971/prime/prime.gyp b/frc971/prime/prime.gyp
index 4e12914..baeb5a1 100644
--- a/frc971/prime/prime.gyp
+++ b/frc971/prime/prime.gyp
@@ -25,6 +25,7 @@
'../actors/actors.gyp:score_action',
'../actors/actors.gyp:score_action_test',
'../actors/actors.gyp:stack_action',
+ '../actors/actors.gyp:lift_action',
'../actors/actors.gyp:intake_action',
'../actors/actors.gyp:intake_action_test',
'../actors/actors.gyp:claw_action_test',