1. ROS的文件系统
硬盘上,ROS源代码的组织形式。
- 自定义的
工作空间
devel
:开发空间。存放编译后生成的目标文件(头文件,可执行文件
,动态、静态链接库…)build
:编译空间。存放CMake和catkin的缓存信息、配置信息和其他中间文件。src
:源码- CMakeLists.txt:工作空间编译的规则
功能包
(ROS基本单元)。包含多个节点
、库与配置文件;包名所有字母小写
,只能由字母、数字与下划线
组成- 配置文件
- CMakeLists.txt:功能包编译的规则,比如
源文件
、依赖项
、目标文件
Package.xml
:包信息
,比如:包名
、版本
、作者
、依赖项
…
- CMakeLists.txt:功能包编译的规则,比如
- 源文件
src
:c++源文件scripts
:python文件
- 通信机制 (ROS的学习核心)
msg
:消息
通信格式文件srv
:话题
通信格式文件action
:行动
格式文件
- 其他
include
:头文件config
:配置信息launch
:同时运行多个节点的.launch
文件
- 配置文件
2. package.xml
配置文件
(1)自动生成
的,以后需要手动修改
。
(2)位置:hello
功能包下
(3)该文件定义有关软件包的属性
,例如软件包名称
,版本号
,作者,维护者以及对其他catkin软件包的依赖性。
<?xml version="1.0"?>
<package format="2">
<!-- 功能包名称 -->
<name>hello</name>
<!-- 版本 -->
<version>0.0.0</version>
<!-- 描述信息 -->
<description>The hello package</description>
<!-- One maintainer tag required, multiple allowed, one person per tag -->
<!-- Example: -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<!-- 维护者信息 -->
<maintainer email="xiaoyue@todo.todo">xiaoyue</maintainer>
<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<!-- 许可证信息,ROS和新组建默认BSD -->
<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>
<!-- The export tag contains other, unspecified, tags -->
<export>
<!-- Other tools can request additional information be placed here -->
</export>
</package>
3. CMakeLists.txt
配置文件
(1)CMakeLists.txt
是CMake构建系统的输入
,用于构建软件包
。
(2)任何兼容CMake的软件包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何构建代码
以及将代码安装到何处
。
cmake_minimum_required(VERSION 3.0.2) #所需 cmake 最低版本
project(hello) #功能包名称,会被 ${PROJECT_NAME} 的方式调用
## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)
# 编译功能包(即构建功能包)时,依赖的外部包实现。
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
#默认添加系统依赖
# find_package(Boost REQUIRED COMPONENTS system)
# 启动 python 模块支持
# catkin_python_setup()
###################################
## catkin specific configuration ##
## catkin 特定配置##
###################################
# 运行时依赖
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo01_hello_vscode
# CATKIN_DEPENDS roscpp rospy std_msgs
# DEPENDS system_lib
)
###########
## Build ##
###########
# 添加头文件路径,当前程序包的头文件路径位于其他文件路径之前
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
## Declare a C++ library
# 声明 C++ 库
# add_library(${PROJECT_NAME}
# src/${PROJECT_NAME}/demo01_hello_vscode.cpp
# )
# 添加库的 cmake 目标依赖
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
# 添加 C++ 可执行文件
add_executable(helloc src/helloc.cpp)
#重命名c++可执行文件
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
#添加可执行文件的 cmake 目标依赖
add_dependencies(Hello_VSCode ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
#指定库、可执行文件的链接库
target_link_libraries(helloc
${catkin_LIBRARIES}
)
#############
## Install ##
## 安装 ##
#############
#配置scripts文件夹下的hellop.py文件 :1.指定解释器 2.正确安装.py脚本
catkin_install_python(PROGRAMS
scripts/hellop.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)