当前位置:网站首页>[ROS](02)创建&编译ROS软件包Package
[ROS](02)创建&编译ROS软件包Package
2022-08-02 14:02:00 【CynalFly】
文章只是个人学习过程中学习笔记,主要参考ROS教程1。
先阅读这篇文章:
[ROS](01)创建ROS工作空间:https://blog.csdn.net/CynalFly/article/details/125617470
1. 概述
packages是在ROS中整理和组织的主要单元,是在ROS中能建立及分享的最小单元。
在编译时,catkin编译系统会递归的查找和编辑
src文件目录下的每一个package。故可以把几个package放在同一个文件夹下。
2. package结构
ROS软件包package遵循共同的结构,如下图所示。package目录下的文件的命名都是约定成俗的。其中只有 CMakeLists.txt 和 package.xml 是必需项,其他都是根据需求决定的。
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文件已经填写好了。

4. 编译软件包Package
编译(build)一个package,需要在ROS(catkin)工作空间目录下,使用catkin_make编译。在终端中输入如下命令:
cd ~/catkin_ws
catkin_make
catkin_make install # (可选)

上述该命令可以一次性编译ROS工作空间所有软件包packages。如果只想编译特定的 packages,命令格式:
catkin_make -DCATKIN_WHITELIST_PACKAGES="package1;package2"
package1和package2为包名- 使用此指令后,在同一窗口下,直接使用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 depends1 [package]:返回一个package的一级依赖 listrospack depends [package]:返回一个package的所有直接和间接依赖 listrospack depends-on [package]:返回依赖于指定package的所有packages list

rospack list | grep <package-name> <package-dir>:返回包含指定包名或包路径的package 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
rosls:
rosls可以直接lsROS软件包的内容。用法:rosls [package]。
查看ROS所有的命令行工具:http://wiki.ros.org/ROS/CommandLineTools
ROS.otg. ROS教程[EB/OL]. 2020-12-22[2022-7-5].
http://wiki.ros.org/cn/ROS/Tutorials. ︎
边栏推荐
猜你喜欢
随机推荐
The most complete ever!A collection of 47 common terms of "digital transformation", read it in seconds~
drf序列化器-Serializer
Sentinel源码(一)SentinelResourceAspect
paddleocr window10初体验
第十三单元 混入视图基类
Flask上下文,蓝图和Flask-RESTful
RKMPP库快速上手--(一)RKMPP功能及使用详解
uview 2.x版本 tabbar在uniapp小程序里头点击两次才能选中图标
How to solve 1045 cannot log in to mysql server
deal!It's July 30th!
未来的金融服务永远不会停歇,牛市仍将继续 2021-05-28
AWVS工具介绍[通俗易懂]
瑞吉外卖笔记——第08讲读写分离
第十二单元 关联序列化处理
8583 顺序栈的基本操作
关于市场后市的发展预测? 2021-05-23
drf源码分析与全局捕获异常
第七单元 ORM表关系及操作
yolov5改进(一) 添加注意力集中机制
You can't accept 60% slump, there is no eligible for gain of 6000% in 2021-05-27









