跳转至

ROS1的包管理结构

ROS1的完全版本为我们提供了很多内置的功能包,这些包可以帮助我们快速的开发机器人应用。但是,如果我们想自己开发一些功能包,或者是想对现有的包进行改进,就需要了解ROS1的包管理结构。

功能包的创建

所有的ROS功能包需要置于一个特定的工作目录下,一般我们会创建一个名为catkin_ws的目录(其中ws是workspace的缩写),当然这个目录名字可以是任意的。这个目录下必须创建一个名为src的子目录,用于存放功能包的源代码和资源文件,包的初始化也是在子目录下进行。

创建命令:

Bash
1
2
3
mkdir -p ~/catkin_ws2/src
cd catkin_ws2/src
catkin_create_pkg my_package roscpp rospy std_msgs
其中mkdir命令的-p表示在创建目录的同时创建所有不存在的父级目录。

catkin_create_pkg命令的第一个参数是功能包的名称,后面跟着的是功能包的依赖项。

功能包创建成功后,工作空间根目录下会有以下文件(夹):

  • CMakeLists.txt:编译规则配置文件
  • package.xml:功能包元数据及依赖声明
  • src/:存放源代码(C++或Python文件)
  • include/:存放引用的头文件

功能包的编译

功能包的编译需要使用catkin_make命令,该命令会编译功能包及其依赖项,并生成可执行文件。

需要注意的是编译需要在工作空间根目录下运行。

编译命令:

Bash
cd ~/catkin_ws2
catkin_make

随后根目录下会生成builddevel两个目录,build目录用于存放编译过程中的中间文件,devel目录用于存放编译生成的可执行文件和库文件,而先前的include目录会消失。

设置环境变量

要想运行编译好的功能包,需要将其路径添加到环境变量中。

即在根目录下运行:

Bash
cd ~/catkin_ws2
source devel/setup.bash

如果是需要经常使用的功能包,可以将该命令添加到~/.bashrc文件中,这样每次打开终端都会自动设置环境变量。

整体结构

至此我们可以得到一个典型的ROS1功能包的目录结构如下:

Text Only
.
├── build/
│   ├── CATKIN_IGNORE
│   ├── CMakeCache.txt
│   ├── CMakeFiles/
│   ├── CTestConfiguration.ini
│   ├── CTestCustom.cmake
│   ├── CTestTestfile.cmake
│   ├── Makefile
│   ├── atomic_configure/
│   ├── bin/
│   ├── catkin/
│   ├── catkin_generated/
│   ├── catkin_make.cache
│   ├── cmake_install.cmake
│   ├── gtest/
│   ├── my_package/
│   └── test_results/
├── devel/
│   ├── _setup_util.py*
│   ├── cmake.lock
│   ├── env.sh*
│   ├── lib/
│   ├── local_setup.bash
│   ├── local_setup.sh
│   ├── local_setup.zsh
│   ├── setup.bash
│   ├── setup.sh
│   ├── setup.zsh
│   └── share/
└── src/
    ├── CMakeLists.txt -> /opt/ros/noetic/share/catkin/cmake/toplevel.cmake
    └── my_package/