要使用ROS系统进行开发,首先需要在ROS下创建工作空间(workspace)和程序包(package)。
创建工作空间:
$ mkdir -p ~/catkin_ws/src
执行上述命令即在用户主目录下创建了catkin_ws文件夹及其子文件夹src(-p表示创建目标路径上的所有文件夹)。此时,catkin_ws即为你的工作空间,src为存放程序包的文件夹(src可以存放多个程序包)。
下面切换到工作空间下,并对其进行编译(工作空间下没有任何程序包依然可以进行编译):
$ cd ~/catkin_ws/
$ catkin_make
此时,会发现catkin_ws文件夹下除了src,又多出两个文件夹build和devel。build文件夹是build space的默认所在位置,同时catkin_make也是在这里被调用来配置并编译你的程序包。devel文件夹是devel space的默认所在位置, 同时也是在你安装程序包之前存放可执行文件和库文件的地方。在devel文件夹里有多个setup.*sh文件。source这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层。接下来首先source一下新生成的setup.*sh
为了确保ROS_PACKAGE_PATH环境变量包含你的工作空间目录,采用以下命令查看:
$ echo $ROS_PACKAGE_PATH
若返回以下信息:(我安装的ROS是kinetic版本)
/home/你的用户名/你的工作空间名/src:/opt/ros/kinetic(ROS的版本名)/share
则表示你的工作变量已经配置正确。
接下来在src文件夹中创建一个新的程序包:
$ cd ~/catkin_ws/src/
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
执行上述命令后,src文件夹下就会出现一个新文件夹beginner_tutorials和一个新文件CMakeList.txt,beginner_tutorials即为我们新建的程序包,该文件夹下至少包括CMakeList.txt和package.xml两个文件。std_msgs、rospy、roscpp为beginner_tutorials的依赖包,其作用相当于一个程序源文件所需要的头文件。
需要注意的是程序包的目录不能相互嵌套,即若需要创建一个新的程序包,不能建在beginner_tutorials文件夹下。
由上述的创建过程,我们可以知道,一个工作空间和程序包的典型结构应为:
workspace_folder/ -- WORKSPACE
src/ -- SOURCE SPACE
CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin
package_1/
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
devel/
setup.*sh
build/
在工作空间下完成程序包的创建后,再次在工作空间目录下进行编译(编译其中的程序包):
首先source一下你的环境配置文件:
$ source /opt/ros/kinetic/setup.bash
再在工作空间下编译程序包:
$ cd ~/catkin_ws/
$ catkin_make
至此,我们就完成了一个新的工作空间和程序包的创建和编译。