[ROS](02)创建&编译ROS软件包Package

17 篇文章 12 订阅

  文章只是个人学习过程中学习笔记,主要参考ROS教程1


先阅读这篇文章:
[ROS](01)创建ROS工作空间:https://blog.csdn.net/CynalFly/article/details/125617470

1. 概述

  packages是在ROS中整理和组织的主要单元,是在ROS中能建立及分享的最小单元。
ROS基本单元结构

在编译时,catkin编译系统会递归的查找和编辑src文件目录下的每一个package。故可以把几个package放在同一个文件夹下。

2. package结构

  ROS软件包package遵循共同的结构,如下图所示。package目录下的文件的命名都是约定成俗的。其中只有 CMakeLists.txtpackage.xml 是必需项,其他都是根据需求决定的。
package结构

  • CMakeLists.txt::包含CMake构建文件,定义package的包名、源文件、依赖、目标文件等编译规则;
  • package.xml:包含了 package 的描述信息和依赖关系,并记录版本、维护者、许可证等有关软件包的信息;
  • scripts:可执行脚本,Python脚本(.py),shell脚本(.sh);
  • src:源文件C++
  • include:C++头文件
  • msg:存放消息文件(.msg)
  • srv:存放服务文件(.srv)
  • action:存放动作文件(.action)
  • launch:存放launch文件(.launch或.xml),可一次运行多个节点;
  • config:配置信息;

3. 创建软件包Package

  创建一个package,需要在ROS(catkin)工作空间中的src文件夹目录下,使用catkin_create_pkg脚本来创建。命令格式:
catkin_create_pkg <package_name> [depend1] [depend2] [depend3][...][dependn]

package_name:包名,要创建的软件的名称(必须
depend:依赖,依赖的其他软件包,例如std_msgs、rospy、roscpp等(非必须

  举例:创建一个名为beginner_tutorials的新软件包,软件包依赖std_msgs、rospy、roscpp。在终端中输入如下命令:

cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

std_msgs:是ROS给我们定义好的一些标准的数据结构。
rospy:是ROS给我们提供的一系列的python接口。
roscpp:是ROS给我们提供的c++的编程接口。

  成功后,将在src目录下创建一个名为beginner_tutorials的文件夹,在该文件夹下的package.xml文件和一个CMakeLists.txt文件已经填写好了。

beginner_tutorials package

4. 编译软件包Package

  编译(build)一个package,需要在ROS(catkin)工作空间目录下,使用catkin_make编译。在终端中输入如下命令:

cd ~/catkin_ws
catkin_make
catkin_make install  # (可选)

ros build
  上述该命令可以一次性编译ROS工作空间所有软件包packages。如果只想编译特定的 packages,命令格式:

catkin_make -DCATKIN_WHITELIST_PACKAGES="package1;package2"
  • package1package2 为包名
  • 使用此指令后,在同一窗口下,直接使用catkin_make还是会只编译一个包

  举例:编译软件包packagebeginner_tutorials。在终端中输入如下命令:

catkin_make -DCATKIN_WHITELIST_PACKAGES=”beginner_tutorials”

  如果想恢复编译所有软件包,在终端中输入如下命令:

catkin_make -DCATKIN_WHITELIST_PACKAGES=""

5. package的命令行工具

  随着ROS软件包的增多,中使用Linux内置的命令行工具(如cd、ls等)进行切换目录和查找文件时,可能会非常繁琐。因此ROS提供了专门的命令行工具(Command-line Tolls)来简化这些操作。
  rospack
  rospack命令可以获取软件包package的有关信息。常见的命令包括:

  • rospack find [package] :返回package的绝对路径

rospack find实例

  • rospack depends1 [package]:返回一个package的一级依赖 list
  • rospack depends [package]:返回一个package的所有直接和间接依赖 list
  • rospack depends-on [package]:返回依赖于指定package的所有packages list

ros depends实例

  • rospack list | grep <package-name> <package-dir>:返回包含指定包名或包路径的package list

rospack list实例

上述命令的package可以缺省,则认为是当前目录的所有依赖;但这有个前提就是当前目录包含package.xml。如果不包含时则返回信息:[rospack] Error:no package given

  roscd
  roscd可以直接切换到ROS软件包,它和Linux系统的cd的区别,请看:
  [ROS]roscd和cd的区别:https://blog.csdn.net/CynalFly/article/details/125519428
roscd实例

  rosls
  rosls可以直接lsROS软件包的内容。用法:rosls [package]
rosls实例

查看ROS所有的命令行工具:http://wiki.ros.org/ROS/CommandLineTools


  1. ROS.otg. ROS教程[EB/OL]. 2020-12-22[2022-7-5].
    http://wiki.ros.org/cn/ROS/Tutorials. ↩︎

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值