- 博客(85)
- 收藏
- 关注
原创 Git分支实操指南:本地学习分支创建+远程同步避坑全解析
本文详细讲解Git纯本地学习分支的管理方法,包括创建、删除和同步策略。主要内容包括:1)基于本地分支创建独立学习分支的操作步骤;2)git fetch与git pull的核心区别及适用场景;3)纯本地分支的正确更新链路(远程→本地上游→学习分支);4)避坑指南与核心规则总结。重点强调学习分支应保持纯本地属性,通过上游分支间接同步远程更新,避免污染公共分支。适合需要独立测试环境的开发场景,帮助开发者理清Git分支管理的底层逻辑。
2025-12-15 11:47:51
1136
原创 C++ 函数类型大全:成员函数 / 非成员函数 / 全局函数 / 静态函数 / 特殊成员函数 / 虚函数 / 模板函数 全面总结
本文系统梳理了C++中完整的函数类型体系,从多个维度进行分类:1)按类归属分为成员函数、静态成员函数、非成员函数和友元函数;2)按特殊成员函数分为构造/析构/拷贝/移动等;3)按多态特性分为普通函数、虚函数和纯虚函数;4)按修饰符分为const/ref限定/noexcept/inline等;5)按编译期特性分为模板函数、constexpr和consteval函数;6)还包括lambda、函数对象、函数指针等可调用对象。文章通过示例代码和对比表格,全面解析了各类函数的特点和使用场景,帮助开发者深入理解C++函
2025-12-11 15:27:58
1261
原创 成员函数(Member Function)彻底讲透:this、const、运算符重载 全解析
本文深入解析C++成员函数的底层原理与语法细节。成员函数是定义在类内部、专门操作类对象的函数,具有自动携带this指针、访问类私有成员、支持const修饰等特性。重点讲解了this指针的本质,const成员函数的作用,以及运算符重载作为成员函数的优势。通过Vec2向量类的示例,展示了成员函数实现运算符重载的规范写法。文章对比了成员函数与普通函数的区别,并解答了常见面试问题,帮助读者全面理解成员函数在C++面向对象编程中的核心地位。
2025-12-11 10:02:39
1367
原创 C++ 成员函数运算符重载深度解析
本文详细讲解了C++中运算符重载的实现方法,以二维向量类Vec2的加法运算符重载为例。主要内容包括:1. 通过operator+成员函数实现向量加法,解释this指针和参数的关系;2. 分析const Vec2&参数和函数末尾const的含义;3. 说明运算符重载的调用过程和链式加法实现;4. 对比成员函数版本和全局函数版本的差异;5. 强调运算符重载的语法规则和最佳实践。文章通过代码示例和逐步解析,帮助读者深入理解C++运算符重载的核心概念和实现细节。
2025-12-10 15:16:45
1041
1
原创 【C++基础】Day 11:nullptr VS NULL
摘要:本文系统分析了C++中nullptr与NULL的区别。NULL本质是整数0,在重载和模板推导中易引发歧义;而C++11引入的nullptr具有独立类型std::nullptr_t,能安全隐式转换为任意指针类型,解决了NULL的类型安全问题。通过函数重载、模板推导等示例对比,文章指出现代C++应统一使用nullptr表示空指针,避免使用NULL导致的潜在问题。这一知识点是C++面试中的重要基础考点。
2025-12-09 10:35:40
911
原创 【松灵ROS2专栏·第 2 讲】ROS通讯机制与常用工具
本文介绍了ROS2的核心通讯机制与常用工具,重点讲解了参数管理、动作机制和关键开发工具的使用。内容涵盖:1)参数机制的三种配置方式(CLI/YAML/Node)及实战操作;2)动作机制的结构特点及其与服务调用的区别;3)ROS2工具链详解,包括Launch文件编写(推荐Python方式)、Gazebo物理仿真、RViz可视化、RQt调试工具和ros2bag数据记录;4)以AgileX LIMO机器人为例,演示了从环境配置到仿真运行的完整流程。最后通过对比RViz和Gazebo的功能差异,帮助开发者理解ROS
2025-12-08 17:35:42
1078
原创 【C++基础】Day 10:sizeof全解析:C++如何使用sizeof操作符获取变量或类型的大小
本文系统梳理了C++中sizeof操作符的关键知识点。作为编译期操作符,sizeof用于获取类型或表达式结果的字节数,不执行表达式副作用。重点包括:数组在非函数形参场景不会退化指针;结构体大小受内存对齐影响常大于成员之和;指针大小固定与指向对象无关;空类大小为1保证可寻址性;虚函数会增加虚表指针;模板中需使用数组引用获取长度;动态内存无法通过sizeof计算大小。文章通过典型场景、内存布局分析和面试常问题目,全面解析了sizeof在工程实践中的注意事项。
2025-12-08 12:21:29
790
原创 【C++基础】Day 10:C/C++ 数据类型字节长度全解析
本文详细探讨了C/C++中基础类型的字节长度问题,重点分析了跨平台开发中的数据类型差异。文章指出,long类型在Linux(8字节)和Windows(4字节)下的不同表现,以及longdouble在GCC(16字节)和MSVC(8字节)中的差异。特别强调了在网络协议和嵌入式开发中必须使用<cstdint>中的固定宽度整数类型(int32_t/uint32_t等)来确保数据一致性。文章提供了完整的类型字节对照表,并解答了常见面试问题,为开发者处理跨平台数据通信提供了实用指导。
2025-12-08 10:44:48
1074
原创 【C++基础】Day 9:四大强转 static_cast vs dynamic_cast vs reinterpret_cast vs const_cast
本文系统梳理了 C++ 中最核心的四类强制类型转换:static_cast、dynamic_cast、reinterpret_cast、const_cast。它们是现代 C++ 替代传统 C 风格强转的安全机制,但由于语义差异大、适用场景不同,是 C++ 面试八股中最容易混淆的高频考点。文章从 编译期 vs 运行期 入手,解释了为什么 static_cast 与 dynamic_cast 的行为差异本质来自编译器能否看到真实类型;随后结合 RTTI 与虚函数表机制,深入讲解 dynamic_cast
2025-12-05 14:47:27
766
原创 C++ 并发四件套:并发编程 / 原子性 / 数据竞争 / 内存模型 (全解析)
本文深入探讨C++并发编程中的核心概念,包括并发编程、原子性、数据竞争和内存模型。通过分析a++在多线程环境中的安全问题,对比std::atomic和std::mutex两种解决方案:std::atomic利用CPU原子指令保证操作的不可分割性,适合简单计数场景;std::mutex通过互斥锁保护代码区间,适用于复杂操作。文章还解释了数据竞争的产生条件及其危害,并介绍了C++内存模型如何规范多线程的读写顺序和可见性。最后总结了atomic和mutex的适用场景,为开发安全高效的并发程序提供指导。
2025-12-04 16:08:40
996
原创 【C++基础】Day 8:函数指针 VS 指针函数 | 指针常量 VS 指向常量的指针
本文系统梳理了C++中两类易混淆指针概念:1)函数指针与指针函数:前者是指向函数的指针变量,用于回调、函数表等;后者是返回指针的函数。区分关键看标识符最近的符号是*还是()。2)指针常量与指向常量的指针:前者指针不可改但内容可改,后者内容不可改但指针可改,const位置决定限制对象。文章通过定义解释、图表对比、代码示例和面试题分析,帮助读者清晰区分这些高频考点概念,掌握指针声明的阅读技巧和使用场景。
2025-12-04 12:27:25
1538
原创 【松灵ROS2专栏·第 1 讲】ROS2 基础入门
ROS2是新一代机器人操作系统,在ROS1基础上重构优化,具备分布式、跨平台、高实时性等优势。课程《松灵ROS2开讲啦》系统讲解ROS2基础、仿真、算法等内容。ROS2采用DDS通讯机制,取消Master中心节点,支持话题(异步单向)和服务(同步请求响应)两种通讯方式。通过小乌龟仿真案例演示了节点管理、话题订阅、服务调用等核心操作。掌握Linux基础指令和ROS2常用命令是开发前提,ROS2模块化设计使其在机器人开发中更具优势。
2025-12-03 17:02:35
1054
原创 【C++基础】Day 7:std::atomic vs mutex
本文系统对比了C++中mutex与atomic的线程安全机制。mutex通过加锁/解锁保证临界区互斥访问,但性能开销大;atomic利用CPU原子指令实现无锁线程安全,性能更高。文章详细解析了mutex的实现原理(lock_guard的RAII机制),并指出atomic适用于简单计数器,而mutex适用于保护复杂数据结构或多步操作。性能对比显示:atomic>>mutex>>普通int。最后总结表格明确了三种自增方案的安全性和适用场景,为多线程编程提供了实践指导。
2025-12-03 12:14:31
948
原创 【C++基础】Day 7:a++ 的线程安全问题 与 std::atomic 全解析
本文深入解析了C++中a++操作的线程安全问题。a++在底层被分解为load-add-store三条指令,多线程环境下会因指令交错导致数据竞争,造成计算结果错误。通过std::atomic可以确保"读-改-写"操作的原子性,其底层使用CPU原子指令实现,相比mutex具有更高性能。文章通过代码示例对比了普通int和atomic在多线程环境下的表现差异,并回答了相关面试问题。核心结论:在多线程编程中必须使用std::atomic来保证自增操作的原子性。
2025-12-03 10:55:56
892
原创 ROS2 常用命令超详细总结(附 ROS1 & ROS2 对照表)
本文系统整理了ROS2常用命令行工具,帮助从ROS1迁移的用户快速上手。主要内容包括:功能包管理(ros2 pkg)、节点运行与查看(ros2 run/node)、话题调试(ros2 topic)、接口查看(ros2 interface)等核心命令,并对比了ROS1与ROS2的指令差异。重点介绍了C++工程管理(colcon/ament_cmake)、参数调试、bag包操作等服务,提供了详细的命令示例和使用场景。特别强调了ROS2在消息类型(/msg)、服务(/srv)和动作(/action)方面的语法变化
2025-12-02 17:29:10
967
原创 Ubuntu 一键安装 ROS 全流程( 鱼香ROS 一键脚本)
本文介绍了使用"鱼香ROS一键工具"快速搭建ROS环境的详细流程。该工具通过自动化脚本简化了传统安装过程中的复杂步骤,主要包含:1)更换国内系统源;2)一键安装ROS/ROS2;3)配置rosdep;4)更新系统环境。安装过程仅需4个核心步骤,支持Ubuntu 18.04-22.04系统及多个ROS版本,可自动处理依赖和环境配置问题,大幅降低安装失败率。文中还提供了测试ROS是否安装成功的方法,整个流程约10分钟即可完成,有效提升环境搭建效率。
2025-12-02 15:09:41
1245
原创 【C++基础】Day 6:前置++ VS 后置++(语法底层 + STL规范 + 面试高频)
C++运算符重载:前置++与后置++的深度解析 本文详细解析了C++中前置++(++i)和后置++(i++)的区别与实现要点。前置++通过operator++()实现,无参数且返回引用,效率高;后置++通过operator++(int)实现,需创建临时对象保存旧值并返回对象副本。文章从语法定义、底层原理、性能对比等方面进行了深入剖析,特别强调了后置++应返回const对象以避免(i++)++这类无意义操作。最后提供了完整的代码示例和常见面试问题解答,建议在自定义类型中优先使用前置++以获得更好性能。
2025-12-02 11:23:19
993
原创 JSON 超详细入门到精通
JSON是一种轻量级数据交换格式,采用键值对结构,支持对象、数组、字符串、数字、布尔值和null六种数据类型。它以.json为扩展名,具有语法简洁、跨语言、易读写的特性,广泛应用于配置文件、Web API、设备通信等领域。JSON相比XML和二进制协议在可读性和工程友好度上更具优势,是机器人、Web服务和嵌入式系统开发的重要基础。使用时需注意键名必须双引号、布尔值小写等语法规则,避免常见错误。
2025-12-01 15:03:09
1217
原创 【C++基础】Day 5:struct 与 class
本文系统梳理了C++中struct与class的核心区别。C语言struct仅作为数据集合,而C++struct本质是默认public的class,支持成员函数、继承等完整面向对象特性。两者语法差异仅在于默认成员权限(struct为public,class为private)和默认继承方式。工程实践中,建议struct用于纯数据结构存储(成员公开),class用于封装逻辑(成员私有)。此外,文章还解析了模板中typename与class的异同,指出模板参数列表中使用class/typename等效,但依赖类型
2025-12-01 11:41:50
1047
原创 【PID实战-微分D详解】一张误差曲线拆成 9 个阶段:彻底搞懂微分项如何抑制过冲
本文通过小车位置控制的案例,深入解析PID控制中微分项(D项)的作用原理。作者将误差曲线划分为9个阶段,详细说明D项如何根据误差变化率(de/dt)产生反向作用力:在系统加速阶段提供约束,在接近目标时提前减速,在过冲阶段强力拉回,最终实现平稳收敛。文章还结合速度环、位置环和转向环三个工程实例,对比有无D项时的控制效果差异,指出D项能显著减小超调、抑制振荡。最后给出调参建议:D项应最后添加且适度使用,过大D增益会放大噪声导致系统抖动。全文通过直观的工程案例,揭示了D项"预测趋势、提前制动"
2025-11-30 17:33:01
1239
原创 【PID 进阶工程】从连续到离散:位置式 vs 增量式 PID 在单片机里的落地实战
本文从工程实践角度系统介绍了PID控制的实现方法。首先回顾了PID的基本原理和控制框图,重点分析了连续时间PID公式及其性能指标。然后详细讲解了数字PID的两种实现方式:位置式PID直接计算当前输出值,适合温度控制等场景;增量式PID计算输出增量,更适合电机控制等需要抗干扰的系统。文章通过直流电机案例对比了两种方法的优缺点,并提供了完整的C语言实现代码(含结构体设计和更新函数)。最后总结了PID参数整定步骤,强调要根据控制对象特性选择合适方法,并通过系统响应曲线调整P/I/D参数。全文旨在帮助读者将PID理
2025-11-29 15:46:05
1319
原创 【PID 理论入门】开环 vs 闭环:小明走路教会你的经典控制精髓
本文通过“小明走路”的生动比喻,系统讲解了PID控制原理。开环控制(蒙眼走路)无法纠偏,闭环控制(睁眼走路)通过实时反馈实现精准控制。PID控制器包含三部分:比例控制(P)根据误差大小调节力度,积分控制(I)消除长期偏差,微分控制(D)预测变化趋势提前刹车。三者协同工作,P决定"敢不敢冲",I确保"冲到准不准",D控制"要不要刹车"。PID凭借结构简单、调节直观等优势,成为工业控制的主流算法,但参数整定需要平衡响应速度与稳定性。
2025-11-28 17:49:14
1463
原创 Git 分支管理实战:团队项目大规模重构时,如何重建拉分支?一文讲透 Git 正确打开方式!
本文介绍了在团队协作开发中,当项目进行大规模重构时如何正确处理Git分支管理。主要内容包括:1)团队创建了driver_class新分支作为驱动模块的最新基线;2)继续使用旧分支会导致大量冲突,因为旧分支基于过时的代码结构;3)推荐基于最新driver_class创建个人开发分支的两种方法,特别是先同步远程代码再创建分支的专业流程;4)日常开发应在个人分支进行,并定期同步团队更新;5)提供了完整的Git工作流程图解。文章强调了大重构场景下遵循团队开发规范的重要性,以确保代码兼容性和可维护性。
2025-11-28 10:55:00
1488
原创 一篇搞懂 C++ 重载:函数重载 + 运算符重载,从入门到会用(含 ++、<<、== 实战)
摘要:本文系统讲解C++中的重载机制,包括函数重载和运算符重载。函数重载的核心在于同名函数参数列表不同,返回值不影响重载判定。C++通过名称修饰(Name Mangling)实现函数重载,而C语言不支持。运算符重载本质是特殊函数重载,需遵循特定规则:不能创建新运算符、不能改变优先级等。文章详细介绍了常见运算符重载方法,特别是前后置++的区别、输入输出运算符的友元实现等。最后对比了重载(Overload)、重写(Override)和隐藏(Name Hiding)的概念差异,帮助读者全面理解C++重载机制。
2025-11-27 21:33:51
1676
原创 协议全解析——底盘串口协议 + 高低字节 + 16 位数拼装 + 补码负数【小白一看就懂】
摘要:AGV底盘通信协议基于串口字节流,核心是将16位整数拆分为高/低字节传输。文章详解了协议帧结构、正负数拆分原理(如0x64=100,0xFF9C=-100)、补码运算及字节合并方法。重点包括:速度控制指令格式(bit7为方向位)、数据单位转换(如/100得m/s)、以及实用的C++解析代码。掌握这些原理可避免开发中常见的字节处理困惑,如高字节右移、低字节与0xFF运算等关键操作。
2025-11-26 09:09:19
879
原创 移动机器人 ROS 驱动排障手册:消息收不到?串口打不开?打印不显示?
本文针对移动机器人底盘调试中的常见问题,从ROS到硬件全链路分析故障原因。重点讲解了/cmd_vel指令无响应但叉臂指令能打印的现象,指出这是由驱动日志输出差异导致的。详细介绍了ROS层消息检查、驱动层接收验证、串口连接排查(包括设备识别、权限设置、占用情况)等关键步骤。文章提供了完整的排障流程(10个检查点)和常见问题总结,强调机器人不动可能是串口未连接或MCU未收到命令所致。最后建议在驱动中添加DEBUG日志以便观察指令接收情况,帮助工程师系统性地解决移动机器人调试问题。
2025-11-25 11:45:23
1428
原创 ROS 常用 rostopic 指令全解析:从查看、诊断到发布消息【小白教程】
摘要:本文系统介绍了ROS中rostopic命令行工具的使用方法。通过实际案例讲解了查看话题列表、消息类型、发布/订阅关系等基础操作,重点演示了如何发布消息(单次/循环)和实时查看话题数据。文章还提供了常见调试场景分析,如消息发送成功但硬件未响应的情况。最后总结了最常用的rostopic命令速查表,包括话题列表查看、消息发布、速度控制等实用指令,适合ROS初学者和工程调试快速解决问题。
2025-11-25 10:58:47
700
原创 ROS 话题通信全解析:从代码实现到终端操作,再到运行原理(小白友好教程)
本文全面介绍ROS话题通信机制,涵盖核心概念、代码实现和终端操作。主要内容包括:1) 话题通信四大组件(话题、发布者、订阅者、消息)及其异步通信原理;2) C++和Python实现发布/订阅节点的代码示例及关键解析;3) 终端调试命令(rostopic pub/echo等)的快速使用方法;4) C++与Python节点的运行机制差异(编译型vs解释型)。文章通过具体代码和操作演示,帮助初学者掌握ROS话题通信的基础技能,并提供常见问题解决方案,适用于传感器数据传输等异步通信场景。
2025-11-24 15:10:51
1449
2
原创 【C++基础】Day 4:关键字之 new、malloc、constexpr、const、extern及static
本文对比分析了C++中三组关键概念:1. new/delete与malloc/free:new/delete是C++运算符,具有类型安全、自动调用构造/析构函数、可重载等特点;而malloc/free是C函数,仅分配原始内存块,不保证类型安全。2. constexpr与const:constexpr强制编译期常量计算,用于模板参数等场景;const仅表示只读,不保证编译期确定。3. extern与static:extern用于声明外部符号,实现多文件共享;static则限制符号作用域,延长变量生命周期,并支
2025-11-22 18:54:04
1054
原创 C++ 内存机制详细全讲解:构造函数、析构函数、new/delete、栈 vs 堆 完整指南(小白教程)
本文深入解析C++中构造函数与析构函数的本质,以及对象在内存中的存储方式。主要内容包括:1)构造函数负责对象初始化但不分配内存,析构函数负责清理资源但不释放内存;2)对象可存储在栈、堆、全局/静态区等位置,其中栈对象自动管理生命周期,堆对象需手动释放;3)new操作包含内存分配和构造函数调用,delete包含析构函数调用和内存释放;4)栈对象适合短生命周期小对象,堆对象适合需要灵活控制的大对象。文章通过代码示例清晰展示了不同存储方式下对象的创建与销毁过程,并强调了内存管理与对象构造/析构的区别。
2025-11-21 12:16:24
1073
原创 【C++基础】Day 3:关键字之 define、typedef、using、引用&、inline 和 const
本文对比分析了C++中的几种关键字区别:1. #define与typedef/using的区别:前者是预处理阶段的文本替换,无类型检查;后者是编译期的类型别名,更安全。2. #define与inline的区别:宏函数存在多次求值风险,而inline函数类型安全且可调试。3. #define与const的区别:宏常量无类型且全局可见,const常量有类型检查且遵循作用域规则。文章通过对比表、代码示例和面试问答,指出在现代C++中应优先使用类型安全的using、inline和const,避免使用不安全的#def
2025-11-20 12:26:24
848
原创 【C++基础】Day 2:关键字之 const 与 static
本文系统梳理了C++中const和static关键字的核心考点。const关键字用于实现只读语义,包括常量变量、指针常量/常量指针、const成员函数和const引用等多种用法,重点区分顶层const和底层const。static关键字主要控制变量和函数的生命周期、作用域及访问权限,包含静态变量(全局/局部)、静态成员变量/函数、文件内静态函数等多种应用场景。文章通过图表对比、代码示例和面试总结,深入解析了这两个关键字的语法特性、使用场景和底层机制,为C++学习者提供了全面的知识梳理和备考指南。
2025-11-19 12:34:48
726
原创 【开篇·必看】C++ 八股文学习路线与专栏导读:从基础到大厂面试全掌握!
本文是一份C++面试备战指南,系统性地将C++知识体系划分为6个学习阶段:从基础语法到内存模型,再到STL容器和现代C++特性,最终深入多线程和高频面试题。作者旨在提供一个结构化、易理解的学习路径,帮助读者掌握C++底层原理而非简单背诵。专栏将采用图解+代码+面试模板的形式,确保知识点可理解、可复述、可应用,目标是让学习者能够有效应对大厂技术面试。
2025-11-18 14:49:49
603
原创 【C++基础】Day 1:全局/静态/局部变量、指针 vs 引用、整型类型
本文摘要: 变量类型:全局变量(跨文件共享)、静态局部变量(函数内持久化)、局部变量(临时栈存储),分别存储在静态区、静态区和栈区,生命周期和作用域不同。 指针与引用:指针存储地址(可空/重定向),引用是别名(不可空/不可变),指针需解引用,引用直接使用,指针支持算术运算,引用更安全。 数据类型:short(16b)、int(32b)、long(32/64b)、longlong(64b),长度因平台而异,无符号类型增大取值范围但不支持负数。推荐使用int保证可移植性。
2025-11-18 14:28:34
1485
原创 Git 进阶全解析:变基、合并、撤销、挑选、暂存、同步机制完整讲解(高级篇)
本文深入解析Git高级概念,涵盖merge/rebase区别、冲突解决等核心问题。merge用于保留分支历史,适合团队协作;rebase则改写历史使提交线整齐,仅建议用于本地未推送分支。文章强调"团队协作用merge,个人整理用rebase"的金句,并警告不要对已推送分支执行rebase操作。同时详解fetch/pull差异,介绍stash、cherry-pick等实用功能,并提供11条最佳实践建议,如dev分支只做merge、避免对推送commit做reset等,帮助开发者从"
2025-11-17 14:39:57
901
原创 Git 最强入门到精通:工作区、暂存区、本地仓库、tracking、origin/dev 全面讲透(图解版)
Git分支体系详解:本文系统讲解了Git中最易混淆的概念,包括本地/远程分支、commit/push区别、tracking机制等核心知识。重点指出:1)本地dev与origin/dev是两个独立分支;2)commit是本地操作,push才同步到远程;3)tracking分支决定pull/push默认目标;4)VSCode显示的是本地历史视图;5)MR才是合并到主分支的标准流程。全面掌握本地与远程的映射关系,是高效使用Git的关键。
2025-11-17 12:14:31
1100
原创 C++ 多态终极完整版:从虚函数到 vtable、对象切片、插件框架设计、面试题库全覆盖
摘要:本文深入解析C++多态机制,从基础概念到工程实践。多态通过虚函数(virtual)、子类重写(override)和基类指针/引用实现"一个接口,多种实现"的动态绑定。重点讲解了虚函数表(vtable)的工作原理,分析对象切片(Object Slicing)问题,强调必须使用指针/引用传递。文章提供了策略模式导航算法案例,展示多态在工程中的实际应用,并解答常见面试问题。最后指出多态是C++面向对象编程的核心特性,能提升代码扩展性和解耦性。
2025-11-16 15:31:27
1245
原创 ROS 中的回调与 Spinning 全家桶(一文弄懂 ros::Rate、ros::spin、ros::spinOnce 与多线程 Spinner)
本文系统解析了ROS节点中回调处理的核心机制,重点剖析了ros::Rate、ros::spin()和ros::spinOnce()的实际作用与区别。文章从底层消息队列原理出发,解释了两层队列(Subscriber队列和CallbackQueue)的工作流程,以及queue_size参数对实时性和消息完整性的影响。详细对比了单线程和多线程Spinner(MultiThreadedSpinner/AsyncSpinner)的适用场景,归纳了三种典型开发模式:纯订阅节点使用ros::spin();控制循环节点采用
2025-11-15 18:10:02
1175
原创 运动学模型推导 + 离散化 + 工程化版本(适用于前方单舵轮 AGV / 自动驾驶 / MPC)
本文系统推导了自动驾驶常用的运动学模型,从几何关系出发,通过速度分解和无侧滑约束建立完整模型。针对工程应用,扩展了加速度和前轮转角速度作为控制量,解释了其物理意义和执行器控制原理。提供了连续时间模型、离散化形式及小角度线性化版本,明确适用于低速无侧滑场景,为MPC、LQR等控制算法提供理论基础。文章特别强调了工程实现细节,包括转向电机控制逻辑和模型离散化方法,有助于实际系统开发。模型适用于AGV等低速场景,不适用于高速漂移等动力学主导情况。
2025-11-14 15:02:50
1228
原创 MPC 里的约束与 QP 求解器实战——从原理、例子到 C++ 落地
本文详细介绍了MPC(模型预测控制)中如何将工程约束转化为二次规划(QP)问题,并给出C++实现方案。首先回顾MPC基本框架,通过离散模型和预测矩阵建立QP问题。重点阐述各类约束(控制量限幅、增量约束、状态约束)的数学表达形式,并以车辆控制为例推导约束矩阵。最后给出使用Eigen和qpOASES求解器的代码框架,包括数据转换、初始化、热启动等关键技术点。全文通过理论推导与工程实践相结合,为MPC的实际应用提供了完整的解决方案。
2025-11-14 11:54:53
994
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅