自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SLAM 建图系统配置与启动架构

完成里程计、激光雷达与 SLAM 算法的联合调试,构建/map。

2025-12-08 17:23:39 983

原创 集成式人机交互与底层驱动系统设计说明书

在早期架构中,控制逻辑(Controller)与硬件接口(Driver)被物理分离。考虑到 STM32 固件采用了高效的字符流控制协议,我们将架构精简为集成式驱动模式。本模块充当 ROS 2 上位机与底层硬件的唯一交互网关,通过多线程并发机制,同时实现毫秒级的人机交互控制与高频传感器数据采集。

2025-12-08 17:19:36 1049

原创 STM32 底层固件架构与驱动设计

运动执行:通过 I2C 总线控制四轮差速电机驱动板,实现全向移动与平滑调速。数据感知:采集 IMU (MPU6050) 的姿态数据与电机编码器的里程计数据。数据交互:通过 UART 串口与上位机 (ROS 2 节点) 进行高频数据通讯。上行 (STM32 -> ROS):纯文本 CSV 格式,以换行符结尾。下行 (ROS -> STM32)WASD(前后左右)。T+ 时间戳文本。

2025-12-08 17:12:06 755

原创 基于ROS2与EKF的四轮差速机器人里程计精度优化:解决建图漂移与重影问题

模型不如传感器:差速运动学模型在滑移严重时非常不准,必须依赖高频 IMU 对航向角进行直接修正。数据预处理至关重要:简单的低通滤波(LPF)就能极大提升建图的清晰度。观测维度的选择:直接观测 Yaw 角比单纯观测角速度能更有效地抑制漂移。这套方案不仅适用于四轮差速车,同样适用于履带车等高滑移率的移动机器人平台。

2025-12-04 18:09:52 655

原创 在slam建图中为何坐标base_link,laser,imu_link是始终在一起的,但是odom 会与这位三个坐标在运行中产生偏差

摘要:在机器人系统中,base_link、laser和imu_link三个坐标系通过URDF/XACRO文件静态定义,始终保持固定相对位置。odom坐标系作为局部运动参考会产生随时间累积的漂移误差,主要源于轮式里程计的固有缺陷和IMU积分误差。SLAM系统通过引入map坐标系,利用闭环检测和扫描匹配技术,动态计算map→odom的修正量来补偿odom的漂移。这种偏差的存在正是SLAM系统正常工作的体现,它通过不断校准里程计来维持全局定位精度。

2025-12-02 20:03:18 461

原创 (STM32F103RCT6、四路霍尔电机、香橙派、顶部雷达)获取精确的 odom坐标

(例如使用卡尔曼滤波),可以用IMU修正轮子打滑带来的位姿跳变,同时用轮速计抑制IMU的零漂,从而得到更稳定、精确的。:配置定时器的编码器接口模式,精确捕获四个电机的脉冲数。:轮子半径、轮距(wheel_base)等物理参数的测量准确性直接决定odom的精度。:直接使用IMU提供的四元数来获取更准确的偏航角(Yaw),替代单纯由轮速计积分得到的。,它可以在传感器内部完成姿态解算,直接输出稳定的四元数,减轻主控负担并提高精度。:使用差分驱动模型,根据左右轮的位移差计算小车的位移和朝向变化。

2025-11-24 15:15:44 609

原创 理解SLAM(即时定位与地图构建)中的TF(Transform)树

理解SLAM(即时定位与地图构建)中的TF(TransForm)树确实非常关键,它就像是机器人的​ 和。为了让你彻底弄懂,我们这次不仅深入原理,还会结合更多实际场景和比喻,让你无论在何种机器人平台上都能触类旁通。

2025-11-12 20:40:42 786

原创 RK3588作为主控,STM32F103作为下位机,思岚S2雷达,四路电机驱动板,进行地图构建计划

​ 这是一个你。

2025-11-10 14:22:42 472

原创 OrangePi(运行 Ubuntu 22.04)安装 ROS 2 Humble

【代码】 OrangePi(运行 Ubuntu 22.04)安装 ROS 2 Humble。

2025-11-10 14:12:14 293

原创 如何使用ROS 2与STM32进行串口通信,并实现通过键盘按键‘1’来控制LED灯开关

一台运行ROS 2的计算机(上位机)通过串口向一颗STM32微控制器(下位机)发送指令,从而控制连接在STM32上的LED灯。键盘作为用户输入设备,由ROS 2节点监听,最终将按键事件转化为通过串口发送的指令。以下代码展示了一个简单的STM32程序框架,它持续检查串口是否收到数据,并根据收到的字符控制LED。STM32端的任务是初始化串口和GPIO,并不断监听来自串口的指令,根据指令控制LED。:让STM32将传感器数据(如温度、距离)发送回ROS 2,并在ROS 2中发布为话题。

2025-11-08 17:02:01 925

原创 ROS2与STM32通信详解

/ 命令类型#define MSG_CMD_VEL "VEL" // 速度控制#define MSG_CMD_LED "LED" // LED控制#define MSG_CMD_PID "PID" // PID参数设置// 数据类型#define MSG_DATA_ODOM "ODOM" // 里程计数据#define MSG_DATA_IMU "IMU" // IMU数据#define MSG_DATA_STATUS "STATUS" // 系统状态。

2025-11-03 13:18:02 314

原创 使用雷达,SLAM 算法选型

下表对比了各算法的主要特点,方便你快速了解。​​​​​​​​​​​​​​支持​​,​​能力强大,能有效消除累积误差。室内大场景、长廊、仓库支持多传感器融合(可接入IMU)。中等Google开源,文档和社区支持良好,与ROS 2集成顺畅。​​​​强,专注于2D激光雷达,支持在线建图与保存。中小型室内场景、实时导航纯激光雷达即可良好工作。​​对香橙派等资源受限设备友好,易于调试和参数调整。​​​​,在快速运动和高动态环境下​​。无人机、户外、高速移动机器人​​。

2025-10-30 15:17:15 246

原创 CH340 是什么

CH340 系列是南京沁恒/WCH 出品的一类 USB-to-serial 转换芯片(USB → UART/RS232/并口/IrDA 等模式)。常见用途:把 MCU(TTL UART)或老式 RS-232 设备接到电脑 USB 上,或者用于 Arduino 等开发板的 USB 串口模块。芯片工作在 USB 全速(Full-Speed USB,12 Mbps)并模拟标准 UART 控制信号(如 RTS/CTS、DTR、DSR 等)。

2025-10-29 14:30:28 847

原创 USART/UART 核心概念简介

​​。

2025-10-28 17:04:19 293

原创 TX 与 RX 引脚详解​

​ 模块的TX -> 主控的RX(发送数据);主控的TX -> 模块的RX(发送控制指令)。​ ESP32/Arduino 连接 GPS 模块、蓝牙模块、Wi-Fi 模块等。​ 将处理器内部的并行数据(如一个字节)转换成串行的比特流,按顺序发出。⚠️ 注意:如果同向连接(TX对TX,RX对RX),通信将完全失效。​ 监听线路,将接收到的串行比特流重新组装成并行数据,供处理器读取。​ MCU的TX -> 模块 -> 电脑串口监视器(显示调试信息)。​(每秒传输的比特数)来同步时序,无需独立的时钟线。

2025-10-28 16:17:07 474

原创 模型转换和边缘计算中至关重要的概念:​​归一化​​ 和​​量化策略​​

概念​​归一化​​​​量化策略​​​​核心目标​​​​数据预处理​​,使输入数据符合模型训练时的分布,保证模型正确工作。​​模型压缩与加速​​,通过降低数据精度来极致优化性能。​​关键操作​​对输入数据进行线性缩放。为模型权重和激活值确定从FP32到INT8的最佳映射参数。​​在RKNN转换中的作用​​​​保证模型精度的基础​​。配置错误直接导致模型失效。​​在精度和性能之间取得平衡​​。策略选择影响最终部署效果。​​相互关系​​两者都是模型转换流程中的关键配置。​。

2025-10-24 16:29:25 916

原创 ONNX模型至RKNN模型转换技术指南

​:对于NPU不支持的算子,可开发C++实现并将其注册为混合算子(OP),在NPU推理时由CPU执行。​。

2025-10-24 16:00:02 734

原创 PyTorch 到 RKNN 模型转换完整指南

本指南详细介绍了如何将 PyTorch 模型转换为 ONNX 格式,再转换为 RKNN 格式,以便在 Rockchip NPU 上运行。主要针对 Orange Pi 5 Plus (RK3588) 平台。

2025-10-16 18:26:41 490

原创 使用OpenCV将视频转换为图片的详细教程

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它包含了数百种计算机视觉算法,在图像处理、视频分析、目标检测和机器学习等领域有着广泛应用。

2025-09-23 15:19:11 929

原创 RK3588平台RKNN-Toolkit2安装与模型部署完整指南

​,它将通用模型(如ONNX格式)转换为高度优化的、瑞芯微NPU可高效执行的格式,并进行量化、算子融合等深度优化,最终生成专用的。​,它针对瑞芯微芯片(如RK3588)的硬件架构进行了深度优化,能够充分发挥NPU的算力优势。​:在导出ONNX前修改模型结构,将不支持的算子替换为兼容的变体,或尝试更新RKNN-Toolkit2到最新版本。​,它只定义模型的计算图结构,不涉及具体硬件的执行细节,其价值在于标准化和兼容性。​:使用Conda创建干净的Python环境,确保系统已安装所有必需的依赖库。

2025-09-17 10:04:00 2734

原创 存储方案详解:FileStorage工具类与常用存储API

本文对比了四种前端存储方案:1)window.requestFileSystem(HTML5文件系统API,仅Chrome支持,适合复杂文件操作);2)localStorage(标准键值存储,所有浏览器支持,5MB限制);3)plus.storage(移动端专用,无容量限制,数据持久);4)plus.io(移动端完整文件系统API)。文章建议:简单键值用localStorage/plus.storage,复杂文件操作用对应API,并提供了统一封装工具类的最佳实践,强调根据平台特性选择方案,移动端优先使用pl

2025-07-23 15:54:17 820

原创 ​​UniApp打包iOS应用终极详细指南​​

UniApp打包iOS应用终极指南摘要 本指南详细讲解UniApp打包iOS应用全流程: 1️⃣ 环境准备:需macOS系统+Xcode15+HBuilderX+苹果开发者账号(99美元/年) 2️⃣ 证书配置:分4步生成CSR文件、创建开发者证书、转换P12证书、绑定BundleID 3️⃣ 项目配置:重点修改manifest.json的BundleID,补全iOS隐私权限描述,申请DCloudAppKey 4️⃣ 打包操作:云打包(测试用)或本地Xcode打包(上架用),需匹配证书与描述文件 5️⃣ 上

2025-07-22 17:46:30 2233

原创 3D旋转文本框实现原理详解

【代码】3D旋转文本框实现原理详解。

2025-07-19 09:20:22 188

原创 CSS Display 属性全面解析

常用于页面结构元素(header, footer, section等)- 常用于文本修饰元素(span, a, strong等)- 灵活控制项目在主轴和交叉轴上的对齐。- 宽度由内容决定,无法设置宽高。- 非常适合响应式布局和组件排列。- 常用于导航菜单项、按钮组等。- 适用于复杂页面布局和仪表盘。- 适用于表单布局和垂直居中。- 与其他行内元素在同一行。- 独占一行,可设置宽高。- 行内显示但可设置宽高。- 支持所有盒模型属性。- 支持所有现代浏览器。- 一维弹性布局系统。- 二维网格布局系统。

2025-07-17 14:12:45 317

原创 CSS Position 属性全面解析

【代码】CSS Position 属性全面解析。

2025-07-17 13:55:41 245

原创 CSS盒子模型详解

每种盒子模型都有对应的说明、演示和代码示例,便于理解它们的不同行为和使用场景。页面还包含了这些盒子模型的比较表格和实际应用建议。

2025-07-17 11:54:43 193

原创 RPLIDAR S2 专用安装指南(ROS2 Humble)

安装 S2 专用依赖项sudo apt install ros-humble-tf2-ros ros-humble-tf2-geometry-msgs ros-humble-laser-geometry。# 不同模式对比'Standard': # 基本扫描模式 (10Hz)'Express': # 中速扫描 (15Hz)'Boost': # 高速扫描 (20Hz) - 推荐使用。'serial_port': '/dev/rplidar', # 设备路径,通常保持默认。

2025-06-04 17:34:55 438

原创 在 ROS 2 (Humble/Foxy) 和 Ubuntu 22.04 环境中使用思岚 S2 激光雷达进行地图构建的完整指南,结合驱动配置、SLAM 算法部署及实践步骤:

2. ​​配置 USB 权限​​3. ​​启动雷达节点​​ ​​验证数据​​: 检查激光点云话题是否正常输出。🧩 二、SLAM 算法选型与部署根据需求选择适合的算法(推荐两种主流方案):5

2025-06-04 16:51:43 2072 1

原创 激光与视觉SLAM完整学习路线

室内移动机器人导航系统(激光与视觉SLAM融合)的​​,整合基础理论、核心技术、系统集成及实战应用,结合最新研究成果与实践需求,总周期建议​​。

2025-06-04 16:38:33 1173

原创 Ubuntu 18.04配置ros1

【代码】Ubuntu 18.04配置ros1。

2025-04-22 19:15:42 447

原创 c语言位域操作讲解

如果一个成员无法放入当前剩余的空间(例如,当前字节剩余3位,但下一个成员需要4位),编译器可能会将剩余位填充,并让该成员从下一个存储单元(如字节)开始。数据类型:通常是`int`、`unsigned int`或`signed int`,其他类型(如`char`)可能因编译器而异。位数:指定该成员占用的二进制位数(例如,`1`位可以表示布尔值,`4`位可以表示0~15的整数)。5. 类型限制:位域成员必须是整型(`int`、`unsigned`等),不能是浮点数或指针。

2025-03-25 15:02:05 447

原创 Valgrind检测c语言内存泄漏

3. by 0x401156: create_leak (my_program.c:4):泄漏发生在 `my_program.c` 的第 4 行,即 `malloc` 的位置。根据 Valgrind 的报告,找到未释放的内存。当你的程序调用 `malloc(100)` 时,Valgrind 会记录下这个内存块的地址和大小。如果这种情况反复发生,程序会占用越来越多的内存(图书馆的书越来越少),最终可能导致程序变慢或崩溃。你用 `malloc` 或 `calloc` 分配了一块内存(借书)。

2025-03-25 14:49:29 942

原创 c语言malloc/free原理

操作系统接口:`malloc`底层通过系统调用(如`sbrk`或`mmap`)向操作系统申请大块内存(通常以页为单位,如4KB)。在C语言中,`malloc`和`free`是用于动态内存管理的核心函数,其原理涉及操作系统的内存分配机制和运行时库的高效管理策略。当用户请求`malloc(16)`,可能分配一个总大小为`sizeof(metadata) + 16`的块,返回用户数据区的地址。`malloc`负责从堆中分配指定大小的内存块,`free`则释放不再使用的内存块,使其可被重复利用。

2025-03-25 14:33:31 446

原创 c语言多级指针讲解

如果直接传递一级指针`int *arr`,函数内对`arr`的修改不会影响外部的`my_array`。`*pp`解引用得到`p`的值(即`a`的地址`0x1000`)`*p`通过地址访问`a`的值(`*p`即`a`的值10)`int arr[3][4]`是静态二维数组,内存连续。`p`的值是变量`a`的地址(如`0x1000`)`pp`的值是`p`的地址(如`0x2000`)`**pp`解引用两次得到`a`的值(即10)`matrix`是二级指针,指向一个指针数组。`***ppp`最终访问到`a`的值。

2025-03-23 16:38:03 373

原创 c语言指针运算讲解

指针运算不是简单的数学计算,而是以数据类型大小为单位的地址偏移。此时,`p`指向`a`,通过`p`可以操作`a`的值(这称为解引用)。这里`p+1`不是简单加1,而是移动了1个`int`的宽度(4字节)。指针加减整数时,实际移动的字节数 = 整数 × 指针指向类型的大小。可以用`==`, `!1. 高效访问连续内存:数组、字符串等连续数据的快速操作。指针是一个变量,它存储的是内存地址。指针减法得到的是两个刻度之间的间隔数。`p+1`就是向右移动一个刻度。示例1:int指针的加减。二、指针运算的核心概念。

2025-03-23 16:11:36 324

原创 c语言数组指针讲解

括号 `()` 是必须的:`int (p)[5]` 是数组指针,而 `int p[5]` 是一个指针数组(数组中有5个 `int` 指针)。数组指针(Pointer to an Array)是一个指针,它指向一个完整的数组(而不是数组中的某个元素)。`arr` 是数组名,它本质上是一个指向数组首元素(`arr[0]`)的指针,类型是 `int`。`p2 + 1`:跳过 `sizeof(int[5])` 字节(即跳过整个数组的长度)。这里的 `p` 不是指向单个 `int`,而是指向整个数组。

2025-03-23 15:47:28 290

原创 c语言函数指针讲解

函数指针通过指向不同函数,实现了代码的动态调用,常见于回调、策略模式等场景。括号`(funcPtr)`不可省略,否则会变成函数声明(如`int func(int, int)`是返回`int`的函数)。函数指针是C语言中的一个重要概念,它允许程序动态调用不同的函数,增强代码的灵活性和复用性。和普通指针(指向数据)不同,函数指针指向的是代码区的函数。1. 类型严格匹配:函数指针的返回类型和参数列表必须与被指向的函数完全一致。3. 语法细节:注意``和括号的位置,避免写成函数声明。示例:实现“计算器”功能。

2025-03-23 15:22:24 442

空空如也

空空如也

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

TA关注的人

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