自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [项目复盘] 从零构建 ROS 2 嵌入式 SLAM 系统:基于 ESP32 + Micro-ROS + SLAM Toolbox

本项目不仅仅是对 ROS 2 功能包的调用,更是一次对分布式控制系统的深度实践。通过手写 C++ 中间件处理时间同步和 QoS 策略,我深刻理解了 ROS 2 通信机制在嵌入式环境下的应用难点。这套系统具备良好的扩展性,未来可直接接入 Nav2 导航栈实现自动驾驶。

2025-12-06 13:35:59 894

原创 深度解析:SLAM 的核心——多传感器融合与构图原理

graph TDstart[开始] --> get_odom[接收 /odom 数据]start --> get_scan[接收 /scan 数据]get_odom --> predict[1. 预测: 根据里程计推算当前位姿]predict --> match[2. 扫描匹配: 将雷达数据与局部地图比对]match --> correct[3. 校正: 修正机器人的位姿估计]correct --> map_update[4. 地图更新: 贝叶斯概率更新栅格状态]

2025-12-06 13:02:54 1191

原创 硬核拆解:ROS2如何打通底层硬件?从ESP32到SLAM的通信全链路解析

graph TDsubgraph Robot_Hardware [机器人硬件层]Encoder[编码器] --> |脉冲| ESP32Lidar[雷达] --> |串口数据| WiFi_Moduleendsubgraph Transport_Layer [传输层 WiFi]endsubgraph PC_Driver_Layer [PC 驱动层]endsubgraph ROS2_Logic_Layer [ROS 2 逻辑层]end。

2025-12-05 17:53:01 1070

原创 ROS 2 移动机器人SLAM实战记录:从底层驱动到构建第一张地图

在移动机器人开发中,让机器人“看见”环境并“知道”自己在哪,是所有高级功能(如导航、避障)的基础。这就涉及到。本文记录了我基于和YDLidar搭建 SLAM 系统的完整过程。从最底层的串口通信,到 TF 坐标变换树的构建,再到最终使用完成建图。这不仅仅是一份操作指南,更是一次对 ROS 2 核心概念(话题、TF、时间同步)的深度复盘。在 RViz2 中将 Fixed Frame 设置为map,添加 RobotModel 和 LaserScan。现象蓝色的机器人模型出现在屏幕中央。

2025-12-05 17:44:32 1115

原创 [ROS2实战] 从零打造SLAM机器人(一):基于ESP32与Micro-ROS的底盘运动控制与里程计实现

SLAM的本质:SLAM 就像人闭着眼睛走路摸墙画地图。底盘的作用如果人走路晃晃悠悠(电机控制不稳),地图就会画歪。如果人不知道自己迈了几步(里程计不准),地图就会断裂。本篇目标:抛弃昂贵的工控机,用几十块钱的ESP32单片机,通过Micro-ROS接入 ROS 2 生态,实现精准的PID闭环控制和里程计(Odometry)发布,为后续接入激光雷达做准备。当前状态:我们要到了一个能动、能听、知道自己在哪的“瞎子”机器人。下一步计划加眼睛:接入激光雷达(Lidar)。长脑子。

2025-12-03 15:33:27 773

原创 ROS2入门必读:一文搞懂话题与服务,从此编译不报错!

特性话题 (Topic)服务 (Service)通信模型发布 / 订阅客户端 / 服务端同步性异步 (Asynchronous)一般为同步 (Synchronous)数据流持续不断的流数据触发式的一次性交互反馈无反馈 (发完就不管)有反馈 (必须等待结果)底层协议DDS (数据分发服务)DDS (基于 RPC)想要 continuous data(如传感器)用Topic;想要 result driven(如计算、控制开关)用Service。代码放src,编译在ws根目录。C++ 开发中,的。

2025-12-01 11:15:29 1052

原创 2025广东省工科赛(只有任务一和任务二版)(开源)

不要相信软件的“快”:物理世界是有惯性和延迟的。代码里看似一瞬间完成的逻辑,电机可能需要几百毫秒才能响应。该加 Delay 的地方一定要加,该冷却的时候一定要冷却。简单粗暴最有效:在复杂的赛场环境下,复杂的自适应算法往往不如一套简单的“死区 + 最小步距 + 串行逻辑”可靠。数据说话:调试时不要猜。我们在 STM32 上加了大量的printf,通过串口助手实时看RX Raw(收到了什么)和Action(执行了什么),这是解决问题的最快途径。

2025-11-28 23:37:55 569

原创 ROS2基础:彻底搞懂C++编译与Python依赖查找机制

特性Python运行方式编译 -> 链接 -> 生成可执行文件 -> 运行直接由解释器运行源码依赖查找时机编译前(找不到不让生成程序)运行时(跑到那一行才去找)查找工具PYTHONPATH环境变量核心报错优势运行效率高,适合算法、驱动开发效率高,适合逻辑、快速验证。

2025-11-28 16:29:09 1177

原创 机器人调试实战:从“抽搐死锁”到“丝滑对齐”的排爆任务攻关记

在嵌入式里,只有定时器才是可信的。

2025-11-27 18:06:59 887

原创 STM32与香橙派ROS通信调试全过程复盘

崩溃发生在成功握手之后,说明底层通信是通的,但运行时的数据流有问题。最可能的原因是 STM32 在一个循环中发送了多个话题 (/chatter 和 /motor_speeds),数据量过大或频率过高,超出了 rosserial 在 STM32 端的默认缓冲区大小,导致发送了不完整或损坏的数据包,使得香橙派端的解析器崩溃。② 电机驱动的物理供电。这是最典型的 ROS 网络错误,意味着 serial_node.py 这个 ROS 节点在启动时,找不到 ROS Master (roscore) 这个“总指挥”。

2025-11-05 16:46:15 446

原创 从“坑”到通途:STM32 移植 ros_lib 的全方位复盘与终极指南

将这些宝贵的经验总结成一篇博客,不仅能作为您未来的参考,更能帮助无数正在这条路上探索的开发者。MicroLIB 是 ARM 推出的一个极简版C标准库,为了在资源极度受限的MCU上节省空间,它移除了大部分不常用的功能,其中就包括几乎所有的标准浮点数数学函数,如 floor, round, sin 等。MicroLIB 是 ARM 推出的一个极简版C标准库,为了在资源极度受限的MCU上节省空间,它移除了大部分不常用的功能,其中就包括几乎所有的标准浮点数数学函数,如 floor, round, sin 等。

2025-11-05 00:07:27 309

原创 ARM64平台ROS Noetic源码编译问题与解决方案实录

系统中安装的setuptools(Python打包工具)版本较新,已不再支持ROS Noetic编译脚本所使用的旧的--install-layout指令。在编译命令中加入参数 -DPYTHON_EXECUTABLE=/usr/bin/python3,强制CMake使用正确的Python 3解释器。该命令会跳过已成功下载的包,只重新尝试下载失败的包,直至所有源码(共79个)下载完整。此阶段是整个过程的核心。使用wstool工具根据上一步生成的清单文件,将所有ROS软件包的源码下载到本地src目录。

2025-11-02 00:00:00 1147

原创 为强化学习项目创建独立Python环境的回顾

选用Miniforge(适用于ARM架构的Conda)作为环境管理器,以避免使用系统Python可能导致的依赖冲突。Conda可以为不同项目创建隔离的环境。重新打开终端后,命令提示符前出现(base),表示Conda环境已激活。创建一个独立的Python 3.8环境,安装PyTorch 1.10,用于运行TD3强化学习算法,并确保该环境能与已编译的ROS系统兼容。在安装提示中接受许可协议,使用默认安装路径,并同意执行conda init。在TD3环境中,使用pip安装所需的Python包。

2025-11-01 16:22:29 312

原创 香橙派VNC远程桌面配置指南:实现与物理桌面完美同步

对于拥有香橙派(Orange Pi)这类单板计算机的爱好者和开发者来说,远程桌面无疑是最高效、便捷的管理方式之一。然而,许多VNC方案会创建一个独立的虚拟桌面,这与我们期望的“所见即所得”——即远程桌面与HDMI显示器画面完全一致——的体验相去甚远。本文将为您提供一份详尽的配置总结,旨在利用 x11vnc 这一强大工具,实现在香橙派上共享物理桌面,达到与树莓派(Raspberry Pi)默认VNC体验一致的完美效果。

2025-11-01 12:00:31 1053

原创 STM32F1标准库代码到F4 HAL库的移植 - 以幻尔16PWM舵机控制板为例(附源码)

本文记录了将一个基于STM32F1标准库(SPL)的舵机控制代码,移植到STM32F4 HAL库项目的完整过程。内容涵盖环境搭建、代码修改和中断处理,旨在为开发者提供一份清晰、可直接参考的技术指南。

2025-10-23 11:23:45 458

原创 GM65扫码模块调试问题与解决方案深度总结

当GM65模块扫描内容为"123"的二维码时,程序通过串口打印出的结果是 65488,65488,65488,与预期严重不符。数组越界访问和无符号整型下溢。源码解析:1. 错误的根源:数组越界访问// 在 GM65_rocessReceivedData 函数中// ...// 错误代码:尝试从索引 4, 5, 6 的位置读取数据// 随后调用转换函数// ...当GM65扫描"123"后,它通常会发送数据并附带一个结束符,比如回车符 \r (ASCII码为 0x0D)。

2025-10-16 16:24:07 614

原创 STM32调试HWT101陀螺仪:从数据为0到成功读取角度的完整排错之旅(附源码)

本文将完整复盘一次使用STM32F4系列单片机调试维特智能HWT101陀螺仪的全过程,记录我们如何从最初的“角度始终为0”,一步步定位问题,最终成功读取数据的完整心路历程。但现实是残酷的,程序下载后,串口监视器上打印出的 global_angle 始终是 0.00。:接收到的数据不再是 0x00,而是 0x55, 0x52, 0x53 等看起来有意义的数据流,但角度依然不更新。我们的目标很简单:通过STM32的USART2接口,接收HWT101陀螺仪发送的角度数据,并将其打印出来。

2025-10-15 17:19:47 525

原创 串级PID调试过程与代码总结

临时修改chassis_pid_control,绕过位置环,直接给定一个恒定的速度目标(如500.0f)。解决了此问题,为pid->vel_integral设置了上限和下限,增加了控制器的健壮性。恢复chassis_pid_control为调用DualPID_Update的完整串级控制。在确定了稳定的vel_Kp后,从小到大加入vel_Ki,用以消除稳态误差。最终确定pos_Kp = 0.03f,此参数下系统响应快速且无超调。设置pos_Ki = 0.0f, pos_Kd = 0.0f。

2025-10-14 22:59:18 202

原创 STM32多电机PID控制系统调试复盘与技术总结 (代码增强版)

本文详细记录了一套基于STM32的四轮独立PID速度控制系统的完整调试过程。内容涵盖了从基础的PID参数整定,到解决多电机并发控制中遇到的各类典型问题,如硬件冲突、软件BUG、系统非线性及物理限制等。文章的核心在于展示一个系统化的调试思路:当简单的参数调整无法解决问题时,应转向对控制算法、软件架构及硬件系统的综合分析与优化。一套鲁棒的PID控制系统,不仅依赖于一套合理的P, I, D参数,更取决于一个健壮的算法框架和对物理系统限制的清醒认识。

2025-10-12 13:59:06 514

原创 STM32电机PID调试指南:从参数整定到算法优化

在进行基于STM32的直流电机速度闭环控制时,PID参数整定是一个常见的难点。开发者经常会发现,一套在一特定目标值(Setpoint)下工作良好的PID参数,在更换目标值后,可能会出现振荡或无法到达目标等问题。本文记录了解决这一问题的完整过程,核心思路是:当简单的参数调整无法满足要求时,应当从优化PID算法和控制逻辑本身入手,以实现控制器在更宽工作范围内的稳定性(鲁棒性)。

2025-10-11 18:31:10 479

原创 STM32电机PID调试日记

这次漫长但收获满满的调试过程,让我对PID有了全新的认识。它不是玄学,而是一门需要耐心、细心和科学方法的“手艺活”。系统化调参:严格遵循“先P后I再D”的原则,使用“二分法”小步快跑,切忌“大开大合”。可视化是关键:没有串口波形图,整个调试过程就像在“盲人摸象”。理解动态过程:超调、振荡和稳态误差同等重要,要全面评估系统性能。敢于打破僵局:当陷入死循环时,跳出PID本身,用开环测试等方法去验证物理前提。希望我的这段经历,能给正在和PID“搏斗”的你带来一点帮助。

2025-10-11 17:06:36 789

原创 当VirtualBox中的Ubuntu黑屏无法启动时如何进入终端

当Ubuntu虚拟机无法进入桌面时,不要轻易放弃或重装。利用GRUB菜单进入恢复模式,并通过root shell执行修复,是每个Linux用户都应掌握的关键技能。进入恢复模式 -> 设置LC_ALL -> 修复软件包 -> 重启,它能解决绝大多数由软件配置和文件损坏引起的启动故障。

2025-10-10 14:25:22 1098

原创 分析printf导致STM32项目异常的常见原因与解决方案

在STM32开发中,使用printf函数通过串口输出调试信息是一种高效的调试手段。然而,不正确的配置常常会导致程序运行异常,例如程序崩溃、串口输出乱码等。本文将系统性地分析这些问题的根本原因,并提供相应的解决方案。

2025-10-10 12:31:58 577

空空如也

空空如也

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

TA关注的人

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