文章目录
package是什么
ROS软件的基本组织形式,catkin编译的基本单元。
一个package可以包含多个可执行文件(节点)
## 如何判断一个文件夹是package
一个功能包被catkin认为一个package必须有以下两个文件:
- CMakeList.txt
- package.xml
package中有什么
CMakeLists.txt
规定catkin编译的规则。
例如:如何编译,要编译哪些代码,需要哪些依赖、需要生成哪些目标文件、如何链接
CMakeLists.txt中的一些语句及其功能:
语句 | 功能 |
---|---|
cmake_minimum_required() | 指定catkin的最低版本 |
project() | 指定软件包的名称 |
find_packege() | 指定编译时需要的依赖项 |
add_message_files() | 添加消息文件 |
add_service_files() | 添加服务文件 |
add_action_files() | 添加动作文件 |
generate_messages() | 生成消息、服务、动作 |
catkin_package() | 指定catkin信息给编译系统生成CMake文件 |
add_library() | 指定生成库文件 |
add_executable() | 指定生成可执行文件 |
target_link_libraries() | 指定可执行文件去链接哪些库 |
catkin_add_gtest() | 添加测试单元 |
install() | 生成可安装目标 |
package.xml
定义了package的属性,例如包名、版本号、作者、依赖等。
写法:
<pakage> <!--根标签-->
<name> <!--包名-->
<version> <!--版本号-->
<description> <!--包描述-->
<maintainer> <!--维护者-->
<license> <!--软件许可-->
<buildtool_depend> <!--编译工具-->
<build_depend> <!--编译时的依赖-->
<run_depend> <!--运行时的依赖-->
</pakage> <!--根标签-->
代码文件
来源:
- 脚本(shell, python)
- C++(头文件、源文件)
一般将Python和shell脚本放到‘scripts’文件夹中,把C++头文件放到‘include’文件夹中,把C++源文件放在’src‘文件夹中(’src’文件夹中还可放可以被其他包import
的Python文件)。
自定义的通信格式
消息(msg)、服务(srv)、动作(action),分别放在’/msg’、’/srv’、’/action’文件夹。
launch以及配置文件
- launch文件:放置在’/launch’文件夹中,实现一次运行多个可执行文件
- 配置文件(yaml):放置在’/config’,参数设置,一般用.yaml格式
package的文件组织
常用包管理指令
-
rospack
查找某个package的地址:
rospack find package_name
列出本地所有package:
rospack list
-
roscd
跳转到某个package路径下:
roscd package_name
-
rosls
列出某个package下的文件信息
rosls package_name
-
rosed
编辑package中的文件
rosed package_name file_name
-
catkin_create_pkg
创建一个package:
catkin_create_pkg <pkg_name> [deps]
-
rosdep
安装某个package所需的依赖(通常用来安装
git clone
下来的package的依赖)rosdep install [pkg_name]