创建ROS程序包
组成
i)package.xml
ii)CMakeLists.txt
最简组成
my_package/
CMakeLists.txt
package.xml
满足条件
i)package.xml包含程序包的元信息;
ii)CMakeLists.txt为catkin版本;
iii)metapackages必须包含对CMakeLists.txt文件的饮用;
iv)每个目录下只有一个程序包。
catkin工作空间中程序包
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
步骤
i) 创建工作空间
ii) cd 工作空间/src
iii) catkin_create_pkg
1)catkin_create_pkg
输入 catkin_create_pkg 包名 依赖1 依赖2 依赖3
输出 创建一个自定义名字的包,依赖于你定义的1,2,3
举例
创建一个名为’beginner_tutorials’的新程序包,这个程序包依赖于std_msgs、roscpp和rospy
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
会创建一个名为beginner_tutorials的文件夹,包含一个package.xml文件和一个CMakeLists.txt文件。
这两个文件都已经自动包含了部分你在执行catkin_create_pkg命令时提供的信息。
一级依赖
1)rospack depends1
输入 rospack depends1 包名
输出 包对应一级依赖包
举例
输入
$ rospack depends1 beginner_tutorials
输出
std_msgs
rospy
roscpp
2)cat
输入 cat 文件名
输出 显示整个文件
举例
$ roscd beginner_tutorials
$ cat package.xml
<package>
...
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
...
</package>
间接依赖
1)rospack depends
输入 rospack depends 包名
输出 所有依赖包列表
自定义 package.xml
1)gedit
输入 gedit 文件名
输出 通过gedit编辑器打开文件
组成
i)描述
可更改任意内容,最好简短。
<description>The beginner_tutorials package</description>
ii)维护者
填写一个维护者及其联系方式
<!-- One maintainer tag required, multiple allowed, one person per tag -->
<!-- Example: -->
<!-- <maintainer email="[email protected]">Yourname</maintainer> -->
<maintainer email="[email protected]">user</maintainer>
iii)许可标签
填写许可协议,常见开源许可协议(把TODO换成协议名):
BSD、MIT、Boost Software License、GPLv2、GPLv3、LGPLv2.1和LGPLv3
<!-- 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>
iv)依赖项标签
描述依赖项,分为:
build_depend、buildtool_depend、run_depend、test_depend
下述结果(自动生成的build_depend部分)是由于之前设定的依赖项
编译和运行所需的包需添加到run_depend(exec_depend)中。
<!-- 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 exec_depend for packages you need at runtime: -->
<!-- <exec_depend>python-yaml</exec_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>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
举例
调整并去注释的package.xml
<?xml version="1.0"?>
<package format="2">
<name>beginner_tutorials</name>
<version>0.1.0</version>
<description>The beginner_tutorials package</description>
<maintainer email="[email protected]">Your Name</maintainer>
<license>BSD</license>
<url type="website">http://wiki.ros.org/beginner_tutorials</url>
<author email="[email protected]">Jane Doe</author>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
</package>