文章目录
- 前言
- 1. CMakeLists.txt
- 1.1 基本结构
- 1.2 各条目含义
- 1.3 增加节点后的修改
- 添加可执行文件
- 链接库
- 2. package.xml
- 2.1 基本结构
- 2.2 各条目含义
- <name>
- <version>
- <description>
- <maintainer>
- <license>
- <buildtool_depend>
- <build_depend>
- <build_export_depend>
- <exec_depend>
- 2.3 增加节点后的修改
- 3.总结
- 3.1CMakeLixt.txt
- 3.2package.xml
前言
ROS(Robot Operating System)中的编译配置文件主要包括 CMakeLists.txt 和 package.xml。这两个文件用于定义包的依赖关系、编译规则、安装规则等。下面详细介绍这两个文件的结构和各条目的含义,并说明在增加一个节点后需要修改的内容。
1. CMakeLists.txt
CMakeLists.txt 是 CMake 的配置文件,用于定义如何编译 ROS 包中的代码。它包含了编译可执行文件、库、依赖项等信息。
1.1 基本结构
cmake_minimum_required(VERSION 3.0.2)
project(my_package)find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgs
)catkin_package(CATKIN_DEPENDS roscpp rospy std_msgs
)include_directories(include${catkin_INCLUDE_DIRS}
)add_executable(my_node src/my_node.cpp)
target_link_libraries(my_node ${catkin_LIBRARIES})add_executable(another_node src/another_node.cpp)
target_link_libraries(another_node ${catkin_LIBRARIES})
1.2 各条目含义
cmake_minimum_required(VERSION 3.0.2): 指定 CMake 的最低版本要求。
project(my_package): 定义项目名称,通常与包名一致。
find_package(catkin REQUIRED COMPONENTS …): 查找并加载 ROS 的 catkin 构建系统,并指定依赖的其他 ROS 包(如 roscpp, rospy, std_msgs 等)。
catkin_package(): 定义包的 CMake 配置,通常用于指定包的依赖项。
include_directories(): 指定头文件的搜索路径,通常包括 include 目录和 catkin 提供的头文件路径。
add_executable(my_node src/my_node.cpp): 定义一个可执行文件 my_node,并指定其源文件 src/my_node.cpp。
target_link_libraries(my_node ${catkin_LIBRARIES}): 将可执行文件 my_node 与所需的库链接,通常是 catkin 提供的库。
1.3 增加节点后的修改
在增加一个新节点时,通常需要做以下修改:
添加可执行文件
添加新的可执行文件:在 CMakeLists.txt 中添加一个新的 add_executable 条目,指定新节点的源文件。
add_executable(new_node src/new_node.cpp)
链接库
链接库:为新节点添加 target_link_libraries 条目,确保它链接到所需的库。
target_link_libraries(new_node ${catkin_LIBRARIES})
2. package.xml
package.xml 是 ROS 包的元数据文件,用于定义包的依赖关系、作者信息、许可证等信息。
2.1 基本结构
<?xml version="1.0"?>
<package format="2"><name>my_package</name><version>0.0.0</version><description>The my_package package</description><maintainer email="user@todo.todo">user</maintainer><license>TODO</license><buildtool_depend>catkin</buildtool_depend><build_depend>roscpp</build_depend><build_depend>rospy</build_depend><build_depend>std_msgs</build_depend><build_export_depend>roscpp</build_export_depend><build_export_depend>rospy</build_export_depend><build_export_depend>std_msgs</build_export_depend><exec_depend>roscpp</exec_depend><exec_depend>rospy</exec_depend><exec_depend>std_msgs</exec_depend>
</package>
2.2 各条目含义
: 包的名称,必须与 CMakeLists.txt 中的 project 名称一致。
: 包的版本号。
: 包的简要描述。
: 包的维护者信息。
: 包的许可证信息。
<buildtool_depend>
<buildtool_depend>: 指定构建工具依赖,通常是 catkin。
<build_depend>
<build_depend>: 指定编译时依赖的包。
<build_export_depend>
<build_export_depend>: 指定导出时依赖的包。
<exec_depend>
<exec_depend>: 指定运行时依赖的包。
2.3 增加节点后的修改
在增加一个新节点后,通常不需要修改 package.xml,除非新节点引入了新的依赖项。如果新节点依赖了新的 ROS 包,需要在 package.xml 中添加相应的依赖项。
例如,如果新节点依赖 sensor_msgs,则需要添加:
<build_depend>sensor_msgs</build_depend>
<build_export_depend>sensor_msgs</build_export_depend>
<exec_depend>sensor_msgs</exec_depend>
3.总结
3.1CMakeLixt.txt
CMakeLists.txt: 主要用于定义如何编译代码,增加新节点时需要添加新的
add_executable 和 target_link_libraries 条目。
3.2package.xml
package.xml: 主要用于定义包的元数据和依赖关系,增加新节点时通常不需要修改,除非引入了新的依赖项。
通过正确配置这两个文件,可以确保 ROS 包能够正确编译和运行。