gflags和glog在cartographer中的运用

gflags是什么?gflags是google开源的命令行标记处理库;
那么什么是命令行标记呢?顾名思义就是当运行一个可执行文件时,由用户为其指定的标记,形如:

 fgrep -l -f ./test ccc jjj

注意上述命令,-l与-f ./test是命令行标记,而ccc与jjj是命令行参数,因为这两者不是以破折号开头的。

一般的一个可执行文件,允许用户为其传入命令行标记以及参数,如上述例子,-l是一个不带参数的标记,-f是一个带了参数“./test”的标记,而gflags可以解析这些标记以及参数并将其存储在某些数据结构中。

gflags支持主要的一些参数类型包括string, bool, int32, int64, double等

定义参数通过DEFINE_(类型)决定,如DEFINE_bool,该宏的三个参数含义分别为命令行参数名, 参数默认值, 以及参数的帮助信息,帮助信息写入用"..."

当参数被定义后, 通过FLAGS_(名字)就可访问到对应的参数,如FLAGS_collect_metrics.

DEFINE_string(configuration_directory, "","...")

上面这个的参数默认值是留空的,是用launch文件传入的

  
    
  

中间有个-configuration_directory, -表示是命令行标记,和gflags的定义是一样的,后面跟的是传入的内容$(find cartographer_ros)/configuration_files, 并且被赋予到FLAGS_configuration_directory成为一个宏,如果下面的程序需要使用这个变量,则使用FLAGS_configuration_directory就行

同理

DEFINE_string(configuration_basename, "",
              "Basename, i.e. not containing any directory prefix, of the "
              "configuration file.");


-configuration_basename pr2.lua

FLAGS_configuration_basename为pr2.lua这个string,并不代表pr2.lua文件内的内容,只是文件名

glog简介:glog在gflags或者里面似乎include了

Google glog是一个应用级别的日志系统库.它提供基于C++风格的流和各种辅助宏的日志API.支持以下功能:

  • 参数设置, 以命令行参数的方式设置标志参数来控制日志记录行为
  • 严重性分级, 根据日志严重性分级记录日志 - INFO WARNING ERROR FATAL
  • 可有条件地记录日志信息 - LOG_IF LOG_EVERY_N LOG_IF_EVERY_N LOG_FIRST_N
  • 条件中止程序。丰富的条件判定宏, 可预设程序终止条件 - CHECK宏
  • 异常信号处理。程序异常情况, 可自定义异常处理过程
  • 支持debug功能
  • 自定义日志信息
  • 线程安全日志记录方式
  • 系统级日志记录
  • google perror风格日志信息

精简日志字符串信息最终的结果不仅会在屏幕终端显示出来, 同时会将log日志写入到/tmp/...log....这个文件中.

glog在cartographer的CMakeLists里面,不在cartographer_ros的CMakeLists里面.

  • override用于直接明了的告诉编译器该函数用于重载父类的某个虚函数

glog可以自定义消息格式,详见ros_log_sink

你可能感兴趣的:(SLAM,cartographer,java,c++,servlet)