- 博客(129)
- 收藏
- 关注
原创 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
878
原创 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
480
原创 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
451
原创 ros2运行UT test方法
import_path 函数似乎是设计用来导入位于特定路径的 Python 模块的一个函数,但需要注意的是,这个函数签名并不是来自 Python 的标准库,而且它包含的一些参数(如 ImportMode)并没有在标准库中定义。如果 import_path 函数是属于某个特定的库或框架,你应该参考该库或框架的文档以获取更准确的使用说明和示例。path: 表示要导入的模块文件的路径。ModuleType: 这是 Python types 模块中定义的类型,用来表示导入的模块类型。查询pytest版本。
2024-10-31 09:42:44
521
原创 打印堆栈信息
在实际使用中,backtrace函数会填充传入的数组(在这个例子中是array)来获取当前的调用堆栈的指针。backtrace_symbols函数会根据这个指针数组生成一个字符串数组,每个字符串包含对应于堆栈帧的一个可打印的符号名称。如果你需要更详细的信息,你可能需要使用额外的工具,例如addr2line命令,它可以将内存地址转换成源文件的行号和文件名。在Linux系统中,你可以使用backtrace和backtrace_symbols函数来打印当前线程的调用堆栈。
2024-10-24 16:56:17
418
原创 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
554
原创 主流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
327
原创 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
501
原创 Type Specific Interfaces(Rolling特殊类型接口)
一直以来,API的某些部分必然特定于所交换的消息类型,例如发布消息或订阅主题,因此需要为每个消息类型生成代码。下图布局了从用户定义的rosidl文件(如.msg文件)到用户和系统用于执行特定类型功能的特定类型代码的路径:图:“静态”类型支持生成的流程图,从rosidl文件到面向用户的代码。图的右侧显示了.msg文件是如何直接传递给特定语言的代码生成器的,例如rosidl_generator_cpp或rosidl_generator_py。
2024-05-07 10:12:38
1031
原创 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
1317
2
原创 iceoryx(冰羚)-共享内存数据传输
此外,它还提供了offer-stopOffer API,用于控制发布者端口是否可被发现用于订阅服务器端口。此外,它还提供了订阅/取消订阅API,控制订阅端口是否应尝试订阅匹配的发布端口。上面的操作都是在共享内存中,发布进程拿到PublisherPortData对象,转换成PublisherPortUser对象,进行数据发送。订阅进程拿到SubscriberPortData对象,转换成SubscriberPortUser对象,进行数据发送。
2023-12-03 17:18:12
819
原创 iceoryx(冰羚)-进程间消息同步
iceoryx进程间消息同步,是用socket或管道实现的,定义在iceoryx\iceoryx_posh\include\iceoryx_posh\internal\runtime\ipc_interface_base.hpp消息类型定义具体消息格式
2023-12-02 11:18:57
858
原创 iceoryx(冰羚)-publisher注册RouDi进程
IPC通信支持socket和管道,IpcInterfaceUser ->RouDi进程的socket, IpcInterfaceCreator接收RouDi进程的消息socket。1、发UserApp启动,发布REG消息过程。
2023-12-02 10:56:46
758
原创 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
1769
原创 iceoryx(冰羚)-简介
RouDi是Routing and Discovery的缩写。RouDi负责通信设置,但实际上并不参与发布者与订阅者或客户端与服务器之间的通信。鲁迪可以被认为是iceoryx的总机操作员。它的另一个主要任务是设置共享内存,应用程序使用共享内存交换有效负载数据。RouDi有时被称为守护进程,它管理共享内存并负责服务发现,即使订阅者/客户端能够找到发布者/服务器提供的主题。它还跟踪所有已初始化运行时的应用程序,从而能够创建发布者、订阅者、服务器或客户端。它为应用程序查询此信息提供了便利。
2023-11-15 20:47:36
2192
2
原创 iceoryx(冰羚)-iceoryx_examples/callback
侦听器是线程安全的,可以不受限制地使用。但是要注意,所有提供的回调都是在侦听器的后台线程中同时执行的。如果你访问这个回调中的结构,你必须确保你是唯一一个访问它的人,或者用“std::mutex”之类的保护来访问它。
2023-11-15 10:19:32
640
原创 iceoryx(冰羚)-Service Discovery
IPC通道(例如消息队列或UNIX域套接字)上的服务发现是不可执行的,因为传输的数据较大,这可能会导致多个帧的传输。如果发现大量高频服务,例如在启动时,IPC通道可能会成为瓶颈。
2023-11-14 21:15:23
768
原创 iceoryx(冰羚)-Listener设计
Listener是除WaitSet之外实现推送方法来检测特定事件并对其作出反应。监听器为用户提供了附加具有相应事件和回调的对象的能力。每当对象接收到指定的事件时,就会在Listener后台线程中调用相应的回调作为响应。WaitSet的两个关键区别是侦听器是事件驱动的而不是像WaitSet和Listener创建的那样由事件和状态驱动一个单独的后台线程,在该线程中执行事件回调,而在WaitSet中用户必须显式调用事件回调。##术语由附加对象用于通知Listener/WaitSet事件发生。
2023-11-14 20:39:22
543
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
547
原创 ros2 代码风格检查
注意:和Uncrustify一样,ament_uncrustify也会直接修改源代码文件,所以在使用之前最好备份你的代码。ament_uncrustify是一个用于ROS2项目的代码格式化工具,它使用Uncrustify作为底层的格式化工具。这个命令会输出不符合规则的代码行和文件。–config选项用于指定格式化规则的配置文件。这个命令会自动修复不符合规则的代码,并且把修复后的代码写回原来的文件。3.ament_uncrustify 命令详情。
2023-10-10 14:35:01
166
原创 临江仙·送钱穆父
最后二句“人生如逆旅,我亦是行人。然而分别虽久,各自也有自己人生不同的艰难困苦,但再见面依然是欢乐开怀,彼此心意相通,互相一笑就犹如沐浴着春天般的暖阳。”,这句则是赞扬友人的品格高尚,犹如秋天的竹子一般始终高风亮节。元祐初年,苏轼朝为起居舍人,钱穆父为中书舍人,两人志趣相投,感情深厚。然而自从上一次在京城别后,到此次再次相见已经是时隔三年了,各自的于人世间奔走漂泊,俩人始终都没有安定下来。这是一首赠别词,却不同于一般送别诗词的缠绵伤感、哀怨悲凉的风格,写的豪放又有情韵,洒脱又富有哲理,很有苏轼诗词的风格。
2023-07-20 19:32:50
148
原创 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
1716
原创 cmake(1)
构建系统描述了如何使用构建工具从项目的源代码构建项目的可执行文件和库,以实现过程的自动化。例如,构建系统可以是用于命令行生成工具的生成文件,也可以是用于集成开发环境(IDE)的项目文件。该项目使用cmake语言(7)手册中描述的文件指定其构建系统,从名为CMakeLists.txt的顶级文件开始。使用<path to existing build>作为构建树,并从其CMakeCache.txt文件加载到源树的路径,该文件必须已经由以前运行的CMake生成。要使用CMake构建软件项目,请生成项目构建系统。
2022-11-06 19:21:33
665
原创 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
280
原创 cmake 学习 cmake-package(7)
cmake-packages(7)installforeach 使用configure_file使用foreach 使用说明
2022-11-05 21:14:13
1222
原创 cmake 工具链(7)
CMake使用实用工具链来编译、链接库和创建档案,以及驱动构建的其他任务。可用的工具链实用程序取决于启用的语言。在正常构建中,CMake会根据系统自省和默认值自动确定主机构建的工具链。在交叉编译场景中,可以使用有关编译器和实用程序路径的信息指定工具链文件。...
2022-07-15 15:58:33
1554
原创 ros2 topic 源码解析
ros2 命令加载过程ros2 topic代码位置:ros2\src\ros2cli\ros2topic最终运作在ros2topic文件中setup.py 定义挂载点,加载命令的执行函数from setuptools import find_packagesfrom setuptools import setuppackage_name = 'ros2topic'setup( name=package_name, version='0.13.1', packages=f
2022-04-01 13:25:38
3460
原创 apollo cyber RT模块调研
cyber RT总体框架图cyber RT内部模块example talker参考链接apollo github官网源码中有doc,API介绍Apollo项目代码这文章中提供了ROS的调试工具与Cyber RT框架提供的工具对比。问题:在看代码时,出现函数名后面对应类型, 没看懂。感觉是告诉auto 返回类型。template <typename MessageT>auto Node::CreateWriter(const proto::RoleAttributes&
2022-02-11 14:53:57
646
1
原创 ubuntu 18.04 成功编译 ros2 rqt源码
ubuntu 18.04 成功编译 ros2 rqt源码遇到的问题很多,大概总结一下1、Qt、PyQt5 版本问题2、rqt源码问题,没个分支都不一样。3、运行库问题。各种链接不到。4、sip 生成c++代码问题。问题太多了,在这就不写了。大家有什么问题,可以问我哦。...
2022-01-26 18:39:51
1808
原创 ros2pkg python代码解析
python module加载 init.py的作用ros2 加载过程ros2pkg 文件目录|-- CHANGELOG.rst|-- package.xml|-- resource| `-- ros2pkg|-- ros2pkg| |-- __init__.py| |-- api| | |-- __init__.py| | `-- create.py| |-- command| | |-- __init__.py //说明这是一个包|
2022-01-20 08:58:33
811
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人