自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

liu-yonggang的专栏

未来不迎 当时不杂 既过不恋

  • 博客(139)
  • 收藏
  • 关注

原创 ros2 topic list执行过程

ros2cli DaemonNode 属性 -> get_topic_names_and_types。

2026-01-13 19:39:23 18

原创 qnx平台编译ros代码相关资料

本文介绍了QNX环境下ROS2的代码编译与运行流程。主要包括:1)从QNX官方获取License并安装SDP SDK;2)在Ubuntu 22.04中配置QNX开发环境;3)使用mkqnximage命令编译x86_64架构镜像并运行QEMU模拟器;4)通过调整参数解决内存空间不足问题(如设置8G内存、1024MB数据区);5)支持SSH远程访问和x86架构GDB调试。相关资源链接包括QNX代码仓、官方文档和CSDN环境搭建指南。

2025-10-15 16:36:24 188

原创 c++ std::enable_if_t std库

这段代码展示了一个C++模板方法AndThen的实现,主要用于链式调用操作。关键点包括: 使用std::result_of_t推导可调用对象的返回类型 通过static_assert进行编译时检查: 返回类型必须是Result类型 错误类型必须保持一致 使用std::forward实现完美转发 包含空指针检查和错误处理逻辑 根据对象是否包含值决定调用方式:有值则调用函数,否则返回错误 代码体现了现代C++特性如模板元编程、类型推导、完美转发等,并遵循AUTOSAR C++17规范。

2025-09-28 15:47:55 420

原创 qnx编译ros

摘要:安装QNX软件需先注册账号获取License,通过QNX软件中心下载(参考相关博客指南)。拉取QNX的ROS2代码时需注意Python版本需为3.11。安装步骤包括配置软件中心及获取相关框架代码。

2025-09-28 14:27:50 192

原创 ros2获取topic信息解析

摘要:ROS2中ros_discovery_info主题的发布逻辑涉及进程间通信问题。当运行ros2 topic info -v /topic命令(p3进程)时,虽然与发布者进程p1属于不同进程,但通过ROS2内置的IPC机制实现跨进程通信。该机制默认使用DDS中间件,允许节点间通过共享内存或网络传输发现并交换主题信息,无需直接进程间通信。图示展示了这一发现过程的关键环节。

2025-09-13 16:27:24 345

翻译 vsomeip in 10 minutes

文章摘要: SOME/IP是一种面向服务的汽车通信中间件,兼容AUTOSAR标准。本文介绍了SOME/IP的核心组件:有线格式、通信协议和服务发现机制。SOME/IP消息由报头和有效载荷组成,支持TCP/UDP传输协议,提供请求/响应和发布/订阅两种通信模式。开源实现vsomeip通过路由管理器处理设备间和进程内通信,但不包含数据序列化功能。文章还提供了vsomeip的安装指南和简单应用示例代码框架,帮助开发者快速上手SOME/IP开发。该技术专为汽车电子系统设计,具有明确的版本控制和错误处理机制。

2025-09-08 09:41:42 128

原创 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 482

原创 工具链教程

本文汇总了多个开发工具和平台的官方资源链接:Jenkins教程(包含Pipeline入门指南)、Conan编译工具教程、JFrog制品仓库平台、Yocto项目官网,以及OpenEmbedded Layer Index(包含分支和发行版查询)。同时提供了一条Linux命令示例,用于递归删除包含特定关键字的文件。这些资源涉及持续集成、包管理、嵌入式构建系统等领域。

2025-08-15 17:02:44 264

原创 编译release可执行文件查看死锁问题

确定锁的位置: 在pthread_mutex_lock函数调用中,锁的地址应该作为第一个参数传递给该函数。我们首先查看当前的寄存器状态,重点关注x0寄存器,因为它通常用来传递pthread_mutex_lock的第一个参数(即互斥锁的地址)。以上步骤可以帮助你推断出锁的地址,并且进一步分析锁的状态。如果你需要更多关于特定锁的信息,请提供更多的上下文或者详细描述你的问题。如果你还需要对锁的状态或者其他信息进行更多的调查,可以使用GDB的一些命令来查看内存内容或者打印结构体的成员变量。让我们来执行这些步骤。

2025-06-20 13:46:24 251

原创 使用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 750

原创 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 1094

原创 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 692

原创 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 561

原创 ros2运行UT test方法

import_path 函数似乎是设计用来导入位于特定路径的 Python 模块的一个函数,但需要注意的是,这个函数签名并不是来自 Python 的标准库,而且它包含的一些参数(如 ImportMode)并没有在标准库中定义。如果 import_path 函数是属于某个特定的库或框架,你应该参考该库或框架的文档以获取更准确的使用说明和示例。path: 表示要导入的模块文件的路径。ModuleType: 这是 Python types 模块中定义的类型,用来表示导入的模块类型。查询pytest版本。

2024-10-31 09:42:44 604

原创 打印堆栈信息

在实际使用中,backtrace函数会填充传入的数组(在这个例子中是array)来获取当前的调用堆栈的指针。backtrace_symbols函数会根据这个指针数组生成一个字符串数组,每个字符串包含对应于堆栈帧的一个可打印的符号名称。如果你需要更详细的信息,你可能需要使用额外的工具,例如addr2line命令,它可以将内存地址转换成源文件的行号和文件名。在Linux系统中,你可以使用backtrace和backtrace_symbols函数来打印当前线程的调用堆栈。

2024-10-24 16:56:17 623

原创 ROS2接口调用异常扑获

ROS2接口调用异常扑获。

2024-10-23 17:22:18 330

原创 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 962

原创 主流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 743

原创 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 602

原创 Type Specific Interfaces(Rolling特殊类型接口)

一直以来,API的某些部分必然特定于所交换的消息类型,例如发布消息或订阅主题,因此需要为每个消息类型生成代码。下图布局了从用户定义的rosidl文件(如.msg文件)到用户和系统用于执行特定类型功能的特定类型代码的路径:图:“静态”类型支持生成的流程图,从rosidl文件到面向用户的代码。图的右侧显示了.msg文件是如何直接传递给特定语言的代码生成器的,例如rosidl_generator_cpp或rosidl_generator_py。

2024-05-07 10:12:38 1111

原创 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 1714 2

原创 iceoryx(冰羚)-共享内存数据传输

此外,它还提供了offer-stopOffer API,用于控制发布者端口是否可被发现用于订阅服务器端口。此外,它还提供了订阅/取消订阅API,控制订阅端口是否应尝试订阅匹配的发布端口。上面的操作都是在共享内存中,发布进程拿到PublisherPortData对象,转换成PublisherPortUser对象,进行数据发送。订阅进程拿到SubscriberPortData对象,转换成SubscriberPortUser对象,进行数据发送。

2023-12-03 17:18:12 1012

转载 Nanolog日志

million。

2023-12-02 21:05:35 329

原创 iceoryx(冰羚)-进程间消息同步

iceoryx进程间消息同步,是用socket或管道实现的,定义在iceoryx\iceoryx_posh\include\iceoryx_posh\internal\runtime\ipc_interface_base.hpp消息类型定义具体消息格式

2023-12-02 11:18:57 1014

原创 iceoryx(冰羚)-publisher注册RouDi进程

IPC通信支持socket和管道,IpcInterfaceUser ->RouDi进程的socket, IpcInterfaceCreator接收RouDi进程的消息socket。1、发UserApp启动,发布REG消息过程。

2023-12-02 10:56:46 897

原创 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 2141

原创 CyberRT-共享内存实现

CyberRT共享内存类图。

2023-11-23 12:03:15 1303

原创 iceoryx(冰羚)-简介

RouDi是Routing and Discovery的缩写。RouDi负责通信设置,但实际上并不参与发布者与订阅者或客户端与服务器之间的通信。鲁迪可以被认为是iceoryx的总机操作员。它的另一个主要任务是设置共享内存,应用程序使用共享内存交换有效负载数据。RouDi有时被称为守护进程,它管理共享内存并负责服务发现,即使订阅者/客户端能够找到发布者/服务器提供的主题。它还跟踪所有已初始化运行时的应用程序,从而能够创建发布者、订阅者、服务器或客户端。它为应用程序查询此信息提供了便利。

2023-11-15 20:47:36 2981 2

原创 iceoryx(冰羚)-通信中间件解析

iceoryx(冰羚)-ipc消息通信][iceoryx(冰羚)-共享内存实现]

2023-11-15 20:23:49 2107

原创 iceoryx(冰羚)-Architecture

本文概述了Eclipseiceoryx体系结构,并解释了它的基本原理。

2023-11-15 20:16:44 1463

原创 iceoryx(冰羚)-iceoryx_examples/callback

侦听器是线程安全的,可以不受限制地使用。但是要注意,所有提供的回调都是在侦听器的后台线程中同时执行的。如果你访问这个回调中的结构,你必须确保你是唯一一个访问它的人,或者用“std::mutex”之类的保护来访问它。

2023-11-15 10:19:32 909

原创 iceoryx(冰羚)-Service Discovery

IPC通道(例如消息队列或UNIX域套接字)上的服务发现是不可执行的,因为传输的数据较大,这可能会导致多个帧的传输。如果发现大量高频服务,例如在启动时,IPC通道可能会成为瓶颈。

2023-11-14 21:15:23 966

原创 iceoryx(冰羚)-Listener设计

Listener是除WaitSet之外实现推送方法来检测特定事件并对其作出反应。监听器为用户提供了附加具有相应事件和回调的对象的能力。每当对象接收到指定的事件时,就会在Listener后台线程中调用相应的回调作为响应。WaitSet的两个关键区别是侦听器是事件驱动的而不是像WaitSet和Listener创建的那样由事件和状态驱动一个单独的后台线程,在该线程中执行事件回调,而在WaitSet中用户必须显式调用事件回调。##术语由附加对象用于通知Listener/WaitSet事件发生。

2023-11-14 20:39:22 729 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 654

原创 ros2 代码风格检查

注意:和Uncrustify一样,ament_uncrustify也会直接修改源代码文件,所以在使用之前最好备份你的代码。ament_uncrustify是一个用于ROS2项目的代码格式化工具,它使用Uncrustify作为底层的格式化工具。这个命令会输出不符合规则的代码行和文件。–config选项用于指定格式化规则的配置文件。这个命令会自动修复不符合规则的代码,并且把修复后的代码写回原来的文件。3.ament_uncrustify 命令详情。

2023-10-10 14:35:01 279

原创 查看kernel 是否支持trace

查看kernel 是否支持trace。

2023-08-30 13:35:09 142

原创 临江仙·送钱穆父

最后二句“人生如逆旅,我亦是行人。然而分别虽久,各自也有自己人生不同的艰难困苦,但再见面依然是欢乐开怀,彼此心意相通,互相一笑就犹如沐浴着春天般的暖阳。”,这句则是赞扬友人的品格高尚,犹如秋天的竹子一般始终高风亮节。元祐初年,苏轼朝为起居舍人,钱穆父为中书舍人,两人志趣相投,感情深厚。然而自从上一次在京城别后,到此次再次相见已经是时隔三年了,各自的于人世间奔走漂泊,俩人始终都没有安定下来。这是一首赠别词,却不同于一般送别诗词的缠绵伤感、哀怨悲凉的风格,写的豪放又有情韵,洒脱又富有哲理,很有苏轼诗词的风格。

2023-07-20 19:32:50 408

原创 工作任务管理表

2023-07-20 13:33:02 129

原创 使用shell 脚本运行命令

【代码】使用shell 脚本运行命令。

2022-12-14 15:13:39 484

原创 rqt_graph 报No module named ‘python_qt_binding.QtSvg‘

解决方法

2022-12-07 14:02:35 966 3

空空如也

空空如也

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

TA关注的人

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