1.白话VINS-Mono之外参标定(二)
2.UE5-动态网格体-2
3.插件 | Jamparc for Rhino 6-Rhino 中的绕任绕任 SU
白话VINS-Mono之外参标定(二)
在深入探讨Vins-mono系统中的外参标定部分之前,我们先回顾一下上篇文章中预积分的意轴源码意轴基本概念。接下来,旋转旋转我们将从实际应用出发,公式深入解析Vins-mono系统中关于外参标定的绕任绕任原理与源码。
Vins-mono作为紧耦合视觉IMU系统,意轴源码意轴网站源码 简单在实现中通过在SLAM过程中进行相机与IMU的旋转旋转标定,以应对没有标定信息的公式情况。这种设计的绕任绕任一大优势在于系统能够动态计算相机与IMU之间的标定值。尽管标定过程并非绝对精确,意轴源码意轴但在后续的旋转旋转后端优化中会持续调整这些值。
配置文件中支持输入精确的公式外参标定值,通过设置config.yaml中的绕任绕任ESTIMATE_ESTRINSIC参数来决定。根据yaml设置,意轴源码意轴有三种情况可供选择:计算相机(Camera)坐标系到IMU坐标系的旋转旋转相对旋转矩阵。这一过程主要在CalibrationExRotation函数中实现。
在Vins-mono中,标定过程是独立于初始化的一部分,但它是系统启动前的关键步骤。在processimg函数中,初始化之前,仿淘宝 源码即真正的初始化前,需要执行CalibrationExRotation函数。
虽然Vins-mono文章中并未引入新的在线标定相机与IMU方法,而是基于文献([8])中提出的“monocular视觉惯性状态估计的在线初始化和相机IMU外参标定”。基于Vins-mono的代码实现,我们重新整理了文献中Fig. 3的图,并将其转化为图2,旨在从理论到代码详细解析标定过程。
结合图2,相邻相机关键帧对应的pose可以通过两种方式来构建方程:使用八点法(solveRelativeR)和结合已知的[公式]标定转换(solveRelativeRT)。理论上,通过假设相对旋转量为[公式],可以构建方程并求解。为了深入理解求解过程,我们将参考文献中的式子4~9。
在求解过程中,考虑到使用对极约束算法时不可避免的匹配错误(outlier),在A矩阵中加入权重计算,以提高在线标定结果的鲁棒性。加权计算方式近似于Huber norm计算(参考式8、php日记源码9)。
在CalibrationExRotation核心函数中,实现流程遵循上述式子4~9的步骤。solveRelativeR与solveRelativeRT函数之间的区别在于,后者在多个判断内点个数操作中有所不同。重要的是,ric.inverse()* delta_q_imu * ric这一表达式将式4转换为[公式],通过在循环中不断计算相邻帧特征点对应变换,逐渐构建Ax=0形式的方程。
对于求解Ax=0问题的SVD分解,它是在矩阵非方阵时的特征值分解拓展,可以提取矩阵的主要特征。通过SVD分解,我们可以将问题转化为求解特定的特征值和特征向量,进而求解方程。
在理解SVD分解为何可以求解Ax=0问题时,关键在于其几何意义。SVD分解将任意矩阵通过一系列旋转和平移转换为对角矩阵,其中的奇异值表示椭球体轴的长度。通过最小奇异值,acfun网站源码我们可以求解出最优解,即Ax=0的非零解。
综上所述,Vins-mono系统中的外参标定过程通过一系列理论解析和代码实现,确保了相机与IMU之间标定值的动态调整和优化。通过对关键步骤的深入理解,我们可以更好地掌握SLAM系统中这一重要模块的工作原理。
UE5-动态网格体-2
动态网格体(DynamicMesh)是UE5新出的一种Mesh类型,它在编辑器(Editor)或运行时(Runtime)时能够动态修改,无需在DCC建模后再导入。它适用于程序化生成和运行时建模等场景。 目前关于DynamicMesh的资料较少,官方文档暂无,可参考Lyra示例项目及源码进行学习。本文将探索DynamicMesh的详细使用方法。进阶
DynamicMesh的主要方法分为两类:Append和Apply。Append
Append用于创建网格体。DynamicMesh的基元(Primitives)可以直接创建,仅需提供基本参数。适合作为建模的php游戏 源码基础,进一步扩展为复杂模型。基元 Primitives
基元提供直接创建网格体的功能,通过提供基本参数即可。它们是构建复杂模型的基础。放样 Revolve
放样(Revolve)功能包括沿Path、Polygon、Spiral三种形式。Path是基于一系列点形成样条线,然后围绕Z轴旋转生成模型。Polygon和Spiral则分别使用一系列点构成截面,旋转生成模型,Polygon截面为平面,Spiral为螺旋形状。示例
以下蓝图使用AppendRevolvePath节点,根据SplineComponent上的点坐标,绕Z轴生成模型。首先获取Spline的点坐标,然后将坐标信息输入到AppendRevolvePath节点,完成模型构建。Polygon和Spiral放样同样遵循类似逻辑,使用一系列点形成截面,旋转生成模型。Apply
Apply用于修改网格体。包括挤出、倒角、噪点、布尔运算等。挤出
挤出功能可以对网格体进行深度、宽度、高度的调整,实现更复杂的建模。倒角、噪点
通过调整网格体的倒角参数和加入噪点,可以增强模型的细节和真实感。布尔
使用布尔运算可以实现模型的融合、切割等操作,创建更加复杂和精确的几何体。运行时动态建模
要进行更复杂的建模操作,可以参考GeneratedDynamicMeshActor类。这个类提供了在编辑器中使用的功能,实现事件回调来构建模型。但需注意,蓝图中大量逻辑编写会严重影响性能。 GeneratedDynamicMeshActor是DynamicMeshActor的子类,主要通过UDynamicMeshComponent组件实现建模。因此,使用父类是DynamicMeshActor的蓝图或C++类,在任意方法中操作动态网格体组件即可实现运行时动态建模。插件 | Jamparc for Rhino 6-Rhino 中的 SU
作者:@Ansen-A
想在Rhino 6中像SketchUp(SU)一样操作模型?这篇文章将解答你的疑问。
今年,收到在线课程学员关于Jamparc能否适用于Rhino 6的问题。Jamparc是一款小众的Rhino插件,功能丰富,主要为建筑专业人士设计,包括类似SketchUp的推拉体块功能、增强的图层管理工具和作者工作中常用的小工具。
然而,Jamparc插件并未针对Rhino 6进行更新,作者已分享源代码,供需要的用户自行整合至Rhino 6中使用。为了方便大家,我将各rvb脚本文件封装为Rhino的rhp插件。
Jamparc插件的使用体验:
插件中包含多个功能,主要将Rhino中的多个指令打包,简化操作步骤,提高效率。例如,偏移曲面的边框并推拉曲面、旋转至相机视角、切掉闭合平面曲线或曲面区域等。其中,偏移曲面和推拉曲面的功能比较方便,旋转至相机视角提供一定的便利性。使用时,只需分别运行rvb脚本,再自定义工具按钮以简化操作。
为了提升操作便捷性,我将这些功能封装成Rhino的rhp插件,方便用户使用。插件内的工具较为简单,但局限性较大,适用于特定场景。
我挑选了几个功能进行演示:
1.偏移曲面的边框+推拉曲面:这组工具名为“SU”,通过偏移曲面的边框后,将内圈的曲面往里挤出一段距离,方便地完成操作。
2.旋转至相机:类似SketchUp中的功能,Jamparc提供半自动旋转功能,辅助快速调整视角,方便平面素材树面向使用者。
3.切掉闭合平面曲线或曲面区域:通过矩形切掉闭合平面曲线或曲面的共享区域,快速完成操作。
4.基于一组单线快速生成墙体平面轮廓线并挤出墙体,提高推敲效率。
5.增强的图层管理功能:对Rhino图层功能的补充,方便用户管理项目。
尽管Jamparc中一些工具与SketchUp相似,但它仅是一款辅助工具,无法替代Rhino的全面功能。与Rhino自身的功能配合使用,才能提高效率,如操作轴、子物件编辑等。
插件下载与安装步骤:
下载Jamparc V6.zip,解压至任意目录。推荐放置在Rhino 6的插件目录中,便于管理。将两个文件拖拽至Rhino 6视窗中即可加载插件。JA开头的指令为Jamparc插件内的所有指令。
请注意,下载Jamparc for Rhino 5,请前往Food4Rhino插件页面下载。页面提供使用手册和作者联系信息。
本文结束。