当前位置: 首页 > news >正文

ROS1中的Package

ROS1 Package 文件结构介绍

在 ROS中,Package 是最基本的功能组织单位。无论是节点(Node)、库(Library)、配置文件还是依赖,都被组织在 Package 内。一个典型的 ROS1 Package 的文件结构如下:

my_robot_package/
├── CMakeLists.txt
├── package.xml
├── include/
│   └── my_robot_package/
│       └── *.h
├── src/
│   └── *.cpp
├── scripts/
│   └── *.py
├── launch/
│   └── *.launch
├── msg/
│   └── *.msg
├── srv/
│   └── *.srv
├── action/
│   └── *.action
├── config/
│   └── *.yaml
└── README.md

下面逐一说明各部分的作用。

CMakeLists.txt

使用 CMake 定义编译规则,指定源文件、可执行文件、依赖库以及如何进行install等。

find_package(catkin REQUIRED ...)
add_executable
catkin_install_python
catkin_package

声明  来导入依赖
使用  添加 C++ 节点
使用  安装 Python 脚本
配置  导出依赖和头文件

package.xml

描述 Package 的元信息和依赖关系。主要字段包括:
:包名
:版本号
:维护者信息
:依赖的其他 Package(如 rospy、std_msgs 等)
<buildtool_depend>:构建工具依赖(通常是 catkin)

<package format="2"><name>my_metapackage</name><version>0.0.1</version><description>My custom metapackage</description><maintainer email="me@example.com">Your Name</maintainer><license>BSD</license><buildtool_depend>catkin</buildtool_depend><export></export><!-- 依赖的其他包 --><depend>pkg_a</depend><depend>pkg_b</depend>
</package>

src/

存放 C++ 源文件(.cpp)。
例如:src/my_node.cpp 定义一个 ROS 节点。

include/

存放 头文件(.h 或 .hpp)。
按照 ROS 社区惯例,通常子目录与包名一致,例如 include/my_robot_package/robot_controller.h
这样在其他代码中可以通过:

#include "my_robot_package/robot_controller.h"

来引用。

scripts/

存放 Python 节点脚本(.py)。
通常需要在首行加上:
#!/usr/bin/env python
并赋予可执行权限:
chmod +x my_script.py

launch/

存放 启动文件(.launch),用于一次性启动多个节点。
例如:

<launch><node pkg="my_robot_package" type="my_node" name="robot_node" output="screen"/>
</launch>

config/

存放参数配置文件(.yaml),用于 rosparam load。
例如:
robot_speed: 1.5
sensor_topic: “/scan”

msg/

定义自定义消息类型(.msg)。
例如:

float32 x
float32 y
float32 theta

srv/

定义服务类型(.srv)。
服务分为 请求部分 和 响应部分,例如:

int32 a
int32 b
---
int32 sum

ROS 构建系统会根据这些定义自动生成对应的语言接口(C++、Python)。

action/

# 定义目标 (Goal)
int32 target
---
# 定义结果 (Result)
int32 result
---
# 定义反馈 (Feedback)
int32 progress

当定义数据功能包的时候,add_message_files,add_service_files,add_action_files的时候会自动在功能包下的msg,srv,action文件夹寻找指定的文件。

其他文件

README.md

项目的说明文件,通常介绍包的用途、依赖和使用方法。

CHANGELOG.rst

官方支持使用这种方式,后续支持打包

1.0.0 (2025-08-24)
------------------
* 初始化功能包

metapackage

Metapackage 本身 不包含源码或可执行节点,它只是一个“集合”,用来把一组功能相关的 package 组织在一起,方便用户一次性安装或依赖。

文件结构

my_metapackage/
├── CMakeLists.txt
└── package.xml

package.xml

<package format="2"><name>my_metapackage</name><version>0.0.1</version><description>My custom metapackage</description><maintainer email="me@example.com">Your Name</maintainer><license>BSD</license><!-- 关键点:声明它是一个 metapackage --><export><metapackage/></export><!-- 依赖的其他包 --><depend>pkg_a</depend><depend>pkg_b</depend>
</package>

CMakeLists.txt

metapackage的CMakeLists.txt是非常简单的,只需要声明是一个catkin_metapackage即可。

cmake_minimum_required(VERSION 2.8.3)
project(my_metapackage)
find_package(catkin REQUIRED)
catkin_metapackage()
http://www.dtcms.com/a/349016.html

相关文章:

  • Ansible 自动化基石:变量定义、优先级控制与 Vault 敏感信息加密实战指南
  • 100个实用小工具1.3历年股价分析小工具新增股价批量下载
  • Linux shell脚本条件循环
  • MATLAB 在工程仿真中的实践:以机械振动分析为例的完整流程
  • 1.Spring Boot:超越配置地狱,重塑Java开发体验
  • LeetCode 101 刷题 - (2) 第二章 玩转双指针
  • Jupyter Lab 常用快捷键清单
  • C++标准库头文件使用指南
  • 【C++】10. list
  • BUCK电路的环路补偿
  • JDK版本报错
  • 在PC机上使用虚幻引擎5(UE5)开发第一款游戏的完整入门指南
  • 门面设计模式
  • Python核心技术开发指南(012)——浮点数
  • 如何捕获组件的异常情况
  • 一个简单的html音乐播放器
  • 阿里发布Qoder:颠覆软件开发体验的AI编程平台
  • 前端应用容器化,基于Docker多阶段构建的最佳实践
  • More Effective C++ 条款05: 谨慎定义类型转换函数
  • Java 泛型的“擦除”与“保留”:一次完整的编译与反编译实验
  • Docker中Dify镜像由Windows系统迁移到Linux系统的方法
  • 【计算机408数据结构】第二章:基本数据结构之线性表
  • Leetcode 3660. Jump Game IX
  • 新的 Gmail 网络钓鱼攻击利用 AI 提示注入来逃避检测
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十四)垂直滚动条
  • 【URP】[投影Projector]解析与应用
  • 【cs336学习笔记】[第6课]内核优化与Triton框架应用
  • 如何在算力时代乘风破浪?
  • 深度学习中的模型量化及实现示例
  • 【RAGFlow代码详解-4】数据存储层