ros2学习笔记——工作空间、功能包以及节点
-
工作空间、功能包和节点
-
概念
工作空间(Workspace)是开发者进行ROS 2工程管理的基本环境,它通常由源码目录、编译生成目录以及安装目录等组成。工作空间的意义在于为开发者提供一个统一的开发与运行平台,使得多个功能包能够在同一环境下组织与协作。因此,可以将工作空间视为整个工程的外层容器,为功能模块的集成和扩展奠定了基础。

其次,功能包(Package)是ROS 2中功能实现的核心单元。每一个功能包都包含必要的代码文件、依赖声明、配置文件以及启动文件等,它是系统功能划分与复用的基本模块。功能包的设计理念在于高内聚与低耦合,即一个功能包通常专注于某一类功能实现,例如机器人导航、传感器数据采集或运动控制等。通过功能包的封装,开发者能够更方便地共享与部署功能,从而提升整个系统的模块化程度。下图是典型python功能包

最后,节点(Node)是ROS 2中最小的运行单元,它以独立进程的形式存在,并承担具体的功能任务。节点之间通过话题(Topic)、服务(Service)与动作(Action)进行通信,从而构建起复杂的分布式系统。一个功能包中通常可以包含一个或多个节点,这些节点相互协作,共同实现功能包所设定的目标。例如,一个导航功能包可能同时包含负责地图构建的节点、路径规划的节点以及运动控制的节点。
举例,我们做一个机器人,工作空间的结构可能是这样:
robot_ws/ ← 工作空间
src/
├── motor_control_pkg/ ← 功能包:电机控制
│ ├── nodes/
│ │ ├── motor_driver.py ← 节点:控制电机
│ │ └── encoder_reader.py ← 节点:读取编码器
│ └── package.xml
│
├── sensor_pkg/ ← 功能包:传感器
│ ├── nodes/
│ │ ├── lidar_node.py ← 节点:激光雷达
│ │ └── camera_node.py ← 节点:摄像头
│ └── package.xml
│
└── navigation_pkg/ ← 功能包:导航
├── nodes/
│ ├── path_planner.py ← 节点:路径规划
│ └── localization.py ← 节点:定位
└── package.xml
-
开发工具链详解
-
构建系统:colcon
colcon是ROS 2的官方构建工具,继承自catkin工具链并进行了功能扩展。
核心命令序列:
# 基础构建操作
colcon build
colcon build --packages-select package_name
colcon build --packages-up-to package_name
# 开发调试配置
colcon build --symlink-install
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug
构建系统管理整个工作空间的编译、链接和安装过程,确保依赖关系正确解析。
依赖管理:rosdep
rosdep负责系统级依赖的自动安装和管理,确保开发环境一致性。
关键工作流程:
# 依赖检查和安装
rosdep install -i --from-path src --ros-distro $ROS_DISTRO -y
rosdep check --from-paths src --ignore-src
# 国内镜像加速
rosdepc update
rosdepc install -i --from-path src --ros-distro $ROS_DISTRO -y
-
关键配置文件
包清单文件:package.xml
package.xml定义功能包的元数据和依赖关系,采用XML格式:
<package format="3">
<name>package_name</name>
<version>1.0.0</version>
<description>功能描述</description>
<depend>rclpy</depend>
<build_depend>ament_cmake</build_depend>
<exec_depend>std_msgs</exec_depend>
<test_depend>ament_lint_auto</test_depend>
</package>
依赖声明分为构建依赖、执行依赖和测试依赖三个层级。
构建配置文件
Python功能包使用setup.py配置构建参数:
python
setup(
name=package_name,
version='1.0.0',
packages=[package_name],
install_requires=['setuptools'],
entry_points={
'console_scripts': [
'node_name = package_name.module_name:main_function',
],
},
)
entry_points节将Python模块注册为可执行节点,是功能包与节点关联的关键配置。
标准开发流程
项目初始化阶段
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
功能包创建阶段
# Python功能包
ros2 pkg create package_name --build-type ament_python --dependencies rclpy std_msgs
# C++功能包
ros2 pkg create package_name --build-type ament_cmake --dependencies rclcpp std_msgs
依赖解析阶段
rosdep install -i --from-path src --ros-distro $ROS_DISTRO -y
构建测试阶段
colcon build --packages-select package_name --symlink-install
source install/setup.bash
ros2 run package_name node_name
--symlink-install参数在开发阶段特别重要,它创建符号链接而非文件拷贝,支持代码修改后的实时测试。
开发注意事项
1 环境配置
将环境初始化命令加入shell配置文件:
echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
2 依赖管理规范
准确声明package.xml中的依赖项
定期执行rosdep检查确保环境一致性
区分构建依赖、执行依赖和测试依赖
更多推荐


所有评论(0)