ROS中的 package 的定义更加具体,它不仅是 Linux 上的软件包,更是catkin编译的基本单元,我们调用catkin_make
编译的对象就是一个个 ROS 的 package ,也就是说任何 ROS 程序只有组织成 package 才能编译。所以 package 也是 ROS 源代码存放的地方,任何 ROS 的代码无论是 C++ 还 是 Python 都要放到 package 中,这样才能正常的编译和运行。 一个 package 可以编译出来多个目标文件( ROS 可执行程序、动态静态库、头文件等等)。
一个package下常见的文件、路径有:
├── CMakeLists.txt #package的编译规则(必须)
├── package.xml #package的描述信息(必须)
├── src/ #源代码文件
├── include/ #C++头文件
├── scripts/ #可执行脚本
├── msg/ #自定义消息
├── srv/ #自定义服务
├── models/ #3D模型文件
├── urdf/ #urdf文件
├── launch/ #launch文件
其中定义 package 的是 CMakeLists.txt 和 package.xml ,这两个文件是 package 中必不可少 的。 catkin 编译系统在编译前,首先就要解析这两个文件。这两个文件就定义了一个 package 。
通常 ROS 文件组织都是按照以上的形式,这是约定俗成的命名习惯,建议遵守。以上路径 中,只有 CMakeLists.txt 和 package.xml 是必须的,其余路径根据软件包是否需要来决定。
创建一个package需要在 catkin_ws/src 下,用到catkin_create_pkg
命令,用法是:
catkin_create_pkg package depends
其中 package 是包名,depends 是依赖的包名,可以依赖多个软件包。 例如,新建一个 package 叫做 test_pkg ,依赖roscpp、rospy、std_msgs(常用依赖)。
$ catkin_create_pkg test_pkg roscpp rospy std_msgs
这样就会在当前路径下新建 test_pkg 软件包,包括:
如果有新的目标文件产生(原来没有) ,那么一般紧跟着要source刷新环境,使得系统能够找到刚才编译生成的ROS可执行文件。
所以,这里必须要重新编译一下工作空间,刷新一下环境:
$ cd ~/catkin ws
$ catkin_ make #这一 步还不知道要不要,反正source是必须的
$ source ~/catkin _ws/devel/setup bash
这样才可以用下面的 rospack 的命令,要不然都不会找到的。
catkin_create_pkg
帮你完成了软件包的初始化,填充好了 CMakeLists.txt 和 package.xml , 并且将依赖项填进了这两个文件中。
rospack是对package管理的工具,命令的用法如下:
rostopic命令 | 作用 |
---|---|
rospack help | 显示rospack的用法 |
rospack list | 列出本机所有package |
rospack depends [package] | 显示package的依赖包 |
rospack find [package] | 定位某个package |
rospack profile | 刷新所有package的位置记录 |
以上命令如果 package 缺省,则默认为当前目录(如果当前目录包含 package.xml )
roscd命令类似与Linux系统的 cd ,改进之处在于 roscd 可以直接 cd 到ROS的软件包。
rostopic命令 | 作用 |
---|---|
roscd [pacakge] | cd到ROS package所在路径 |
rosls也可以视为Linux指令 ls 的改进版,可以直接 ls ROS软件包的内容。
rosls命令 | 作用 |
---|---|
rosls [pacakge] | 列出pacakge下的文件 |
rosdep是用于管理 ROS package 依赖项的命令行工具,用法如下:
rosdep命令 | 作用 |
---|---|
rosdep check [pacakge] | 检查package的依赖是否满足 |
rosdep install [pacakge] | 安装pacakge的依赖 |
rosdep db | 生成和显示依赖数据库 |
rosdep init | 初始化/etc/ros/rosdep中的源 |
rosdep keys | 检查package的依赖是否满足 |
rosdep update | 更新本地的rosdep数据库 |
一个较常使用的命令是 rosdep install --from-paths src --ignore-src --rosdistro=kinetic y
,用于安装工作空间中 src 路径下所有package的依赖项(由pacakge.xml文件指定)。
=============================================================================
本文作为笔记查阅之用,无涉其他用途。