- 博客(139)
- 收藏
- 关注
原创 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 .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
原创 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
原创 iceoryx(冰羚)-简介
RouDi是Routing and Discovery的缩写。RouDi负责通信设置,但实际上并不参与发布者与订阅者或客户端与服务器之间的通信。鲁迪可以被认为是iceoryx的总机操作员。它的另一个主要任务是设置共享内存,应用程序使用共享内存交换有效负载数据。RouDi有时被称为守护进程,它管理共享内存并负责服务发现,即使订阅者/客户端能够找到发布者/服务器提供的主题。它还跟踪所有已初始化运行时的应用程序,从而能够创建发布者、订阅者、服务器或客户端。它为应用程序查询此信息提供了便利。
2023-11-15 20:47:36
2981
2
原创 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
原创 临江仙·送钱穆父
最后二句“人生如逆旅,我亦是行人。然而分别虽久,各自也有自己人生不同的艰难困苦,但再见面依然是欢乐开怀,彼此心意相通,互相一笑就犹如沐浴着春天般的暖阳。”,这句则是赞扬友人的品格高尚,犹如秋天的竹子一般始终高风亮节。元祐初年,苏轼朝为起居舍人,钱穆父为中书舍人,两人志趣相投,感情深厚。然而自从上一次在京城别后,到此次再次相见已经是时隔三年了,各自的于人世间奔走漂泊,俩人始终都没有安定下来。这是一首赠别词,却不同于一般送别诗词的缠绵伤感、哀怨悲凉的风格,写的豪放又有情韵,洒脱又富有哲理,很有苏轼诗词的风格。
2023-07-20 19:32:50
408
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅