Load spline jsons for autonomous
Change-Id: I70f495255210eb5c9cfe041332ee8723cfcf1e2f
diff --git a/y2020/BUILD b/y2020/BUILD
index a759681..63034ae 100644
--- a/y2020/BUILD
+++ b/y2020/BUILD
@@ -11,6 +11,9 @@
data = [
":config",
],
+ dirs = [
+ "//y2020/actors:splines"
+ ],
start_binaries = [
"//aos/events/logging:logger_main",
":joystick_reader",
diff --git a/y2020/actors/BUILD b/y2020/actors/BUILD
index fee0196..434b8db 100644
--- a/y2020/actors/BUILD
+++ b/y2020/actors/BUILD
@@ -1,3 +1,5 @@
+load("//frc971/downloader:downloader.bzl", "aos_downloader_dir")
+
filegroup(
name = "binaries.stripped",
srcs = [
@@ -14,6 +16,24 @@
visibility = ["//visibility:public"],
)
+filegroup(
+ name = "spline_jsons",
+ srcs = glob([
+ "splines/*.json"
+ ]),
+ visibility = ["//visibility:public"],
+)
+
+aos_downloader_dir(
+ name = "splines",
+ srcs = [
+ ":spline_jsons",
+ ],
+ dir = "splines",
+ target_compatible_with = ["@platforms//os:linux"],
+ visibility = ["//visibility:public"],
+)
+
cc_library(
name = "autonomous_action_lib",
srcs = [
diff --git a/y2020/actors/auto_splines.h b/y2020/actors/auto_splines.h
index 96f055f..5ea1748 100644
--- a/y2020/actors/auto_splines.h
+++ b/y2020/actors/auto_splines.h
@@ -2,6 +2,7 @@
#define y2020_ACTORS_AUTO_SPLINES_H_
#include "aos/events/event_loop.h"
+#include "aos/flatbuffer_merge.h"
#include "aos/robot_state/joystick_state_generated.h"
#include "frc971/control_loops/control_loops_generated.h"
#include "frc971/control_loops/drivetrain/drivetrain_goal_generated.h"
@@ -17,11 +18,24 @@
class AutonomousSplines {
public:
+ AutonomousSplines()
+ : test_spline_(aos::JsonFileToFlatbuffer<frc971::MultiSpline>(
+ "splines/test_spline.json")) {}
+
static flatbuffers::Offset<frc971::MultiSpline> BasicSSpline(
aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder,
aos::Alliance alliance);
static flatbuffers::Offset<frc971::MultiSpline> StraightLine(
aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder);
+
+ flatbuffers::Offset<frc971::MultiSpline> TestSpline(
+ aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder *builder) {
+ return aos::CopyFlatBuffer<frc971::MultiSpline>(test_spline_,
+ builder->fbb());
+ }
+
+ private:
+ aos::FlatbufferDetachedBuffer<frc971::MultiSpline> test_spline_;
};
} // namespace actors
diff --git a/y2020/actors/autonomous_actor.cc b/y2020/actors/autonomous_actor.cc
index fdf7ada..752ba95 100644
--- a/y2020/actors/autonomous_actor.cc
+++ b/y2020/actors/autonomous_actor.cc
@@ -8,8 +8,8 @@
#include "aos/logging/logging.h"
#include "aos/util/math.h"
#include "frc971/control_loops/drivetrain/localizer_generated.h"
-#include "y2020/control_loops/drivetrain/drivetrain_base.h"
#include "y2020/actors/auto_splines.h"
+#include "y2020/control_loops/drivetrain/drivetrain_base.h"
DEFINE_bool(spline_auto, true, "If true, define a spline autonomous mode");
@@ -24,11 +24,13 @@
AutonomousActor::AutonomousActor(::aos::EventLoop *event_loop)
: frc971::autonomous::BaseAutonomousActor(
event_loop, control_loops::drivetrain::GetDrivetrainConfig()),
- localizer_control_sender_(event_loop->MakeSender<
- ::frc971::control_loops::drivetrain::LocalizerControl>(
- "/drivetrain")),
+ localizer_control_sender_(
+ event_loop->MakeSender<
+ ::frc971::control_loops::drivetrain::LocalizerControl>(
+ "/drivetrain")),
joystick_state_fetcher_(
- event_loop->MakeFetcher<aos::JoystickState>("/aos")) {
+ event_loop->MakeFetcher<aos::JoystickState>("/aos")),
+ auto_splines_() {
set_max_drivetrain_voltage(2.0);
}
@@ -84,9 +86,10 @@
}
void AutonomousActor::SplineAuto() {
- SplineHandle spline1 = PlanSpline(std::bind(AutonomousSplines::BasicSSpline,
- std::placeholders::_1, alliance_),
- SplineDirection::kForward);
+ SplineHandle spline1 = PlanSpline(
+ [this](aos::Sender<frc971::control_loops::drivetrain::Goal>::Builder
+ *builder) { return auto_splines_.TestSpline(builder); },
+ SplineDirection::kForward);
if (!spline1.WaitForPlan()) return;
spline1.Start();
diff --git a/y2020/actors/autonomous_actor.h b/y2020/actors/autonomous_actor.h
index 4ad04d2..a58e3f9 100644
--- a/y2020/actors/autonomous_actor.h
+++ b/y2020/actors/autonomous_actor.h
@@ -7,6 +7,7 @@
#include "frc971/control_loops/control_loops_generated.h"
#include "frc971/control_loops/drivetrain/drivetrain_config.h"
#include "frc971/control_loops/drivetrain/localizer_generated.h"
+#include "y2020/actors/auto_splines.h"
namespace y2020 {
namespace actors {
@@ -27,6 +28,7 @@
localizer_control_sender_;
aos::Fetcher<aos::JoystickState> joystick_state_fetcher_;
aos::Alliance alliance_ = aos::Alliance::kInvalid;
+ AutonomousSplines auto_splines_;
};
} // namespace actors
diff --git a/y2020/actors/splines/left_curve.json b/y2020/actors/splines/left_curve.json
new file mode 100644
index 0000000..1b54455
--- /dev/null
+++ b/y2020/actors/splines/left_curve.json
@@ -0,0 +1 @@
+{"spline_count": 1, "spline_x": [-5.265658676891484, -4.506548152324582, -3.9768989099928174, -3.455392453356026, -2.7826532359982323, -2.197294440050362], "spline_y": [-0.18454159151187616, -0.14940533686866445, -0.23880801776223934, -0.23880801776223934, 0.055956793313775184, 0.5131957091906839], "constraints": [{"constraint_type": "LONGITUDINAL_ACCELERATION", "value": 3}, {"constraint_type": "LATERAL_ACCELERATION", "value": 2}, {"constraint_type": "VOLTAGE", "value": 10}]}
\ No newline at end of file
diff --git a/y2020/actors/splines/test_spline.json b/y2020/actors/splines/test_spline.json
new file mode 100644
index 0000000..733d516
--- /dev/null
+++ b/y2020/actors/splines/test_spline.json
@@ -0,0 +1 @@
+{"spline_count": 1, "spline_x": [0, 0.4, 0.4, 0.6, 0.6, 1.0], "spline_y": [0, 0, 0.05, 0.1, 0.15, 0.15], "constraints": [{"constraint_type": "LONGITUDINAL_ACCELERATION", "value": 1}, {"constraint_type": "LATERAL_ACCELERATION", "value": 1}, {"constraint_type": "VOLTAGE", "value": 2}]}