ROS2学习(1)--工作空间和功能包

ROS2学习(1)--工作空间和功能包

 次点击
7 分钟阅读

工作空间

一个工作空间可以包含多个功能包.

以一个c++工作空间为例,创建一个工作空间learning_ws,并在learning_ws下创建一个src文件夹.之后,在learning_ws下执行 colcon build ,该目录会包含如下文件

learning_ws/
├── 
├── src/                    # 存放一个或多个功能包
│   ├── function_package_01/
│   └── function_package_02/
│
├── log/                    # 编译和运行过程中存放的信息
├── install/                # 存放编译后得到的可执行文件
│       
└── build/                  # 存放编译过程中的中间文件

功能包

每个机器人可能具备多种功能,例如运动控制、视觉感知和自主导航。虽然我们可以将所有这些功能的源代码合并在一起,但当我们希望与他人共享其中某些功能时,常常会发现代码混杂在一起,难以分离。

功能包(function package)正是为解决这一问题而设计的。我们将不同功能的代码分别放入独立的软件包中,并尽可能降低它们之间的耦合度。在与 ROS 社区的其他开发者共享时,我们只需说明如何使用该功能包,其他人便能快速上手并加以应用。

功能包的创建

ros2 pkg create <package_name> --build-type <build-type> --dependencies <dependencies> --node-name <node_name>

各参数介绍:

<package_name>: 创建的功能包名称

<build-type>: 指定功能包使用的构建系统类型. ament_cmake:用于c++项目; ament_python :用于python项目

<dependencies>: 指定当前功能包依赖的其他功能包, c++项目通常依赖 rclcpp ,python项目通常依rclpy,如果用到了标准消息类型(如字符串,整型等),通常依std_msgs .

<node_name>: 编译生成的可执行文件的名称.需要注意的是,这个不是指的ros2的消息节点名称.消息节点名通常在代码中指定.

进入learning_ws/src文件夹,通过以下指令,创建名为hello_demo的c++项目功能包

ros2 pkg create hello_demo --build-type ament_cmake --dependencies rclcpp std_msgs --node-name hello_demo

获得如下结构目录

learning_ws/
├── 
├── src/                    # 存放一个或多个功能包
│   └── hello_demo/
│       ├── include/        # 存放c++头文件
│       ├── src/            # 存放功能包核心源代码
│       ├── CMakeLists.txt  
│       └── package.xml     # 包含功能包元数据,具体定义了功能包名称,版本号,许可证,依赖等信息.ROS2通过该文件来识别和管理对应功能包
│
├── log/                    # 编译和运行过程中存放的信息
├── install/                # 存放编译后得到的可执行文件
│       
└── build/                  # 存放编译过程中的中间文件

功能包编译

在创建功能包后,可以进行编译,对应编译指令有两种:

cd learning_ws

# 编译工作空间中所有功能包
colcon build 

# 编译指定1个或多个功能包
colcon build --packages-select <package_name>

# 刷新开发环境
source install/setup.bash

需要注意,刷新开发环境后,才能正常使用 ros2 run <package_name> <node_name>,去执行对应功能包下的可执行文件.

© 本文著作权归作者所有,未经许可不得转载使用。