ROS创建工作空间和功能包

2023-05-16

    所有的ROS程序,包括我们自己开发的程序,都被组织成功能包,而ROS的功能包被存放在称之为工作空间的目录下。因此,在我们写程序之前,第一步是创建一个工作空间以容纳我们的功能包。

1.创建ROS工作空间

    其实ROS工作空间就是linux下的一个目录,创建ROS工作空间就是创建一个linux目录,只是需要按照ROS的规范在这个目录下添加一个src的子目录,然后执行一个ROS的命令即可。

    我们创建名为catkin_ws的工作空间,当然也可以使用其它名字,命令如下:

$mkdir -p catkin_ws/src
    进入到catkin_ws/src目录下,可以看到catkin_ws和src目录下都是空的。进入到catkin_ws目录下,再执行如下命令:
$catkin_make

    这个命令用于构建该工作空间,并且必须在工作空间的顶层使用catkin_make命令,这时你会发现在catkin_ws这个目录下多出两个目录“build”和“devel”。在devel目录下,还可以看到很多setup.*sh文件。接下来我们输入如下命令:

$source devel/setup.bash
    上面的命令是在catkin_ws目录下执行的,意思是把catkin_ws/devel目录下的setup.bash文件挂载到ROS的文件系统里去,这样当用户执行一些文件系统的命令时,就不会提示找不到
该工作空间里的包或者文件了。

小提示:
    对于许多用户来说,确实没有必要使用多个 ROS 工作空间。但是,ROS 的 catkin 编译系统,试图一次性编译同一个工作空间中的所有功能包。因此,如果你的工作涉及大量的功能包,或者涉及几个相互独立的的项目,则维护数个独立的工作空间可能是有帮助的。

2.创建ROS功能包
    创建了工作空间,接下来就可以在工作空间里创建功能包。
功能包是一个存在于工作空间目录src目录下的一个目录,这个目录中包含一些文件或者目录,一个功能包必须以下几部分组成:
(1) 必须包括一个package.xml文件;
(2) 必须包括一个CMakeLists.txt文件。

    在每一个功能包目录下不允许有其它的功能包,也就是不允许功能包嵌套。一个典型的工作空间结构如下:

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_create_pkg命令。
    首先进入到目录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命令的前提是已经安装了该命令)。
    查看直接依赖关系:
$rospack depends1 beginner_tutorials
    可以看到,返回的结果正是我们使用catkin_create_pkg时,所使用的参数。
roscpp
rospy
std_msgs
    我们还可以直接在beginner_tutorials功能包下的package.xml中查看功能包的依赖关系。使用命令:
$cd 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。

    编译依赖性和运行依赖性标签,指明了该功能包所依赖的其它功能包,如果我们在使用catkin_create_pkg命令创建功能包的时候,没有制定我们创建的功能包依赖于哪些功能包,可以手动在这里添加依赖的功能包:
<!-- 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>roscpp</run_depend>  
<run_depend>rospy</run_depend>  
<run_depend>std_msgs</run_depend> 
    这样一来,功能包就创建好了,可以在功能包目录下添加你的源代码文件了。

小提示:
    ROS功能包的命名遵循一个命名规范,只允许使用小写字母、数字和下划线,而且首字符必须是一个小写字母。一些 ROS工具,包括 catkin,不支持那些不遵循此命名规范的功能包。



















本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS创建工作空间和功能包 的相关文章

  • Request.url用法

    網址 xff1a http localhost 1897 News Press Content aspx 123 id 61 1 toc Request ApplicationPath Request PhysicalPath D Proj
  • oracle IO 优化

    数据库的作用就是实现对数据的管理和查询 任何一个数据库系统 xff0c 必然存在对数据的大量读或者写或者两中操作都大量存在 IO问题也往往是导致数据库性能问题的重要原因 在这篇文章中 xff0c 主要帮助大家在理解Oracle的读写操作机制
  • oracle中imp命令详解

    oracle中imp命令详解 Oracle的导入实用程序 Import utility 允许从数据库提取数据 xff0c 并且将数据写入操作系统文 件 imp使用的基本格式 xff1a imp username password 64 se
  • C# 非顶端窗口截图

    panel上可以通过DrawToBitmap截图 xff0c 不管是否在屏幕外是否有遮挡 Bitmap sourceBitmap 61 new Bitmap 400 300 Control ct 61 frmMain mianForm pa
  • bat中的特殊字符,以及需要在bat中当做字符如何处理

    bat中的特殊字符 xff0c 以及需要在bat中当做字符如何处理 批处理 Bat 中特殊符号的实际作用 xff0c Windows 批处理中特殊符号的作用 xff1a 64 隐藏命令的回显 在for中表示使用增强的变量扩展 xff1b 在
  • rviz无法显示的问题

    1 启用初始化配置 首先删除保存好的rviz xff0c 运行最初始化的配置 rviz运行后会选择保存在 home cbc rviz default rviz 删除之后 xff0c 重新运行 xff1a roscore rosrun rvi
  • 用C语言编写一个HTTP协议的目录浏览和文件下载服务器

    include lt stdarg h gt include lt errno h gt include lt stdio h gt include lt fcntl h gt include lt unistd h gt include
  • 编写浏览器使用的OCX全过程

    随着互联网的飞速发展 现在的人们都习惯了打开浏览器进行工作 基于WEB的程序蜂拥而至 几乎变得无所不能 由于WEB脚本语言的限制 xff0c 对于本地计算机的访问受到很大的限制 开发WEB的程序员都会因为WEB的打印而烦恼 xff0c 对于
  • Linux平台下启动oracle 11g EM控制台

    当我们的oracle服务器是使用的Linux Unix系统时 我们从windows或者其他的客户端想用启动oracle的EM工具了解一些系统系统信息时 可以采用如下方式 首先在服务器端打开一个窗口 输入如下命令 emctl start or
  • Oracle日常性能查看

    判断回滚段竞争的SQL语句 xff1a xff08 当Ratio大于2时存在回滚段竞争 xff0c 需要增加更多的回滚段 xff09 select rn name rs GETS rs WAITS rs WAITS rs GETS 100
  • Double.ToString 方法 (String)

    double numbers 61 1054 32179 195489100 8377 1 0437E21 1 0573e 05 string specifiers 61 34 C 34 34 E 34 34 e 34 34 F 34 34
  • stm32驱动微雪墨水屏1.54inch e-Paper V2

    我一起驱动墨水屏 一 墨水屏相关基础 xff08 摘自微雪官方 xff09 二 干起来PART2 配置I OPART2 底层硬件接口必要的调用函数PART3 功能函数PART4 应用函数 三 应用注意 代码下载 xff1a https do
  • 2020-11-13

    三角翼无人机制作指南设计 一 接线 飞控 xff1a pixhawk 915MHz电台 xff0c 空速计 xff0c GPS xff1b 动力 xff1a Tmotor电机 电调 F150KV700 舵机 xff1a S43A标准mini
  • docker案例redis (pull、dockerfile两种方式)

    方式一 xff08 pull xff09 01 查询redis并拉取 docker search redis 查询 docker pull redis latest 拉取 docker images 02直接使用拉取的redis建立容器 d
  • 进程、内存和文件

    进程是操作系统里面的核心概念 它指的是一个运动中的程序 从名字上看 xff0c 进程表示的就是进展中的程序 一个程序一旦在计算机里运行起来 xff0c 它就称为一个进程 操作系统对进程的管理通过进程表来实现 进程表里存放的是关于进程的一切信
  • 蓝牙、红外线与wifi 区别以及不同频段无线电磁波的穿墙和绕过障碍物能力

    蓝牙 红外线与wifi 区别以及不同频段无线电磁波的穿墙和绕过障碍物能力 SurgePing 2015 04 22 16 52 30 35199 收藏 7 分类专栏 xff1a IOT 文章标签 xff1a 蓝牙 红外线 wifi 频段 无
  • js动态生成级联下拉列表

    html view plain copy print lt DOCTYPE HTML PUBLIC 34 W3C DTD HTML 4 0 Transitional EN 34 gt lt HTML gt lt HEAD gt lt TIT
  • 无人机学习之路——材料准备

    所需材料 xff08 大件 xff09 1 空心杯电机 4个 xff08 笔者用8520型号 xff0c 一般716以上比较常用 xff09 这个电机是直流有刷电机 xff0c 所以不需要电调 2 螺旋桨 正反各2个 xff08 一般旋转直
  • linux 应用编程(持续更新)

    在嵌入式 Linux 系统中 xff0c 我们编写的应用程序通常需要与硬件设备进行交互 Tips xff1a 本篇将以正点原子 ALPHA Mini I MX6U 开发板开发板出厂系统进行测试 进程间通信 管道FIFO信号消息队列信号量共享
  • FreeRTOS中汇编指令

    汇编程序前要加PRESERVE8 require8和preserve8c和汇编有8位对齐的要求 xff0c 这两个伪指令能够满意此要求 LDR和MOV LDR Rn label1 LDR指令负责将label1所代表的存储器中数据搬移到内部寄

随机推荐

  • PX4学习1(相关参考网址)

    官方开发指南 xff1a PX4用户指南 xff1a https docs px4 io master zh PX4开发指南 xff1a https dev px4 io master zh index html 北航可靠飞行控制组 xff
  • 2020硕博无人机文献调研(1)

    1 旋翼无人机自主降落技术研究 xff0c 山东大学 xff0c 岳文斌 创新点 xff1a 利用视觉Apriltag算法进行二维码识别 关于AprilTag详见 https blog csdn net han784851198 artic
  • PX4姿态控制基础

    无人机姿态控制代码实现的四个步骤 订阅数据 xff08 飞机现姿态 xff0c 飞机期望姿态 xff09 PID 外环计算 xff08 作用于姿态误差 xff0c 角速度 xff09 作用 xff1a 产生期望角速度 xff0c 并发布出去
  • PX4位置控制基础

    接受数据 xff08 获取位置信息 期望位置 xff09 外环控制PID xff08 位置环 xff09 xff1a 通过调节速度减小位置差 xff0c 位置差需要通过速度去弥补 判定模式不同 xff0c 位置差的来源 xff08 三种控制
  • ROS2开机程序自启动

    运行环境 系统 xff1a Ubuntu20ROS xff1a foxy 添加服务脚本 sudo vi etc systemd system rc local service 内容如下 xff1a Unit Description 61 e
  • 【STM32】条件编译不起作用是什么原因

    在工程中定义了几个条件编译 xff0c 用来适应不同的硬件设备 xff0c 但是好像不起作用似的 这种情况可能是在多个文件中使用了条件编译 xff0c 但是编译工程的时候又只是编译了部分文件 xff0c 即使有部分使用了条件编译的文件没有被
  • 一文看懂rtc实时时钟和单片机时钟的区别

    rtc实时时钟和单片机时钟的区别 实时时钟是指给日期及时间计数器累加的时钟 xff0c 通常是32768Hz xff0c 系统时钟是指单片机内部的主时钟 xff0c 给各个模块提供工作时钟的基础 xff0c CPU时钟是指经过CPU的PLL
  • PhotoScan处理无人机航拍照片GCP校正流程

    PhotoScan处理无人机航拍照片GCP校正流程 软件最近更新版本较频繁 xff0c 菜单条目变化较大 xff0c 但基本功能没变 Agisoft PhotoScan xff08 APS xff09 现改名 Metashape了 Phot
  • 2022年研发效能实践案例智库集-EQCon

    2022年研发效能实践案例智库集 xff1a Docs
  • git四区逻辑关系(工作区、暂存区、本地仓库、远程仓库)

  • 推荐一个提高实现目标效率和过滤不现实目标的方法:WOOP

    推荐一个提高实现目标效率和过滤不现实目标的方法 xff1a WOOP WOOP 分别是 Wish xff08 愿望 xff09 Outcome xff08 效果 xff09 Obstacle xff08 障碍 xff09 和 Plannin
  • 序列图教程-完整指南及示例

    Sequence Diagram Tutorial Complete Guide with Examples Creately
  • 什么是好的策略?

    好的策略是承认每个人都是自私的 xff0c 但是你的策略能够在人人都是自私的基础上获得全局利益的最大化 xff0c 如果你的全局利益最大化是建立在要求每个人都是大公无私的 xff0c 那就是失败的设计 xff0c 因为这必然会导致失败
  • 软件工程3.0

  • pod、container、sidecar

    pod是一个小家庭 xff0c 它把密不可分的家庭成员 container 聚在一起 xff0c Infra container则是家长 xff0c 掌管家中共通资源 xff0c 解决顺序和依赖关系 xff0c 家庭成员通过sidecar方
  • 4种SQL标准的事务隔离级别

    SQL标准的事务隔离级别包括 xff1a 读未提交 xff08 read uncommitted xff09 xff1a 一个事务还没提交时 xff0c 它做的变更就能被别的事务看到 读提交 xff08 read committed xff
  • 设计容器网络插件的初步思路

    同一个 Pod 里面的所有用户容器的进出流量 xff0c 可以认为都是通过 Infra 容器完成的 当为Kubernetes 开发一个网络插件时 xff0c 应该重点考虑的是如何配置这个 Pod 的 Network Namespace xf
  • 各种显示接口DBI、DPI、LTDC、DSI、FSMC

    各种显示接口DBI DPI LTDC DSI FSMC qq 23899395 2019 06 05 17 30 36 4810 收藏 36 版权 首先 xff0c MIPI xff08 Mobile Industry Processor
  • 在ubuntu 16.04安装ROS Kinetic

    ubuntu16 04 已经发布一个月了 xff0c ROS的Kinetic也已经发布 xff0c 需要了解ROS发行版及支持维护的时间等 xff0c 可以参考如下网页 xff1a http wiki ros org Distributio
  • ROS创建工作空间和功能包

    所有的ROS程序 xff0c 包括我们自己开发的程序 xff0c 都被组织成功能包 xff0c 而ROS的功能包被存放在称之为工作空间的目录下 因此 xff0c 在我们写程序之前 xff0c 第一步是创建一个工作空间以容纳我们的功能包 1