- 博客(135)
- 收藏
- 关注
原创 ros2获取topic信息解析
摘要:ROS2中ros_discovery_info主题的发布逻辑涉及进程间通信问题。当运行ros2 topic info -v /topic命令(p3进程)时,虽然与发布者进程p1属于不同进程,但通过ROS2内置的IPC机制实现跨进程通信。该机制默认使用DDS中间件,允许节点间通过共享内存或网络传输发现并交换主题信息,无需直接进程间通信。图示展示了这一发现过程的关键环节。
2025-09-13 16:27:24
270
翻译 vsomeip in 10 minutes
文章摘要: SOME/IP是一种面向服务的汽车通信中间件,兼容AUTOSAR标准。本文介绍了SOME/IP的核心组件:有线格式、通信协议和服务发现机制。SOME/IP消息由报头和有效载荷组成,支持TCP/UDP传输协议,提供请求/响应和发布/订阅两种通信模式。开源实现vsomeip通过路由管理器处理设备间和进程内通信,但不包含数据序列化功能。文章还提供了vsomeip的安装指南和简单应用示例代码框架,帮助开发者快速上手SOME/IP开发。该技术专为汽车电子系统设计,具有明确的版本控制和错误处理机制。
2025-09-08 09:41:42
33
原创 ros2 .idl文件生成C、C++代码
本文介绍了ROS2中rosidl_generator_c和rosidl_generator_cpp工具包的依赖关系及工作流程。rosidl_generator_c依赖rosidl_cmake等工具,用于生成C语言的ROS接口文件。通过解析JSON格式的生成参数文件(如rosidl_generator_c__arguments.json),该工具会调用rosidl_cmake的generate_files()函数,根据IDL文件生成对应的C语言头文件和实现文件。参数文件包含包名、输出目录、模板路径、IDL文件
2025-08-19 14:11:00
345
原创 工具链教程
本文汇总了多个开发工具和平台的官方资源链接:Jenkins教程(包含Pipeline入门指南)、Conan编译工具教程、JFrog制品仓库平台、Yocto项目官网,以及OpenEmbedded Layer Index(包含分支和发行版查询)。同时提供了一条Linux命令示例,用于递归删除包含特定关键字的文件。这些资源涉及持续集成、包管理、嵌入式构建系统等领域。
2025-08-15 17:02:44
248
原创 编译release可执行文件查看死锁问题
确定锁的位置: 在pthread_mutex_lock函数调用中,锁的地址应该作为第一个参数传递给该函数。我们首先查看当前的寄存器状态,重点关注x0寄存器,因为它通常用来传递pthread_mutex_lock的第一个参数(即互斥锁的地址)。以上步骤可以帮助你推断出锁的地址,并且进一步分析锁的状态。如果你需要更多关于特定锁的信息,请提供更多的上下文或者详细描述你的问题。如果你还需要对锁的状态或者其他信息进行更多的调查,可以使用GDB的一些命令来查看内存内容或者打印结构体的成员变量。让我们来执行这些步骤。
2025-06-20 13:46:24
225
原创 使用GDB和ROS2,参考
在附带GDB的情况下启动的两种最常见的方法是在GDB内执行进程(选项1),或者在进程旁边启动gdbserver实例,然后将其定位在单独的终端实例中(选项2)。如果你不想在启动文件中使用gdbserver,你可以简单地用xterm-e gdb-ex run–args替换gdbserver localhost:3000(用你选择的终端替换xterm)。GDB可以作为启动文件的一部分以启动前缀的形式启动。node_name arg1 arg2,就会生成一个GDB实例,运行目标节点。步骤2:启动带有GDB的节点。
2025-06-19 13:54:52
609
原创 wireshark rtps协议分析
Understanding the RTPS Packet Formathttps://community.rti.com/static/documentation/wireshark/2020-07/doc/understanding_rtps.html一、How To configure Wireshark to show RTPS packets with specific colorshttps://community.rti.com/howto/how-configure-wireshar
2024-11-13 13:47:02
1026
原创 linux 配置core
在Linux系统中,当一个程序崩溃时,系统可以生成一个名为"core dump"的文件。生成core dump文件的功能是由内核配置的,可以通过多种方式来控制这个过程。如果不希望生成core dump文件,可以通过将ulimit的core文件大小设置为0或者更改core_pattern来禁用这个特性。要生成core dump文件,首先确保系统允许创建core文件。在这个例子中,core dump文件将被创建在/tmp目录下,并包括程序名(%e),进程ID(%p),主机名(%h)和时间戳(%t)。
2024-11-09 13:48:59
630
原创 fastrtps 网络端口的计算-以共享内存为例
yong用户,运行./fastrtps/examples/cpp/dds/HelloWorldExampleSharedMem/DDSHelloWorldExampleSharedMem subscriber。root用户,运行./fastrtps/examples/cpp/dds/HelloWorldExampleSharedMem/DDSHelloWorldExampleSharedMem publisher。每个进程端口默认+PG(2),eg:Pid=2。
2024-11-01 15:50:15
515
原创 ros2运行UT test方法
import_path 函数似乎是设计用来导入位于特定路径的 Python 模块的一个函数,但需要注意的是,这个函数签名并不是来自 Python 的标准库,而且它包含的一些参数(如 ImportMode)并没有在标准库中定义。如果 import_path 函数是属于某个特定的库或框架,你应该参考该库或框架的文档以获取更准确的使用说明和示例。path: 表示要导入的模块文件的路径。ModuleType: 这是 Python types 模块中定义的类型,用来表示导入的模块类型。查询pytest版本。
2024-10-31 09:42:44
570
原创 打印堆栈信息
在实际使用中,backtrace函数会填充传入的数组(在这个例子中是array)来获取当前的调用堆栈的指针。backtrace_symbols函数会根据这个指针数组生成一个字符串数组,每个字符串包含对应于堆栈帧的一个可打印的符号名称。如果你需要更详细的信息,你可能需要使用额外的工具,例如addr2line命令,它可以将内存地址转换成源文件的行号和文件名。在Linux系统中,你可以使用backtrace和backtrace_symbols函数来打印当前线程的调用堆栈。
2024-10-24 16:56:17
519
原创 ros2 .idl文件生成C、C++代码
rosidl_generator_c 依赖rosidl_cmake、rosidl_typesupport_interface、ament_index_python、rosidl_parser。以下是Lark的一些基本用法。rosidl_generator_cpp 依赖 rosidl_parser、rosidl_runtime_cpp、rosidl_generator_c。eg:test_msgs包,编译生成rosidl_generator_c__arguments.json 做为参数。
2024-10-23 17:15:01
785
原创 主流RTOS系统
Zephyr 是安全的、开源的、模块化的以及支持多种连接方式,将支持 Bluetooth, Bluetooth LE, WiFi, 802.15.4 以及 6Lowpan, CoAP, IPv4, IPv6, and NFC.。(主流路由器固件有 dd-wrt,tomato,openwrt,padavan四类)对比一个单一的、静态的系统,OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。它可能是最成功的微内核操作系统之一。
2024-10-15 20:47:46
520
原创 ros常用环境变量
fastddscycloneDDSros 日志格式定义ros2 代码格式工具设置ROS_DOMAIN_IDros2 run启动参数单个参数赋值使用–param name:=value或-p name:=value,其中所赋值(value)要采用YAML格式。多个参数赋值使用–params-file path/to/file.yaml和一个参数YAML文件。设置日志记录(最低)级别使用–log-level LEVEL_NAME。外部日志记录配置使用–log-config-fi
2024-06-05 14:45:59
566
原创 Type Specific Interfaces(Rolling特殊类型接口)
一直以来,API的某些部分必然特定于所交换的消息类型,例如发布消息或订阅主题,因此需要为每个消息类型生成代码。下图布局了从用户定义的rosidl文件(如.msg文件)到用户和系统用于执行特定类型功能的特定类型代码的路径:图:“静态”类型支持生成的流程图,从rosidl文件到面向用户的代码。图的右侧显示了.msg文件是如何直接传递给特定语言的代码生成器的,例如rosidl_generator_cpp或rosidl_generator_py。
2024-05-07 10:12:38
1070
原创 fastdds共享内存数据通信
fastrtps_port+“port_id”:用于控制发送的数据,包含循环队列MultiProducerConsumerRingBuffer,队列中包含共享内存Node成员,共享内存Cell[port_queue_capacity_]数组。当发送数据时,首先在segment_size中申请内存(申请BufferNode用于保存申请offset、size、引用计数),拷贝到segment里,生成SharedMemManager::Buffer &buffer对象。
2023-12-11 21:23:56
1541
2
原创 iceoryx(冰羚)-共享内存数据传输
此外,它还提供了offer-stopOffer API,用于控制发布者端口是否可被发现用于订阅服务器端口。此外,它还提供了订阅/取消订阅API,控制订阅端口是否应尝试订阅匹配的发布端口。上面的操作都是在共享内存中,发布进程拿到PublisherPortData对象,转换成PublisherPortUser对象,进行数据发送。订阅进程拿到SubscriberPortData对象,转换成SubscriberPortUser对象,进行数据发送。
2023-12-03 17:18:12
909
原创 iceoryx(冰羚)-进程间消息同步
iceoryx进程间消息同步,是用socket或管道实现的,定义在iceoryx\iceoryx_posh\include\iceoryx_posh\internal\runtime\ipc_interface_base.hpp消息类型定义具体消息格式
2023-12-02 11:18:57
940
原创 iceoryx(冰羚)-publisher注册RouDi进程
IPC通信支持socket和管道,IpcInterfaceUser ->RouDi进程的socket, IpcInterfaceCreator接收RouDi进程的消息socket。1、发UserApp启动,发布REG消息过程。
2023-12-02 10:56:46
843
原创 iceoryx(冰羚)-共享内存分配
MemoryProvider::create()创建共享内存,先计算所有memoryblock size的总数,在创建共享内存,然后再用内存分配器BumpAllocator分配各个MemoryBlock,并用m_memory记录开始地址。m_introspectionMemPoolBlock 提供性能参数内存块,默认10,为introspection工具提供数据源.它包含。将m_portPoolBlock加入到m_defaultMemory.m_managementShm。
2023-12-01 14:08:05
1983
原创 iceoryx(冰羚)-简介
RouDi是Routing and Discovery的缩写。RouDi负责通信设置,但实际上并不参与发布者与订阅者或客户端与服务器之间的通信。鲁迪可以被认为是iceoryx的总机操作员。它的另一个主要任务是设置共享内存,应用程序使用共享内存交换有效负载数据。RouDi有时被称为守护进程,它管理共享内存并负责服务发现,即使订阅者/客户端能够找到发布者/服务器提供的主题。它还跟踪所有已初始化运行时的应用程序,从而能够创建发布者、订阅者、服务器或客户端。它为应用程序查询此信息提供了便利。
2023-11-15 20:47:36
2669
2
原创 iceoryx(冰羚)-iceoryx_examples/callback
侦听器是线程安全的,可以不受限制地使用。但是要注意,所有提供的回调都是在侦听器的后台线程中同时执行的。如果你访问这个回调中的结构,你必须确保你是唯一一个访问它的人,或者用“std::mutex”之类的保护来访问它。
2023-11-15 10:19:32
756
原创 iceoryx(冰羚)-Service Discovery
IPC通道(例如消息队列或UNIX域套接字)上的服务发现是不可执行的,因为传输的数据较大,这可能会导致多个帧的传输。如果发现大量高频服务,例如在启动时,IPC通道可能会成为瓶颈。
2023-11-14 21:15:23
890
原创 iceoryx(冰羚)-Listener设计
Listener是除WaitSet之外实现推送方法来检测特定事件并对其作出反应。监听器为用户提供了附加具有相应事件和回调的对象的能力。每当对象接收到指定的事件时,就会在Listener后台线程中调用相应的回调作为响应。WaitSet的两个关键区别是侦听器是事件驱动的而不是像WaitSet和Listener创建的那样由事件和状态驱动一个单独的后台线程,在该线程中执行事件回调,而在WaitSet中用户必须显式调用事件回调。##术语由附加对象用于通知Listener/WaitSet事件发生。
2023-11-14 20:39:22
647
3
原创 Fast-DDS 编译demo
示例 gdb examples/cpp/dds/HelloWorldExampleSharedMem/DDSHelloWorldExampleSharedMem。将build/src/cpp/ 目录添加到LD_LIBRARY_PATH。(gdb)delete breakpoints 断点编号 //删除断点。(gdb)thread apply all bt //查看所有线程堆栈。运行build/examples/cpp/dds 目录。(gdb)bt //查看当前线程堆栈。5、用gdb 打印堆栈。
2023-10-20 09:42:41
618
原创 ros2 代码风格检查
注意:和Uncrustify一样,ament_uncrustify也会直接修改源代码文件,所以在使用之前最好备份你的代码。ament_uncrustify是一个用于ROS2项目的代码格式化工具,它使用Uncrustify作为底层的格式化工具。这个命令会输出不符合规则的代码行和文件。–config选项用于指定格式化规则的配置文件。这个命令会自动修复不符合规则的代码,并且把修复后的代码写回原来的文件。3.ament_uncrustify 命令详情。
2023-10-10 14:35:01
237
原创 临江仙·送钱穆父
最后二句“人生如逆旅,我亦是行人。然而分别虽久,各自也有自己人生不同的艰难困苦,但再见面依然是欢乐开怀,彼此心意相通,互相一笑就犹如沐浴着春天般的暖阳。”,这句则是赞扬友人的品格高尚,犹如秋天的竹子一般始终高风亮节。元祐初年,苏轼朝为起居舍人,钱穆父为中书舍人,两人志趣相投,感情深厚。然而自从上一次在京城别后,到此次再次相见已经是时隔三年了,各自的于人世间奔走漂泊,俩人始终都没有安定下来。这是一首赠别词,却不同于一般送别诗词的缠绵伤感、哀怨悲凉的风格,写的豪放又有情韵,洒脱又富有哲理,很有苏轼诗词的风格。
2023-07-20 19:32:50
241
原创 vs code .clang-format格式化错误问题
使用window 上vscode-> format document .格式化成功。1、在Ubuntu中安装 clang-format插件。2、将.clang-format文件放到项目目录中。3、在代码文件中,右键format document。windows 用ssh 远程到 Linux 代码。项目中代码需要格式化。
2022-11-23 15:19:53
1876
原创 cmake(1)
构建系统描述了如何使用构建工具从项目的源代码构建项目的可执行文件和库,以实现过程的自动化。例如,构建系统可以是用于命令行生成工具的生成文件,也可以是用于集成开发环境(IDE)的项目文件。该项目使用cmake语言(7)手册中描述的文件指定其构建系统,从名为CMakeLists.txt的顶级文件开始。使用<path to existing build>作为构建树,并从其CMakeCache.txt文件加载到源树的路径,该文件必须已经由以前运行的CMake生成。要使用CMake构建软件项目,请生成项目构建系统。
2022-11-06 19:21:33
702
原创 cmake guides
cmake构建系统(7)手册旨在帮助开发人员扩展维护构建系统的知识,并熟悉cmake中可以表示的构建目标。cmake包(7)手册解释了如何创建可由基于cmake的第三方构建系统轻松使用的包。这将详细说明运行cmake(1)或cmake gui(1)可执行文件所需的步骤,以及如何选择生成器,以及如何完成构建。CMake是一个管理源代码构建的工具。最初,CMake被设计为Makefile的各种方言的生成器,如今CMake生成Ninja等现代构建系统以及Visual Studio和Xcode等IDE的项目文件。
2022-11-06 16:48:10
288
原创 cmake 学习 cmake-package(7)
cmake-packages(7)installforeach 使用configure_file使用foreach 使用说明
2022-11-05 21:14:13
1298
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人