Nikolai Sohmers | 3cc1fc2 | 2024-05-04 12:27:58 -0700 | [diff] [blame] | 1 | #include "y2024_swerve/swerve_publisher_lib.h" |
Maxwell Henderson | f63a0d9 | 2023-06-24 14:49:51 -0700 | [diff] [blame] | 2 | |
Nikolai Sohmers | 3cc1fc2 | 2024-05-04 12:27:58 -0700 | [diff] [blame] | 3 | y2024_swerve::SwervePublisher::SwervePublisher(aos::EventLoop *event_loop, |
| 4 | aos::ExitHandle *exit_handle, |
| 5 | const std::string &filename, |
| 6 | double duration) |
James Kuszmaul | eaba6d9 | 2024-07-31 20:42:20 -0700 | [diff] [blame] | 7 | : drivetrain_goal_sender_( |
| 8 | event_loop->MakeSender<frc971::control_loops::swerve::GoalStatic>( |
Nikolai Sohmers | 3f2a507 | 2024-06-08 14:05:59 -0700 | [diff] [blame] | 9 | "/drivetrain")) { |
Maxwell Henderson | f63a0d9 | 2023-06-24 14:49:51 -0700 | [diff] [blame] | 10 | event_loop |
| 11 | ->AddTimer([this, filename]() { |
James Kuszmaul | eaba6d9 | 2024-07-31 20:42:20 -0700 | [diff] [blame] | 12 | auto goal_builder = drivetrain_goal_sender_.MakeStaticBuilder(); |
Maxwell Henderson | f63a0d9 | 2023-06-24 14:49:51 -0700 | [diff] [blame] | 13 | |
James Kuszmaul | eaba6d9 | 2024-07-31 20:42:20 -0700 | [diff] [blame] | 14 | auto drivetrain_goal = |
| 15 | aos::JsonFileToFlatbuffer<frc971::control_loops::swerve::Goal>( |
Nikolai Sohmers | 3f2a507 | 2024-06-08 14:05:59 -0700 | [diff] [blame] | 16 | filename); |
James Kuszmaul | eaba6d9 | 2024-07-31 20:42:20 -0700 | [diff] [blame] | 17 | CHECK(drivetrain_goal.Verify()); |
| 18 | CHECK(goal_builder->FromFlatbuffer(&drivetrain_goal.message())); |
Maxwell Henderson | f63a0d9 | 2023-06-24 14:49:51 -0700 | [diff] [blame] | 19 | |
James Kuszmaul | eaba6d9 | 2024-07-31 20:42:20 -0700 | [diff] [blame] | 20 | goal_builder.CheckOk(goal_builder.Send()); |
Maxwell Henderson | f63a0d9 | 2023-06-24 14:49:51 -0700 | [diff] [blame] | 21 | }) |
| 22 | ->Schedule(event_loop->monotonic_now(), |
| 23 | std::chrono::duration_cast<aos::monotonic_clock::duration>( |
| 24 | std::chrono::milliseconds(5))); |
James Kuszmaul | eaba6d9 | 2024-07-31 20:42:20 -0700 | [diff] [blame] | 25 | event_loop->AddTimer([exit_handle]() { exit_handle->Exit(); }) |
Maxwell Henderson | f63a0d9 | 2023-06-24 14:49:51 -0700 | [diff] [blame] | 26 | ->Schedule(event_loop->monotonic_now() + |
| 27 | std::chrono::milliseconds((int)duration)); |
| 28 | } |
James Kuszmaul | eaba6d9 | 2024-07-31 20:42:20 -0700 | [diff] [blame] | 29 | y2024_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 | } |