本系列博客参照《ROS机器人编程原理与应用》一书,搭载平台为冰达ROS小车,注释详细,持续更新,点个关注吧!
先切换到工作空间目录下,cd catkin_ws/src,必须在src目录下。
通过ROS的工具catkin_create_pkg bingda_practice创建一个 bingda_practice包。
打开vs,查看package.xml,package.xml是使用XML格式的ASCII文本,可以任何编译器打开。
package.xml的意思是:构建系统将根据其拥有的package.xml文件来重新组织ROS程序包,一个兼容的package.xml文件具有一个特定的结构,可以命名程序包,并列出依赖项。
以下代码中的两个<>中间的<什么什么什么>都是注释!
package.xml代码注释如下:
<?xml version="1.0"?>
<package format="2">
<name>bingda_parctices</name>//包的名称
<version>0.0.0</version>//版本号,比如修改为1.0
<description>The bingda_parctices package</description>//功能包功能的描述
<!-- 需要一个维护人员标签,允许多个,每个标签一人 -->
<!-- Example: -->
<!-- <maintainer email="[email protected]">Jane Doe</maintainer> -->
<maintainer email="[email protected]">bingda</maintainer>//功能包开源后可以在这里留下联系方式
<!-- 需要一个许可证标签,允许多个,每个标签一个许可 -->
<!-- 常用许可证字符串: -->
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<license>TODO</license>//开源后可以选择开源的协议,例如BSD, MIT, Boost Software License等
<!-- Url标记是可选的,但允许有多个,每个标记一个 -->
<!-- 可选属性类型可以是: website, bugtracker, or repository -->
<!-- Example: -->
<!-- <url type="website">http://wiki.ros.org/bingda_parctices -->
<!-- 作者标签是可选的,允许多个,每个标签一个 -->
<!-- 作者不必是维护者,但可以是 -->
<!-- Example: -->
<!-- <author email="[email protected]">Jane Doe</author> -->
<!-- *depend 标记用于指定依赖项 -->
<!-- 依赖项可以是catkin包或系统依赖项 -->
<!-- Examples: -->
<!-- 将depend用作同时依赖于生成和执行的包的快捷方式 -->
<!-- <depend>roscpp</depend> -->
<!-- 请注意,这相当于以下内容: -->
<!-- <build_depend>roscpp</build_depend> -->
<!-- <exec_depend>roscpp</exec_depend> -->
<!-- 对编译时需要的包使用build_depend: -->
<!-- <build_depend>message_generation</build_depend> -->
<!-- 对需要的包使用build_export_depend,以便根据此包进行构建: -->
<!-- <build_export_depend>message_generation</build_export_depend> -->
<!-- 将buildtool_depend用于生成工具包: -->
<!-- <buildtool_depend>catkin</buildtool_depend> -->
<!-- 对运行时需要的包使用exec_depend: -->
<!-- <exec_depend>message_runtime</exec_depend> -->
<!-- 对仅用于测试的包使用test_depend: -->
<!-- <test_depend>gtest</test_depend> -->
<!-- 将doc_depend用于仅用于生成文档的包: -->
<!-- <doc_depend>doxygen</doc_depend> -->
<buildtool_depend>catkin</buildtool_depend>//编译工具所需要的依赖
<!-- 导出标记包含其他未指定的标记 -->
<export>
<!-- 其他工具可以请求更多信息,请放在此处 -->
</export>
</package>
再看CMakeLists.txt文件,
以下代码的
##什么什么
的 什么什么 都是注释
CMakeLists.txt代码注如下:
cmake_minimum_required(VERSION 3.0.2)
project(bingda_parctices)
## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)
## 查找catkin宏和库
## 如果使用了类似find_package(catkin REQUIRED COMPONENTS xyz)的组件列表,也可以找到其他catkin包
find_package(catkin REQUIRED)
## 通过CMake的约定可以找到系统依赖关系
# find_package(Boost REQUIRED COMPONENTS system)
## 如果软件包有setup.py,请对此进行注释。此宏确保安装其中声明的模块和全局脚本请参见http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()
################################################
## 声明ROS消息、服务和操作 ##
################################################
## 要在此包中声明和构建消息、服务或操作,请执行以下步骤:
## * 让MSG_DEP_SET是您在消息/服务/操作中使用的消息类型的一组包(例如,std_msgs、actionlib_msgs…)。
## * 在文件package.xml中:
## * 为“messagegeneration”添加一个builde_pend标记
## * 在MSG_DEP_SET中为每个包添加build_depend和exec_depend标记
## * 如果MSG_DEP_SET不为空,则已拉入以下依赖项,但仍可以确定地声明:
## * add a exec_depend tag for "message_runtime"
## * 在本文档(CMakeLists.txt)中:
## * add "message_generation" and every package in MSG_DEP_SET to
## find_package(catkin REQUIRED COMPONENTS ...)
## * add "message_runtime" and every package in MSG_DEP_SET to
## catkin_package(CATKIN_DEPENDS ...)
## * uncomment the add_*_files sections below as needed
## and list every .msg/.srv/.action file to be processed
## * uncomment the generate_messages entry below
## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
//上面几句不好翻译,自己悟吧
## 在“msg”文件夹中生成消息
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
## 在“srv”文件夹中生成服务
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )
## 在“action”文件夹中生成操作
# add_action_files(
# FILES
# Action1.action
# Action2.action
# )
## 使用此处列出的任何依赖项生成添加的消息和服务
# generate_messages(
# DEPENDENCIES
# std_msgs # Or other packages containing msgs
# )
################################################
## 声明ROS动态重新配置参数 ##
################################################
## 要在此包中声明和构建动态重新配置参数,请执行以下步骤:
## * 在文件package.xml中:
## * 为“dynamicreconfigure”添加build_depend和exec_depend标记
## * In this file (CMakeLists.txt):
## * add "dynamic_reconfigure" to
## find_package(catkin REQUIRED COMPONENTS ...)
## * uncomment the "generate_dynamic_reconfigure_options" section below
## and list every .cfg file to be processed
## 在“cfg”文件夹中生成动态重新配置参数
# generate_dynamic_reconfigure_options(
# cfg/DynReconf1.cfg
# cfg/DynReconf2.cfg
# )
###################################
## catkin特定配置 ##
###################################
## catkin_package宏为您的包生成cmake配置文件
## 声明要传递给相关项目的内容
## INCLUDE_DIRS: 如果您的包包含头文件,请取消注释
## LIBRARIES: 在此项目中创建的依赖项目也需要的库
## CATKIN_DEPENDS:依赖于catkin_packages的项目也需要
## DEPENDS: 依赖项目也需要的此项目的系统依赖项
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES bingda_parctices
# CATKIN_DEPENDS other_catkin_pkg
# DEPENDS system_lib
)
###########
## Build ##
###########
## 指定头文件的其他位置
## 您的包位置应在其他位置之前列出
include_directories(
# include
# ${catkin_INCLUDE_DIRS}
)
## Declare a C++ library
# add_library(${PROJECT_NAME}
# src/${PROJECT_NAME}/bingda_parctices.cpp
# )
## 添加库的cmake目标依赖项
## 例如,代码可能需要在库之前生成
## 从消息生成或动态重新配置
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## Declare a C++ executable
## 使用catkin_make,所有包都在单个CMake上下文中构建
## 推荐的前缀确保跨包的目标名称不会发生冲突
# add_executable(${PROJECT_NAME}_node src/bingda_parctices_node.cpp)
## Rename C++ executable without prefix
## 上面推荐的前缀会导致目标名称过长,为了便于用户使用,下面将目标重命名回较短的版本
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
## 添加可执行文件的cmake目标依赖项
## same as for the library above
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## 指定要链接库或可执行目标的库
# target_link_libraries(${PROJECT_NAME}_node
# ${catkin_LIBRARIES}
# )
#############
## Install ##
#############
# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
## 将可执行脚本(Python等)标记为安装,而不是设置.py,你可以选择目的地
# catkin_install_python(PROGRAMS
# scripts/my_python_script
# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark executables for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
# install(TARGETS ${PROJECT_NAME}_node
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark libraries for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
# install(TARGETS ${PROJECT_NAME}
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
# )
## Mark cpp header files for installation
# install(DIRECTORY include/${PROJECT_NAME}/
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
# FILES_MATCHING PATTERN "*.h"
# PATTERN ".svn" EXCLUDE
# )
## Mark other files for installation (e.g. launch and bag files, etc.)
# install(FILES
# # myfile1
# # myfile2
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )
#############
## Testing ##
#############
## 添加基于gtest的cpp测试目标和链接库
# catkin_add_gtest(${PROJECT_NAME}-test test/test_bingda_parctices.cpp)
# if(TARGET ${PROJECT_NAME}-test)
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()
## 添加要由python nosetests运行的文件夹
# catkin_add_nosetests(test)
在catkin_ws终端运行catkin_make进行编译。