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-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客户端库,执行效率高

  rospy  ROS的Python库

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

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

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

 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的属性。(例如:包名,版本号,作者等等),相当于一个包的自我描述。

对应内容如下

<?xml version="1.0"?> xml版本号
<package format="2">根标签(起)
  <name>path_searching</name>功能包名字
  <version>0.0.0</version>版本号
  <description>The path_searching package</description>功能包描述:该包为路径搜索功能包
<maintainer email="iszhouxin@zju.edu.cn">iszhouxin</maintainer> 维护者
  <license>TODO</license>软件许可
  <buildtool_depend>catkin</buildtool_depend>编译构建工具为catkin
  <build_depend>roscpp</build_depend>编译依赖项为roscpp、rospy、std msgs、plan_env
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>plan_env</build_depend>
  <build_export_depend>roscpp</build_export_depend>导出依赖项roscpp、rospy、std msgs
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>运行依赖项roscpp、rospy、std msgs、plan_env
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <exec_depend>plan_env</exec_depend>
  <export>
   </export>

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值