创建一个ROS包

先前笔者不知道catkin到底是个什么东东,后来终于在官方网站上找到了答案,原来catkin是ROS的一个官方的编译构建系统,是原本的ROS的编译构建系统rosbuild的后继者。catkin的来源有点复杂,我们可以慢慢的讲一下其中的渊源。ROS来源于Willow Garage这个公司,他们希望借助开源的力量,使ROS发扬光大。而在英语中,willow的意思是柳树,catkin是柳絮的意思,为了纪念的作用吧,因而为这个软件命名为catkin。

     这篇博客的主要内容是介绍如何使用catkin创建一个ROS包。一个catkin的包主要有以下几部分组成:(1)必须包括一个package.xml文件,(2)必须包括一个CMakeLists.txt文件,(3)在每一个文件夹下只能有一个包,且包不允许嵌套。一个最简单的包类似于如下的形式:

my_package/
  CMakeLists.txt
  package.xml

官网上推荐在catkin工作空间中使用catkin包,当然也可以独立使用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

我们之前已经创建过一个空的工作空间:catkin_ws,下面我们来看一下如何在一个工作空间中创建一个包。在创建一个catkin包时需要使用catkin_create_pkg脚本。

首先进入到目录~/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要求您给出包的名字,及选择性的给出所创建的包依赖于哪一个包。他的使用方法如下:

catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

这样,我们的一个包就创建好了,我们可能会需要对包之间的依赖性做一下解释。我们可以使用rospack命令来查看包之间的依赖关系。查看直接依赖关系:

rospack depends1 beginner_tutorials

可以看到,返回的结果正是我们使用catkin_create_pkg时,所使用的参数。我们还可以直接在beginner_tutorials包下的package.xml中查看包的依赖关系。使用命令:

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>

在通常情况下,一个包所依赖的包又会依赖许多其它的包,这称为间接依赖。我们使用如下命令来查看rospy依赖的包:

rospack depends1 rospy

返回结果如下:

genpy
rosgraph
rosgraph_msgs
roslib
std_msgs

一个包可以有很多的间接依赖关系,我们可以使用命令:

rospack depends beginner_tutorials

来进行查看。返回结果如下:

cpp_common
rostime
roscpp_traits
roscpp_serialization
genmsg
genpy
message_runtime
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
catkin
rospack
roslib
rospy

接下来配置您的package.xml包,我们将会一个标签一个标签的分析这个xml文件。首先是description标签:

<description>The beginner_tutorials package</description>

在这个标签中的内容可以改变为任何的内容,不过一般是对这个包的一个简述,尽量简单就行。

接下来是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>

这是一个很重要的标签,因为可以根据这个标签知道它的维护者,另外标签的email属性也是必须的,可有多个maintainer标签。

接下来是license标签:

<!-- 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>

在后面的使用中,一般我们将license修改为BSD。

接下来是依赖性的标签:

<!-- 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>

好了,经过以上的步骤,我们的package.xml已经配置好了。

注意:其中的<!--这里是注释内容-->,一个package.xml中其实没有多少东西,大部分的都是注释信息。

总结:这部分主要讲解了ROS包的创建方法和包的依赖性的查询,同时讲解了包的清单文件package.xml的各个标签的意义。

转载于:https://www.cnblogs.com/stemon/p/4185475.html

### 创建 ROS 2 功能ROS 2 中创建一个功能涉及多个步骤,这些步骤确保新创建的功能能够被正确编译并集成到工作空间中。 #### 工作区结构 为了保持良好的项目管理实践,建议将所有的源码文件放置于 `src` 目录下而不是工作空间的根目录。这意味着当准备在一个名为 `ros2_ws` 的工作区内创建新的功能时,应当先进入该路径下的 `src` 文件夹[^2]: ```bash cd ~/ros2_ws/src ``` #### 使用命令行工具创建功能 通过执行特定的命令来初始化一个新的 Catkin 是非常简单的操作之一。对于 C++ 类型的服务端应用来说,可以利用如下所示的指令完成此过程,并指定依赖项如 `rclcpp` 来支持节点开发环境的需求: ```bash ros2 pkg create --build-type ament_cmake cpp_parameters --dependencies rclcpp ``` 这会自动设置好必要的配置文件以及构建脚本等内容,使得开发者可以直接开始编写业务逻辑代码而不必担心底层细节处理问题。 #### 构建与安装 一旦完成了所有必需资源(比如消息定义、服务接口或者动作类型)的设计之后,则可以通过调用 Colcon 命令来进行整个项目的增量式构建;如果希望加快速度还可以采用软链接的方式进行快速部署测试[^3]: ```bash colcon build --symlink-install --packages-select your_package_name ``` 上述命令中的 `--packages-select` 参数允许用户仅针对单个或几个选定的目标实施单独的操作流程优化效率。 #### 关键组成部分概述 Catkin 功能通常至少含以下几个部分: - **CMakeLists.txt**: 描述了如何编译这个及其内部组件。 - **package.xml**: 提供关于元数据的信息,括版本号、维护者联系方式等。 - **source code directories (e.g., src/, include/)**: 存储实际的应用程序源代码。 - **launch files directory (optional)**: 如果有的话,用于启动复杂系统的描述文件集合。 - **resource folders like config or meshes for URDF models etc.** 综上所述,在 ROS 2 下建立一个全新的功能不仅限于简单地运行几条 shell 指令,更重要的是理解各个构成要素之间的关系以便日后更好地管理和扩展自己的机器人应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值