接着上一个笔记,根据http://wiki.ros.org/ROS/Tutorials,创建一个ROS的包。
创建一个包
一个catkin的包主要有以下几部分组成:
(1)必须包括一个package.xml文件,
(2)必须包括一个CMakeLists.txt文件,
(3)在每一个文件夹下只能有一个包,且包不允许嵌套。
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
创建工作空间:
参考 : http://wiki.ros.org/catkin/Tutorials/create_a_workspace
- 首先需要修改环境变量
source /opt/ros/<你的ros版本>/setup.bash
- 创建工作空间文件夹
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
- 通过上面两条命令,就可以创建一个工作空间,并转到已创建好的工作空间之下,尽管这个空间是空的,我们仍然可以构建(build)它:
$ cd ~/catkin_ws/
$ catkin_make
- 当时用catkin工作空间时,catkin_make是一个非常方便的命令行工具。如果您看一下当前的工作目录,您会发现里面多了两个文件夹“build”和“devel”。在devel文件夹下,您可以看到很多setup.*sh文件。输入如下命令配置您的工作空间:
source devel/setup.bash
- 可以通过下面的命令来确定你已经成功创建工作空间
$ echo $ROS_PACKAGE_PATH
/home/youruser/catkin_ws/src:/opt/ros/kinetic/share:/opt/ros/kinetic/stacks
创建包
参考:http://wiki.ros.org/ROS/Tutorials/CreatingPackage
- 首先进入到目录~/catkin_ws/src下,
cd ~/catkin_ws/src
- 接着创建一个名字为beginner_tutorials的包,它依赖以下三个包:std_msgs,rospy以及roscpp,
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
依赖关系查看
- 在创建的beginner_tutorials文件夹下可以看到package.xml和CMakeLists.txt。catkin_create_pkg要求您给出包的名字,及选择性的给出所创建的包依赖于哪一个包。可以通过下面命令查看依赖关系:
$ rospack depends1 beginner_tutorials
依赖你关系会保存在package.xml文件中,可以查看:
$ roscd beginner_tutorials
$ cat package.xml
- 还可以查看间接依赖的包:
rospack depends beginner_tutorials
配置package.xml文件
接下来配置您的package.xml包,我们将会一个标签一个标签的分析这个xml文件。
- 首先是description标签:在这个标签中的内容可以改变为任何的内容,不过一般是对这个包的一个简述
<description>The beginner_tutorials package</description>
- 接下来是maintainer标签:因为可以根据这个标签知道它的维护者,另外标签的email属性也是必须的,可有多个maintainer标签。
<!-- One maintainer tag required, multiple allowed, one person per tag -->
<!-- Example: -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<maintainer email="user@todo.todo">user</maintainer>
- 接下来是license标签,在后面的使用中,一般我们将license修改为BSD。
<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<license>TODO</license>
- 接下来是依赖性的标签:
<!-- The *_depend tags are used to specify dependencies -->
<!-- Dependencies can be catkin packages or system dependencies -->
<!-- Examples: -->
<!-- Use build_depend for packages you need at compile time: -->
<!-- <build_depend>genmsg</build_depend> -->
<!-- Use buildtool_depend for build tool packages: -->
<!-- <buildtool_depend>catkin</buildtool_depend> -->
<!-- Use run_depend for packages you need at runtime: -->
<!-- <run_depend>python-yaml</run_depend> -->
<!-- Use test_depend for packages you need only for testing: -->
<!-- <test_depend>gtest</test_depend> -->
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
- 我们向里面添加了run_depend:这样在运行时才能找到依赖关系
<run_depend>roscpp</run_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>
在工作空间中构建和使用catkin包
http://wiki.ros.org/ROS/Tutorials/BuildingPackages
- 首先也是要修改环境变量,如果上一步做了并没有关闭终端,可以省去。
$ source /opt/ros/%YOUR_ROS_DISTRO%/setup.bash
$ source /opt/ros/kinetic/setup.bash (For Kinetic for instance)
- 首先打开beginner_tutorials包下面的src文件夹,在里面添加或者编辑源文件。然后回到包beginner_tutorials的根目录下,更新一下CMakeLists.txt文件,最后回到工作空间的根目录下,使用catkin_make命令进行构建。
cd ~/catkin_ws
catkin_make install
上面的两条命令可以用下面一条指令来代替:
cd ~/catkin_ws/build && make install
所以构建一个包的流程就像这样:
$ cd ~/catkin_ws/src/beginner_tutorials/src
# Add/Edit source files
$ cd ~/catkin_ws/src/beginner_tutorials
# Update CMakeFiles.txt to reflect any changes to your sources
$ cd ~/catkin_ws
$ catkin_make
后面会用到,到时候理解会更深刻。