Apollo 10.0
自动驾驶开放平台
apollo::cyber::record::Recorder类 参考

#include <recorder.h>

类 apollo::cyber::record::Recorder 继承关系图:
apollo::cyber::record::Recorder 的协作图:

Public 成员函数

 Recorder (const std::string &output, bool all_channels, const std::vector< std::string > &white_channels, const std::vector< std::string > &black_channels)
 
 Recorder (const std::string &output, bool all_channels, const std::vector< std::string > &white_channels, const std::vector< std::string > &black_channels, const proto::Header &header)
 
 ~Recorder ()
 
bool Start ()
 
bool Stop ()
 

详细描述

在文件 recorder.h49 行定义.

构造及析构函数说明

◆ Recorder() [1/2]

apollo::cyber::record::Recorder::Recorder ( const std::string &  output,
bool  all_channels,
const std::vector< std::string > &  white_channels,
const std::vector< std::string > &  black_channels 
)

在文件 recorder.cc27 行定义.

30 : output_(output),
31 all_channels_(all_channels),
32 white_channels_(white_channels),
33 black_channels_(black_channels) {
34 header_ = HeaderBuilder::GetHeader();
35}
static proto::Header GetHeader()
Build a default record header.

◆ Recorder() [2/2]

apollo::cyber::record::Recorder::Recorder ( const std::string &  output,
bool  all_channels,
const std::vector< std::string > &  white_channels,
const std::vector< std::string > &  black_channels,
const proto::Header header 
)

在文件 recorder.cc37 行定义.

41 : output_(output),
42 all_channels_(all_channels),
43 white_channels_(white_channels),
44 black_channels_(black_channels),
45 header_(header) {}

◆ ~Recorder()

apollo::cyber::record::Recorder::~Recorder ( )

在文件 recorder.cc47 行定义.

成员函数说明

◆ Start()

bool apollo::cyber::record::Recorder::Start ( )

在文件 recorder.cc49 行定义.

49 {
50 for (const auto& channel_name : white_channels_) {
51 if (std::find(black_channels_.begin(), black_channels_.end(),
52 channel_name) != black_channels_.end()) {
53 AERROR << "find channel in both of white list and black list, channel: "
54 << channel_name;
55 return false;
56 }
57 }
58
59 auto get_patterns_func = [](const std::vector<std::string>& channels,
60 std::vector<std::regex>* channel_patterns) {
61 for (const auto& channel_name : channels) {
62 try {
63 std::string name = "";
64 /* replace escape character: \ to \\ */
65 for (auto& c : channel_name) {
66 if (c != '\\') {
67 name += c;
68 } else {
69 name += "\\";
70 }
71 }
72 channel_patterns->emplace_back(name);
73 } catch (std::regex_error& e) {
74 // ignored if channel name is not a regex string.
75 }
76 }
77 };
78 get_patterns_func(white_channels_, &white_channel_patterns_);
79 get_patterns_func(black_channels_, &black_channel_patterns_);
80
81 writer_.reset(new RecordWriter(header_));
82 if (!writer_->Open(output_)) {
83 AERROR << "Datafile open file error.";
84 return false;
85 }
86 std::string node_name = "cyber_recorder_record_" + std::to_string(getpid());
87 node_ = ::apollo::cyber::CreateNode(node_name);
88 if (node_ == nullptr) {
89 AERROR << "create node failed, node: " << node_name;
90 return false;
91 }
92 if (!InitReadersImpl()) {
93 AERROR << " _init_readers error.";
94 return false;
95 }
96 message_count_ = 0;
97 message_time_ = 0;
98 is_started_ = true;
99 display_thread_ =
100 std::make_shared<std::thread>([this]() { this->ShowProgress(); });
101 if (display_thread_ == nullptr) {
102 AERROR << "init display thread error.";
103 return false;
104 }
105 return true;
106}
#define AERROR
Definition log.h:44
std::unique_ptr< Node > CreateNode(const std::string &node_name, const std::string &name_space)
Definition cyber.cc:33

◆ Stop()

bool apollo::cyber::record::Recorder::Stop ( )

在文件 recorder.cc108 行定义.

108 {
109 if (!is_started_ || is_stopping_) {
110 return false;
111 }
112 is_stopping_ = true;
113 if (!FreeReadersImpl()) {
114 AERROR << " _free_readers error.";
115 return false;
116 }
117 writer_->Close();
118 node_.reset();
119 if (display_thread_ && display_thread_->joinable()) {
120 display_thread_->join();
121 display_thread_ = nullptr;
122 }
123 is_started_ = false;
124 is_stopping_ = false;
125 return true;
126}

该类的文档由以下文件生成: