ROS源代码阅读(6)——功能包(Package)

本文介绍了如何在ROS环境中创建和使用功能包。从创建catkin工作空间开始,到使用catkin_create_pkg命令创建功能包,再到编译功能包的过程。了解这些步骤有助于更好地管理和组织ROS项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021SC@SDUSC

ROS源代码阅读(6)

接下来看功能包
在下面庞大的ROS操作系统的支持下,我们可以在功能包建立节点node,而不同node之间可以协作完成一些特殊的工作,所以功能包就像是我们熟知的用户应用程序,可以通过实现节点帮助我们完成我们想做的事情。

下面我们看看对于功能包的使用:

1、创建工作空间

在开始具体工作之前,首先创建工作空间,并且为工作空间设置环境变量到~/.bashrc中,如果要查看已有的空间路径,可以用查询命令:

$ echo $ROS_PACKAGE_PATH

这里的创建空间实际上就是先建立一个文件夹,然后把文件夹的路径设置到环境变量/.bashrc中。例如我们这里创建目录/dev/rosbook作为工作空间,和第一种方法类似。

下面我们开始创建一个catkin 工作空间:

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src

即使这个工作空间是空的(在’src’目录中没有任何软件包,只有一个CMakeLists.txt链接文件),你依然可以“build”它:

$ cd ~/catkin_ws/ 
$ catkin_make

接下来首先source一下新生成的setup.*sh文件,把它加入环境变量到~/.bashrc文件中:

$ source ~/catkin_ws/devel/setup.bash

到此工作空间环境已经搭建完成

2、创建包

首先切换到之前创建的catkin工作空间中的src目录下:

 $ cd ~/catkin_ws/src

现在使用catkin_create_pkg命令来创建一个新的功能包包,这个程序包依赖于std_msgs、roscpp和rospy:

$ catkin_create_pkg package-name std_msgs rospy roscpp

这个文件夹里面包含一个package.xml文件和一个CMakeLists.txt文件,这两个文件都已经自动包含了部分你在执行catkin_create_pkg命令时提供的信息。

然后将你要完成的工作编写节点代码并且放入src目录下,然后修改CMakeList文件和package.xml文件为编译做准备

最后一步,编译,最方便的方法是用catkin_make完成

catkin_make 是一个命令行工具,它简化了catkin的标准工作流程。你可以认为catkin_make是在CMake标准工作流程中依次调用了cmake 和 make。

先source环境配置(setup)文件,在Ubuntu中的操作指令如下:

 $ source ~/setup.bash

切换到catkin workspace :

 $ cd ~/catkin_ws/

执行编译:

$ catkin_make

这样我们可以看一下功能包的结构

 ─ build
 │   ├── catkin
 │   │   └── catkin_generated
 │   │       └── version
 │   │           └── package.cmake
 │   ├──
 ......
 ​
 │   ├── catkin_make.cache
 │   ├── CMakeCache.txt
 │   ├── CMakeFiles
 │   │   ├──
 ......
 ​
 ├── devel
 │   ├── env.sh
 │   ├── lib
 │   ├── setup.bash
 │   ├── setup.sh
 │   ├── _setup_util.py
 │   └── setup.zsh
 └── src
 └── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake

通过tree命令可以看到catkin工作空间的结构,它包括了src、build、devel三个路径,在有些编译选项下也可能包括其他。但这三个文件夹是catkin编译系统默认的。它们的具体作用如下:

src/: ROS的catkin软件包(源代码包)
build/: catkin(CMake)的缓存信息和中间文件
devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量

总结下来Package功能包:

ROS程序只有组成package才能编译;

package是ROS源代码存放的地方;

ROS的代码无论是C++还是Python都要放到package中,这样才能正常的编译和运行;

一个package可以编译出来多个目标文件(ROS可执行程序、动态静态库、头文件等等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值