ROS操作系统学习笔记2

电子说

1.2w人已加入

描述

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新加宏,打开catkinPython Module的支持
add_message_files() #catkin新加宏,添加自定义Message/Service/Action文件
add_service_files()
add_action_files()
generate_message() #catkin新加宏,生成不同语言版本的msg/srv/action接口 --重要
catkin_package() #catkin新加宏,生成当前packagecmake配置,供依赖本包的其他软件包调用 --重要
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> 文档依赖项
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分