From a087fb20ea20447930e08a6c5b9440864bd4ae8f Mon Sep 17 00:00:00 2001 From: Jorn Date: Sat, 31 Aug 2024 21:39:54 +0200 Subject: [PATCH 1/2] Delete unused proto from roboteam networking --- roboteam_networking/proto/CMakeLists.txt | 4 --- ...messages_robocup_ssl_geometry_legacy.proto | 29 --------------- .../messages_robocup_ssl_wrapper_legacy.proto | 10 ------ .../proto/ssl_simulation_synchronous.proto | 25 ------------- .../proto/ssl_vision_detection.proto | 33 ----------------- .../proto/ssl_simulation_synchronous.proto | 27 -------------- .../proto/ssl_vision_detection.proto | 35 ------------------- 7 files changed, 163 deletions(-) delete mode 100644 roboteam_networking/proto/messages_robocup_ssl_geometry_legacy.proto delete mode 100644 roboteam_networking/proto/messages_robocup_ssl_wrapper_legacy.proto delete mode 100644 roboteam_networking/proto/ssl_simulation_synchronous.proto delete mode 100644 roboteam_networking/proto/ssl_vision_detection.proto delete mode 100644 roboteam_robothub/simulation_proto/proto/ssl_simulation_synchronous.proto delete mode 100644 roboteam_robothub/simulation_proto/proto/ssl_vision_detection.proto diff --git a/roboteam_networking/proto/CMakeLists.txt b/roboteam_networking/proto/CMakeLists.txt index aefd89a31..c5ce436ce 100644 --- a/roboteam_networking/proto/CMakeLists.txt +++ b/roboteam_networking/proto/CMakeLists.txt @@ -4,10 +4,8 @@ protobuf_generate_cpp(NET_PROTO_SRCS NET_PROTO_HDRS "messages_robocup_ssl_game_controller_geometry.proto" "messages_robocup_ssl_game_event.proto" "messages_robocup_ssl_geometry.proto" - "messages_robocup_ssl_geometry_legacy.proto" "messages_robocup_ssl_referee.proto" "messages_robocup_ssl_wrapper.proto" - "messages_robocup_ssl_wrapper_legacy.proto" # Messages from ssl-simulation-control https://github.com/RoboCup-SSL/ssl-simulation-protocol/ "ssl_gc_common.proto" @@ -16,8 +14,6 @@ protobuf_generate_cpp(NET_PROTO_SRCS NET_PROTO_HDRS "ssl_simulation_error.proto" "ssl_simulation_robot_control.proto" "ssl_simulation_robot_feedback.proto" - "ssl_simulation_synchronous.proto" - "ssl_vision_detection.proto" "ssl_vision_geometry.proto" "RobotCommands.proto" diff --git a/roboteam_networking/proto/messages_robocup_ssl_geometry_legacy.proto b/roboteam_networking/proto/messages_robocup_ssl_geometry_legacy.proto deleted file mode 100644 index 6a572f32a..000000000 --- a/roboteam_networking/proto/messages_robocup_ssl_geometry_legacy.proto +++ /dev/null @@ -1,29 +0,0 @@ -syntax = "proto2"; -import "messages_robocup_ssl_geometry.proto"; - -package proto.RoboCup2014Legacy.Geometry; - -message SSL_GeometryFieldSize { - required int32 line_width = 1; - required int32 field_length = 2; - required int32 field_width = 3; - required int32 boundary_width = 4; - required int32 referee_width = 5; - required int32 goal_width = 6; - required int32 goal_depth = 7; - required int32 goal_wall_width = 8; - required int32 center_circle_radius = 9; - required int32 defense_radius = 10; - required int32 defense_stretch = 11; - required int32 free_kick_from_defense_dist = 12; - required int32 penalty_spot_from_field_line_dist = 13; - required int32 penalty_line_from_spot_dist = 14; -} - -// SSL_GeometryCameraCalibration is identical to the one defined in -// messages_robocup_ssl_geometry.proto . - -message SSL_GeometryData { - required SSL_GeometryFieldSize field = 1; - repeated SSL_GeometryCameraCalibration calib = 2; -} \ No newline at end of file diff --git a/roboteam_networking/proto/messages_robocup_ssl_wrapper_legacy.proto b/roboteam_networking/proto/messages_robocup_ssl_wrapper_legacy.proto deleted file mode 100644 index ea3fd6302..000000000 --- a/roboteam_networking/proto/messages_robocup_ssl_wrapper_legacy.proto +++ /dev/null @@ -1,10 +0,0 @@ -syntax = "proto3"; -package proto.RoboCup2014Legacy.Wrapper; - -import "messages_robocup_ssl_detection.proto"; -import "messages_robocup_ssl_geometry_legacy.proto"; - -message SSL_WrapperPacket { - SSL_DetectionFrame detection = 1; - RoboCup2014Legacy.Geometry.SSL_GeometryData geometry = 2; -} \ No newline at end of file diff --git a/roboteam_networking/proto/ssl_simulation_synchronous.proto b/roboteam_networking/proto/ssl_simulation_synchronous.proto deleted file mode 100644 index b8dde5dd4..000000000 --- a/roboteam_networking/proto/ssl_simulation_synchronous.proto +++ /dev/null @@ -1,25 +0,0 @@ -syntax = "proto2"; -option go_package = "github.com/RoboCup-SSL/ssl-simulation-protocol/pkg/sim"; - -import "ssl_vision_detection.proto"; -import "ssl_simulation_robot_feedback.proto"; -import "ssl_simulation_robot_control.proto"; -import "ssl_simulation_control.proto"; - -// Request from the team to the simulator -message SimulationSyncRequest { - // The simulation step [s] to perform - optional float sim_step = 1; - // An optional simulator command - optional SimulatorCommand simulator_command = 2; - // An optional robot control command - optional RobotControl robot_control = 3; -} - -// Response to last SimulationSyncRequest -message SimulationSyncResponse { - // List of detection frames for all cameras with the state after the simulation step in the request was performed - repeated SSL_DetectionFrame detection = 1; - // An optional robot control response - optional RobotControlResponse robot_control_response = 2; -} diff --git a/roboteam_networking/proto/ssl_vision_detection.proto b/roboteam_networking/proto/ssl_vision_detection.proto deleted file mode 100644 index ab3109cde..000000000 --- a/roboteam_networking/proto/ssl_vision_detection.proto +++ /dev/null @@ -1,33 +0,0 @@ -syntax = "proto2"; -option go_package = "github.com/RoboCup-SSL/ssl-simulation-protocol/pkg/sim"; - -message SSL_DetectionBall { - required float confidence = 1; - optional uint32 area = 2; - required float x = 3; - required float y = 4; - optional float z = 5; - required float pixel_x = 6; - required float pixel_y = 7; -} - -message SSL_DetectionRobot { - required float confidence = 1; - optional uint32 robot_id = 2; - required float x = 3; - required float y = 4; - optional float orientation = 5; - required float pixel_x = 6; - required float pixel_y = 7; - optional float height = 8; -} - -message SSL_DetectionFrame { - required uint32 frame_number = 1; - required double t_capture = 2; - required double t_sent = 3; - required uint32 camera_id = 4; - repeated SSL_DetectionBall balls = 5; - repeated SSL_DetectionRobot robots_yellow = 6; - repeated SSL_DetectionRobot robots_blue = 7; -} \ No newline at end of file diff --git a/roboteam_robothub/simulation_proto/proto/ssl_simulation_synchronous.proto b/roboteam_robothub/simulation_proto/proto/ssl_simulation_synchronous.proto deleted file mode 100644 index 3f5501a7b..000000000 --- a/roboteam_robothub/simulation_proto/proto/ssl_simulation_synchronous.proto +++ /dev/null @@ -1,27 +0,0 @@ -syntax = "proto2"; -option go_package = "github.com/RoboCup-SSL/ssl-simulation-protocol/pkg/sim"; - -package proto.simulation; - -import "ssl_vision_detection.proto"; -import "ssl_simulation_robot_feedback.proto"; -import "ssl_simulation_robot_control.proto"; -import "ssl_simulation_control.proto"; - -// Request from the team to the simulator -message SimulationSyncRequest { - // The simulation step [s] to perform - optional float sim_step = 1; - // An optional simulator command - optional SimulatorCommand simulator_command = 2; - // An optional robot control command - optional RobotControl robot_control = 3; -} - -// Response to last SimulationSyncRequest -message SimulationSyncResponse { - // List of detection frames for all cameras with the state after the simulation step in the request was performed - repeated SSL_DetectionFrame detection = 1; - // An optional robot control response - optional RobotControlResponse robot_control_response = 2; -} diff --git a/roboteam_robothub/simulation_proto/proto/ssl_vision_detection.proto b/roboteam_robothub/simulation_proto/proto/ssl_vision_detection.proto deleted file mode 100644 index 9e35b82eb..000000000 --- a/roboteam_robothub/simulation_proto/proto/ssl_vision_detection.proto +++ /dev/null @@ -1,35 +0,0 @@ -syntax = "proto2"; -option go_package = "github.com/RoboCup-SSL/ssl-simulation-protocol/pkg/sim"; - -package proto.simulation; - -message SSL_DetectionBall { - required float confidence = 1; - optional uint32 area = 2; - required float x = 3; - required float y = 4; - optional float z = 5; - required float pixel_x = 6; - required float pixel_y = 7; -} - -message SSL_DetectionRobot { - required float confidence = 1; - optional uint32 robot_id = 2; - required float x = 3; - required float y = 4; - optional float orientation = 5; - required float pixel_x = 6; - required float pixel_y = 7; - optional float height = 8; -} - -message SSL_DetectionFrame { - required uint32 frame_number = 1; - required double t_capture = 2; - required double t_sent = 3; - required uint32 camera_id = 4; - repeated SSL_DetectionBall balls = 5; - repeated SSL_DetectionRobot robots_yellow = 6; - repeated SSL_DetectionRobot robots_blue = 7; -} From 95642b7416037054c96f36cbc54ed6aa5fe37b19 Mon Sep 17 00:00:00 2001 From: Jorn Date: Sat, 31 Aug 2024 22:30:09 +0200 Subject: [PATCH 2/2] Update proto from roboteam networking --- .../stp/computations/PositionComputations.cpp | 3 +- roboteam_networking/proto/CMakeLists.txt | 1 + .../messages_robocup_ssl_detection.proto | 41 ++++++++++++--- ...s_robocup_ssl_game_controller_common.proto | 3 +- ...robocup_ssl_game_controller_geometry.proto | 3 +- .../messages_robocup_ssl_game_event.proto | 50 +++++-------------- .../proto/messages_robocup_ssl_geometry.proto | 17 ++++++- .../proto/messages_robocup_ssl_referee.proto | 6 +++ .../proto/ssl_vision_geometry.proto | 8 +-- 9 files changed, 75 insertions(+), 57 deletions(-) diff --git a/roboteam_ai/src/stp/computations/PositionComputations.cpp b/roboteam_ai/src/stp/computations/PositionComputations.cpp index 1ab2d1628..7822614be 100644 --- a/roboteam_ai/src/stp/computations/PositionComputations.cpp +++ b/roboteam_ai/src/stp/computations/PositionComputations.cpp @@ -342,7 +342,8 @@ void PositionComputations::calculateInfoForHarasser(std::unordered_mapget()->getPos()); bool theyAreBetween = (projectedPoint != world->getWorld()->getBall()->get()->position); - bool theyAreCloser = (enemyClosestToBall->get()->getPos() - world->getWorld()->getBall()->get()->position).length() < (stpInfos["harasser"].getRobot()->get()->getPos() - world->getWorld()->getBall()->get()->position).length(); + bool theyAreCloser = (enemyClosestToBall->get()->getPos() - world->getWorld()->getBall()->get()->position).length() < + (stpInfos["harasser"].getRobot()->get()->getPos() - world->getWorld()->getBall()->get()->position).length(); auto harasser = std::find_if(roles->begin(), roles->end(), [](const std::unique_ptr &role) { return role != nullptr && role->getName() == "harasser"; }); if (theyAreBetween && theyAreCloser) { auto enemyPos = enemyClosestToBall->get()->getPos(); diff --git a/roboteam_networking/proto/CMakeLists.txt b/roboteam_networking/proto/CMakeLists.txt index c5ce436ce..21aadda29 100644 --- a/roboteam_networking/proto/CMakeLists.txt +++ b/roboteam_networking/proto/CMakeLists.txt @@ -16,6 +16,7 @@ protobuf_generate_cpp(NET_PROTO_SRCS NET_PROTO_HDRS "ssl_simulation_robot_feedback.proto" "ssl_vision_geometry.proto" + # Our own messages "RobotCommands.proto" "RobotFeedback.proto" "State.proto" diff --git a/roboteam_networking/proto/messages_robocup_ssl_detection.proto b/roboteam_networking/proto/messages_robocup_ssl_detection.proto index 4441920ad..1f897fc22 100644 --- a/roboteam_networking/proto/messages_robocup_ssl_detection.proto +++ b/roboteam_networking/proto/messages_robocup_ssl_detection.proto @@ -3,32 +3,57 @@ syntax = "proto2"; package proto; message SSL_DetectionBall { + // Confidence in [0-1] of the detection required float confidence = 1; optional uint32 area = 2; + // X-coordinate in [mm] in global ssl-vision coordinate system required float x = 3; + // Y-coordinate in [mm] in global ssl-vision coordinate system required float y = 4; + // Z-coordinate in [mm] in global ssl-vision coordinate system + // Not supported by ssl-vision, but might be set by simulators optional float z = 5; + // X-coordinate in [pixel] in the image required float pixel_x = 6; + // Y-coordinate in [pixel] in the image required float pixel_y = 7; } message SSL_DetectionRobot { + // Confidence in [0-1] of the detection required float confidence = 1; + // Id of the robot optional uint32 robot_id = 2; + // X-coordinate in [mm] in global ssl-vision coordinate system required float x = 3; + // Y-coordinate in [mm] in global ssl-vision coordinate system required float y = 4; + // Orientation in [rad] optional float orientation = 5; + // X-coordinate in [pixel] in the image required float pixel_x = 6; + // Y-coordinate in [pixel] in the image required float pixel_y = 7; + // Height, as configured in ssl-vision for the respective team optional float height = 8; } message SSL_DetectionFrame { - required uint32 frame_number = 1; - required double t_capture = 2; - required double t_sent = 3; - required uint32 camera_id = 4; - repeated SSL_DetectionBall balls = 5; - repeated SSL_DetectionRobot robots_yellow = 6; - repeated SSL_DetectionRobot robots_blue = 7; -} \ No newline at end of file + // monotonously increasing frame number + required uint32 frame_number = 1; + // Unix timestamp in [seconds] at which the image has been received by ssl-vision + required double t_capture = 2; + // Unix timestamp in [seconds] at which this message has been sent to the network + required double t_sent = 3; + // Camera timestamp in [seconds] as reported by the camera, if supported + // This is not necessarily a unix timestamp + optional double t_capture_camera = 8; + // Identifier of the camera + required uint32 camera_id = 4; + // Detected balls + repeated SSL_DetectionBall balls = 5; + // Detected yellow robots + repeated SSL_DetectionRobot robots_yellow = 6; + // Detected blue robots + repeated SSL_DetectionRobot robots_blue = 7; +} diff --git a/roboteam_networking/proto/messages_robocup_ssl_game_controller_common.proto b/roboteam_networking/proto/messages_robocup_ssl_game_controller_common.proto index 902ae2ffa..2b41ddfe0 100644 --- a/roboteam_networking/proto/messages_robocup_ssl_game_controller_common.proto +++ b/roboteam_networking/proto/messages_robocup_ssl_game_controller_common.proto @@ -1,7 +1,8 @@ syntax = "proto2"; - package proto; +option go_package = "github.com/RoboCup-SSL/ssl-game-controller/internal/app/state"; + // Team is either blue or yellow enum Team { // team not set diff --git a/roboteam_networking/proto/messages_robocup_ssl_game_controller_geometry.proto b/roboteam_networking/proto/messages_robocup_ssl_game_controller_geometry.proto index 066f62939..24833bb9e 100644 --- a/roboteam_networking/proto/messages_robocup_ssl_game_controller_geometry.proto +++ b/roboteam_networking/proto/messages_robocup_ssl_game_controller_geometry.proto @@ -1,7 +1,8 @@ syntax = "proto2"; - package proto; +option go_package = "github.com/RoboCup-SSL/ssl-game-controller/internal/app/geom"; + // A vector with two dimensions message Vector2 { required float x = 1; diff --git a/roboteam_networking/proto/messages_robocup_ssl_game_event.proto b/roboteam_networking/proto/messages_robocup_ssl_game_event.proto index b64de237f..36c1aad80 100644 --- a/roboteam_networking/proto/messages_robocup_ssl_game_event.proto +++ b/roboteam_networking/proto/messages_robocup_ssl_game_event.proto @@ -1,6 +1,8 @@ syntax = "proto2"; - package proto; + +option go_package = "github.com/RoboCup-SSL/ssl-game-controller/internal/app/state"; + import "messages_robocup_ssl_game_controller_common.proto"; import "messages_robocup_ssl_game_controller_geometry.proto"; @@ -79,6 +81,7 @@ message GameEvent { MultipleCards multiple_cards = 32; MultipleFouls multiple_fouls = 34; BotSubstitution bot_substitution = 37; + ExcessiveBotSubstitution excessive_bot_substitution = 52; TooManyRobots too_many_robots = 38; ChallengeFlag challenge_flag = 46; ChallengeFlagHandled challenge_flag_handled = 48; @@ -86,29 +89,6 @@ message GameEvent { UnsportingBehaviorMinor unsporting_behavior_minor = 35; UnsportingBehaviorMajor unsporting_behavior_major = 36; - - // Deprecated events - - // replaced by ready_to_continue flag - // Prepared prepared = 1 [deprecated = true]; - // // obsolete - // IndirectGoal indirect_goal = 9 [deprecated = true]; - // // replaced by the meta-information in the possible_goal event - // ChippedGoal chipped_goal = 10 [deprecated = true]; - // // obsolete - // KickTimeout kick_timeout = 12 [deprecated = true]; - // // rule removed - // AttackerTouchedOpponentInDefenseArea attacker_touched_opponent_in_defense_area = 16 [deprecated = true]; - // // obsolete - // AttackerTouchedOpponentInDefenseArea attacker_touched_opponent_in_defense_area_skipped = 42 [deprecated = true]; - // // obsolete - // BotCrashUnique bot_crash_unique_skipped = 23 [deprecated = true]; - // // can not be used as long as autoRefs do not judge pushing - // BotPushedBot bot_pushed_bot_skipped = 25 [deprecated = true]; - // // rule removed - // DefenderInDefenseAreaPartially defender_in_defense_area_partially = 30 [deprecated = true]; - // // the referee msg already indicates this - // MultiplePlacementFailures multiple_placement_failures = 33 [deprecated = true]; } // the ball left the field normally @@ -420,6 +400,8 @@ message GameEvent { required Team by_team = 1; // the remaining distance [m] from ball to placement position optional float remaining_distance = 2; + // the distance [m] of the nearest own robot to the ball + optional float nearest_own_bot_distance = 3; } // a team was found guilty for minor unsporting behavior message UnsportingBehaviorMinor { @@ -465,6 +447,11 @@ message GameEvent { // the team that substitutes robots required Team by_team = 1; } + // A foul for excessive bot substitutions + message ExcessiveBotSubstitution { + // the team that substitutes robots + required Team by_team = 1; + } // A challenge flag, requested by a team previously, is flagged message ChallengeFlag { // the team that requested the challenge flag @@ -544,6 +531,7 @@ message GameEvent { DEFENDER_TOO_CLOSE_TO_KICK_POINT = 29; // triggered by autoRef BOT_TOO_FAST_IN_STOP = 28; // triggered by autoRef BOT_INTERFERED_PLACEMENT = 20; // triggered by autoRef + EXCESSIVE_BOT_SUBSTITUTION = 48; // triggered by GC // Scoring goals @@ -569,19 +557,5 @@ message GameEvent { UNSPORTING_BEHAVIOR_MINOR = 35; // triggered by human ref UNSPORTING_BEHAVIOR_MAJOR = 36; // triggered by human ref - - // Deprecated events - /* - PREPARED = 1 [deprecated = true]; - INDIRECT_GOAL = 9 [deprecated = true]; - CHIPPED_GOAL = 10 [deprecated = true]; - KICK_TIMEOUT = 12 [deprecated = true]; - ATTACKER_TOUCHED_OPPONENT_IN_DEFENSE_AREA = 16 [deprecated = true]; - ATTACKER_TOUCHED_OPPONENT_IN_DEFENSE_AREA_SKIPPED = 40 [deprecated = true]; - BOT_CRASH_UNIQUE_SKIPPED = 23 [deprecated = true]; - BOT_PUSHED_BOT_SKIPPED = 25 [deprecated = true]; - DEFENDER_IN_DEFENSE_AREA_PARTIALLY = 30 [deprecated = true]; - MULTIPLE_PLACEMENT_FAILURES = 33 [deprecated = true]; - */ } } \ No newline at end of file diff --git a/roboteam_networking/proto/messages_robocup_ssl_geometry.proto b/roboteam_networking/proto/messages_robocup_ssl_geometry.proto index c0db80643..44915dcc8 100644 --- a/roboteam_networking/proto/messages_robocup_ssl_geometry.proto +++ b/roboteam_networking/proto/messages_robocup_ssl_geometry.proto @@ -40,25 +40,40 @@ message SSL_FieldCircularArc { } message SSL_GeometryFieldSize { + // Field length (distance between goal lines) in mm required int32 field_length = 1; + // Field width (distance between touch lines) in mm required int32 field_width = 2; + // Goal width (distance between inner edges of goal posts) in mm required int32 goal_width = 3; + // Goal depth (distance from outer goal line edge to inner goal back) in mm required int32 goal_depth = 4; + // Boundary width (distance from touch/goal line centers to boundary walls) in mm required int32 boundary_width = 5; + // Generated line segments based on the other parameters repeated SSL_FieldLineSegment field_lines = 6; + // Generated circular arcs based on the other parameters repeated SSL_FieldCircularArc field_arcs = 7; + // Depth of the penalty/defense area (measured between line centers) in mm optional int32 penalty_area_depth = 8; + // Width of the penalty/defense area (measured between line centers) in mm optional int32 penalty_area_width = 9; + // Radius of the center circle (measured between line centers) in mm optional int32 center_circle_radius = 10; + // Thickness/width of the lines on the field in mm optional int32 line_thickness = 11; + // Distance between the goal center and the center of the penalty mark in mm optional int32 goal_center_to_penalty_mark = 12; + // Goal height in mm optional int32 goal_height = 13; + // Ball radius in mm (note that this is a float type to represent sub-mm precision) optional float ball_radius = 14; + // Max allowed robot radius in mm (note that this is a float type to represent sub-mm precision) optional float max_robot_radius = 15; } message SSL_GeometryCameraCalibration { - required uint32 camera_id = 1; + required uint32 camera_id = 1; required float focal_length = 2; required float principal_point_x = 3; required float principal_point_y = 4; diff --git a/roboteam_networking/proto/messages_robocup_ssl_referee.proto b/roboteam_networking/proto/messages_robocup_ssl_referee.proto index e4553673c..fecdc856f 100644 --- a/roboteam_networking/proto/messages_robocup_ssl_referee.proto +++ b/roboteam_networking/proto/messages_robocup_ssl_referee.proto @@ -1,6 +1,8 @@ syntax = "proto2"; package proto; +option go_package = "github.com/RoboCup-SSL/ssl-game-controller/internal/app/state"; + import "messages_robocup_ssl_game_event.proto"; // Each UDP packet contains one of these messages. @@ -149,6 +151,10 @@ message Referee { optional bool ball_placement_failures_reached = 15; // The team is allowed to substitute one or more robots currently optional bool bot_substitution_allowed = 16; + // The number of bot substitutions left by the team in this halftime + optional uint32 bot_substitutions_left = 17; + // The number of microseconds left for current bot substitution + optional uint32 bot_substitution_time_left = 18; } // Information about the two teams. diff --git a/roboteam_networking/proto/ssl_vision_geometry.proto b/roboteam_networking/proto/ssl_vision_geometry.proto index 5a643c2b8..440fd1e10 100644 --- a/roboteam_networking/proto/ssl_vision_geometry.proto +++ b/roboteam_networking/proto/ssl_vision_geometry.proto @@ -53,16 +53,10 @@ message SSL_GeometryFieldSize { repeated SSL_FieldCircularArc field_arcs = 7; optional int32 penalty_area_depth = 8; optional int32 penalty_area_width = 9; - optional int32 center_circle_radius = 10; - optional int32 line_thickness = 11; - optional int32 goal_center_to_penalty_mark = 12; - optional int32 goal_height = 13; - optional float ball_radius = 14; - optional float max_robot_radius = 15; } message SSL_GeometryCameraCalibration { - required uint32 camera_id = 1; + required uint32 camera_id = 1; required float focal_length = 2; required float principal_point_x = 3; required float principal_point_y = 4;