comon.h解读:主要功能是读取数据文件所在的目录文件,并对文件中的数据格式进行统一化处理,方便进行后续的数据处理。

#pragma once一般由编译器提供保证:同一个文件不会被包含多次。这里所说的”同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。无法对一个头文件中的一段代码作#pragma once声明,而只能针对文件。

#include "math.h"中包含的函数说明:

#include<math.h>中包含的函数说明_若诗余的博客-CSDN博客_includemathh包含哪些库函数求取绝对值的函数intabs(int i);//返回整型数i的绝对值; 例如int abs(-3.5) == 3.5;//double cabs(struct complex znum);//返回复数znum绝对值;double fabs(double x);//返回双精度数x的绝对值;例如double fabs(-103.5) == 103.5;long labs(long n);//返回长整型n的绝...https://blog.csdn.net/weixin_44643510/article/details/111694169?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165951726416781432980783%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165951726416781432980783&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-111694169-null-null.142%5Ev39%5Econtrol&utm_term=%23include%20math.h&spm=1018.2226.3001.4187#include <chrono>:chrono处理时间和日期的库函数,chrono 库主要包含三种类型的类:时间间隔duration、时钟clocks、时间点time point。

C++ 使用 chrono 库处理日期和时间_程序员编程指南的博客-CSDN博客C++11 中提供了日期和时间相关的库 chrono,通过 chrono 库可以很方便地处理日期和时间,为程序的开发提供了便利。chrono 库主要包含三种类型的类:时间间隔duratio...https://blog.csdn.net/weixin_41055260/article/details/120124634?ops_request_misc=&request_id=&biz_id=102&utm_term=?ops_request_misc=&request_id=&biz_id=102&utm_term=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-120124634.142%5Ev39%5Econtrol&spm=1018.2226.3001.4187#include%20%3Cchrono%3E&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-120124634.142%5Ev39%5Econtrol#include <cstdlib>:是一些常用的函数,但是又不知道把它们放到哪里合适,因此就都放到了stdlib.h这个头文件中。

#include的解释_阿酱在点点点的博客-CSDN博客_#include 是一些常用的函数,但是又不知道把它们放到哪里合适,因此就都放到了stdlib.h这个头文件中。stdlib.h可以提供一些函数与符号常量,具体如下:根据ISO标准,stdlib.h提供以下类型:size_t, wchar_t, div_t, ldiv_t, lldiv_t常量NULL, EXIT_FAILURE, EXIT_SUCESS, RAND_MAX, MB_CUR_MAX函https://blog.csdn.net/Iaired/article/details/78700180?ops_request_misc=&request_id=&biz_id=102&utm_term=?ops_request_misc=&request_id=&biz_id=102&utm_term=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-78700180.nonecase&spm=1018.2226.3001.4187#include%20%3Ccstdlib%3E&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-78700180.nonecase#include <ctime>:

c++标准库--ctime学习_antRain的博客-CSDN博客_c++ ctimectime学习宏类型:函数获取当地时间源代码输出结果计时源代码输出结果宏CLOCKS_PER_SEC:每秒时钟周期数的表达式。类型:clock_t:表示时钟滴答计数的类型。size_t:其中一个基本无符号整数类型的别名,是一种能够以字节为单位表示任何对象大小的类型time_t:表示时间的类型struct tm:包含日历日期和时间的结构体会员类型含义范围...https://blog.csdn.net/qq_41146650/article/details/96190682?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6-96190682-blog-82223600.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6-96190682-blog-82223600.pc_relevant_aa&utm_relevant_index=9#include <stdio.h>:

告诉编译器把stdio.h中的内容包含在当前程序中。

stdio.h是c编译器软件包的标准部分,它提供键盘输入和屏幕输出的支持。

#include <unistd.h>:

unistd.h是用于linux/unix系统的调用。

  #include <unistd.h>是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数。

#define,主要指代宏定义:

#define用法详解_白河、愁的博客-CSDN博客_#define 函数1.#define 的作用在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。在C或C++语言中,“宏”分为有参数和无参数两种。2. 无参宏定义无参宏的宏名后不带参数。其定义的一般形式为:#define 标识符 字符串其中的“#”表示这是一条预处理命令。凡是以“#”开头的https://blog.csdn.net/qq_41282070/article/details/108635403?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165952046916782248593294%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165952046916782248593294&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-108635403-null-null.142%5Ev39%5Econtrol&utm_term=%23define&spm=1018.2226.3001.4187constexptr用法:

C++之constexpr详解_C咖咖的博客-CSDN博客_constexprconstexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化:constexpr int mf = 20; //20是常量表达式constexpr int limit = mf + 1; // mf + 1是常量表达式constexpr int sz = size(); //之后当siz...https://blog.csdn.net/janeqi1987/article/details/103542802?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-103542802-blog-110470363.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1-103542802-blog-110470363.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2    C++中constexpr函数_棉猴的博客-CSDN博客_c++ constexpr1 简介constexpr函数指的是在编译的时候就能得到其返回值的函数,也就是说编译器将constexpr函数直接转换成其返回值,因此,constexpr函数都是被隐式地定义为内联函数。使用constexpr关键字来修饰constexpr函数。2 使用方法有如下代码:constexprintmyFunc(){ return1;}constexprinti = myFunc() * 4;此时,编译器会将myFunc()函数用其返回值1来代替,在编译时就可知i的值是4。...https://blog.csdn.net/hou09tian/article/details/110470363?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165952526516780357229164%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165952526516780357229164&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-110470363-null-null.142%5Ev39%5Econtrol&utm_term=constexpr&spm=1018.2226.3001.4187inline的用法:
inline的用法_Lzg_na的博客-CSDN博客_inline使用一、extern1、同一文件在.c或者.cpp文件中,可能有多个函数和变量。以main函数为例,在main函数内部定义的为局部变量/局部函数,只在函数体内生效;在main函数外部定义的为全部变量/全部函数,(当然也不能定义在其他函数体内),在本文件都生效,但是作用范围只在定义位置到结束,如果之前有函数要使用该变量会出错,那怎么使用呢?就是要使用extern关键字!!!如图所示,定义的m,这样在main函数里cout<<m使用会报错,在使用它之前添加extern int m;https://blog.csdn.net/qq_34799070/article/details/108117650?ops_request_misc=&request_id=&biz_id=102&utm_term=inline&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-108117650.142%5Ev39%5Econtrol&spm=1018.2226.3001.4187readlink()函数:

readlink 函数用法_Q328333568的博客-CSDN博客_readlink函数相关函数: stat, lstat, symlink表头文件: #include 定义函数:ssize_t readlink(const char *path, char *buf, size_t bufsiz);函数说明:readlink()会将参数path的符号链接内容存储到参数buf所指的内存空间,返回的内容不是以\000作字符串结尾,但会将字符串的字符数返回,这使得添加\000https://blog.csdn.net/JK198310/article/details/41596775?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165952632816781685358519%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165952632816781685358519&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-41596775-null-null.142%5Ev39%5Econtrol&utm_term=readlink%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187substr()函数:

substr函数用法详解_临渊慎行的博客-CSDN博客_substr函数用法substr(string,start<,length>)从string 的start位置开始提取字符串length:待提取的字符串的长度,若length为一下情况时,返回整个字符串的所有字符。1、length不指定2、length为空3、length为负值4、length大于字符串的长度data dat;str="wqerwtweafs";str1=substr(str,5);str2=substr(str,5,"");str3=substr(str,5,-3);str4https://blog.csdn.net/zq9955/article/details/121643591?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165952680516782248579150%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165952680516782248579150&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-121643591-null-null.142%5Ev39%5Econtrol&utm_term=substr%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187rfind()函数:

c++ string中rfind()与find()的简单学习使用_HalfCoke的博客-CSDN博客_c++ rfind以下分析仅仅从使用角度考虑,没有查看过内部实现一、rfind()1. rfind(str)rfind(str)是从字符串右侧开始匹配str,并返回在字符串中的位置(下标);附上测试代码:# include&lt;string&gt;# include&lt;iostream&gt;using namespace std;int main(){string str = "12...https://blog.csdn.net/qq_42446432/article/details/88086259?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165952698916781818791151%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165952698916781818791151&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-88086259-null-null.142%5Ev39%5Econtrol&utm_term=rfind&spm=1018.2226.3001.4187

#pragma once#include "math.h"
#include <chrono>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iostream>
#include <stdint.h>
#include <stdio.h>
#include <string>
#include <unistd.h>//宏定义一些参数,简化输出部分的代码
#define SHOWDETAIL                                                             \printf("\tline: %d;file: %s\n\tdate: %s %s\n", __LINE__, __FILE__, __DATE__, \__TIME__)
#define LOGINFO(msg) printf("\033[32m[INFO] %s\033[0m\n", msg)
#define LOGWARN(msg)                                                           \printf("\033[33m[WARN] %s\033[0m\n", msg);                                   \SHOWDETAIL
#define LOGERROR(msg)                                                          \printf("\033[31m[ERROR] %s\033[0m\n", msg);                                  \SHOWDETAIL
#define LOG(type, msg) LOG##type(msg)//利用constexpr构造一些常量,并且常量的值不会改变并且在编译过程就能得到计算结果的表达式。
constexpr uint32_t MONTH_DAY[2][13] = {{365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},{366, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};constexpr uint32_t SECOND_WEEK = 604800;
constexpr uint32_t SECOND_DAY = 86400;
constexpr uint32_t SECOND_HOUR = 3600;
constexpr uint32_t LEAP_SECOND = 18;
constexpr uint32_t TIME_ZONE = 8;//构造一个内连函数,得到数据所在的目录路径
//readlink()函数用于得到想要的目录路径
//substr()函数用于提取字符串
//rfind()函数用于找到字符串所在的位置,并返回值
inline std::string GotProjectDir() {// parse lidar config pathchar abs_path[1024];size_t cnt = readlink("/proc/self/exe", abs_path, 1024);if (cnt < 1) {LOG(ERROR, "got project dir failed!");}std::string project_path(abs_path);project_path = project_path.substr(0, project_path.rfind("senseauto"));return project_path;
};//构造一个函数,得到一个时间段
class TicToc {
public:TicToc() { tic(); }void tic() { start = std::chrono::system_clock::now(); }double toc() {end = std::chrono::system_clock::now();std::chrono::duration<double> elapsed_seconds = end - start;return elapsed_seconds.count() * 1000;}private:std::chrono::time_point<std::chrono::system_clock> start, end;
};//构造一个内连函数,用于判断传入的数据是否满足相应的条件,满足:返回真值。
inline bool is_leap_year(uint32_t year) {if (year % 4 == 0 && year % 100 != 0) {return true;} else if (year % 400 == 0) {return true;} elsereturn false;
};构造一个内连函数,用于判断的数据是否满足条件,如果满足,直接返回;不满足,需要对数据进行处理。
inline std::string FormatSTDTimeString(const std::string &in_str) {if (in_str.size() != 17 && in_str.size() != 23 && in_str.size() != 26) {std::cout << "invalid input " << in_str << "(" << in_str.size()<< ") format is yyyy-mm-dd-hh-mi-ss-ms or "<< "yyyymmddhhmissms or yyyy-mm-dd-hh-mi-ss-us" << std::endl;return in_str;}std::string out_str;// format:yyyymmddhhmissmsif (in_str.size() == 17) {out_str = in_str.substr(0, 4) + "-" +  // yyyyin_str.substr(4, 2) + "-" +  // mmin_str.substr(6, 2) + " " +  // ddin_str.substr(8, 2) + ":" +  // hhin_str.substr(10, 2) + ":" + // miin_str.substr(12, 2) + "." + // ssin_str.substr(14, 3);}// format:yyyy-mm-dd-hh-mi-ss-msif (in_str.size() == 23 or in_str.size() == 26) {out_str = in_str;out_str[10] = ' ';out_str[13] = out_str[16] = ':';out_str[19] = '.';}return out_str;
};

Imu_heading源码阅读(一)——common.h相关推荐

  1. Imu_heading源码阅读(四)——具体实现

    imu_heading.hpp: #pragma once一般由编译器提供保证:同一个文件不会被包含多次.这里所说的"同一个文件"是指物理上的一个文件,而不是指内容相同的两个文件. ...

  2. Imu_heading源码阅读(三)——Ransac_fitline部分

    Ransac_fitline:这部分主要是Ransac(随即样本采样一致性)算法的具体实现,首先剖析Ransac的基本原理. RANSAC的基本假设是: (1)数据由"局内点"组成 ...

  3. Imu_heading源码阅读(二)——GPS_time部分

    GPS部分:主要进行时间格式上的转换,将utc时间转换为unix时间(以秒为单位,具有时间戳) GPS_time.h: #pragma once一般由编译器提供保证:同一个文件不会被包含多次.这里所说 ...

  4. Lidar_imu自动标定源码阅读(二)——calibration部分

    源码阅读,能力有限,如有某处理解错误,请指出,谢谢. Lidar_parser_base.h:激光雷达分析器基础 #pragma once#include <pcl/point_cloud.h& ...

  5. DBFace: 源码阅读(一)

    DBFACE: 源码阅读 1. 背景 DBFace框架是可以同时获得人脸检测和关键点定位,相较与人脸检测和关键点定位分开的做法有一定的优势,减少了对原图的crop和resize操作,并且对多人脸的情况 ...

  6. Lidar_imu自动标定源码阅读(六)——run部分

    源码阅读,能力有限,如有某处理解错误,请指出,谢谢. run_lidar2imu.cpp:输入文件所在路径,开始标定. #include <Eigen/Core> #include < ...

  7. Android源码阅读---init进程

    Android源码阅读-init进程 文章目录 Android源码阅读---init进程 1. 编译命令和进程入口 1. init 进程编译命令 2. main函数流程 2. 主函数处理流程 1. 创 ...

  8. Apollo perception源码阅读 | lidar

    #! https://zhuanlan.zhihu.com/p/389572382 Apollo perception源码阅读 | lidar 本文为Apollo感知融合源码阅读笔记,建议参照Apol ...

  9. 以太坊源码阅读5——POW源码分析

    以太坊源码阅读5--POW源码分析 介绍 POW,proof of work,即工作量证明,是著名公bitcoin所采用的共识算法.简单来说,pow就是一个证明,由矿工使用算力进行计算(挖矿),竞争记 ...

  10. 【Dubbo源码阅读系列】之远程服务调用(上)

    今天打算来讲一讲 Dubbo 服务远程调用.笔者在开始看 Dubbo 远程服务相关源码的时候,看的有点迷糊.后来慢慢明白 Dubbo 远程服务的调用的本质就是动态代理模式的一种实现.本地消费者无须知道 ...

最新文章

  1. Banana PI A20开发板 通过了CE,FCC,RoHS认证
  2. 戴尔服务:为企业转型导航
  3. 吐槽一下现在的代码编辑器
  4. 计算机应用基础 聂敏,1. 在Excel中,公式“COUNT(C2:E3)”的含义是:( )。...
  5. 无法访问本地ip_当金万维异速联无法访问金蝶软件怎么办?
  6. vc设置按钮文字颜色
  7. 中国人工智能产业发展联盟成立 360任副理事长单位
  8. c语言有啥简单的小程序,c语言-简单小程序-简单算法
  9. 其实,我只想安静的写写代码...
  10. hikari如何切换数据源_spring boot+mybatis 多数据源切换(实例讲解)
  11. Android应用程序开发(第三版)-课后习题解答
  12. python调用hownet API计算两个词的相似度
  13. CS游戏控制台命令大全(来自网络)
  14. 《转载-Github上的python开源项目》
  15. 飞猪 Serverless 体系从无到有,落地10余个业务场景
  16. 计算机网络求校验码,计算机网络课程设计校验码的计算
  17. 【不定期更新】游戏开发中的一些良好习惯与技术技巧
  18. 如何批量删除pdf中的批注
  19. 30W、45W、60W PD移动电源芯片方案+无线充方案
  20. sql数据库质疑恢复办法

热门文章

  1. Oracle 11g企业版下载
  2. AD-001 CR11220纽扣电池库文件
  3. lamp一键安装包不安装mysql_LAMP一键安装包-CentOS 5/6下,添加pdo_mysql
  4. 中国教育和科研计算机网 吉林省,吉林大学—41核心节点—热烈庆祝中国教育和科研计算机网CERNET建设20周年—中国教育和科研计算机网CERNET...
  5. js几种常见的设计模式
  6. linux下最常见的操作和命令
  7. 转载 DM9000的调试
  8. POI导出excel加水印
  9. 深海迷航坐标传送代码_深海迷航全控制台代码一览
  10. 这些好用的音频、视频素材网站,你值得拥有。