ROS2模块库概览
一、核心通信与基础库(最常用)
-
客户端库
- rclcpp (ROS Client Library for C++)
- 核心API:
create_node(),create_publisher(),create_subscription() - 高级特性:
- 生命周期节点:通过
rclcpp_lifecycle实现configure/activate/shutdown状态机 - 组件系统:
ComponentManager支持动态加载插件(如load_component("image_pipeline::CameraNode"))
- 生命周期节点:通过
- 核心API:
- rclpy (ROS Client Library for Python)
- 异步通信:
AsyncExecutor实现非阻塞执行 - 类型动态检查:利用Python弱类型特性快速原型开发
- 异步通信:
- rcl (ROS Client Library)
- 跨语言设计:通过
rosidl_typesupport实现C/C++/Python消息类型兼容 - 性能优化:零拷贝通信支持(需配合
rmw_iceoryx中间件)
- 跨语言设计:通过
- rclcpp (ROS Client Library for C++)
-
中间件抽象层
- rmw (ROS MiddleWare Interface)
- 抽象接口:定义
rmw_publish(),rmw_subscribe()等标准DDS操作 - 配置切换:通过
RMW_IMPLEMENTATION=rmw_cyclonedds_cpp环境变量选择中间件
- 抽象接口:定义
- DDS实现对比:
- Fast-RTPS:默认选择,平衡性能和资源占用
- Cyclone DDS:强调低延迟和确定性(适合实时系统)
- Connext DDS:商业级QoS策略(需许可证)
- rmw (ROS MiddleWare Interface)
-
消息系统
- message_generation
- 代码生成流程:
.msg→rosidl_generator_cpp→ 生成msg/xxx.hpp - 自定义消息:需在
CMakeLists.txt中声明rosidl_generate_interfaces()
- 代码生成流程:
- rosidl
- 跨语言序列化:支持C++的
to_cdr_stream()和Python的serialize() - 类型系统扩展:通过
rosidl_dynamic_typesupport实现运行时类型注册
- 跨语言序列化:支持C++的
- message_generation
二、工具链(高频使用)
-
命令行工具
- ros2cli
- 高级用法:
ros2 topic hz /scan监测话题频率ros2 param dump /node_name导出参数到YAML
- 插件机制:通过
ros2 extension points添加自定义命令
- 高级用法:
- ros2launch
- 条件执行:
<if>和<unless>标签实现逻辑控制 - 参数传递:
<arg>声明配合ros2 launch my_pkg launch.py arg:=value
- 条件执行:
- ros2cli
-
可视化工具
- rviz2
- 插件开发:继承
rviz_common::Display实现自定义显示类型 - 配置保存:
rviz2 -d config.rviz加载预设界面布局
- 插件开发:继承
- rqt
- 自定义插件:使用
rqt_gui_py开发Python可视化工具 - 数据过滤:在
rqt_plot中使用正则表达式选择特定话题字段
- 自定义插件:使用
- rviz2
-
调试工具
- ros2bag
- 过滤录制:
ros2 bag record -e "/camera/.*"使用正则表达式匹配话题 - 性能优化:设置
--storage mcap使用高效二进制格式
- 过滤录制:
- ros2doctor
- 网络诊断:检查多播组
239.255.0.1是否可达 - 配置检查:验证
ROS_DOMAIN_ID冲突和端口占用
- 网络诊断:检查多播组
- ros2bag
三、高级功能库(中频使用)
-
节点管理
- lifecycle
- 状态迁移图:
Unconfigured → Inactive → Active → Finalized - 错误恢复:通过
on_error回调处理异常状态
- 状态迁移图:
- composition
- 动态加载:使用
ros2 component load /ComponentManager image_pipeline::CameraNode - 资源隔离:通过
rclcpp::NodeOptions配置独立命名空间
- 动态加载:使用
- lifecycle
-
实时系统支持
- rclc
- 内存预分配:
rclc_executor_init()设置静态内存池大小 - 确定性调度:配合FreeRTOS的
vTaskPrioritySet()实现优先级控制
- 内存预分配:
- Real-Time Tools
- 无锁队列:
rt_tools::LockFreeQueue<Message>实现高并发通信 - 时间敏感型API:
rclcpp::QoSDeadlineRequested设置截止时间约束
- 无锁队列:
- rclc
-
安全机制
- sros2
- 证书管理:
ros2 security generate_artifacts生成CA和节点证书 - 策略文件:
governance.xml定义域权限,permissions.xml细粒度控制话题访问
- 证书管理:
- sros2
-
执行器扩展
- MultiThreadedExecutor
- 线程池配置:
set_number_of_threads(4)优化CPU核心利用率
- 线程池配置:
- StaticSingleThreadedExecutor
- 确定性调度:保证回调执行顺序与订阅顺序一致
- MultiThreadedExecutor
四、硬件交互库(按需使用)
-
传感器驱动
- camera
- 标定流程:使用
camera_calibration包生成ost.yaml标定文件 - 图像流水线:
image_proc实现去拜耳/立体视差计算
- 标定流程:使用
- lidar
- Velodyne驱动:
velodyne_driver解析VLP-16数据包 - 点云过滤:
pcl_ros实现降采样和离群点去除
- Velodyne驱动:
- imu_tools
- 数据融合:
imu_filter_madgwick实现姿态解算
- 数据融合:
- camera
-
执行器控制
- ros2_control
- 硬件接口:实现
hardware_interface::SystemInterface接入真实设备 - 联合控制:
joint_trajectory_controller实现多轴同步运动
- 硬件接口:实现
- controller_manager
- 动态加载:
load_controller("joint_state_broadcaster") - 切换策略:
switch_controllers()实现无抖动控制器切换
- 动态加载:
- ros2_control
-
通信协议适配
- micro-ROS
- 传输层:支持UART、WiFi、LoRa等物理层协议
- 资源占用:最小内存需求≈64KB RAM(基于Cortex-M4)
- ros2_socketcan
- CAN帧解析:
can_msgs/msg/Frame封装标准CAN 2.0B格式 - DBC集成:通过
ros2_socketcan解析汽车总线信号
- CAN帧解析:
- micro-ROS
五、领域专用库(按场景使用)
-
导航与SLAM
- Navigation2
- 行为树引擎:
nav2_behavior_tree实现RecoveryNode等复杂逻辑 - 代价地图:
voxel_layer处理3D障碍物
- 行为树引擎:
- slam_toolbox
- 异步SLAM:支持离线建图模式
ros2 launch slam_toolbox offline_slam_launch.py - 地图保存:
map_saver_cli生成PGM/YAML格式地图
- 异步SLAM:支持离线建图模式
- Navigation2
-
机器人模型
- urdf/xacro
- 宏编程:
<xacro:macro>定义可复用模型组件 - 物理属性:
<inertial>标签配置质量与转动惯量
- 宏编程:
- robot_state_publisher
- TF优化:使用
tf2_ros::StaticTransformBroadcaster发布静态坐标系
- TF优化:使用
- urdf/xacro
-
仿真接口
- gazebo_ros2_control
- PID调参:通过
gazebo_ros2_control_params.yaml配置仿真控制器 - 传感器插件:
libgazebo_ros_camera.so模拟RGB-D摄像头
- PID调参:通过
- ros_ign
- 物理引擎:支持ODE/Bullet/DART多种后端
- 传感器仿真:
ignition::sensors模拟高精度激光雷达噪声
- gazebo_ros2_control
六、接口定义库(基础依赖)
-
标准消息
- std_msgs
- 基础类型:
Bool,Int32,Float64MultiArray等 - 头信息:
std_msgs/Header包含时间戳和坐标系
- 基础类型:
- geometry_msgs
- 位姿表示:
PoseWithCovarianceStamped支持协方差传递 - 运动控制:
Twist消息用于速度指令(线速度+角速度)
- 位姿表示:
- std_msgs
-
服务接口
- std_srvs
- 通用服务:
Trigger用于简单状态触发,SetBool设置布尔量
- 通用服务:
- tf2_msgs
- 坐标系查询:
LookupTransform.srv实现动态TF树检索
- 坐标系查询:
- std_srvs
-
动作接口
- actionlib_msgs
- 状态机:
GoalStatus包含PENDING/ACTIVE/SUCCEEDED等状态 - 反馈机制:
Fibonacci.action示例展示进度反馈设计模式
- 状态机:
- actionlib_msgs
七、社区贡献库(低频/专业使用)
-
扩展工具
- ros2_tracing
- Trace分析:使用
babeltrace2解析.ctf文件生成性能火焰图 - 关键事件:追踪
rcl_publish和rclcpp_executor_wait等底层调用
- Trace分析:使用
- ros2multicast
- 组播配置:设置
ROS_MULTICAST_IP指定组播地址 - QoS策略:
Reliability.BEST_EFFORT降低带宽占用
- 组播配置:设置
- ros2_tracing
-
特殊中间件
- rmw_iceoryx
- 零拷贝原理:通过共享内存实现发布者-订阅者直接内存传递
- 适用场景:高吞吐量图像传输(如4K视频流)
- rmw_zenoh
- 广域网支持:通过
zenoh-bridge-dds实现跨互联网ROS2通信
- 广域网支持:通过
- rmw_iceoryx
-
领域协议
- ros2_for_wasi
- 浏览器集成:通过WebAssembly在浏览器中运行ROS2节点
- 限制:不支持多线程和部分系统调用
- ros2_dotnet
- C#绑定:使用
ROS2.Dotnet包实现与Unity引擎集成
- C#绑定:使用
- ros2_for_wasi
八、遗留兼容库(迁移场景使用)
-
ros1_bridge
- 双向通信:支持ROS1的
roscpp与ROS2的rclcpp节点互通 - 类型映射:自动转换
std_msgs/String等基础消息类型 - 性能损耗:实测增加~15%延迟(需评估关键路径)
- 双向通信:支持ROS1的
-
ros2dds
- DDS调试:直接使用
rtiddsspy监听DDS层原始数据 - QoS配置:通过XML文件定义DataWriter/DataReader策略
- DDS调试:直接使用
系统分层架构(深度解析)
| 层级 | 关键技术 | 典型组件 | 性能考量 |
|---|---|---|---|
| 应用层 | 算法实现 | Navigation2节点 | CPU/GPU利用率优化 |
| 接口层 | IDL定义 | rosidl_generator | 消息序列化开销 |
| 核心层 | 执行模型 | rclcpp Executor | 回调延迟确定性 |
| 中间件层 | DDS协议 | Fast-RTPS Discovery | 网络带宽占用 |
| OS层 | 实时调度 | PREEMPT_RT内核 | 中断响应时间 |
补充知识
-
性能调优技巧:
- DDS调参:调整
HistoryKind和Depth平衡内存与延迟 - 执行器选择:实时系统优先使用
StaticSingleThreadedExecutor - 零拷贝技巧:对大数据使用
std::unique_ptr避免拷贝
- DDS调参:调整
-
安全实践:
- 最小权限原则:在
permissions.xml中严格限制节点权限 - 证书轮换:定期更新CA证书防止密钥泄露
- 最小权限原则:在
-
调试进阶:
- ROS2层跟踪:
RCLCPP_DEBUG()配合rqt_console过滤日志 - DDS层诊断:使用
Wireshark抓包分析RTPS协议流量
- ROS2层跟踪:
建议结合ROS2设计文档和各包API文档进行深入学习,并通过ros2 pkg list获取完整包列表。
相关文章:
ROS2模块库概览
一、核心通信与基础库(最常用) 客户端库 rclcpp (ROS Client Library for C) 核心API:create_node(), create_publisher(), create_subscription()高级特性: 生命周期节点:通过rclcpp_lifecycle实现configure/activate…...
在机器视觉检测中为何选择线阵工业相机?
线阵工业相机,顾名思义是成像传感器呈“线”状的。虽然也是二维图像,但极宽,几千个像素的宽度,而高度却只有几个像素的而已。一般在两种情况下使用这种相机: 1. 被测视野为细长的带状,多用于滚筒上检测的问…...
Linux应急中常用命令
pwdx {pid} 提供进程的 当前工作目录,即进程正在操作的目录。它显示的是进程的运行时工作目录,而不是启动时的可执行文件路径。等同于ls -al /proc//cwdps -aux 和 top 都是用来查看 Linux 系统中进程的命令,但它们的功能、输出格式和使用场景…...
Node.js 文件读取与复制相关内容
Node.js 文件读取与复制相关内容的系统总结,包括 同步读取、异步读取、流式读取、复制操作、两者对比及内存测试。 🧩 一、Node.js 文件读取方式总结 Node.js 使用 fs(文件系统)模块进行文件操作: 1. 同步读取&#…...
数据结构-串
串是数据结构中一种重要的数据类型,广泛应用于文本处理、信息检索等领域。本文将从串的基本概念、存储实现、应用举例以及总结核心知识点四个方面进行详细讲解,帮助大家更好地理解和掌握串这一数据结构。 一、串的基本概念及其抽象数据类型 1.1 串的定…...
Windows 下 MongoDB ZIP 版本安装指南
在开发和生产环境中,MongoDB 是一种非常流行的 NoSQL 数据库,以其灵活性和高性能而受到开发者的青睐。对于 Windows 用户来说,MongoDB 提供了多种安装方式,其中 ZIP 版本因其灵活性和轻量级的特点,成为很多开发者的首选…...
在 Spring Boot 中实现服务器端推送(SSE):两种方法的比较与实践
在现代 Web 应用中,实时数据推送是一个常见的需求。无论是实时消息通知、股票行情更新,还是在线游戏的实时数据交互,服务器端推送(Server-Sent Events,简称 SSE)都是一种高效且易于实现的解决方案。在 Spri…...
2025年十六届蓝桥杯Python B组原题及代码解析
相关试题可以在洛谷上测试用例: 2025 十六届 蓝桥杯 Python B组 试题 A:攻击次数 答案:103 print(103)代码: # 初始化敌人的血量 x 2025# 初始化回合数 turn 0# 模拟攻击过程 while x > 0:# 回合数加一turn 1# 第一个英…...
数据清洗到底在清洗什么?
在大数据时代,数据是每个企业的五星资产,被誉为“新石油”,但未经处理的数据往往参杂着大量“杂质”。这些“脏数据”不仅影响分析结果,严重的甚至误导企业决策。数据清洗作为数据预处理的关键环节,正是通过“去芜存菁…...
Microsoft Azure 基础知识简介
Microsoft Azure 基础知识简介 已完成100 XP 2 分钟 Microsoft Azure 是一个云计算平台,提供一系列不断扩展的服务,可帮助你构建解决方案来满足业务目标。 Azure 服务支持从简单到复杂的一切内容。 Azure 具有简单的 Web 服务,用于在云中托…...
mysql表类型查询
普通表 SELECT table_schema AS database_name,table_name FROM information_schema.tables WHERE table_schema NOT IN (information_schema, mysql, performance_schema, sys)AND table_type BASE TABLEAND table_name NOT IN (SELECT DISTINCT table_name FROM informatio…...
数据库ALGORITHM = INSTANT研究过程
背景 偶然在团队中发现同事大量使用 ALGORITHM INSTANT 更新字段,根据固有的理解,平时字段的更新必然会涉及到表结构的更改,印象中数据库会加入MDL锁去保证表数据的一致性。 但是听说在Mysql8.0特性中,表明在更新字段的时候此方法…...
n8n 为技术团队打造的安全工作流自动化平台
AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…...
基于Python的App流量大数据分析与可视化方案
一、引言 App流量数据通常包括用户的访问时间、停留时间、点击行为、页面跳转路径等信息。这些数据分散在不同的服务器日志、数据库或第三方数据平台中,需要通过有效的技术手段进行整合和分析。Python在数据科学领域的广泛应用,得益于其简洁的语法、强大…...
【Linux 并发与竞争实验】
【Linux 并发与竞争实验】 之前学习了四种常用的处理并发和竞争的机制:原子操作、自旋锁、信号量和互斥体。本章我们就通过四个实验来学习如何在驱动中使用这四种机制。 文章目录 【Linux 并发与竞争实验】1.原子操作实验1.1 实验程序编写1.2 运行测试 2.自旋锁实验…...
wx219基于ssm+vue+uniapp的教师管理系统小程序
开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…...
leetcode0079. 单词搜索-medium
1 题目: 单词搜索 官方标定难度:中 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字…...
SvelteKit 最新中文文档教程(20)—— 最佳实践之性能
前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1: Svelte …...
在多系统环境中实现授权闭环,Tetra Pak 借助CodeMeter打造食品工业的安全自动化体系
一、 行业背景与安全新挑战 在食品加工自动化不断深化的背景下,食品安全、功能安全与知识产权保护的需求日益迫切。Tetra Pak 作为全球领先的食品加工和包装解决方案提供商,业务遍布 160 多个国家,涵盖从配料混合、碳酸化处理到全线自动包装。…...
复数概念的演进 3 —— 复数的意义
注:本文为 “从三次方程到复平面:复数概念的演进” 相关文章合辑。 因 csdn 篇幅限制分篇连载,此为第 3 篇。 生料合辑,同主题文章未整理去重。 机翻,未校。 Complex number and its discovery history 复数及其发…...
三菱PLC
三菱PLC通信协议及读写 引言 三菱PLC(Programmable Logic Controller,可编程逻辑控制器)是工业自动化领域中广泛使用的一款PLC品牌。三菱PLC支持多种通信协议,包括Modbus、Ethernet/IP、Melsec Net等。本文将详细介绍三菱PLC的通…...
B端可视化方案,如何助力企业精准决策,抢占市场先机
在当今竞争激烈的商业环境中,企业需要快速、准确地做出决策以抢占市场先机。B端可视化方案通过将复杂的企业数据转化为直观的图表和仪表盘,帮助企业管理层和业务人员快速理解数据背后的业务逻辑,从而做出精准决策。本文将深入探讨B端可视化方…...
0701表单组件-react-仿低代码平台项目
文章目录 1 react表单组件1.1 受控组件 (Controlled Components)示例代码: 1.2 非受控组件 (Uncontrolled Components)示例代码: 2 AntD表单组件实战2.1 开发搜索功能2.2 开发注册页2.3 开发登录页2.4 表单组件校验 结语 1 react表单组件 input表单组件…...
【adb】bat批处理+adb 自动亮屏,自动解锁屏幕,启动王者荣耀
准备adb 下载 需要确认是否安装了adb.exe文件,可以在: 任务管理器 -->详细信息–>找一下后台运行的adb 安装过anroid模拟器,也存在adb,例如:雷电安装目录 D:\leidian\LDPlayer9 单独下载adb 官方下载地址:[官方网址] 下载目录文件: 测试adb USB连接手机 首先在设置界…...
Distortion, Animation Raymarching
这节课的主要目的是对uv进行操作,实现一些动画的效果,实际就是采样的动画 struct texDistort {float2 texScale(float2 uv, float2 scale){float2 texScale (uv - 0.5) * scale 0.5;return texScale;}float2 texRotate(float2 uv, float angle){float…...
SpringBoot整合POI实现Excel文件的导出与导入
使用 Apache POI 操作 Excel文件,系列文章: 《SpringBoot整合POI实现Excel文件的导出与导入》 《SpringMVC实现文件的上传与下载》 《C#使用NPOI导出Excel文件》 《NPOI使用手册》 1、Apache POI 的介绍 Apache POI 是一个基于 Java 的开源库,专为读写 Microsoft Office 格…...
LeetCode 2537.统计好子数组的数目:滑动窗口(双指针)
【LetMeFly】2537.统计好子数组的数目:滑动窗口(双指针) 力扣题目链接:https://leetcode.cn/problems/count-the-number-of-good-subarrays/ 给你一个整数数组 nums 和一个整数 k ,请你返回 nums 中 好 子数组的数目。 一个子数组 arr 如果…...
矩阵基础+矩阵转置+矩阵乘法+行列式与逆矩阵
GPU渲染过程 矩阵 什么是矩阵(Matrix) 向量 (3,9,88) 点乘:计算向量夹角 叉乘:计算两个向量构成平面的法向量。 矩阵 矩阵有3行,2列,所以表示为M32 获取固…...
(EtherCAT 转 EtherNet/IP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关
型号 协议转换通信网关 EtherCAT 转 EtherNet/IP MS-GW12 概述 MS-GW12 是 EtherCAT 和 EtherNet/IP 协议转换网关,为用户提供两种不同通讯协议的 PLC 进行数据交互的解决方案,可以轻松容易将 EtherNet/IP 网络接入 EtherCAT 网络中,方便…...
分享:批量提取图片文字并自动命名文件,ocr识别图片指定区域并重命名文件名工具,基于WPF和腾讯OCR识别的接口的视线方案
一、项目背景 在处理大量图片时,常常需要从图片中提取特定区域的文字信息,并依据这些信息对图片进行重命名。例如,在档案管理领域,大量纸质文件被扫描成图片后,需要从图片中提取关键信息(如文件编号、日期等)来重命名图片,以便后续的检索和管理;在电商领域,商家可能…...
