- 博客(181)
- 收藏
- 关注
原创 矩阵的秩(Rank)
矩阵的秩是线性代数中的核心概念,表示矩阵中线性无关的行或列的最大数量,反映了矩阵所包含的“独立信息”的多少。秩的定义包括行秩和列秩,且两者始终相等。几何上,秩表示矩阵对应的线性变换后空间的维度。计算秩的方法有高斯消元法、行列式法和奇异值分解。秩的性质包括其范围、满秩矩阵的定义以及与方程组解的关系。秩在数据降维、机器学习、图像压缩和系统可控性等领域有广泛应用。理解秩的概念对于分析线性方程组、数据降维和算法设计至关重要。
2025-05-20 22:11:24
831
原创 四元数中 w xyz 的含义及应用
四元数是一种用于表示三维空间旋转的数学工具,形式为 q=w+xi+yj+zk,其中 w 是实部,x、y、z 是虚部。实部 w 编码旋转角度的一半余弦值,虚部 x、y、z 编码旋转轴方向和角度的一半正弦值。四元数表示旋转时需满足单位四元数条件,以确保旋转的合法性和稳定性。与欧拉角和旋转矩阵相比,四元数具有高效、无奇异性的优势,适合插值和组合旋转,因此在计算机图形学、机器人学和游戏开发中广泛应用。
2025-05-20 21:01:06
283
原创 join() 和 detach()的使用区别
在 C++ 多线程编程中,join() 和 detach() 是管理线程生命周期的核心方法。join() 用于阻塞当前线程,确保主线程等待子线程完成后再继续执行,适用于需要同步结果或控制执行顺序的场景。detach() 则使子线程独立于主线程运行,适用于后台任务或无需返回结果的独立任务,但需谨慎处理资源生命周期以避免悬垂引用。使用这两个方法时,必须在线程对象销毁前调用其中之一,否则会导致程序终止。最佳实践包括使用 RAII 包装类确保异常安全,以及避免在分离线程中访问局部变量。正确选择和使用 join()
2025-05-13 11:48:45
333
原创 Transformer中Query-Key-Value(QKV)机制的详细解析
Transformer模型中的Query-Key-Value(QKV)机制是其自注意力模块的核心,用于动态捕捉序列中的上下文关系。Q(Query)代表当前词需要查询的信息,K(Key)表示每个词能提供的信息,V(Value)则是实际传递的信息。通过Q与K的匹配,模型能够确定哪些词与当前词相关,并聚合它们的V。这种机制取代了传统RNN/CNN的固定模式交互,实现了长距离依赖的直接建模和并行计算。此外,QKV机制还支持多头注意力、交叉注意力和掩码注意力等变体,增强了模型的灵活性和表达能力。通过角色分离,Q、K、
2025-05-13 11:47:55
480
原创 QGraphicsView QGraphicsScene QGraphicsItem 的关系
在Qt的图形视图框架中,QGraphicsView、QGraphicsScene和QGraphicsItem 三者协同工作,构成一个分层的结构,用于高效管理和显示复杂的图形界面。
2025-05-02 21:22:11
515
原创 我的创作纪念日
提示:你过去写得最好的一段代码是什么?提示:当前创作和你的工作、学习是什么样的关系。提示:可以和大家分享最初成为创作者的初心。提示:在创作的过程中都有哪些收获。提示:职业规划、创作规划等。
2025-05-02 21:21:50
182
原创 cv::remap() 和 cv::undistortion() 的区别
特性cv::remap输入参数相机内参 + 畸变系数预计算的映射表 (map1, map2)计算开销每次调用都重新计算映射表,效率较低映射表预先计算,适合多帧复用,效率高灵活性仅支持标定参数定义的畸变校正支持任意几何变换(如畸变、旋转、缩放等)适用场景单次图像处理或简单应用实时视频处理、需自定义映射的复杂场景。
2025-05-01 18:03:24
421
原创 Qt线程与定时器
线程:使用 QThread 或 QThreadPool 管理耗时任务。定时器:结合事件循环实现周期性任务。通信:通过信号槽和线程安全机制同步数据。通过合理设计线程和定时器,可以构建高效且响应灵敏的Qt应用程序。
2025-04-24 13:20:43
400
原创 RAG 和 微调 的区别
RAG是“外挂知识库”,灵活但依赖检索质量。微调是“内化知识”,专业但成本高。根据任务需求、数据动态性和资源条件,选择合适方案或组合策略,才能最大化模型效果。
2025-04-22 09:01:53
1070
原创 旋转矩阵 欧拉角 四元数
直观性:欧拉角 > 旋转矩阵 > 四元数。计算效率:四元数 > 旋转矩阵 > 欧拉角。稳定性:四元数 ≈ 旋转矩阵 > 欧拉角(万向节锁)。根据需求选择:交互设计用欧拉角,引擎底层用四元数,图形管线用矩阵。
2025-04-20 04:28:08
400
原创 正态分布的理解
正态分布(Normal Distribution),又称高斯分布(Gaussian Distribution),是统计学和概率论中最重要的连续概率分布之一。
2025-04-20 04:16:21
905
原创 C++ 多线程的使用要注意的问题
C++ 多线程编程需要重点关注线程安全、同步机制、异常处理以及性能优化。通过合理使用标准库提供的工具(如 std::mutex、std::condition_variable、std::atomic 等),可以有效避免常见的多线程问题。
2025-04-17 09:38:20
414
原创 PCL中的样本一致性(Sample Consensus, SAC)方法
模型维度依赖信息典型应用场景PLANE3D无/法线(可选)墙面、地面检测LINE3D无管道、边缘提取2D/3D投影平面/三维空间地面标记 vs 三维孔洞3D法线管道 vs 锥形物体NORMAL_*3D法线高精度形状检测(需法线信息)PARALLEL_*3D参考方向/平面结构化环境中的平行结构。
2025-04-14 14:07:29
734
原创 Git 中的 合并(merge) 和 变基(rebase)的区别
场景 合并(Merge) 变基(Rebase)历史记录 保留分支分叉,生成合并提交 线性历史,隐藏分支痕迹适用分支 公共分支(如 main) 本地分支或未推送分支冲突处理 一次性解决 逐个提交解决提交哈希值 原提交不变 生成新的哈希值风险 历史可能冗长 禁止对已推送提交使用。
2025-04-05 11:01:14
939
原创 ROS2 部署大语言模型节点
编写ROS 2节点代码:在这个节点中,我们将订阅一个话题并发送消息到本地的大语言模型,然后将结果发布到另一个话题。4GB GPU的DeepSeek-Coder 1.3B模型,并且它已经被量化或优化过。
2025-03-25 21:58:29
470
原创 ROS 设置gazebo使用GPU
在使用 ROS 2 启动 Gazebo 并配置 GPU 支持时,通常需要设置一些环境变量和参数,以便 Gazebo 能够正确地使用 GPU 来加速模拟。
2025-01-23 10:14:11
961
原创 激光线扫相机无2D图像的标定方案
通过最小二乘法或非线性优化(如Levenberg-Marquardt算法)求解相机的内外参数(如激光平面方程、相机坐标系到平台坐标系的变换矩阵)。适用场景:若激光线扫相机安装在可控运动平台(如机械臂、平移台、旋转台)上,且平台的运动精度已知(例如通过编码器或高精度步进电机控制)。适用场景:使用已知尺寸和形状的三维标定物(如立方体、多平面结构),通过激光线在标定物上的投影几何关系进行标定。将标定物固定在相机视野内,移动激光线扫相机或标定物,使激光线扫过标定物的不同平面。
2025-01-23 10:13:33
1006
原创 均方差的理解
均方差(Mean Squared Error,MSE)是一种衡量数据或预测值与实际值之间差异的常用统计量。在机器学习和统计学中,它通常用于评估模型的预测效果。
2024-12-05 09:40:19
688
原创 C++ 在函数内部定义函数
在标准 C++ 中,不能在函数内部直接定义另一个函数。Lambda 表达式:在函数内定义一个匿名函数(推荐使用)。函数指针:通过指针引用其他函数。std::function:使用C++11 提供的 std::function 存储可调用对象。GCC 扩展:如果你使用的是 GCC编译器,可以使用其支持的嵌套函数功能,但不建议在跨平台应用中使用。在大多数情况下,推荐使用 lambda 表达式,因为它是标准 C++ 的一部分,且非常灵活,能够方便地捕获外部变量。
2024-12-03 11:12:18
1776
原创 C++ lambda 捕获列表
lambda 表达式 不允许直接使用外部作用域中的变量,除非它们被显式地捕获。捕获列表 [x] 可以捕获一个或多个外部变量,[=] 可以捕获所有外部变量(按值),而 [&] 捕获所有外部变量(按引用)。如果没有捕获列表,lambda 内部不能直接访问外部变量,这也是 C++ 对作用域和变量生命周期的保证。通过捕获列表,C++ 保证了 lambda 的作用域不会无意中影响外部变量的生命周期,从而避免了潜在的错误和副作用。
2024-12-03 11:11:29
1158
原创 CMake Warning (dev) at CMakeLists.txt:22 (find_package): Policy CMP0146 is not set: The FindCUDA m
看到的警告是因为 FindCUDA 模块在新版本的 CMake 中已经被移除。为了抑制这个警告,可以在 CMakeLists.txt 文件中设置 CMP0146。如果仍然需要查找 CUDA 并进行链接,可以用 CMake 提供的官方 CUDA 包替代。确保相应地更新你的代码,以适应新的 CMake 结构。完成这些修改后,重新运行 CMake,警告就会消失了。这条指令告诉 CMake 使用新的行为,即 FindCUDA 模块不再可用。1.打开 CMakeLists.txt 文件。
2024-11-02 00:09:42
704
原创 已知一个法向量和一个点,求该平面的ModelCoefficients,并使用ProjectInliers将点云投影到该平面
【代码】已知一个法向量和一个点,求该平面的ModelCoefficients,并使用ProjectInliers将点云投影到该平面。
2024-10-31 10:57:58
138
原创 terminate called after throwing an instance of ‘Ogre::UnimplementedException‘ what(): OGRE EXCEPT
【代码】terminate called after throwing an instance of ‘Ogre::UnimplementedException‘ what(): OGRE EXCEPT。
2024-10-31 10:56:38
220
原创 Windows.h 和pcl有冲突
如果只出现特定函数或类型的冲突,可以考虑在包含 Windows.h 之前或之后定义特定的宏来屏蔽那些冲突。例如,有时可能需要避免使用 #define 的定义。在同时使用 Windows.h 和 PCL 时,调整包含顺序和使用 NOMINMAX 通常可以解决大部分冲突问题。如果问题仍然存在,逐步调试和分析具体的错误信息会有助于找到更好的解决方案。
2024-10-24 16:13:46
374
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人