本帖最后由 lb8820265 于 2022-11-1 16:03 编辑
学习软件最快的方式就是从例程入手,而大部分的软件例程都可以直接用软件打开运行。但是ROS例程使用起来却要稍显麻烦,要弄懂ROS例程怎么导入并使用之前,需要了解ROS工程的组织架构和各个文件的功能和作用。
Catkin编译系统
对于源代码包,我们只有编译才能在系统上运行。而Linux下的编译器有gcc、g++,随着源文件的增加,直接用gcc/g++命令的方式显得效率低下,人们开始用Makefile来进行编译。然而 随着工程体量的增大,Makefile也不能满足需求,于是便出现了Cmake工具。CMake是对 make工具的生成器,是更高层的工具,它简化了编译构建过程,能够管理大型项目,具有良 好的扩展性。对于ROS这样大体量的平台来说,就采用的是CMake,并且ROS对CMake进行 了扩展,于是便有了Catkin编译系统。
Catkin工作原理
catkin编译的工作流程如下:
- 首先在工作空间 catkin_ws/src/下递归的查找其中每一个ROS的package。
- package中会有package.xml和CMakeLists.txt 文件,Catkin编译系统依据 CMakeLists.txt 文件,从而生成makefiles (放在catkin_ws/build/ )。
- 然后make刚刚生成的makefiles等文件,编译链接生成可执行文件(放在catkin_ws/devel )。
Catkin工作空间
Catkin工作空间是创建、修改、编译catkin软件包的目录。catkin的工作空间,直观的形容就是一个仓库,里面装载着ROS的各种项目工程,便于系统组织管理调用。在可视化图形界面里是一个文件夹。
src/: ROS的catkin软件包(源代码包)
build/: catkin(CMake)的缓存信息和中间文件
devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量
.catkin_workspace:隐藏文件,用来指示该空间为catkin空间
在编译过程中,它们的工作流程如图:
后两个路径由catkin系统自动生成、管理,我们日常的开发一般不会去涉及,而主要用到的是 src文件夹,我们写的ROS程序、网上下载的ROS源代码包都存放在这里。
Package软件包
Package软件包是catkin编译的基本单元,我们调用catkin_make 编译的对象就是一个个ROS的package,一个package下常见的文件、路径有:
├── CMakeLists.txt #package的编译规则(必须)
├── package.xml #package的描述信息(必须)
├── src/ #源代码文件
├── include/ #C++头文件
├── scripts/ #可执行脚本
├── msg/ #自定义消息
├── srv/ #自定义服务
├── models/ #3D模型文件
├── urdf/ #urdf文件
├── launch/ #launch文件
其中定义package的是 CMakeLists.txt 和 package.xml ,这两个文件是package中必不可少的。catkin编译系统在编译前,首先就要解析这两个文件。这两个文件就定义了一个package。
导入外部软件包的方法
因此,导入外部软件包的方法实际上就是将Package软件包放入Catkin工作空间的src文件夹,具体步骤如下:
0. 安装“noetic”版本ROS
略
1. 建立ROS工作空间文件夹
例如新建“catkin_ws”文件夹和“src”子文件夹
mkdir -p catkin_ws/src
2. 将源代码放入“src”文件夹
可以手动复制放入,例如将源码中“helloworld”例程文件夹放入“src”文件夹,也可以从GitHub克隆整个软件到“src”文件夹,代码如下:
cd ~/catkin_ws/src
git clone https://https://github.com/wanli-car/ROS_Examples.git
3. 安装所需要的依赖
rosdep install --from-paths src --ignore-src --rosdistro=noetic -y
4. 编译
在“catkin_ws”文件夹目录下执行编译指令
catkin_make
5. 刷新环境
source ~/catkin_ws/devel/setup.bash
6. 使用VSCode打开工程(可无)
code .
7. 启动ROS内核
重新打开一个终端输入
roscore
8. 运行
在原来的终端中输入
rosrun helloworld helloworld_node
参考
参考了中国大学MOOC---《机器人操作系统入门》课程的PDF,表示感谢,该PDF帖子最后下载。
源码
GitHub:https://github.com/wanli-car/ROS_Examples
Gitee:https://gitee.com/wanli-car/ROS_Examples