功能包和CMakeLists.txt
功能包和CMakeLists.txt
#功能包
##进入~/catkin_ws/src目录:
cd ~/catkin_ws/src
##创建功能包:
catkin_create_pkg package_name depend1 depend2
*package_name:功能包名字
*depend*:依赖项
catkin_create_pkg test_pkg std_msgs roscpp
*std_msgs:包含消息类型----节点上功能包的基本单位,而std_msgs是节点间通信所需的库
*roscpp:支持C++编程的库---ros支持多种编程语言,如使用python编程则需添加rospy的依赖项
##功能包的组成:
###package.xml:
package.xml是用来描述此功能包的信息,包含功能包名称、作者、许可证和依赖功能包。具体信息在后面。
###CmakeLists.txt:
ROS的构建系统catkin基本上使用CMake,并在功能包目录中的CMakeList.txt文件描述构建环境。在这个文件中设置可执行文件的创建,依赖包优先构建,连接器的创建等等。具体内容在后面。
###src:
存放节点代码的目录。
###include:
存放头文件的目录。
###launch:
很多功能还有launch目录。目录中的*.launch文件可以启动多个节点,还方便设置参数。
###msg和srv:
消息文件和头文件
####package.xml
<?xml> 这是一个定义文档语法的语句,随后的内容表明在遵循xml版本1.0.
<package> 从这个语句到最后</package>的部分是ROS功能包的配置部分。
<name> 功能包的名称。使用创建功能包时输入的功能包名称。正如其他选项,用户可随时修改。
<version> 功能包的版本。可以自由指定
<description> 功能包的简要说明。
<maintainer> 提供功能包管理者的姓名和电子邮件地址
<license> 记录版权许可证
<url> 记录描述功能包的说明的地址。
<author> 记录参与功能包开发人员
<buildtool_depend> 描述构建系统的依赖关系。--catkin
<build_depend> 在编写功能包时写下您所依赖的功能包的名称
<run_depend> 填写运行功能包时依赖的功能包的名称
<test_depend> 填写测试功能包时依赖的功能包的名称
####CmakeLists.txt
cmake_minimum_required(VERSION 2.8.3)
最低版本要求
project(test_pkg)
project项是功能包的名称,需要与package.xml中的<name>一致。
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)
find_package项是进行构建所需要的组建包。目前,roscpp和std_msgs被添加为依赖包。
catkin_python_setup()
catkin_python_setup()选项是在使用python,也就是使用rospy时的配置选项。
其功能是调用python安装过程setup.py。
add _ message _ files (
FILES
Message1 . msg
Message2 . msg
)
add_message_files是添加消息文件的选项。FILES将引用当前功能包目录的msg目录中的*.msg文件,自动生成一个头文件(*.h)。
add _ service _ files (
FILES
Service1 . srv
Service2 . srv
)
add_service_files是添加要使用的服务文件的选项。使用FILES会引用功能包目录中的srv目录中的*.srv文件。在这个例子中,用户可以选择使用服务文件Service1.srv和Service2.srv。
generate _ messages (
DEPENDENCIES
std_msgs
)
generate_messages是设置依赖的消息的选项。此示例是DEPENDENCIES选项设置为使用std_msgs消息包。
catkin _ package (
INCLUDE _ DIRS include
LIBRARIES test_ pkg
CATKIN _ DEPENDS roscpp std _ msgs
DEPENDS system _ lib
)
catkin 构建选项。INCLUDE_DIRS表示将使用INCLUDE_DIRS后面的内部目录include的头文件。LIBRARIES表示将使用随后而来的功能包的库。
CATKIN_DEPENDS后面指定如roscpp或std_msgs等依赖包。目前的设是表示依赖于roscpp和std_msgs。DEPENDS是一个描述系统依赖包的设置。
include _ directories (
${ catkin _ INCLUDE _ DIRS }
)
include_directories是可以指定包含目录的选项。目前设定为${catkin_INCLUDE_DIRS},这意味着将引用每个功能包中的include目录中的头文件。当用户想指定一个额外的include目录时,写在${catkin_INCLUDE_DIRS}的下一行即可。
add _ library ( test_ pkg
src /${ PROJECT _ NAME }/ test . cpp
)
add _ executable ( test_ pkg _ node src / test _ node . Cpp )
add_executable是对于构建之后要创建的可执行文件的选项
target _ link _ libraries (test _ pkg _ node
${ catkin _ LIBRARIES }
)
target_link_libraries是在创建特定的可执行文件之前将库和可执行文件进行链接的选项。