3.创建一个ROS package

创建一个ROS package(rawmeat:wiki.ros.org/ROS/Tutorials/CreatingPackage)

描述:这个教程包含使用roscreate-pkgcatkin来创造一个新的package,使用rospack来列举package的依赖文件。
教程等级:初学者
下一个教程构造一个ROS package

(只介绍catkin)

内容:

  1. 什么组成了一个catkin package?
  2. catkin workspace中的packages
  3. 创建一个catkin package
  4. 建立一个catkin workspacce与source setup file
  5. package的依赖关系
    1. 第一阶依赖关系
    2. 间接的依赖关系
  6. 定制你的package
    1. 定制package.xml
      1. 描述tag
      2. 维护tag
      3. 许可证tag
      4. 依赖关系tag
      5. 最终的package.xml
    2. 定制CMakeList.txt

1.什么组成了一个catkin package?

一个package如果要被称为Catkin package,需要满足以下几个条件:

  • package包含一个catkin compliant package.xml文件。
    • catkin compliant package.xml 提供了package的元信息。
  • package必须包含一个CMakeLists.txt which uses catkin
  • 每个package都有自己的文件夹,

    • 这意味着没有嵌套的packages或者多个packages分享同个路径

    最简单的可能的package可能有如下结构:

    my_package/
     CMakeLists.txt
     package.xml

2.catkin workspace中的packages

推荐的使用catkin packages是使用catkin workspace,但是也可以单独使用catkin packages。一个普通的workspace可能如下所示:

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

在继续这个教程之前,根据教程 Creating a workspace for catkin(http://wiki.ros.org/catkin/Tutorials/create_a_workspace) 先创建一个空的catkin workspace。

3.创建一个catkin package

这个教程展示如何使用[catkin_create_pkg] script(http://wiki.ros.org/catkin/commands/catkin_create_pkg)来创建新的catkin package ,以及创建之后可以做什么。

首先改变你在(http://wiki.ros.org/catkin/Tutorials/create_a_workspace)教程中之前创建的catkin workspace的 source space目录:

# You should have created this in the Creating a Workspace Tutorial
$ cd ~/catkin_ws/src

现在使用catkin_creat_pkg script来创建新的package,名叫“beginner_tutuorials”,依赖于std_msgs, roscpp, and rospy:

$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

这将会创建一个beginner_tutorials文件夹,包括一个[package.xml] (http://wiki.ros.org/catkin/package.xml)和一个 CMakeLists.txt,这些的部分被你在catkin_creat_pkg给出的信息填满。

catkin_creat_pkg要求你给它一个package_name和有选择地,这个package所依赖的清单:

# This is an example, do not try to run this
# catkin_create_pkg [depend1] [depend2] [depend3]

catkin_creat_pkg也有更多先进的功能,在catkin/commands/catkin_create_pkg

4.建立一个catkin workspacce与source setup文件

现在你需要在catkin workspace中建立package:

$ cd ~/catkin_ws
$ catkin_make

在workspace被创建之后,它已经在devel的子文件夹中创建了相似的结构,正如你在/opt/ros/$ROSDISTRO_NAME下面经常找到的。

为了将workspace增加到你的ROS环境中,你需要source产生的setup文件:

$ . ~/catkin_ws/devel/setup.bash

5.package的依赖关系

5.1第一阶依赖关系

之前使用catkin_creat_pkg的时候,提供了一些package的依赖关系。这些第一阶级的依赖关系现在可以被rospack 查看

$ rospack depends1 beginner_tutorials
  roscpp
  rospy
  std_msgs

正如所示,rospack列举了相同的依赖关系,和运行catkin_create_pkg时的一样,这些依赖关系被储存在package.xml文件中

$ roscd beginner_tutorials
$ cat package.xml
  < package format=”2” >
  …
    < buildtool_depend >catkin< /buildtool_depend >
     < build_depend >roscpp< /build_depend >
     < build_depend >rospy< /build_depend >
     < build_depend >std_msgs< /build_depend >
  …
  < /package >

5.2间接的依赖关系

许多情况,一个依赖关系也有自己的依赖关系。比如说,rosp有其他的依赖关系

$ rospack depends1 rospy
  genpy
  roscpp
  rosgraph
  rosgraph_msgs
  roslib
  std_msgs

一个package可以有许多间接依赖,幸运的是rospack可以递归地确定所有嵌套依赖关系。

$ rospack depends beginner_tutorials
cpp_common
rostime
roscpp_traits
roscpp_serialization
catkin
genmsg
genpy
message_runtime
gencpp
geneus
gennodejs
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
ros_environment
rospack
roslib
rospy

6.定制你的package

这部分教程会研究catkin_create_pkg创建的每个文件,以及一行行地描述这些文件的成分,还有你怎样为你的package而定制他们。

6.1定制package.xml

生成的package.xml应该在你的新package中。现在熟悉新的(package.xml)[http://wiki.ros.org/catkin/package.xml]以及接触需要你注意的元素。

6.1.1 描述tag

首先升级描述tag:

5   < description >The beginner_tutorials package< /description >

改变这个描述至任何你喜欢的,但是按照惯例第一句话应该短,同时覆盖了package的范围。如果在一句话中描述这个package很困难,就需要拆分。

6.1.2维护tag

接下来是维护者tag:

7    < !– One maintainer tag required, multiple allowed, one person per tag –>
8    < !– Example: –>
9    < !– < maintainer email=”jane.doe@example.com”>Jane Doe< /maintainer> –>
10    < maintainer email=”user@todo.todo”>user< /maintainer >

对于package.xml这是一个必须的,重要的tag因为它让其他人知道谁来联系这个package。至少一个维护者是需要的,但是你可以有许多,如果你喜欢。维护者的名字在tag的体内,但是这儿也有一个email属性应该被填写:

7    < maintainer email=”you@yourdomain.tld”>Your Name< /maintainer>

6.1.3许可证tag

接下来是许可证tag,也是必须的:

12   < !– One license tag required, multiple allowed, one license per tag –>
13   < !– Commonly used license strings: –>
14   < !– BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 –>
15   < license>TODO< /license>

你应该选择一个许可证,填写好。有些常见的开源许可证是BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, and LGPLv3。你可以在Open Source Initiative阅读几个。对于这个教程,我们将会使用BCD许可,因为剩余的ROS核心成分已经使用过它了。

8   < license>BSD< /license>

6.1.4依赖关系tag

接下来的tag描述了package的依赖关系。依赖关系被分在build_depend, buildtool_depend, exec_depend, test_depend。对于这些tag的更清楚的解释,请见文件Catkin Dependencies。既然我们已经把std_msgs, roscpp,和 rospy作为论证传递给了catkin_create_pkg,依赖关系将会如下所示:

27 < !– The *_depend tags are used to specify dependencies –>
28 < !– Dependencies can be catkin packages or system dependencies –>
29 < !– Examples: –>
30 < !– Use build_depend for packages you need at compile time: –>
31 < !– genmsg< /build_depend> –>
32 < !– Use buildtool_depend for build tool packages: –>
33 < !– catkin< /buildtool_depend> –>
34 < !– Use exec_depend for packages you need at runtime: –>
35 < !– python-yaml< /exec_depend> –>
36 < !– Use test_depend for packages you need only for testing: –>
37 < !– gtest< /test_depend> –>
38 < buildtool_depend>catkin< /buildtool_depend>
39 < build_depend>roscpp< /build_depend>
40 < build_depend>rospy< /build_depend>
41 < build_depend>std_msgs< /build_depend>

我们所有列举的依赖文件已经被作为一个build_depend添加给我们,除了catkin中默认的buildtool_depend。这种情况下,我们想让我们的依赖文件在构建和运行的时候可用,所以我们将为他们的每一个添加一个exec_depend tag :

12 catkin< /buildtool_depend>
13
14 < build_depend>roscpp< /build_depend>
15 < build_depend>rospy< /build_depend>
16 < build_depend>std_msgs< /build_depend>
17
18 < exec_depend>roscpp< /exec_depend>
19 < exec_depend>rospy< /exec_depend>
20 < exec_depend>std_msgs< /exec_depend>

6.1.5 最终的package.xml

正如你所见最终的package.xml,不含评论与没有使用的tags,简洁多了:

1 < ?xml version=”1.0”?>
2 < package format=”2”>
3 < name>beginner_tutorials< /name>
4 < version>0.1.0< /version>
5 < description>The beginner_tutorials package< /description>
6
7 < maintainer email=”you@yourdomain.tld”>Your Name< /maintainer>
8 < license>BSD< /license>
9 < url type=”website”>http://wiki.ros.org/beginner_tutorials< /url>
10 < author email=”you@yourdomain.tld”>Jane Doe< /author>
11
12 < buildtool_depend>catkin< /buildtool_depend>
13
14 < build_depend>roscpp< /build_depend>
15 < build_depend>rospy< /build_depend>
16 < build_depend>std_msgs< /build_depend>
17
18 < exec_depend>roscpp< /exec_depend>
19 < exec_depend>rospy< /exec_depend>
20 < exec_depend>std_msgs< /exec_depend>
21
22 < /package>

6.2定制CMakeList.txt

既然package.xml,包含了元信息,已经为你的package量身定做了,你将会继续进行教程。由catkin_create_pkg创造的CMakeList.txt文件将会在下文有关ROS代码的内容介绍。

现在你已经创造了一个新的ROS package,现在构建我们的ROS package

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建一个ROS的launch文件,你可以按照以下步骤进行操作: 1. 首先,在你的ROS工作空间中找到你想要创建launch文件的功能包。可以使用命令`cd <workspace>/src/<package_name>`进入该功能包的目录。 2. 在功能包的目录下创建一个名为`launch`的文件夹。你可以使用命令`mkdir launch`来创建。 3. 进入`launch`文件夹,使用文本编辑器创建一个新的launch文件。你可以使用命令`touch <launch_file_name>.launch`来创建一个空的launch文件。 4. 打开这个新创建的launch文件,并按照你的需求编写launch文件的内容。你可以参考ROS的launch文件语法和示例来编写你的launch文件。在launch文件中,你可以指定要启动的节点、节点的参数配置以及节点之间的关系等。 5. 保存并关闭launch文件。 6. 现在,你可以使用`ros2 launch`命令来启动你的launch文件。使用命令`ros2 launch <package_name> <launch_file_name>`,将会启动整个系统,包括所有在launch文件中指定的节点和它们的配置。 总结起来,要创建一个ROS的launch文件,你需要在功能包中创建一个名为`launch`的文件夹,并在其中创建一个launch文件。然后,按照你的需求编写launch文件的内容,并使用`ros2 launch`命令来启动该launch文件。 #### 引用[.reference_title] - *1* *3* [ROS2入门教程创建一个launch文件](https://blog.csdn.net/qq_29923461/article/details/120404577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ROS学习(4)——launch文件的编写](https://blog.csdn.net/bulletstart/article/details/130794565)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值