本帖最后由 dirty 于 2025-2-15 23:31 编辑
本篇讲述ROS2机器人开发流程概览,并对其工作空间、功能包进行梳理学习实践。
一.ROS2机器人开发流程
ROS2的应用开发流程包含如下:
●工作空间(Workspace),开发过程的大本营
●功能包(Package):功能源码的聚集地
●节点(Node):机器人的工作细胞
●话题(Topic):节点间传递数据的桥梁
●服务(Service):节点间的你问我答
●通信接口(Interface):数据传递的标准结构参数(Parameter):机器人系统的全局字典动作(Action):完整行为的流程管理分布式通信(DistributedCommunication):多计算平台的任务分配
●DDS(Data Distribution Service):机器人的神经网络
ROS2机器人开发流程图如下:
二.工作空间与功能包
工作空间
1.工作空间概述
工作空间是一个存放项目开发相关文件的文件夹,也是开发过程中存放所有资料的大本营。ROS系统中一个典型的工作空间结构如下图所示。
●src,代码空间,未来编写的代码、脚本,都需要人为的放置到这里;
●build,编译空间,保存编译过程中产生的中间文件;
●install,安装空间,放置编译得到的可执行文件和脚本;
●log,日志空间,编译和运行过程中,保存各种警告、错误、信息等日志。
2.创建工作空间
创建创建工作空间主要是创建目录及代码如下,这里用到了古月居引导学习的ros2 21讲上手代码。
- mkdir -p ~/dev_ws/src
- cd ~/dev_ws/src
- git clone https:
3.安装依赖。这里需要安装python3(最好3.8以上)。书中有讲安装rosdepc,实际可安装上rosdep。
- sudo add-apt-repository ppa:deadsnakes/ppa
- sudo apt update
- sudo apt install python3.10
- sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.x 1
- sudo update-alternatives --config python3
- python3 --version
4.编译工作空间
- sudo apt install python3-colcon-ros
- cd ~/dev_ws/
- colcon build
目录切换到dev_ws,使用colcon build进行全编译,编译成功后,就可以在工作空间中看到自动生产的build、log、install文件夹了。
5.设置环境变量
- echo " source ~/dev_ws/install/local_setup.sh" >> ~/.bashrc
至此,我们就完成了工作空间的创建、编译和配置。
功能包
功能包原理,是把不同功能的代码划分到不同的功能包中,尽量降低他们之间的耦合关系。功能包的机制,是提高ROS中软件复用率的重要方法之一。
1.创建功能包
- ros2 pkg create --build-type <build-type> <package_name>
ros2命令中:
pkg:表示功能包相关的功能;
create:表示创建功能包;
build-type:表示新创建的功能包是C++还是Python的,如果使用C++或者C,那这里就跟ament_cmake,如果使用Python,就跟ament_python;
package_name:新建功能包的名字。
我们可以看到ROS2工作空间ros2_21_tutorials中learning_pkg_c和learning_pkg_python是在终端中分别创建C++和Python版本的功能包:
- cd ~/dev_ws/src
- ros2 pkg create --build-type ament_cmake learning_pkg_c # C++
- ros2 pkg create --build-type ament_python learning_pkg_python # Python
2.编译功能包
编译功能包可以colcon build全编译,也可以指定功能包编译。编译指定使用前需要安装colcon的扩展功能。
- sudo apt install python3-colcon-common-extensions
指定功能包编译指令如下,通过--packages-select 或者--packages-up-to 参数编译指定功能包,package_name用于替换某个具体功能包。
- cd ~/dev_ws
- colcon build --packages-select <package_name>
- colcon build --packages-up-to <package_name>
-
3.清除编译历史
- cd ~/dev_ws
- rm -rf install/ build/ log/
以上是功能包操作相关指令,下面了解下功能包结构。
4.功能包的结构
上面有介绍C++和Python两种版本功能包创建,这里也分开讲述。
C++功能包
C++类型的功能包,其中必然存在两个文件:package.xml和CMakerLists.txt。
package.xml文件的主要内容如下,包含功能包的版权描述,和各种依赖的声明。
CMakeLists.txt文件是编译规则,C++代码需要编译才能运行,所以必须要在该文件中设置如何编译,使用CMake语法。
Python功能包
C++功能包需要将源码编译成可执行文件,但是Python语言是解析型的,不需要编译,所以会有一些不同,但也会有这两个文件:package.xml和setup.py。
package.xml文件的主要内容和C++版本功能包一样,包含功能包的版权描述,和各种依赖的声明。
setup.py文件里边也包含一些版权信息,除此之外,还有“entry_points”配置的程序入口。
至此,对功能包的创建、编译及其结构与文件功能有了了解认识。