参考
ROS官方wiki—理解ROS节点
ROS官方wiki—理解ROS话题
ROS官方wiki—理解ROS服务及参数
前置
ROS 的逻辑视图
ROS 工作空间简介
ROS的工作空间提供预定义的管理模式。工作空间的示意图如下:
图中包括两个package,分另为橙色和绿色,平行四边形
代表代码文件,方框
代表目录。
ROS工作空间的内容分4类:
- src
:打交道最多文件夹,保存所有的代码,每个子文件夹是一个pakage,后文还有详细介绍
- build
:中间编译文件,除非编译时有奇怪bug,一般不用管
- devel
:生成的所有exec
/.py
的目录,也是ROS系统引导自己编写的包的目录,后文还有详细介绍
- install
:可对外发布时,程序保存的目录
src目录
src目录下每个文件夹代表一个package,每个pakage可生成多个可执行文件,每个可执行文件是一个ROS节点。
每个package包含以下内容:
include
:存放编写的头文件,在CMakeLists.txt添加时要指定include/*.h
src
:保存编写的源文件,在CMakeLists.txt添加时要指定include/*.cpp
srv
(可选):服务协议文件*.src
的保存位置,配合CMakeLists.txt的add_service_files()
使用,直接写文件名,不要加前缀
msg
(可选):服务协议文件*.msg
的保存位置,配合CMakeLists.txt的add_message_files()
使用,直接写文件名,不要加前缀
devel 目录
这个目录通常是不独立出来的,但ROS要支持c++/Python两种输出,所以独立放到一个文件夹,且默认提供了ROS系统引导的文件。具体包括:
-setup.sh/.zsh/.bash
:由不同shell调用的脚本,source
后就在ROS系统 中引导了当前工作空间,之后可以用rosrun
/roscd
/…等命令调用生成的package。
-local_setup.sh/.zsh/.bash
:用于在当前目录调用setup.sh
-__setup__util.py
:类似于setup.sh
,不过用于引导python加载
-env.sh
:当前工作空间的环境设置,不需手工调用
-include
:C++头文件目录
-lib
:c++编译生成、python代码及配置文件目录
[pkg*]
:c++可执行文件的输出目录,按package文件夹分割[pkgconfig]
:C++的外部引导配置,被其他库依赖时使用,其下为每个package提供了*.pc
配置文件python3
:python输出文件目录,其下提供site-package
,可供python外部调用
创建工作空间
手工创建目录
source /opt/ros/noetic/setup.sh # 此条可添加到~/.bashrc,之后不用每次调用
cd ~
mkdir catkin_ws
cd catkin_ws
mkdir src # 创建工作空间下的代码目录
创建package
以下代码执行后,会按ROS工作空间的逻辑编译代码,但此时目录为空,那么会直接创建build/devel/…等目录,并在其中添加相应的配置文件
cd src
catkin_create_pkg test std_msgs # 创建包test,依赖库为std_msgs
cd ~/catkin_ws/
catkin_make # 会正常编译,但没有编译代码,因而不会生成任何可执行程序
# 必须在ROS工作空间的根目录调用
catkin_cmake
是个复合命令,等价于
$ mkdir build
$ cd build
$ cmake ../src
$ make
补充信息
如果新添加或移除package,一定要执行
$ catkin_make --force-cmake
如果这条命令无效,就删除build
目录,完全重新执行。
后续
参考
ROS 的 Topic 创建与运行示例
ROS 的服务创建与运行示例
创建第一个程序。