blob: be38e3165fe87670d9b79bbbb7b38749db35aa9a [file] [log] [blame]
Nikolai Sohmers3cc1fc22024-05-04 12:27:58 -07001#include "y2024_swerve/swerve_publisher_lib.h"
Maxwell Hendersonf63a0d92023-06-24 14:49:51 -07002
Nikolai Sohmers3cc1fc22024-05-04 12:27:58 -07003y2024_swerve::SwervePublisher::SwervePublisher(aos::EventLoop *event_loop,
4 aos::ExitHandle *exit_handle,
5 const std::string &filename,
6 double duration)
James Kuszmauleaba6d92024-07-31 20:42:20 -07007 : drivetrain_goal_sender_(
8 event_loop->MakeSender<frc971::control_loops::swerve::GoalStatic>(
Nikolai Sohmers3f2a5072024-06-08 14:05:59 -07009 "/drivetrain")) {
Maxwell Hendersonf63a0d92023-06-24 14:49:51 -070010 event_loop
11 ->AddTimer([this, filename]() {
James Kuszmauleaba6d92024-07-31 20:42:20 -070012 auto goal_builder = drivetrain_goal_sender_.MakeStaticBuilder();
Maxwell Hendersonf63a0d92023-06-24 14:49:51 -070013
James Kuszmauleaba6d92024-07-31 20:42:20 -070014 auto drivetrain_goal =
15 aos::JsonFileToFlatbuffer<frc971::control_loops::swerve::Goal>(
Nikolai Sohmers3f2a5072024-06-08 14:05:59 -070016 filename);
James Kuszmauleaba6d92024-07-31 20:42:20 -070017 CHECK(drivetrain_goal.Verify());
18 CHECK(goal_builder->FromFlatbuffer(&drivetrain_goal.message()));
Maxwell Hendersonf63a0d92023-06-24 14:49:51 -070019
James Kuszmauleaba6d92024-07-31 20:42:20 -070020 goal_builder.CheckOk(goal_builder.Send());
Maxwell Hendersonf63a0d92023-06-24 14:49:51 -070021 })
22 ->Schedule(event_loop->monotonic_now(),
23 std::chrono::duration_cast<aos::monotonic_clock::duration>(
24 std::chrono::milliseconds(5)));
James Kuszmauleaba6d92024-07-31 20:42:20 -070025 event_loop->AddTimer([exit_handle]() { exit_handle->Exit(); })
Maxwell Hendersonf63a0d92023-06-24 14:49:51 -070026 ->Schedule(event_loop->monotonic_now() +
27 std::chrono::milliseconds((int)duration));
28}
James Kuszmauleaba6d92024-07-31 20:42:20 -070029y2024_swerve::SwervePublisher::~SwervePublisher() {
30 auto builder = drivetrain_goal_sender_.MakeStaticBuilder();
31
32 for (auto module_goal :
33 {builder->add_front_left_goal(), builder->add_front_right_goal(),
34 builder->add_back_left_goal(), builder->add_back_right_goal()}) {
35 module_goal->set_rotation_angle(0.0);
36 module_goal->set_translation_control_type_goal(
37 frc971::control_loops::swerve::TranslationControlTypeGoal::CURRENT);
38 module_goal->set_translation_current(0.0);
39 }
40 builder.CheckOk(builder.Send());
41}