1. parameters.h
일단 헤더파일에는 모두 선언만 되어 있으므로 보류한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#pragma once
#include <ros/ros.h>
#include <opencv2/highgui/highgui.hpp>
extern int ROW;
extern int COL;
extern int FOCAL_LENGTH;
const int NUM_OF_CAM = 1;
extern std::string IMAGE_TOPIC;
extern std::string IMU_TOPIC;
extern std::string FISHEYE_MASK;
extern std::vector<std::string> CAM_NAMES;
extern int MAX_CNT;
extern int MIN_DIST;
extern int WINDOW_SIZE;
extern int FREQ;
extern double F_THRESHOLD;
extern int SHOW_TRACK;
extern int STEREO_TRACK;
extern int EQUALIZE;
extern int FISHEYE;
extern bool PUB_THIS_FRAME;
void readParameters(ros::NodeHandle &n);
| cs |
2. parameters.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#include "parameters.h"
std::string IMAGE_TOPIC;
std::string IMU_TOPIC;
std::vector<std::string> CAM_NAMES;
std::string FISHEYE_MASK;
int MAX_CNT;
int MIN_DIST;
int WINDOW_SIZE;
int FREQ;
double F_THRESHOLD;
int SHOW_TRACK;
int STEREO_TRACK;
int EQUALIZE;
int ROW;
int COL;
int FOCAL_LENGTH;
int FISHEYE;
bool PUB_THIS_FRAME;
template <typename T>
T readParam(ros::NodeHandle &n, std::string name)
{
T ans;
if (n.getParam(name, ans))
{
ROS_INFO_STREAM("Loaded " << name << ": " << ans);
}
else
{
ROS_ERROR_STREAM("Failed to load " << name);
n.shutdown();
}
return ans;
}
void readParameters(ros::NodeHandle &n)
{
std::string config_file;
config_file = readParam<std::string>(n, "config_file");
cv::FileStorage fsSettings(config_file, cv::FileStorage::READ);
if(!fsSettings.isOpened())
{
std::cerr << "ERROR: Wrong path to settings" << std::endl;
}
std::string VINS_FOLDER_PATH = readParam<std::string>(n, "vins_folder");
fsSettings["image_topic"] >> IMAGE_TOPIC;
fsSettings["imu_topic"] >> IMU_TOPIC;
MAX_CNT = fsSettings["max_cnt"];
MIN_DIST = fsSettings["min_dist"];
ROW = fsSettings["image_height"];
COL = fsSettings["image_width"];
FREQ = fsSettings["freq"];
F_THRESHOLD = fsSettings["F_threshold"];
SHOW_TRACK = fsSettings["show_track"];
EQUALIZE = fsSettings["equalize"];
FISHEYE = fsSettings["fisheye"];
if (FISHEYE == 1)
FISHEYE_MASK = VINS_FOLDER_PATH + "config/fisheye_mask.jpg";
CAM_NAMES.push_back(config_file);
WINDOW_SIZE = 20;
STEREO_TRACK = false;
FOCAL_LENGTH = 460;
PUB_THIS_FRAME = false;
if (FREQ == 0)
FREQ = 100;
fsSettings.release();
}
| cs |
Line 21 to 35
파라미터를 전달받는 부분.readParam 이란 함수는 name이란 파라미터와 함께 동작하는데,
getParam 함수가 터미널 측에서 입력되는 파라미터 값들을 전달받게 된다.
Line 38 to 70
readParameters 함수가 실행되면 다음과 같은 작업이 진행된다.41번 라인을 통해 config_file을 전달받는다.
42번 라인은 FileStorage Class를 갖고 있다.
File Storage Class에 대한 내용은 다음 링크를 참조한다.
(링크 참조 : https://kgh1994.tistory.com/8 )
해당 부분에서는 config_file을 열어서 읽게 된다.
43번 ~ 46번 라인에서는 해당 파일이 열렸는지 확인하게 된다.
47번 라인에서는 vins_folder 의 경로를 파라미터로 받게 된다.
48번 ~ 58번 라인에서는 fsSettings 안에 있는 내용들을 가져와서 변수에 대입해준다.
59번 ~60번 라인에서는 Fisheye camera 설정인 경우 Fisheye mask를 가져온다.
61번 ~ 67번 라인에서는 각각 내용을 설정해준다.
68번 라인에서는 읽었던 파일을 해제해준다.
댓글 없음:
댓글 쓰기