EGO Planner代码解析----CMakeLists.txt和package.xml

ROS本质上就是由一个又一个的package组成的,package可以说是ROS的细胞。

在catkin_make的时候它会一个一个的去找package然后生成目标文件。

一个package可以有多个节点。

判断是否为Package :一个文件夹要被ROS认为是package的话,必须包含以下两个文件:CMakeList.txt和package.xml。

CMakeLists.txt规定catkin编译的规则。(例如:源文件,依赖项,目标文件)。

package.xml文件定义了package的属性。(例如:包名,版本号,作者等等),相当于一个包的自我描述

先了解一下ROS整体框架

EGO Planner代码解析----CMakeLists.txt和package.xml_第1张图片

 

以ego-planner-master/src/planner/path_searching/CMakeList.txt为例分析:

CMakeList.txt

1、制定cmake的最小版本

cmake_minimum_required(VERSION 2.8.3) 

2、设置项目名称,该处项目名称为path_searching

project(path_searching)

3、设置编译类型为release,因为在发布时需要选择release

set(CMAKE_BUILD_TYPE "Release")

4、添加编译参数:按照C++2011或2014标准来进行编译

ADD_COMPILE_OPTIONS(-std=c++11 )
ADD_COMPILE_OPTIONS(-std=c++14 )

5、CMAKE_CXX_FLAGS为设置g++编译选项

-O3表示开始编译优化等级为3;
-Wall编译后显示所有警告;-g表示调试,即可执行程序中包含调试信息

set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")

6、引用Eigen和PCL库

find_package(Eigen3 REQUIRED)
find_package(PCL 1.7 REQUIRED)

7、find_package查找指定的库文件,当前所需要构建的项目中依赖其它的Package。即用于加载 catkin 宏和指定对其他 ROS 功能包的依赖关系。

find_package(catkin REQUIRED COMPONENTS
  roscpp 
  rospy  
  std_msgs  
  visualization_msgs  
  plan_env
  cv_bridge 
)

其中: 

roscpp   为ROS的C++库,是目前最广泛应用的ROS客户端库,执行效率高

EGO Planner代码解析----CMakeLists.txt和package.xml_第2张图片

  rospy  ROS的Python库

  std_msgs  ROS中,节点之间通过发布话题和订阅话题来通信,
  在程序中是通过消息发布器和订阅器来实现,数据流通过话题的发布和订阅在节点之间传播
  而数据流的数据类型则称为消息,ROS消息传递——std_msgs。

visualization_msgs  rviz(ROS  visualization) 用于机器人、传感器和算法的通用3D可视化系统。rviz能够绘制多种类型的数据流。特别是三维的数据。在ROS中所有类型的数据都被关联到一个参考坐标系上。

cv_bridge cv_bridge是在ROS图像消息和OpenCV图像之间进行转换的一个功能包.

EGO Planner代码解析----CMakeLists.txt和package.xml_第3张图片

 8、catkin_package

在add_library和add_exacutable前调用的.如果指定了INCLUDE_DIRS和LIBRARIES
则catkin_make产生对应xxxConfig.Cmake时会将此处的include目录和本库产生的库文件
加入到xxxConfig.Cmake的list中,然后别的包通过find_package就可以在那两个宏中得到所依赖库对应的头文件和库文件。给使用该包的包使用,使用于向其他包导出依赖。

catkin_package(
 INCLUDE_DIRS include 导出包的include路径
 LIBRARIES path_searching  导出项目path_searching的库
 CATKIN_DEPENDS plan_env  该项目依赖的其它功能包
#  DEPENDS system_lib
)

9、include_directories

设置包含的目录,当编译一个需要第三方库的项目时,为了让cmake知道在该项目中包含的外部头文件。相应文件中搜索头文件目录

include_directories( 
    SYSTEM 添加的头文件应按系统头文件处理
    include 
    ${catkin_INCLUDE_DIRS} 将引用每一个功能包的include目录的头文件
    ${Eigen3_INCLUDE_DIRS} 
    ${PCL_INCLUDE_DIRS}
)

10、add_library  制定编译包含的源文件
即制定编译的源文件为path_searching文件夹下的src目录下的dyn_a_star.cpp文件

add_library( path_searching 
    src/dyn_a_star.cpp
    )

11、target_link_libraries

指定可执行文件需要链接的库,设置要链接的库文件的名称

target_link_libraries( path_searching
    ${catkin_LIBRARIES} 
    )  

package.xml

package.xml文件定义了package的属性。(例如:包名,版本号,作者等等),相当于一个包的自我描述。

EGO Planner代码解析----CMakeLists.txt和package.xml_第4张图片

对应内容如下

 xml版本号
根标签(起)
  path_searching功能包名字
  0.0.0版本号
  The path_searching package功能包描述:该包为路径搜索功能包
iszhouxin 维护者
  TODO软件许可
  catkin编译构建工具为catkin
  roscpp编译依赖项为roscpp、rospy、std msgs、plan_env
  rospy
  std_msgs
  plan_env
  roscpp导出依赖项roscpp、rospy、std msgs
  rospy
  std_msgs
  roscpp运行依赖项roscpp、rospy、std msgs、plan_env
  rospy
  std_msgs
  plan_env
  
   

 

你可能感兴趣的:(ROS,复现,自动驾驶,人工智能,机器学习)