当前位置:网站首页>[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可以直接ls
ROS软件包的内容。用法: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. ︎
边栏推荐
猜你喜欢
随机推荐
ZABBIX配置邮件报警和微信报警
目标检测场景SSD-Mobilenetv1-FPN
MySQL数据库设计规范
Cloin 控制台乱码
vim复制粘贴_vim如何复制粘贴
Swagger 的使用
配置zabbix自动发现和自动注册。
redis延时队列
About the development forecast of the market outlook?2021-05-23
无序数组排序并得到最大间隔
Flask框架的搭建及入门
浅浅写一下PPOCRLabel的使用及体验
定了!就在7月30日!
logback源码阅读(二)日志打印,自定义appender,encoder,pattern,converter
Flask-RESTful请求响应与SQLAlchemy基础
未来的金融服务永远不会停歇,牛市仍将继续 2021-05-28
EasyExcel 的使用
Sentinel源码(二)入口方法分析
VMM是什么?_兮是什么意思
RKMPP 在FFmpeg上实现硬编解码