2021SC@SDUSC
ROS源代码阅读(6)
接下来看功能包
在下面庞大的ROS操作系统的支持下,我们可以在功能包建立节点node,而不同node之间可以协作完成一些特殊的工作,所以功能包就像是我们熟知的用户应用程序,可以通过实现节点帮助我们完成我们想做的事情。
下面我们看看对于功能包的使用:
1、创建工作空间
在开始具体工作之前,首先创建工作空间,并且为工作空间设置环境变量到~/.bashrc中,如果要查看已有的空间路径,可以用查询命令:
$ echo $ROS_PACKAGE_PATH
这里的创建空间实际上就是先建立一个文件夹,然后把文件夹的路径设置到环境变量/.bashrc中。例如我们这里创建目录/dev/rosbook作为工作空间,和第一种方法类似。
下面我们开始创建一个catkin 工作空间:
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
即使这个工作空间是空的(在’src’目录中没有任何软件包,只有一个CMakeLists.txt链接文件),你依然可以“build”它:
$ cd ~/catkin_ws/
$ catkin_make
接下来首先source一下新生成的setup.*sh文件,把它加入环境变量到~/.bashrc文件中:
$ source ~/catkin_ws/devel/setup.bash
到此工作空间环境已经搭建完成
2、创建包
首先切换到之前创建的catkin工作空间中的src目录下:
$ cd ~/catkin_ws/src
现在使用catkin_create_pkg命令来创建一个新的功能包包,这个程序包依赖于std_msgs、roscpp和rospy:
$ catkin_create_pkg package-name std_msgs rospy roscpp
这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件,这两个文件都已经自动包含了部分你在执行catkin_create_pkg命令时提供的信息。
然后将你要完成的工作编写节点代码并且放入src目录下,然后修改CMakeList文件和package.xml文件为编译做准备
最后一步,编译,最方便的方法是用catkin_make完成
catkin_make 是一个命令行工具,它简化了catkin的标准工作流程。你可以认为catkin_make是在CMake标准工作流程中依次调用了cmake 和 make。
先source环境配置(setup)文件,在Ubuntu中的操作指令如下:
$ source ~/setup.bash
切换到catkin workspace :
$ cd ~/catkin_ws/
执行编译:
$ catkin_make
这样我们可以看一下功能包的结构
─ build
│ ├── catkin
│ │ └── catkin_generated
│ │ └── version
│ │ └── package.cmake
│ ├──
......
│ ├── catkin_make.cache
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ │ ├──
......
├── devel
│ ├── env.sh
│ ├── lib
│ ├── setup.bash
│ ├── setup.sh
│ ├── _setup_util.py
│ └── setup.zsh
└── src
└── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
通过tree命令可以看到catkin工作空间的结构,它包括了src、build、devel三个路径,在有些编译选项下也可能包括其他。但这三个文件夹是catkin编译系统默认的。它们的具体作用如下:
src/: ROS的catkin软件包(源代码包)
build/: catkin(CMake)的缓存信息和中间文件
devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量
总结下来Package功能包:
ROS程序只有组成package才能编译;
package是ROS源代码存放的地方;
ROS的代码无论是C++还是Python都要放到package中,这样才能正常的编译和运行;
一个package可以编译出来多个目标文件(ROS可执行程序、动态静态库、头文件等等)。