一、ubuntu安装ROS后
路径为:/opt/ros/noetic
文件夹的内容:
- bin内部是全部shell的命令。放置一些具体的可执行的程序,在ros的bin文件夹下面保存的都是ros系统和一些功能包给我们提供的可以直接执行的命令,可以在终端下面执行这些命令。
- etc是配置文件,其中包括catkin的所在地。
- include是调用lib中的节点头文件。即所有通过命令行和终端安装的功能包的代码头文件。
- lib是所有节点的放置地,通过运行节点来启动相应功能包里的功能。
- share是所有功能包放置地。保存的是功能包里面接口的一些具体信息,接口包含话题、服务、action等。
二、功能包介绍
ROS的功能包旨在产生一些功能,促进代码复用。
每个节点都必须有功能包,ROS1的功能包是这样排布的。每个ROS软件包的组织结构如下:
- action:放置自定义的动作指令
- config:放置配置文件,用户创建。一般是一些参数文件,这些文件的后缀多为.yaml
- include:放置功能包头文件
- launch启动文件夹:包含启动文件
- msg:定义消息类型
- scripts:放置python的脚本
- src文件夹:包含源代码
- srv:放置功能包的动作指令
- CMakeList.txt:用于编译的cmake规则列表
- package.xml:包的信息和依赖项
在package.xml中
- <build_depend> </build_depend>
- <run_depend> </run_depend>
需要随情况修改
三、创建功能包
创建功能包的语法:
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
package_name是软件包的名称。depend是该软件包所以来的其他ROS软件包的名称。
举例:
首先在src文件夹下创建一个“hello_world"的ROS包这个包有三个依赖项(即包所依赖的库,以便包中的代码正常运行):roscpp(C++的ROS库),rospy(Python的ROS库)和std_msgs(ROS中预定义的常见数据类型...“标准消息”)。
如下:
catkin_create_pkg hello_world std_msgs rospy roscpp
于是出现下图结果:
现在的工作路径下有个名为hello_world的包。前进到hello_world下,共出现了四个文件,分别为CMakeLists.txt、include、src、package.xml。
这四个文件:
CMakeLists.txt: 用于编译在ROS编写程序的命令;将源代码和其他文件转为可执行文件。
include:包含头文件。相当于在C++中编写头文件的那个地方,这里就是存储头文件的。
src:包含C++源代码。如果要用Python写代码,还需要创建一个scripts的文件夹,这个文件夹用来存py代码。
mkdir scripts
就会出现以下结果:
package.xml:这是一个一结构化的方式存储信息的地方,不执行任何其他操作。包含hello_world软件包的信息。
在本案例中如下图所示:
完成!
四、在ROS中编译包
在ROS中创建新包后,需要编译后才能运行。
catkin_make
将编译src中所有内容。注意要在src上一级目录进行。
如果只想编译特定的包:
catkin_make --only-pkg-with-deps <your_package>
例如本案例中
catkin_make --only-pkg-with-deps hello_world
参考文献: