工作空间的相关概念
工作空间类似于工程project,是一个存放工程开发相关文件的文件夹。其中主要包括四个主要文件夹:
- src:代码空间(Source Space)
- build:编译空间(Build Space)【不需要关心】
- devel:开发空间(Develop Space)【需要关注其中的内容】
- install:安装空间(Install Space)【安装成功的结果,与开发空间存在重复】
工作空间的创建、编译与环境变量的设置
-
创建工作空间
新建文件夹以及该文件夹下的子文件夹(可直接新建或是用命令行新建)
mkdir catkin_ws
cd catkin_ws
mkdir src
cd src
将文件属性配置为ros的工作空间
catkin_init_workspace
在src文件夹下出现如下文本文件即说明工作空间创建完成
-
编译工作空间
首先回到工作空间的根目录
cd ..
在工作空间中执行编译
catkin_make
随后发现会出现如下问题:
-- Found PythonInterp: /home/dian/opt/anaconda3/bin/python3 (found suitable version "3.9.7", minimum required is "3")
-- Using PYTHON_EXECUTABLE: /home/dian/opt/anaconda3/bin/python3
-- Using Debian Python package layout
-- Could NOT find PY_em (missing: PY_EM)
CMake Error at /opt/ros/noetic/share/catkin/cmake/empy.cmake:30 (message):
Unable to find either executable 'empy' or Python module 'em'... try
installing the package 'python3-empy'
Call Stack (most recent call first):
/opt/ros/noetic/share/catkin/cmake/all.cmake:164 (include)
/opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:20 (include)
CMakeLists.txt:58 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/dian/newdisk/ros_files/ws1/build/CMakeFiles/CMakeOutput.log".
Invoking "cmake" failed
解决措施:【参考:ROS知识:解决ROS和Anaconda的python冲突_无水先生的博客-优快云博客_python3-empy】
首次在工作空间的根目录下进行编译时,执行:
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
此时,根目录下存在三个文件夹:src、devel、build
执行如下代码,进一步生成install文件夹
功能包的相关概念
在创建代码之前需要创建功能包,功能包是放置源码的最小单元,代码必须要放在功能包,不能直接放在src文件夹中。
注意:同一工作空间下,不允许存在同名功能包,不同工作空间下,允许存在同名功能包
-
添加工作空间:
在src文件夹中打开终端,输入:
catkin_create_pkg test_pkg roscpp rospy std_msgs
两类参数分别是功能包名称和功能包所依赖的库
在src文件夹中新生成文件
其中,src文件夹用于放置功能包的代码,例如cpp文件和py代码文件都是放在功能包的src文件夹中的;include 文件夹用于放置头文件;其余两个文件是功能包必备的文件。
-
编译功能包
回到工作空间的根目录中,编译工作空间:
catkin_make
在日志中可以看到新出现的功能包
由于功能包中没有代码,所以不会产生功能或效果
-
设置环境变量
编译功能包完成后,若要实现某一个程序,则需要设置工作空间的环境变量,以便系统找到工作空间以及其中的功能包
source devel/setup.bash
检查环境变量
echo $ROS_PACKAGE_PATH
反馈的信息为:
/home/dian/newdisk/ros_files/catkin_ws/src:/opt/ros/noetic/share
-
文件package.xml的说明
文本文件中包含功能包的基本信息、依赖信息(编译或执行时依赖的其他功能包,可以后需添加)
-
文件CMakeLists.txt的说明
文件中保护了功能包的编译规则,使用的语法是CMake