电子说
package 软件包
package是catkin编译的最小单元,我们调用catkin_make编译的对象就是一个个package,所以package也是ROS源码存放的地方。
一个package常见的结构有:
├── CMakeLists.txt #package的编译规则(必须)
├── package.xml #package的描述信息(必须)
├── src/ #源代码文件
├── include/ #C++头文件
├── scripts/ #可执行脚本
├── msg/ #自定义消息
├── srv/ #自定义服务
├── models/ #3D模型文件
├── urdf/ #urdf文件
├── launch/ #launch文件
通常ROS文件组织都是按照以上的形式,这是约定俗成的命名习惯,建议遵守。以上路径 只有 CMakeLists.txt 和 package.xml 是必须的,其余路径根据软件包是否需要来决定 。
package创建
创建package需要工作空间的src目录下,使用catkin_create_pkg package depends
其中package 是包名,depends是依赖的包名(如roscpp、rospy、std_msgs)执行命令后会自动完成软件包的初始化,并将依赖包按格式写入CMakeList.txt、package.xml.
gaocancan@ubuntu:~/catkin_test/src$ catkin_create_pkg catkin_test_pkg roscpp rospy std_msg
Created file catkin_test_pkg/CMakeLists.txt
Created file catkin_test_pkg/package.xml
Created folder catkin_test_pkg/include/catkin_test_pkg
Created folder catkin_test_pkg/src
Successfully created files in /home/gaocancan/catkin_test/src/catkin_test_pkg. Please adjust the values in package.xml.
gaocancan@ubuntu:~/catkin_test/src$ tree
.
├── catkin_test_pkg
│ ├── CMakeLists.txt
│ ├── include
│ │ └── catkin_test_pkg
│ ├── package.xml
│ └── src
└── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
4 directories, 3 files
gaocancan@ubuntu:~/catkin_test/src$
常用ros 命令:
如果不指定 [package]默认为当前目录
rospack list #列出本机所有package
rospack find [package] #定位某个package
rospack profile [package] #刷新所有package位置记录
rospack depends [package] #显示package依赖包
roscd [package] #打开package
rosls [package] #相当于ls
rosdep check [package] #检查package依赖是否满足
rosdep install [package] #安装package的依赖
rosdep db #生成和显示依赖数据库
rosdep init #初始化/etc/ros/rosdep中的源
rosdep keys 检查package的依赖是否满足
rosdep update 更新本地的rosdep数据库
cmakelists.txt、package.xml文件介绍
CMakeList.txt指定源码到目标文件的规则,该文件规定了package要依赖的包,编译目标文件、编译流程等。
cmakelists.txt写法:
cmake_minimum_required() #CMake的版本号
project() #项目名称
find_package() #找到编译需要的其他CMake/Catkin package
catkin_python_setup() #catkin新加宏,打开catkin的Python Module的支持
add_message_files() #catkin新加宏,添加自定义Message/Service/Action文件
add_service_files()
add_action_files()
generate_message() #catkin新加宏,生成不同语言版本的msg/srv/action接口 --重要
catkin_package() #catkin新加宏,生成当前package的cmake配置,供依赖本包的其他软件包调用 --重要
add_library() #生成库
add_executable() #生成可执行二进制文件
add_dependencies() #定义目标文件依赖于其他目标文件,确保其他目标已被构建
target_link_libraries() #链接
catkin_add_gtest() #catkin新加宏,生成测试
install() #安装至本机
语法推荐:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf 。作者写的很直白,掌握CMake语法可以加深理解ROS工程
package.xml 包含了package 的名称、版本号、内容、编译依赖、运行依赖等信息,实际上rospack find 、rosdep命令也是读取该文件。
package.xml写法:
package.xml有两个版本,目前主流版本都支持。
版本一:
<pacakge> 根标记文件
<name> 包名
<version> 版本号
<description> 内容描述
<maintainer> 维护者
<license> 软件许可证
<buildtool_depend> 编译构建工具,通常为catkin --重要
<build_depend> 编译依赖项,与Catkin中的 --总要
<run_depend> 运行依赖项 --重要
版本二:
<pacakge> 根标记文件
<name> 包名
<version> 版本号
<description> 内容描述
<maintainer> 维护者
<license> 软件许可证
<buildtool_depend> 编译构建工具,通常为catkin
#用depend来整合build_depend和run_depend
<depend> 指定依赖项为编译、导出、运行需要的依赖,最常用 --重要
<build_depend> 编译依赖项 --重要
<build_export_depend> 导出依赖项 --重要
#用depend来整合build_depend和run_depend
<exec_depend> 运行依赖项 --重要
<test_depend> 测试用例依赖项
<doc_depend> 文档依赖项
全部0条评论
快来发表一下你的评论吧 !