ROS学习:ROS文件系统--Package软件包

ROS中的 package 的定义更加具体,它不仅是 Linux 上的软件包,更是catkin编译的基本单元,我们调用catkin_make编译的对象就是一个个 ROS 的 package ,也就是说任何 ROS 程序只有组织成 package 才能编译。所以 package 也是 ROS 源代码存放的地方,任何 ROS 的代码无论是 C++ 还 是 Python 都要放到 package 中,这样才能正常的编译和运行。 一个 package 可以编译出来多个目标文件( ROS 可执行程序、动态静态库、头文件等等)。

package结构

一个package下常见的文件、路径有:

├──	CMakeLists.txt		#package的编译规则(必须)		
├──	package.xml			#package的描述信息(必须)		
├──	src/				#源代码文件		
├──	include/			#C++头文件		
├──	scripts/			#可执行脚本		
├──	msg/				#自定义消息		
├──	srv/				#自定义服务		
├──	models/			    #3D模型文件		
├──	urdf/				#urdf文件		
├──	launch/				#launch文件

其中定义 package 的是 CMakeLists.txtpackage.xml ,这两个文件是 package 中必不可少 的。 catkin 编译系统在编译前,首先就要解析这两个文件。这两个文件就定义了一个 package 。

  • CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则,是package 不可少的成分
  • package.xml: 描述package的包名、版本号、作者、依赖等信息,是package不可少的成 分
  • src/: 存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py) include/: 存放C++源码对应的头文件
  • scripts/: 存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py)
  • msg/: 存放自定义格式的消息(.msg)
  • srv/: 存放自定义格式的服务(.srv)
  • models/: 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等)
  • urdf/: 存放机器人的模型描述(.urdf或.xacro)
  • launch/: 存放launch文件(.launch或.xml)

通常 ROS 文件组织都是按照以上的形式,这是约定俗成的命名习惯,建议遵守。以上路径 中,只有 CMakeLists.txtpackage.xml 是必须的,其余路径根据软件包是否需要来决定。

package的创建

创建一个package需要在 catkin_ws/src 下,用到catkin_create_pkg命令,用法是:

catkin_create_pkg	package	depends

其中 package 是包名,depends 是依赖的包名,可以依赖多个软件包。 例如,新建一个 package 叫做 test_pkg ,依赖roscpp、rospy、std_msgs(常用依赖)。

$	catkin_create_pkg test_pkg roscpp rospy std_msgs

这样就会在当前路径下新建 test_pkg 软件包,包括:
在这里插入图片描述
如果有新的目标文件产生(原来没有) ,那么一般紧跟着要source刷新环境,使得系统能够找到刚才编译生成的ROS可执行文件。
所以,这里必须要重新编译一下工作空间,刷新一下环境:

$ cd ~/catkin ws
$ catkin_ make      #这一 步还不知道要不要,反正source是必须的
$ source ~/catkin _ws/devel/setup bash

这样才可以用下面的 rospack 的命令,要不然都不会找到的。

catkin_create_pkg帮你完成了软件包的初始化,填充好了 CMakeLists.txtpackage.xml , 并且将依赖项填进了这两个文件中。

package相关命令
rospack

rospack是对package管理的工具,命令的用法如下:

rostopic命令作用
rospack help显示rospack的用法
rospack list列出本机所有package
rospack depends [package]显示package的依赖包
rospack find [package]定位某个package
rospack profile刷新所有package的位置记录

以上命令如果 package 缺省,则默认为当前目录(如果当前目录包含 package.xml )

roscd

roscd命令类似与Linux系统的 cd ,改进之处在于 roscd 可以直接 cd 到ROS的软件包。

rostopic命令作用
roscd [pacakge]cd到ROS package所在路径
rosls

rosls也可以视为Linux指令 ls 的改进版,可以直接 ls ROS软件包的内容。

rosls命令作用
rosls [pacakge]列出pacakge下的文件
rosdep

rosdep是用于管理 ROS package 依赖项的命令行工具,用法如下:

rosdep命令作用
rosdep check [pacakge]检查package的依赖是否满足
rosdep install [pacakge]安装pacakge的依赖
rosdep db生成和显示依赖数据库
rosdep init初始化/etc/ros/rosdep中的源
rosdep keys检查package的依赖是否满足
rosdep update更新本地的rosdep数据库

一个较常使用的命令是 rosdep install --from-paths src --ignore-src --rosdistro=kinetic y ,用于安装工作空间中 src 路径下所有package的依赖项(由pacakge.xml文件指定)。

=============================================================================
本文作为笔记查阅之用,无涉其他用途。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值