| 1 | #include "so3_control/NetworkControl.h" |
| 2 | |
| 3 | void NetworkControl::initLogRecorder() |
| 4 | { |
| 5 | // Use file count as name to avoid date confusion |
| 6 | std::cout << "logger_file_name: " << logger_file_name << std::endl; |
| 7 | int max_number = -1; |
| 8 | boost::filesystem::path dir(logger_file_name); |
| 9 | if (boost::filesystem::exists(dir) && boost::filesystem::is_directory(dir)) { |
| 10 | std::regex filename_pattern(R"(^(\d+)_.*$)"); // 匹配以数字开头,并以"_"分隔的文件名 |
| 11 | for (const auto& entry : boost::filesystem::directory_iterator(dir)) { |
| 12 | if (boost::filesystem::is_regular_file(entry)) { |
| 13 | std::string filename = entry.path().filename().string(); |
| 14 | std::smatch match; |
| 15 | if (std::regex_match(filename, match, filename_pattern)) { |
| 16 | int number = std::stoi(match[1]); // 提取第一个"_"前的数字 |
| 17 | max_number = std::max(max_number, number); |
| 18 | } |
| 19 | } |
| 20 | } |
| 21 | } else { |
| 22 | std::cerr << "Error: invalid logger path" << std::endl; |
| 23 | } |
| 24 | std::string fileCountStr = std::to_string(max_number + 1); |
| 25 | std::string temp_file_name = logger_file_name + fileCountStr + "_Net_logger_"; |
| 26 | time_t timep; |
| 27 | timep = time(0); |
| 28 | char tmp[64]; |
| 29 | strftime(tmp, sizeof(tmp), "%Y_%m_%d_%H_%M_%S", localtime(&timep)); |
| 30 | temp_file_name += tmp; |
| 31 | temp_file_name += ".csv"; |
| 32 | if (logger.is_open()) |
| 33 | { |
| 34 | logger.close(); |
| 35 | } |
| 36 | logger.open(temp_file_name.c_str(), std::ios::out); |
| 37 | std::cout << "logger: " << temp_file_name << std::endl; |
| 38 | if (!logger.is_open()) |
| 39 | { |
| 40 | std::cout << "cannot open the logger." << std::endl; |
| 41 | } |
| 42 | else |
| 43 | { |
| 44 | logger << "timestamp" << ','; |
| 45 | logger << "cur_px" << ','; |
| 46 | logger << "cur_py" << ','; |
| 47 | logger << "cur_pz" << ','; |
| 48 | logger << "cur_vx" << ','; |
| 49 | logger << "cur_vy" << ','; |
| 50 | logger << "cur_vz" << ','; |
| 51 | logger << "cur_ax" << ','; |
| 52 | logger << "cur_ay" << ','; |
| 53 | logger << "cur_az" << ','; |
| 54 | logger << "des_px" << ','; |
| 55 | logger << "des_py" << ','; |
| 56 | logger << "des_pz" << ','; |
| 57 | logger << "des_vx" << ','; |
| 58 | logger << "des_vy" << ','; |
| 59 | logger << "des_vz" << ','; |
| 60 | logger << "des_ax" << ','; |