@@ -1010,3 +1010,88 @@ TEST_F(SensorFusionTest, breakbeam_fail_test_ssl)
10101010 // did it not use robot position
10111011 EXPECT_TRUE (ball_position != robot_state.position ());
10121012}
1013+
1014+ TEST_F (SensorFusionTest, breakbeam_in_robot_test)
1015+ {
1016+ // Check that breakbeam status is propagated to the Robot
1017+ SensorProto sensor_msg;
1018+
1019+ std::unique_ptr<SSLProto::SSL_DetectionFrame> frame = initDetectionFrame ();
1020+ std::unique_ptr<SSLProto::SSL_DetectionFrame> frame_2 =
1021+ initDetectionFrameWithFutureTime ();
1022+ // creating robot status
1023+ auto robot_msg = std::make_unique<TbotsProto::RobotStatus>();
1024+ robot_msg->set_robot_id (2 );
1025+
1026+ auto power_status_msg = std::make_unique<TbotsProto::PowerStatus>();
1027+ power_status_msg->set_breakbeam_tripped (true );
1028+ *(robot_msg->mutable_power_status ()) = *power_status_msg;
1029+
1030+ auto geometry_data = initSSLDivBGeomData ();
1031+
1032+ // use frame 1 to create sensor_msg
1033+ auto ssl_wrapper_packet =
1034+ createSSLWrapperPacket (std::move (geometry_data), std::move (frame));
1035+ *(sensor_msg.mutable_ssl_vision_msg ()) = *ssl_wrapper_packet;
1036+ *(sensor_msg.add_robot_status_msgs ()) = *robot_msg;
1037+ sensor_fusion.processSensorProto (sensor_msg);
1038+
1039+ // use frame 2 that is at a future time to give sensor fusion
1040+ // a chance to use the breakbeam id it got from the previous sensor proto
1041+ auto ssl_wrapper_packet_2 =
1042+ createSSLWrapperPacket (std::move (geometry_data), std::move (frame_2));
1043+ *(sensor_msg.mutable_ssl_vision_msg ()) = *ssl_wrapper_packet_2;
1044+ sensor_fusion.processSensorProto (sensor_msg);
1045+
1046+
1047+ std::optional<World> current_world = sensor_fusion.getWorld ();
1048+ bool breakbeam_tripped =
1049+ current_world.value ().friendlyTeam ().getRobotById (2 )->breakbeamTripped ();
1050+
1051+ // is the breakbeam_tripped on the robot
1052+ EXPECT_TRUE (breakbeam_tripped);
1053+ }
1054+
1055+
1056+ TEST_F (SensorFusionTest, breakbeam_not_in_robot_test)
1057+ {
1058+ // Check that breakbeam status is false when propagated to the Robot
1059+ SensorProto sensor_msg;
1060+
1061+ std::unique_ptr<SSLProto::SSL_DetectionFrame> frame = initDetectionFrame ();
1062+ std::unique_ptr<SSLProto::SSL_DetectionFrame> frame_2 =
1063+ initDetectionFrameWithFutureTime ();
1064+ // creating robot status
1065+ auto robot_msg = std::make_unique<TbotsProto::RobotStatus>();
1066+ robot_msg->set_robot_id (2 );
1067+
1068+ auto power_status_msg = std::make_unique<TbotsProto::PowerStatus>();
1069+ power_status_msg->set_breakbeam_tripped (false );
1070+ *(robot_msg->mutable_power_status ()) = *power_status_msg;
1071+
1072+ // create ssl wrapper packet
1073+ auto geometry_data = initSSLDivBGeomData ();
1074+
1075+
1076+ // use frame 1 to create sensor_msg
1077+ auto ssl_wrapper_packet =
1078+ createSSLWrapperPacket (std::move (geometry_data), std::move (frame));
1079+ *(sensor_msg.mutable_ssl_vision_msg ()) = *ssl_wrapper_packet;
1080+ *(sensor_msg.add_robot_status_msgs ()) = *robot_msg;
1081+ sensor_fusion.processSensorProto (sensor_msg);
1082+
1083+ // use frame 2 that is at a future time to give sensor fusion
1084+ // a chance to use the breakbeam id it got from the previous sensor proto
1085+ auto ssl_wrapper_packet_2 =
1086+ createSSLWrapperPacket (std::move (geometry_data), std::move (frame_2));
1087+ *(sensor_msg.mutable_ssl_vision_msg ()) = *ssl_wrapper_packet_2;
1088+ sensor_fusion.processSensorProto (sensor_msg);
1089+
1090+
1091+ std::optional<World> current_world = sensor_fusion.getWorld ();
1092+ bool breakbeam_tripped =
1093+ current_world.value ().friendlyTeam ().getRobotById (2 )->breakbeamTripped ();
1094+
1095+ // is the break_beam correct
1096+ EXPECT_FALSE (breakbeam_tripped);
1097+ }
0 commit comments