ROS学习-创建一个Package包

本文涉及的产品
资源编排,不限时长
简介: ROS学习-创建一个Package包

Package由什么组成?

每一个Package中都必须包括以下两个文件:

  • package.xml
    能够提供当前Package包的描述(元)信息
  • CMakeLists.txt
    如果它是一个catkin元包,它必须具有相关的样板文件CMakeLists.txt文件。

此外,每个Package包必须有其自己的文件夹,这就意味着没有嵌套的包,也不存在多个package包共享同一个文件夹。

最简单的package包可能结构如下所示:

my_package/
  CMakeLists.txt
  package.xml

工作空间的组成

(工作空间创建方法参考:ROS学习-创建一个工作空间

同时,假如在工作空间 Workspace下创建n个包package1、package2 … packagen,则整体文件结构如下所示:

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

创建一个package包

首先,使用cd切换到工作空间的src文件夹下。

cd ~/catkin_ws/src

使用catkin_create_pkg命令,创建一个package包,同时这个包依赖于std_msgs rospy roscpp等ros包。

catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

即其用法为:

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

接着,我们回到src文件夹的上一级目录,即工作空间catkin_ws中,使用catkin_make对工作空间中的package包进行编译

catkin_make

查看package包的依赖

我们在上述创建beginner_tutorials包时依赖了std_msgs rospy roscpp等常用的ros包,可以通过rospack命令进行查看。

rospack depends1 beginner_tutorials 

注意这个depends1是指的是beginner_tutorials所直接依赖的包,即我们在catkin_create_pkg命令创建时所指定的包,返回结果应该如下所示:

roscpp
rospy
std_msgs

同时上述的roscpp、rospy、std_msgs等包也都依赖于其他包,比如我们使用:

rospack depends1 rospy

可以查看得到rospy所依赖的包包括:

genpy
roscpp
rosgraph
rosgraph_msgs
roslib
std_msgs

上述这些rospy所依赖的包都是beginner_tutorials的间接依赖包,那我们怎么知道beginner_tutorials所有的间接依赖包呢?

可以通过rospack depends(depends1变为depends)来进行查看:

输入命令:

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

package.xml文件的描述

description tag(这是一个描述性的tag)

<description>The beginner_tutorials package</description>

这一部分的内容可以由我们自主设定,通过一句简单的描述来说明包的内容和功能就行了。

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

把email和名字替换成我们自己的就可以。

license 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,所以这里我们也是相同的。

<license>BSD</license>

dependencies.tag(对自定义包所依赖包的描述)

  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>

最终一个通用的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="you@yourdomain.tld">Your Name</maintainer>
  <license>BSD</license>
  <url type="website">http://wiki.ros.org/beginner_tutorials</url>
  <author email="you@yourdomain.tld">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>
相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
4月前
|
机器人 C++ Python
ROS2教程 02 功能包
本文是关于ROS2(机器人操作系统2)中功能包(package)管理的教程,介绍了如何检查功能包的依赖、创建新功能包、列出可执行文件、列出所有功能包、查询功能包的位置和描述信息,以及为C++和Python功能包配置必要的文件。
112 0
|
2月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
2月前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
|
4月前
|
Ubuntu Shell C++
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
在Ubuntu18.04上安装ros2的环境,ros2的常用命令:播放包、录制包等
215 1
|
4月前
|
存储 缓存
02 ROS创建工作空间和功能包
如何在ROS中创建工作空间和功能包,包括初始化工作空间、编译、设置环境变量以及使用`catkin_create_pkg`创建新功能包的步骤。
65 1
|
4月前
|
机器人 Shell 开发者
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
这篇文章是关于ROS2(Robot Operating System 2)中功能包、依赖管理、工作空间配置和编译的教程,涵盖了ROS2工作空间的概念、如何获取和安装功能包的依赖、构建工作空间的步骤,以及如何创建和管理ROS2功能包,包括使用命令行工具对功能包进行操作的方法。
474 0
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
|
Ubuntu Linux
ROS利用ros-kinetic-serial包与下位机串口通信
ROS利用ros-kinetic-serial包与下位机串口通信
246 0
ROS创建工作空间添加包并编译
ROS创建工作空间添加包并编译
224 0
|
Ubuntu 机器人 C++
【7. ROS 中的 IMU 惯性测量单元消息包】
【7. ROS 中的 IMU 惯性测量单元消息包】
661 0
ubuntu16.04中ROS-Kinetic报错: not find a package configuration file provided by “gazebo_ros_control“
ubuntu16.04中ROS-Kinetic报错: not find a package configuration file provided by “gazebo_ros_control“
197 0

推荐镜像

更多