blob: becb1cf3848004d7c7b4dc4fced42053ae0af2a7 [file] [log] [blame]
Jim Ostrowskicb8b4082024-01-21 02:23:46 -08001#include "y2024/vision/vision_util.h"
2
3#include "glog/logging.h"
4
5namespace y2024::vision {
6
Jim Ostrowski67726282024-03-24 14:39:33 -07007// Store a list of ordered cameras as you progress around the robot/box of orins
8std::vector<CameraNode> CreateNodeList() {
9 std::vector<CameraNode> list;
10
11 list.push_back({.node_name = "imu", .camera_number = 0});
12 list.push_back({.node_name = "imu", .camera_number = 1});
13 list.push_back({.node_name = "orin1", .camera_number = 1});
14 list.push_back({.node_name = "orin1", .camera_number = 0});
15
16 return list;
17}
18
19// From the node_list, create a numbering scheme from 0 to 3
20std::map<std::string, int> CreateOrderingMap(
21 std::vector<CameraNode> &node_list) {
22 std::map<std::string, int> map;
23
24 for (uint i = 0; i < node_list.size(); i++) {
25 map.insert({node_list.at(i).camera_name(), i});
26 }
27
28 return map;
29}
30
Jim Ostrowskicb8b4082024-01-21 02:23:46 -080031const frc971::vision::calibration::CameraCalibration *FindCameraCalibration(
Jim Ostrowskiddebdcb2024-02-29 22:25:36 -080032 const y2024::Constants &calibration_data, std::string_view node_name,
33 int camera_number) {
Jim Ostrowskicb8b4082024-01-21 02:23:46 -080034 CHECK(calibration_data.has_cameras());
35 for (const y2024::CameraConfiguration *candidate :
36 *calibration_data.cameras()) {
37 CHECK(candidate->has_calibration());
Jim Ostrowskiddebdcb2024-02-29 22:25:36 -080038 if (candidate->calibration()->node_name()->string_view() != node_name ||
39 candidate->calibration()->camera_number() != camera_number) {
Jim Ostrowskicb8b4082024-01-21 02:23:46 -080040 continue;
41 }
42 return candidate->calibration();
43 }
Jim Ostrowskiddebdcb2024-02-29 22:25:36 -080044 LOG(FATAL) << ": Failed to find camera calibration for " << node_name
45 << " and camera number " << camera_number;
Jim Ostrowskicb8b4082024-01-21 02:23:46 -080046}
47
48} // namespace y2024::vision