<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[龙猫的博客]]></title><description><![CDATA[做点想做的事]]></description><link>https://blog.youkuaiyun.com/a_xiaoning</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a_xiaoning]]></copyright><item><title><![CDATA[BetaFlight中的陷波滤波器]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/157067001</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/157067001</guid><author>a_xiaoning</author><pubDate>Sat, 17 Jan 2026 18:42:46 +0800</pubDate><description><![CDATA[在上面求解出来共振频率，经过一些滤波，排序操作，计算得到最大中心频率后，接下来就是将这些中心频率，更新周期等参数传入滤波器的参数配置环节中。在检测时，BetaFlight 采用了 SDFT ，也就是滑动离散傅里叶变化，在飞控中，是一种轻量化的 FFT 变换。通过实时分析陀螺仪数据的频率谱，检测振动峰值，动态调整陷波滤波器的中心频率。FFT适合固定块长的一次性处理，对于飞控来说，SDFT的小块数据处理更适合。在BetaFlight 中，对于 SDFT 的信号，会再叠加一个。BetaFlight 中使用。]]></description><category></category></item><item><title><![CDATA[ego(10)---仿真地图与点云生成]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151964253</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151964253</guid><author>a_xiaoning</author><pubDate>Mon, 22 Sep 2025 15:08:41 +0800</pubDate><description><![CDATA[仿真地图，全局地图点云，局部地图点云生成主要与两个文件有关，random_forset_sensing.cpp 与 pointcloud_render_node.cpp。当然如果是 mockamap 的地图类型生成的话，就是另外的地图生成，不过我们只需要看一下 ego 常规是怎么做的即可，mockamap 也大同小异。局部点云在 pointcloud_render_node.cpp 中定时检测并发布，局部点云其实也就是模拟雷达的点云数据。在生成障碍物后，根据网格分辨率，来保存网格内的障碍物点作为点云。]]></description><category></category></item><item><title><![CDATA[ego(9)---ego-planner中的动力学仿真]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151936696</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151936696</guid><author>a_xiaoning</author><pubDate>Sun, 21 Sep 2025 23:13:27 +0800</pubDate><description><![CDATA[在 ego 中，输出的控制指令包括两个部分，一个是力矩，一个是力矩的方向，也就是角度，最终是单独将方向转化为了四元数来发布出来，这部分内容在 SO3Control.cpp 中。姿态角的力矩需要乘以力臂 d ，于是，单电机与姿态力矩的关系就为 F = M1 / (2*d) 或 F = M2 / (2*d)，分别对应横滚与俯仰。然后逐轴分析，单个电机的转速平方就是总推力/(4*kf)，再叠加横滚俯仰轴的的力矩 / (2*d*kf)，再叠加偏航力矩 / (4*km)。]]></description><category></category></item><item><title><![CDATA[ego(8)---L-BFGS优化算法与B样条生成最终轨迹]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151904074</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151904074</guid><author>a_xiaoning</author><pubDate>Sat, 20 Sep 2025 21:15:27 +0800</pubDate><description><![CDATA[在经过上一步的为 Astar 路径点计算避障基准点与排斥方向后，就会在经过一道带避障约束的优化步骤，得到可以避障的轨迹控制点。这部分的内容也是一个循环迭代的过程，循环调用 L-BFGS 优化器与 B 样条，检测是否满足避障条件。不满足则继续循环优化与B样条。]]></description><category></category></item><item><title><![CDATA[ego(7)---为Astar路径点计算交点，避障基准点与排斥方向]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151832503</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151832503</guid><author>a_xiaoning</author><pubDate>Thu, 18 Sep 2025 16:11:35 +0800</pubDate><description><![CDATA[在 ego-planner 中，在进行了之前的初始轨迹采样，Astar 绕障轨迹，障碍物边界的二次计算后，会有两组点，一组是二次计算后的障碍物边界轨迹点，一组是 Astar 绕障轨迹点，(可以查看之前的 ego 文章)。可以回顾一下点积的概念，结合一下 ego 的场景，两个向量点积就是一个向量在另一个向量的投影，当点积 > 0 时，说明两个向量同向，点积 < 0 时，说明两个向量反向。障碍物基准点：就是在控制点与交点连线上，离障碍物最近的点，在寻找时，使用障碍物网格地图的分辨率在连线上逐次寻找即可。]]></description><category></category></item><item><title><![CDATA[ego(6)---障碍物边界点的二次计算]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151800448</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151800448</guid><author>a_xiaoning</author><pubDate>Wed, 17 Sep 2025 18:33:45 +0800</pubDate><description><![CDATA[了确保障碍段对应的控制点调整区间有足够的控制点，为后续的 B 样条避障调整优化提供充足的调整空间，需要将原始的障碍物边界点来往外扩张。在边界计算的时候，会进行第一次外扩，]]></description><category></category></item><item><title><![CDATA[ego(5)---Astar绕障]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151722705</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151722705</guid><author>a_xiaoning</author><pubDate>Mon, 15 Sep 2025 17:43:46 +0800</pubDate><description><![CDATA[启发函数的作用是用来计算当前节点到终点的代价，在 ego 中，使用量节点的标号差，再结合三维，二维，平面距离来计算。因此，这里就简单回顾一下 Astar 的一些基础概念，然后再分析 ego 工程。在 ego 中使用开集与闭集的概念，区分节点的状态。，这样就可以大致以最优路径来快速收敛到终点。]]></description><category></category></item><item><title><![CDATA[ego(4)---检测B样条轨迹的障碍物进入点与退出点]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151656178</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151656178</guid><author>a_xiaoning</author><pubDate>Sat, 13 Sep 2025 18:46:07 +0800</pubDate><description><![CDATA[在经过 B 样条的控制点采样后，接下来是绕障的环节，绕障使用的是 Astar ，但在使用 Astar 之前，需要进行障碍物进出点的检测与标记。通俗点讲，这部分的作用就是为 Astar 绕障碍做前置准备。grid_map_->getResolution() 表示栅格地图的分辨率，step_size 用来确认采样步长，保证采样点的密度不低于栅格精度，就可以避免越过障碍物。在 ego 中采用了一个小状态机来标记是否发生碰撞，使用内外两层检测，外层只检测初始轨迹的关键区间(中间的 2/3 段，认为首尾段无障碍)。]]></description><category></category></item><item><title><![CDATA[ego(3)---根据关键点求解B样条控制点]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151287886</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151287886</guid><author>a_xiaoning</author><pubDate>Sun, 07 Sep 2025 14:51:17 +0800</pubDate><description><![CDATA[多项式在求解过程中，仅依赖起始点与中止点的位置，而在关键点采样后，再进行 B 样条控制点的计算，则 B 样条的曲线会考虑所有关键采样点的信息，会比较全面；在 B 样条的公式中，比较重要的就是控制点的确定了，因此在 ego 中，在进行初始轨迹生成，然后关键点采样后，会进行 B 样条控制点的计算。多项式生成轨迹时，未知变量的数量为 6 个，而B样条在关键点采样后再生成，未知变量就与采样点的数量有关，为 k + 2，自由度更高。ego 之后的求解 B 样条控制点的函数的作用就是求解上式中的 P。]]></description><category></category></item><item><title><![CDATA[ego(2)---初始轨迹生成后的关键点采样]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151158675</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151158675</guid><author>a_xiaoning</author><pubDate>Wed, 03 Sep 2025 22:49:45 +0800</pubDate><description><![CDATA[在初始的多项式轨迹生成后，是要经过一个关键点采样，使用关键点来进行后续的 B 样条曲线拟合的。根据最终的出循环条件，找到一个距离足够远，且数量大于等于 7 个的采样点的 ts。在上一步的初始轨迹生成后，轨迹方程保存在 gl_traj 中，，用于后续的 B 样条拟合。]]></description><category></category></item><item><title><![CDATA[ego(1)---ego-planner的初始轨迹生成]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/151047610</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/151047610</guid><author>a_xiaoning</author><pubDate>Sun, 31 Aug 2025 16:17:13 +0800</pubDate><description><![CDATA[以上的 c0 - c5 参数都是 coeff 矩阵的系数，那么之后的核心问题就转化为了以上的 coeff 矩阵各个系数的求解，通俗一点说，就是。，这里就写作 d_critical 吧，当然 ego 的代码里没有这样取名字，它直接用了问号表达式，文章只是解析原理，不用太深究完全对应代码。其中 B 矩阵就是约束向量，表示轨迹起点坐标，终点坐标，起点速度，终点速度，起点加速度，终点加速度。位置：x(t) = c₅t⁵ + c₄t⁴ + c₃t³ + c₂t² + c₁t + c₀。以上的公式也比较容易求解。]]></description><category></category></item><item><title><![CDATA[LIO-SAM的后端]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/150920141</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/150920141</guid><author>a_xiaoning</author><pubDate>Wed, 27 Aug 2025 11:12:49 +0800</pubDate><description><![CDATA[这部分是 mapOptmization 最主要的内容，订阅 cloud_info 这个自定义主题的消息(这个主题的消息包含后端优化所需要的所有信息，角点，平面点等，可以参考前端的内容)。如果检测到有回环的话，回环会保存在 loopIndexQueue 队列中，因此当队列不为空的时候，就会将所有的回环都取出来，提取出对应的因子图标号，添加因子约束(在第一帧的时候，会赋予较大的方差，因为此时并不信任这个位姿，需要注意此时由于只有一帧，因此只需要加入一个。w 如果是任意的其他的方向，求解出来的方差都会比较小。]]></description><category></category></item><item><title><![CDATA[B样条曲线]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/150531845</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/150531845</guid><author>a_xiaoning</author><pubDate>Tue, 19 Aug 2025 18:09:38 +0800</pubDate><description><![CDATA[以前在做规划仿真时，用的时贝塞尔曲线，但贝塞尔曲线有一个缺点，就是所有的点都参与计算，在规划中，大部分的情况，计算出来的路径点都是比较曲折的，用标准的贝塞尔就会与计算出来的路径点贴合度不高，这种情况下，当时是写了分段贝塞尔，每5个点为一组来分段计算贝塞尔。大体是按照上述的递推公式来编写递归函数，当然，这个递归函数有一些细节需要注意一下。由于 k = 1 时，就会退化为分段函数，因此 k 至少也要为 2。，因此许多的规划算法也都采用B样条的方式来平滑曲线。P 点就是控制点，也就是规划时的关键路径点。]]></description><category></category></item><item><title><![CDATA[kd树的原理]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/149942129</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/149942129</guid><author>a_xiaoning</author><pubDate>Tue, 05 Aug 2025 17:25:25 +0800</pubDate><description><![CDATA[在激光雷达建图的学习中，经过会遇到这个 kd 树的概念，来在全局地图中搜索当前特征点最近邻的几个点，那么其原理是怎么样的？三维的点不好画图示意，使用二维点来示意建树过程。的形式，从而达到加速查询的目的。kd 树的核心思想是通过。]]></description><category></category></item><item><title><![CDATA[rk3588跑通速腾雷达RS16的ros点云读取]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/149648648</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/149648648</guid><author>a_xiaoning</author><pubDate>Fri, 25 Jul 2025 20:40:23 +0800</pubDate><description><![CDATA[速腾的这个说明书写的还是很详细的。只是如果是跑在嵌入式端，例如我想使用 rk3588 来跑，就会遇到一些问题。会提示找不到包(已经换源)，这时候就需要使用源码安装的方式来安装，整个步骤就非常麻烦。，也是同样的使用 apt-get install 会报错，需要源码安装。能够 ping 通192.168.1.200 就表示能收到雷达数据了。$(nproc) 根据你自己的板子性能来，我的就 2 就行。按照上述说明书中的端口配置即可，libpcap 会依赖两个包。就把对应的路径添加到。]]></description><category></category></item><item><title><![CDATA[pyqt动态拖拽调整视窗比例]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/149561469</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/149561469</guid><author>a_xiaoning</author><pubDate>Wed, 23 Jul 2025 09:55:56 +0800</pubDate><description><![CDATA[我当时在使用 QSplitter 后，wighet 就无法填充整个窗口了，这个是由于当时是将 QSplitter 当成了一个控件放在了主界面的布局里，因此 QSplitter 会被挤压或者被留了边距，导致无法完全填充。一直想给我的日志工具实现自由调整视窗比例的功能，之前一直以为拖拽调整视窗比例是在分割线上做，后面才知道是使用 QSplitter ，关于 QSplitter 有一些需要注意的地方。打破布局后，才能添加 splitter。根据需要选择是垂直还是水平分割。]]></description><category></category></item><item><title><![CDATA[faster-lio与fast-lio中如何修改雷达的旋转角度]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/149486020</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/149486020</guid><author>a_xiaoning</author><pubDate>Sun, 20 Jul 2025 17:46:40 +0800</pubDate><description><![CDATA[修改对应的参数文件，因为我的仿真使用的 avia，因此就修改 avia.yaml 文件中的旋转矩阵。]]></description><category></category></item><item><title><![CDATA[faster-lio仿真环境问题及解决]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/149426084</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/149426084</guid><author>a_xiaoning</author><pubDate>Thu, 17 Jul 2025 17:12:48 +0800</pubDate><description><![CDATA[在按照 XTDrone 的文档步骤搭建 faster-lio 的仿真环境后，运行可能会出现各种报错问题，本篇仅就环境搭建的问题提供一些解决思路。]]></description><category></category></item><item><title><![CDATA[slam中的eskf观测矩阵推导]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/149352586</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/149352586</guid><author>a_xiaoning</author><pubDate>Tue, 15 Jul 2025 13:55:37 +0800</pubDate><description><![CDATA[例如在 fastlio 中，是利用平面特征点到拟合平面的距离来构造观测方程，利用平面特征点到拟合平面的距离应该趋向于0来列方程。假设拟合后的法向量为 u = [A, B, C]'，截距为 D，在之前的《slam中的eskf推导》一文中，没有写观测矩阵 H 矩阵的过程，现在补上这部分。]]></description><category></category></item><item><title><![CDATA[在FASTLIO工程中添加新的ros点云雷达类型]]></title><link>https://blog.youkuaiyun.com/a_xiaoning/article/details/149274408</link><guid>https://blog.youkuaiyun.com/a_xiaoning/article/details/149274408</guid><author>a_xiaoning</author><pubDate>Fri, 11 Jul 2025 14:46:49 +0800</pubDate><description><![CDATA[我因为方便调试，直接把其他的给屏蔽了，可以看到在 FASTLIO 中，只有 livox 的雷达会单独处理，其他的都会进入固态雷达回调，本来探维的雷达也是固态雷达，但固态雷达回调中我看没有时间同步的处理，我是外置的 imu ，需要进行时间同步，因此就单独写了一个回调，其实直接修改固态雷达的回调也可以。探维的 sdk 支持发布 ros 的点云主题数据，因此修改为接收 ros 的点云主题数据即可。因为我的是探维的雷达Scope256，就直接取这个名字。]]></description><category></category></item></channel></rss>