自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 收藏
  • 关注

原创 UML画图技巧

1.类图属性:类之间的关系:关联关系:两个类之间没有依赖关系聚合:用于说明整体和部分的关系组合:部分不能存在于整体之外2.时序图时序图可直观显示出系统内外交互的过程生命线:生命线是一条虚线,生命线从上往下表示时间顺序的先后参与者是一个小人图标,对象是矩形虚线表示返回消息,或从接收对象返回到请求对象的消息请求消息用实线表示激活框:激活框显示对象执行期间的时间参与者是外部对象不需要激活框3.流程图开始/结束 椭圆操作处理 矩形条件判断 菱形数据输入/输出 平行四边形。

2026-01-03 11:46:57 221

原创 中间件交接文档

EDP: DR/DW级别的匹配,需要校验DR与DW之间的分区名是否一致,DW与DR直接必须有同名的Partition Name,DR与DW直接才能完成匹配,进行通信,否则不发EDP报文。PDP: 进程级别的分区隔离,两个进程间必须有同名的Partition Name,PDP报文才会在两个进程间发送接收匹配,没有同名的分区名,直接不发PDP报文。4.需要满足AB完全隔离,则A板程序在A分区通信,B板程序在B分区通信,需要跨板通信的进程在C分区上通信。rviz界面是否显示车道线,没有车道线需要先标定。

2025-12-24 08:04:00 277

原创 resourceLimitsQos详细解释

比 allocated_samples=30 的垃圾配置,,1000 个节点就是 100 MB!

2025-12-05 14:12:35 390

原创 二分查找算法

二分查找(Binary Search)的时间复杂度是,其中 n 是数组的长度。这是最经典、最重要的 O(log n) 算法。下面详细解释为什么是 O(log n),以及在不同情况下的具体表现。

2025-12-01 16:22:49 467

原创 Fast dds基础学习

1. 在Fast DDS中,的核心作用是interfaceWhiteList = “我这台机器允许 Fast-DDS 使用哪些本地网卡发包和收包”,只有被加入白名单的网卡才会被 Fast-DDS 使用,其他所有网卡都会被完全忽略(既不监听,也不发送)。

2025-11-27 10:25:09 541

原创 Fastdds 异步发送线程详解

这整个 run() 函数就是 一个永不退出的 while 大循环,负责把用户调用 publish() 时产生的样本(CacheChange),从队列里取出来,交给底层的 RTPS Writer 去真正发送到网络。这个线程是 ROS 2 异步发布的核心心脏:用户调用 rclcpp::Publisher::publish() 后立刻返回,数据被扔到一个队列里,由这个后台线程慢慢发出去,避免写大数据时把用户节点卡死。

2025-11-27 10:23:43 153

原创 测试代码记录

【代码】测试代码记录。

2025-11-07 12:43:49 359

原创 nlohmann::json 库详细解释

这个库的核心是 nlohmann::json 类(一个模板类),它将 JSON 值抽象为 C++ 对象,支持解析(parse)、序列化(serialize)、操作(manipulate)和验证(validate)。nlohmann::json 的设计哲学是“JSON 像 C++ 原生类型一样使用”,通过 operator overloading(操作符重载)实现无缝集成。(只需包含一个 json.hpp 文件),集成简单、无需外部依赖(如 Boost),适合嵌入式、ROS2、游戏开发等场景。

2025-11-05 14:27:58 766

原创 进程间通信

1.shm 共享内存共享内存(Shared Memory,简称 SHM)是进程间通信(IPC)的一种机制,它允许多个进程访问同一块物理内存区域,从而实现高效的数据共享。不同于管道或消息队列,共享内存不涉及内核的复制开销,而是直接映射到用户空间地址,因此性能最高,但需要进程自行处理同步和互斥问题。本文将详细解释 System V 风格的共享内存(SHM),这是 Unix/Linux 系统中最常见的实现方式。

2025-10-27 11:23:55 870

原创 DurabilityQosPolicy详解

TRANSIENT_DURABILITY_QOS: 当新的 DataReader 加入时,其历史记录将填充过去的样本, 存储在持久性存储上(参见。: 当新的 DataReader 加入时,其历史记录将填充过去的样本,这些样本被存储 在持久性存储上(参见。此外,在写入某些数据后加入主题的 DataReader 可能有兴趣访问 该信息(参见)。: 过去的样本将被忽略,联接的 DataReader 接收在 匹配的那一刻。: 当新的 DataReader 加入时,其历史记录将填充过去的样本。

2025-10-24 14:22:20 294

原创 git 用法

回退到某个commit。

2025-10-19 17:55:40 118

原创 perf 性能分析

确保工具与当前内核完全兼容,避免版本不匹配导致的功能异常。

2025-10-19 10:45:11 114

原创 std::remove_if 函数详解

前向迭代器范围。

2025-10-17 17:17:08 291

原创 c/c++基础测试框架

Developer Test,DT(开发者测试)

2025-10-13 09:35:43 126

原创 高内聚低耦合

高内聚低耦合”是软件工程中描述模块设计质量的核心原则,旨在提升代码的可维护性、可扩展性和可测试性。其核心思想是通过优化模块内部结构与模块间关系,降低系统复杂度。通过遵循这一原则,可以构建出更健壮、灵活的软件系统,降低长期维护成本。:模块内部元素(如函数、类)紧密相关,共同完成一个明确且单一的功能。:模块间依赖关系简单、松散,减少直接交互。

2025-10-12 21:53:36 693

原创 FastDDS History Depth 配置的影响分析

在数据量大的 Topic(高数据率、大消息大小或高频更新)场景下,depth 值会显著影响内存使用、性能和可靠性。

2025-09-29 14:06:11 1072

原创 位图算法详解

位图:就是一连串的二进制数组(0和1),可以通过偏移量定位元素,位图通过一个bit位来进行0|1的设置,表示某个元素的值或者状态,将具体数据映射到比特数组的具体某一位上,由于bit是计算机中最小的单位,使用它进行储存将非常节省空间,特别适合一些数据量大且使用二值统计的场景。

2025-09-21 14:17:42 237

原创 QNX与Linux的详细对比分析

一、内核架构:微内核 vs 宏内核

2025-09-16 20:28:15 579

原创 zmq详解

其轻量级、高性能和灵活的模式支持,使其成为分布式系统、实时数据处理和微服务架构的理想选择。然而,ZeroMQ 不提供持久化或事务支持,若需这些功能,可结合其他技术(如数据库)或选择 RabbitMQ、Kafka 等中间件。ZeroMQ(也称为 ØMQ、0MQ 或 ZMQ)是一个高性能、异步的消息传递库,专为分布式或并发应用程序设计。它通过提供一套统一的套接字 API,简化了网络通信编程,使开发者能够轻松实现进程间、线程间以及跨主机的消息传递。ZMQ 的核心是消息队列,采用先进先出(FIFO)策略。

2025-09-16 20:21:06 1585

原创 链表与数组

数组是连续的内存空间链表是非连续的内存空间,链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。在链表中添加元素需要将元素放入内存,并将其地址存储到前一个元素中。数组支持随机访问某个元素,但是链表不能,想要访问最后一个元素,必须从头开始访问需要在中间插入元素时,链表是更好的选择。如果你要删除元素呢?链表也是更好的选择,因为只需修改前一个元素指向的地址即可。而使用数组时,删除元素后,必须将后面的元素都向前移栈(Stack)是一种遵循。

2025-09-14 22:05:25 976

原创 ros2 bag play多个包思路

先拿到所有的db3文件,给所有的统计信息做一个累计,获取msg中最小的开始时间作为起始播放时间,给每个db3文件创建一个reader,创建player(node),,node创建/clock topic并发布db3中的时间戳,创建writer把所有消息写入一个新的db3文件,这个为防止消息太多导致内存问题,设置缓存存储消息,默认缓存为250MB,然后开始播放,

2025-09-02 15:27:14 129

原创 ro2 bag play/record

要同时播放两个 bag 文件,直接使用 ros2 bag play bag1 bag2 即可。如果需要额外的控制(例如跳过时间、循环播放或调整速率),可以添加相应的选项。确保 bag 文件的时间戳匹配,并考虑使用 /use_sim_time 来避免时间同步问题。如果遇到问题,检查 ROS 2 版本或尝试合并 bag 文件。如果你有更具体的需求(例如特定的 ROS 2 版本或 bag 文件格式),请提供更多细节,我可以进一步优化答案!

2025-09-02 15:18:35 1009

原创 jianshdaim

player.cpp//////namespace/***/public:{}/***/if (qos_it!logger,{}{}node_name,} else {"~/pause",[this](pause();});[this](resume();});[this](});[this](});[this](});[this](});[this](});

2025-08-30 17:15:17 668

原创 Python 的 argparse 模块中,add_argument 方法的 nargs 参数

nargs='*'接受 0 个或多个参数,返回空列表或包含所有参数的列表。适合可选参数场景,允许灵活的命令行输入。在你的 ros2 bag play 中,nargs='*' 支持 bag_files 可选,配合 --timesource 实现混合参数逻辑。nargs='+'要求至少 1 个参数,否则报错。适合强制需要输入的场景,但会限制命令的灵活性。选择建议。

2025-08-30 15:18:54 860

原创 ros2bag播多个包

Jazzy版本的多bag播放思想是聚合所有bag的消息到统一队列,按时间戳全局排序后发布,以模拟原始录制场景。消息从两个bag中提取到内存队列,按接收时间戳(或发送时间戳)排序。Player按时间顺序发布消息,确保/camera/image和/lidar/points的时序一致。底层依赖rosbag2_storage和rclcpp,通过优先级队列和时钟控制实现高效、同步的回放。编写Python脚本,使用rosbag2_py.SequentialReader读取多个bag。

2025-08-30 15:14:00 1122

原创 ros2 bag 播两个包问题

在ROS2中使用工具播放bag文件时,与在效果上存在显著差异,主要体现在时间同步、网络延迟、资源竞争和系统复杂性等方面。/clock--clock--clockchronyptp4lt=10st=9st=10st=20s--clock/clockclockchronyntpdptp4lchrony在ROS2多机播放bag文件的场景中,是时间未同步时最常见的典型现象之一。其本质是导致消息的。

2025-08-24 19:47:05 1217

原创 fastdds:SHM创建 transport 发送,接收数据过程

【代码】fastdds:SHM创建 transport 发送,接收数据过程。

2025-08-23 11:18:03 222

原创 子类(派生类)使用父类(基类)的成员

在 C++ 中,子类(派生类)是否可以直接使用父类(基类)的成员,取决于以下几个因素:成员的访问权限(public、protected、private)、继承方式(public、protected、private)以及子类访问成员的方式。

2025-08-22 15:45:39 220

原创 共享内存详细解释

共享内存是 Linux 系统提供的一种高效的**进程间通信(IPC,Inter-Process Communication)**机制。它允许多个进程访问同一块物理内存区域,从而实现数据共享和通信。相比其他 IPC 机制(如管道、消息队列或套接字),共享内存的优点是速度快,因为数据不需要在内核态和用户态之间频繁拷贝,只需在共享内存区域直接读写。

2025-08-22 13:43:03 805

原创 端到端时延

在ROS 2(Robot Operating System 2)程序中,(End-to-End Latency)是指从数据在发送端(Publisher)发布到接收端(Subscriber)完全接收并处理完成所经历的总时间。它反映了消息在分布式系统中从产生到被使用的整个传输和处理过程的延迟。

2025-08-21 15:32:53 460

原创 所有 topic 都在同一个线程内接收

在 ROS(Robot Operating System)程序中,如果 HMI 服务器端的所有 topic 都在同一个线程内接收,并且多个 topic 的回调函数耗时超过 10ms,可能会导致消息处理延迟,影响实时性。

2025-08-21 15:07:26 414

原创 fastdds.ignore_local_endpoints 属性

在 Fast DDS(或其他 DDS 实现)中,默认情况下,当一个 DomainParticipant 内的 DataReader 和 DataWriter 订阅或发布在同一个 Topic 上,并且它们的 QoS(服务质量)配置兼容时,它们会自动匹配。Fast DDS 的 fastdds.ignore_local_endpoints 属性用于控制同一 DomainParticipant 下的本地端点(即 DataWriter 和 DataReader)是否自动匹配。

2025-08-15 11:16:09 662

原创 DDS Durability 模式概述

选择时需权衡实时性、可靠性、资源占用和部署复杂性,并确保发布者和订阅者的 QoS 配置兼容。Durability 模式决定了发布者如何存储和分发历史数据,以及订阅者在加入时是否能接收到之前发布的数据。DDS 的 QoS 兼容性基于“提供-请求”模型,订阅者(DR)的 Durability 要求不能高于发布者(DW)提供的 Durability 能力。这些模式的选择影响系统性能、资源占用和数据可靠性,需要根据具体应用场景权衡。

2025-08-15 10:43:17 897

原创 maxInitialPeersRange 参数的定义和作用

可能是对参数功能的误解或表述不完整。参数的定义和作用需要结合其上下文来理解。在Fast DDS中,

2025-08-13 20:45:04 352

原创 任务并行(Task Parallelism)和数据并行(Data Parallelism)的概念

选择:少量任务用 std::async;高频任务用线程池。同步:始终注意数据竞争,使用 std::mutex 或原子变量。性能:并行化有开销(线程切换 ~100ns),只在任务足够大时使用。测试时用 std::chrono 测量时间。编译:用 g++ -std=c++11 -pthread 编译。进阶:结合 OpenMP(数据并行友好)或 CUDA(GPU 数据并行)。

2025-08-11 15:06:24 573

原创 auto 是一种类型推导关键字

auto 是C++11及以后版本中强大的类型推导工具,简化了代码编写,尤其在容器遍历、模板编程和 lambda 表达式中。通过结合引用(&)、常量(const)和 C++14/17 的增强功能,auto 提供了灵活性和性能优化。合理使用 auto 可以让代码更简洁、易维护,但需注意避免滥用以保持代码清晰。如果你有具体的代码或场景需要分析(如调试 auto 推导问题或优化代码),可以提供更多细节,我会进一步帮你解答!

2025-08-11 10:00:51 912

原创 范围for循环

范围for循环是C++中一种优雅的遍历方式,适合快速迭代容器或数组的场景。它简化了代码,提高了可读性,但不适合需要索引或复杂迭代逻辑的场景。通过合理使用 auto、const 和引用,可以进一步优化性能和代码清晰度。如果需要更高级的范围操作,C++20 的 std::ranges 提供了更多灵活性。如果你有具体的代码或场景想进一步探讨,可以提供更多细节,我会帮你分析!

2025-08-11 09:47:25 471

原创 ros2 bag接口解析

【代码】ros2 bag接口解析。

2025-08-11 09:23:09 221

原创 性能解析案例

是内核fd与应用程序直接的关系。1.检测io是否就绪。

2025-08-10 16:42:50 186

原创 Git pro 学习

git 配置:

2025-08-03 18:57:32 2906

05-18 资料记录fastrtps

05-18 资料记录fastrtps

2025-05-18

源码分析-20250518

源码分析-20250518

2025-05-18

Git 资料 progit-zh-v2.1.1.pdf

Git 资料 progit-zh-v2.1.1.pdf

2025-04-20

移动语义与资源管理文档

移动语义与资源管理文档

2024-10-10

服务器相关知识框架介绍

服务器相关知识框架

2024-09-24

cppreference-zh-20211231.chm

C++手册

2024-09-23

运算符重载资料上传路径

运算符重载资料

2024-09-20

lambda表达式专题.pdf

lambda表达式专题.pdf

2024-08-26

c++ stl 学习资料汇总

c++ stl 学习资料汇总

2024-02-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除