自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ros2 bag录包与播包原理

ros2 bag用于记录和回放ros2的发布消息,允许用户记录不同topic的消息流以及服务和服务响应,还可以记录节点间的参数和日志信息,对于调试,数据分析,以及重现实验场景非常有用。播包用于播放之前记录的bag文件,播放过程中通过先前记录的bag消息会被发布到ros2对应的topic中,就像这些消息是在实时生成一样。

2024-12-29 11:39:31 677

原创 FastDDS之DataSharing

本文详细记录Fast DDS中Data Sharing的实现原理和代码分析。DataSharing的概念:FastDDS中在同一台机器内通过利用共享内存共享DataWriter和DataReader的history实现通信加速,这种方式避免了传输层中的任何开销,有效减少了数据在DataWriter和DataReader之间复制所带来的额外负担。Fast DDS 使用DomainParticipant的来识别运行在同一主机上的其他participant。如果两个participant的。

2024-11-19 22:27:47 932

原创 FastDDS之进程内通信

Fast DDS 允许在同一进程内的实体之间加快通信,避免了传输层带来的任何开销。进程内通信通过发布者(Publisher)直接调用订阅者(Subscriber)的接收函数,不仅避免了传输过程中的数据复制或发送操作,还确保了消息能够被订阅者接收到,从而绕过了确认机制。如果在网络运行过程中网络接口有所更改,那么新创建的DomainParticipant将会得到一个新的GUID前缀,并且系统会认为它是在不同的主机上运行。进程内的通信默认是开启的,也可以通过配置XML开启。来识别在同一进程中运行的对等方。

2024-11-19 16:40:06 331

原创 FastDDS服务发现之EDP的收发

EDP对象的创建在中有详细介绍,PDP的收发在中有详细介绍,本文主要分析Simple EDP报文的发送和消息接收。

2024-11-06 15:10:34 1136

原创 FastDDS服务发现之PDP的收发

详细介绍SPDP和SEDP发送数据,接收数据和处理报文的流程。

2024-11-05 18:21:38 1184

原创 UML之用例视图

用例图是表示一个系统中用例与参与者之间关系的图,它描述了系统中相关用户和系统对不同用户提供的功能和服务。对于用户而言,最关心的是一个系统具有的功能与呈现的外部特性,而并不十分关注实际过程及实现方法本身。用例视图就相当于从用户的视角来描述和建模整个系统,分析系统的功能和行为。用例视图中主要元素包括参与者,用例以及元素之间的关系,此外,用例视图还可以包括注释和约束,也可以使用包将图中的元素组合成模块。用例视图用于展示参与者和用例。

2024-10-24 22:20:43 710

原创 动态加载类对象

ros中提供了动态加载class的方式。这样可以做到应用代码和class所在的so解耦合。一般情况下,使用dlopen动态加载C风格函数,C++风格的类无法直接使用dlopen加载,通过ros中的这种方式,可以做到动态加载。其思想核心仍然是通过dlopen加载so,然后通过静态对象的构造将外部类进行初始化,这一步中,将需要动态加载的class类作为模板参数加载到进程地址空间中,然后,通过wrapper类将外部可以调用的回调函数绑定到class的成员函数中,即可实现动态加载。

2024-09-08 22:37:23 394

原创 Linux网络使用与性能分析

比如,传输层和网络层,分别为其增加 TCP 头和 IP 头,执行路由查找确认下一跳的 IP,并按照 MTU 大小进行分片。分片后的网络包,再送到网络接口层,进行物理地址寻址,以找到下一跳的 MAC 地址。一旦网络包超过 MTU 的大小,就会在网络层分片,以保证分片后的 IP 包不大于 MTU 值。MTU 越大,需要的分包也就越少,自然,网络吞吐能力就越好。有了 TCP/IP 模型后,在进行网络传输时,数据包就会按照协议栈,对上一层发来的数据进行逐层处理;然后封装上该层的协议头,再发送给下一层。

2024-09-06 11:41:12 516

原创 UML之时序图

用例是一个系统提供给参与者的外部接口,代表着一系列交互步骤,最终目标是要实现参与者的目标。用例的表达有条简洁至上的原则,即越朴素越好,越不涉及代码越好,而且用力很难与类,接口等元素一一对应。因此,为了方便开发人员统筹和协调各个类和对象,UML对用例所概括的参与者的系统之间的交互行为提供了表达方式,时序图就是一种。时序图是按时间顺序显示对象交互的图,具体来说,他显示了参与交互的对象和所交换信息的先后顺序,用来表示用例中的行为,并将这些行为建模成信息交换。

2024-08-29 11:13:30 1525

原创 RTPS协议之PSM:UDP/IP

RTPS协议都会给内置的entities定义entity IDs。PIM 指定参与者的 EntityId_t 有预定义的值 ENTITYID_PARTICIPANT。所有预定义的实体 ID 对应的 PSM 映射出现在下表中 - 由 RTPS 协议完全预定义的 EntityId_t 值中。在这个主版本(2)中,这些实体 ID 的含义不会改变,但是未来的次要版本可能会增加额外的保留实体 ID。

2024-08-27 11:18:05 1362

原创 Subscription模块数据访问

本文主要解读V1.4版本DDS标准Subscription模块中数据读取

2024-08-15 22:08:44 652

原创 FastDDS中的线程梳理

Fast DDS中的线程梳理和代码分析,详解

2024-07-29 11:12:23 822

原创 RTPS协议之Messages Module子消息

这个子消息允许Reader通知Writer它接收到的序列号和它仍然缺少的序列号。既可以用于正向确认,也可以用于负向确认(正面确认代表Reader成功接收到了某一序列号的数据,负面确认则表示Reader没有接收到某一序列号的数据,需要Writer重新发送。简单来说,正面确认就是“我收到了你的数据”,而负面确认就是“我没收到你的数据,需要你重新发送”。可能的变化包括数据对象的值的变化以及数据对象生命周期的变化。Reader通过发送AckNack消息给Writer,来表示其对Writer使用的序列号的状态。

2024-07-23 14:20:29 1085

原创 ROS2编译系统

参数来跳过某些包的编译。:通过正则表达式跳过一些包的编译,比如你要跳过所有以。:可以在一个特定的文件中列出你想跳过的包,然后用。install:每个package安装的目录。build:中间文件存放的地方。log:生成的log文件。

2024-07-16 10:57:41 599

原创 Linux中的共享内存

Linux共享内存是一种进程间通信的方式,让不同的进程可以访问同一块内存区域。这样,一个进程可以直接读取或者修改另一进程的数据,避免了数据的复制,提高了通信效率。Linux中的共享内存被组织成一种名为“段”(segment)的数据结构,每个段都有一个全系统唯一的键值。进程可以通过这个键值来获取相应的内存段。Linux支持两种类型的共享内存:System V IPC共享内存和POSIX共享内存共享内存涉及到的主要操作有创建和连接共享内存、读写共享内存和断开和删除共享内存。

2024-07-05 19:54:45 625

原创 FastDDS中的环境变量

FastDDS中的环境变量

2024-07-05 13:42:00 1106

原创 CI构建pipelines

CI构建可以分为几个部分:构建代码(可以是多个平台)——>UT用例 ——> 代码覆盖率 ——> 代码静态检测首先保证有可以CMakeLists.txt可以在本地正常编译业务代码和UT代码。

2024-06-25 15:11:53 824

原创 RTPS协议之Structure Module

RTPS协议

2024-06-03 20:23:59 1112

原创 RTPS协议之Messages Module结构

TypePurpose枚举值用于标识是什么类型的sub msg,有这些:DATA, GAP, HEARTBEAT, ACKNACK, PAD, INFO_TS, INFO_REPLY, INFO_DST, INFO_SRC, DATA_FRAG, NACK_FRAG, HEARTBEAT_FRAGTime_t时间戳,至少到ns,TIME_ZERO,TIME_INVALID TIME_INFINITECount_t保存递增的计数,用于识别重复消息用于在参数列表中唯一标识参数的类型。

2024-05-29 14:14:54 1159

原创 RTPS协议之Behavior Module

主要描述rtps实体的动态行为,主要记录rtps writer和rtps reader之间的有效的序列消息交换,和这些消息交换的时间限制。

2024-05-29 14:12:07 1186

原创 WinAPI(C++)获取设备管理器中的设备

【代码】WinAPI(C++)获取设备管理器中的设备。

2024-05-06 20:22:45 966 1

原创 Fast DDS之Qos与Profiles

Qos (Quality of Service)用于指定服务的行为,允许用户指定每个实体怎样表现或运行。通过XML文件(Profiles)来配置或者在代码中直接指定。

2024-04-23 21:55:36 1762

原创 RTPS协议之Discovery Module

RTPS协议服务发现

2024-04-16 10:28:58 582

原创 Fast DDS环境搭建

本文主要记录Fast DDS docker环境搭建和examples代码运行。

2024-04-15 21:45:58 1572 2

原创 代码设计原则

总之,设计一个软件框架需要综合考虑多个方面,包括需求分析、架构设计、技术选型、模块化设计、接口设计、安全性考虑、性能优化、可扩展性、文档编写以及测试与验证等。通过认真考虑这些方面,可以设计出稳定、高效、安全的软件框架。通过深入了解需求,可以确保设计的框架能够满足用户的期望和需求。接口设计:定义模块之间的接口,确保模块之间的通信和数据交换的顺畅进行。文档编写:为软件框架编写详细的文档,包括设计文档、接口文档、用户手册等。通过合理的算法设计、数据结构选择、缓存策略等,可以提高软件的运行效率。

2024-03-28 17:48:29 625 1

原创 Fast DDS使用Demo大全

本文提供了Fast DDS所有功能的使用示例代码,用于自验证,调试Fast DDS代码,基于Fast DDS开发这几类用途。目前正在不断补充和晚上当中。

2024-03-18 22:08:11 851

原创 设计模式之工厂模式

工厂模式是一种创建新模式。

2024-03-16 17:46:56 932

原创 Fast DDS中的定时器

Fast DDS中的定时器主要有三个类组成:ResourceEvent,TimedEventImpl, TimedEvent。此时就开始按照指定的周期开始调用定时器函数&TestClass::timer_callback。第一步,初始化一个ResourceEvent 实例。

2024-03-13 20:48:14 466

原创 C++中的时间工具

本文主要记录C++标准中提供的时间处理工具,并提供简单实现的Linux平台的定时器demo;

2024-02-07 13:16:33 1017

原创 序列化和反序列化

而序列化后的数据是平台无关的,可以在任何平台上被反序列化。因为序列化后的数据是以一种通用的格式(如JSON,XML等)存储的,所以在数据结构发生变化时,只需要更新序列化和反序列化的代码,而不需要修改网络协议。安全性:序列化后的数据更加安全,因为它可以对数据进行加密,防止数据在传输过程中被窃取或篡改。反序列化是序列化的逆过程,即将序列化的数据重新转化为原有的数据结构或对象。综上,尽管序列化和反序列化会带来一定的性能开销,但在进行网络通信时,通常建议使用序列化的方式来发送数据。

2024-01-25 21:01:23 630

原创 网络基础知识

当您尝试通过网络与IP地址为127.0.0.1的服务器建立连接时,实际上您正在与运行在您自己计算机上的服务器建立连接,而不是与网络上的其他服务器。IP地址127.0.0.1是一个特殊的IP地址,被称为本地回环地址或者localhost。这个地址经常在开发和测试过程中使用,允许开发者在没有网络连接的情况下测试网络应用程序,或者在不影响其他系统或网络的情况下测试网络连接。在计算机网络中,IP地址0.0.0.0有特殊的含义,其具体的含义取决于上下文。所以,IP地址0.0.0.0的具体含义取决于其被使用的上下文。

2024-01-16 21:01:38 2169 1

原创 网络组播的原理和使用

python实现一个使用socket模块创建一个组播套接字并将当前主机加入到该组播中。这个例子使用了组播地址"224.1.1.1"和端口5007,这个脚本可以用于验证功能或协助测试,定位问题。使用socket模块来获取当前主机的IP地址。

2024-01-15 11:19:19 628

原创 适配器模式

适配器模式和其C++实现

2024-01-11 18:59:52 513

原创 Fast DDS之UDP通信

本文主要记录Fast DDS中UDP通信的内容,包括UDP通信各中类对象的定义,关系,以及交互流程,并分析Fast DDS中UDP通信实现的优缺点,以及代码实现技巧等。

2024-01-03 14:15:22 1141

原创 boost中的内存池

目录

2023-12-17 18:45:53 124

原创 内存模型与无锁编程

本文主要介绍C++新标准中的内存模型和无锁编程的原理和实现。

2023-12-14 15:56:00 926

原创 GUN特性总结

attribute 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)书写特征为: attribute 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数。当我们需要识别当前编译器能否支持GNU 语法拓展,我们可以使用 __GNU __ 宏作为区分。用于修饰函数时,它就相当于一个函数说明符,跟inline,Noreturn 属同一类。

2023-12-11 16:28:56 115

原创 iceoryx中的工具类

iceoryx中的工具类如:BumpAllocator,RelativePointer等代码分析。

2023-12-07 14:50:51 151

原创 自动驾驶框架

目录

2023-11-23 21:07:45 270

原创 自动驾驶术语汇总

L3(Level 3):有条件的自动化。车辆在某些条件下可以完全接管驾驶,如在高速公路上或者交通繁忙的市区,但在系统无法处理的情况下,驾驶员需要在一定的预警时间内接管车辆。这个级别的车辆可以在某些情况下接管驾驶,如高速公路驾驶,但驾驶员仍需随时准备接管控制。L1(Level 1):驾驶员辅助。这个级别的车辆有一些可以帮助驾驶员的系统,如自适应巡航控制或车道保持辅助,但是驾驶员仍然需要全程控制车辆。LCC(S):车道居中控制(Lane Centering Control System)

2023-11-23 20:35:38 2746 3

空空如也

空空如也

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

TA关注的人

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