1.笔记︱几款多模态向量检索引擎:Faiss 、计算计算件milvus、内积内积Proxima、源码源码vearch、计算计算件Jina等
2.Cartographer源码详解|(2)Cartographer_ros
3.Mahony姿态解算算法笔记(一)
笔记︱几款多模态向量检索引擎:Faiss 、milvus、源码源码2017换肤源码Proxima、计算计算件vearch、内积内积Jina等
向量化搜索,源码源码利用人工智能算法将物理世界中的计算计算件非结构化数据(如语音、、内积内积视频、源码源码文本等)抽象为多维向量,计算计算件以便进行高效检索。内积内积这些向量在数学空间中代表实体及其关系,源码源码通过将非结构化数据转换为向量(Embedding)并检索生成的向量,可以找到相应的实体,广泛应用于人脸识别、推荐系统、搜索、语音处理、自然语言处理和文件搜索等领域。随着AI技术的广泛应用和数据规模的增长,向量检索成为AI技术链路中不可或缺的部分,补充并强化了传统搜索技术,并具备多模态搜索能力。
向量检索技术在不同场景下发挥着关键作用,覆盖了包括人脸识别、基因比对、简易笔记源码智能客服等常见领域,以及图像视频检索、智能问答机器人、音频数据处理等新兴应用。以深度学习模型为基础,向量检索技术能够支持文本、图像、语音、视频、源代码等各类内容的高性能搜索与分析。
Milvus是一款高性能的开源特征向量相似度搜索引擎,提供方便、实用、扩展性好、稳定高效的向量数据处理能力,支持GPU加速,实现对海量数据的近实时搜索,同时也支持标量数据的过滤功能。支持集群分片,适用于大规模数据存储和搜索服务。
Faiss库由Facebook开发,专为稠密向量匹配设计,支持C++和Python调用,具备多种向量检索方式,包括内积和欧氏距离等。它支持精确检索和模糊搜索,广泛应用于人脸比对、指纹比对、arduino 提取源码基因比对等场景。
京东开源的vearch是一个分布式向量搜索系统,能够存储和计算海量特征向量,用于图像、语音、文本等机器学习领域。vearch基于Facebook AI研究机构的Faiss实现,提供了灵活易用的RESTful API,支持管理和查询表结构及数据。
阿里达摩院的Proxima和蚂蚁金服的ZSearch也提供了高性能向量检索能力,Proxima集成在阿里巴巴和蚂蚁集团的多个业务中,如淘宝搜索、推荐、人脸支付、视频搜索等。ZSearch则在ElasticSearch基础上构建,为用户提供了通用搜索平台。
这些向量检索引擎通过不同算法和技术优化,满足了不同场景下的需求,如标签+向量的联合检索、语音/图像/视频检索、文本检索等,为AI领域提供高效、准确的搜索能力。通过深度学习和向量计算,它们能够实现全内容搜索,包括文本、、spring 源码 github语音、视频等多模态数据,显著提升了信息检索的效率和准确性。
Cartographer源码详解|(2)Cartographer_ros
上一篇文章深入分析了传感器数据的流向,接下来让我们继续探讨传感器格式的转换与类型变换。这部分内容在sensor_bridge.cc文件中。在处理传感器的坐标变换时,我们需要运用三维空间刚体运动的知识,先进行简要回顾,以助于理解代码。
三维空间刚体运动涉及向量内积与外积。向量内积的计算公式如下,表示两个向量的点乘。向量外积则是一个向量,其方向垂直于两个向量,大小为两向量张成四边形的有向面积,计算公式如下。
旋转和平移是欧氏变换的两个关键部分。旋转涉及单位正交基的变换,形成旋转矩阵(Rotation matrix),该矩阵的各分量由两组基之间的内积组成,反映了旋转前后同一向量坐标的变化关系。平移则通过向旋转后的坐标中加入平移向量t实现。通过旋转矩阵R和平移向量t,我们可以完整描述欧氏空间中的坐标变换关系。
为了简化变换过程,引入齐次坐标和变换矩阵。在三维向量末尾添加1形成四维向量,u boot 源码进行线性变换。变换矩阵T能够将两次变换叠加简化为一个操作,便于后续计算。
Cartographer的坐标转换程序位于transform文件夹下的rigid_transform中,用于求解变换矩阵的逆。
在sensor_bridge类中,构造函数将传入配置参数,对里程计数据进行处理。首先将ros时间转换为ICU时间,然后利用tf_bridge_.LookupToTracking函数找到tracking坐标系与里程计child_frame_id之间的坐标变换。在ToOdometryData函数中,将里程计的footprint的pose转换为tracking_frame的pose,并最终将结果转换为carto::sensor::OdometryData的数据类型。
HandleOdometryMessage函数将传感器数据类型与坐标系转换完成后,调用trajectory_builder_->AddSensorData进行数据处理。对于雷达数据,首先转换为点云格式,然后对点云进行坐标变换,并调用trajectory_builder_->AddSensorData进行数据处理。
IMU数据处理中,要求平移分量小于1e-5,然后调用trajectory_builder_->AddSensorData对数据进行处理。
在雷达数据处理部分,首先将点云数据分段,然后传给HandleRangefinder处理,将点云坐标变换到tracking_frame坐标系下,调用trajectory_builder_->AddSensorData函数进行数据处理。
总结本章内容,我们详细解析了SensorBridge类,对传感器数据进行了转换和传输。通过Node类、MapBuilderBridge类和SensorBridge类,我们对Cartographer_ros部分的代码有了基本了解。接下来,我们将深入学习cartographer。
Mahony姿态解算算法笔记(一)
本文使用 Zhihu On VSCode 创作并发布
mahony 算法是常见的姿态融合算法,将加速度计,磁力计,陀螺仪共九轴数据,融合解算出机体四元数,该算法可到其网站下载源码 x-io.co.uk/open-source-...
该篇仅介绍融合加速度计和陀螺仪的六轴数据算法,由于笔者水平有限,文中难免存在一些不足和错误之处,诚请各位批评指正。
首先,姿态解算中的姿态实际上值得是机体坐标系与地理坐标系的旋转关系。其常用描述形式有三种:欧拉角,方向余弦矩阵,四元数。
四元数的定义与复数非常类似,唯一的区别是复数只有一个虚部,而四元数一共有三个。所有的四元数 q ∈ H (H代表四元数的发现者William Rowan Hamilton)都可以写成下面这种形式:
其中:
与复数类似,四元数就是基{ 1,i,j,k}的线性组合,同样的,四元数也可以写成向量形式:
另外的,我们也可以将实部与虚部分开,即通过一个三维向量表示虚部,从而将四元数表示为标量与向量的有序对形式:
四元数的加减运算与标量乘法同复数类似,只需将分量各自运算即可。与复数相同,四元数的标量乘法同样遵循交换律,即[公式],其中s为标量。
四元数乘法较为特殊,并不遵循交换律,也就是说在一般情况下[公式]。如果有两个四元数[公式] 和 [公式] ,由 [公式] 可得其乘积为:
写成矩阵形式则有:
这个矩阵变换相当于左乘[公式],由于四元数不符合交换律,所以右乘[公式]的变换是一个不同的矩阵:
与复数相似,实部为0的四元数被称之为纯四元数,空间中的三维向量可以用纯四元数的形式表示,这种表示方法在四元数表示旋转的推导过程中有重要应用。
定义模长为1的四元数为单位四元数,用于表示旋转的四元数一定为单位四元数。
该部分省略推导过程,具体可以参考 krasjet.github.io/quate...
利用四元数表示旋转的定理,任意向量v 绕着以单位向量定义的旋转轴 u 旋转 θ 度后的 v' 可以使用四元数乘法来获得四元数旋转公式:
其中:
通过罗德里格旋转,我们可以推导出四元数表示旋转的一般形式,即三个四元数相乘,通过四元数乘法的矩阵表示形式,我们可以将四元数旋转公式表示为矩阵形式:
任意向量v 沿着以单位向量定义的旋转轴 u 旋转 θ 角度后的 v' 可以使用矩阵乘法来获得:
同样也是将向量从机体坐标系b 到大地坐标系 R 的姿态矩阵 [公式](也称为坐标转换矩阵)即为:
这里再给出从大地坐标系R 转换到机体坐标系 b 的坐标转换矩阵 [公式]
其中:
对应四元数为:
也可写成有序数对形式,即2.1旋转公式中的:
得到四元数后,可以通过四元数的值反解出机体坐标系的欧拉角,同样的这里省略推导过程直接给出公式:
求解该微分方程即可得到当前四元数的值。但计算机中的计算是离散的,所以我们需要对该微分方程进行离散化处理,这样才可以有效的通过单片机或其他数字控制器进行求解:
首先,对于六轴数据,计算角度有两种方法,一种是通过对角速度积分得到角度,另一种则是通过对加速度进行正交分解得到角度。但这两种方式均存在不足,通过角速度积分得到角度时,角速度的误差会在积分过程中被不断放大从而影响数据准确性。而加速度计是一种特别敏感的传感器,电机旋转产生的震动会给加速度计的数据中带来高频噪声。
通过融合两种数据以获得准确姿态,这里通过加速度计补偿角速度。设有大地坐标下的重力加速度g,把 g 通过姿态矩阵(坐标转换矩阵)的逆(意味着从地理坐标系 R 到机体坐标 b 系)变换到机体坐标系,得到其在机体坐标系下的**理论重力加速度向量 [公式] **,则两者的变换关系可通过前文给出的姿态矩阵得出:
不难看出,将重力加速度向量变换至机体坐标系后,恰好是矩阵的最后一列。这样一来,我们就得到了由描述刚体姿态的四元数推导出的理论重力加速度向量 [公式] 。另外,我们还可以通过加速度计测量出实际重力加速度向量 [公式] 。
这里的理论重力加速度向量[公式] 和实际重力加速度向量 [公式] 之间必然存在偏差,而这个偏差很大程度上是由陀螺仪数据产生的角速度误差引起的,所以根据理论向量和实际向量间的偏差,就可以补偿陀螺仪数据的误差,进而解算出较为准确的姿态,即将隐含在四元数中的角速度误差显化。
理论重力加速度向量和实际重力加速度向量均是向量,反应向量间夹角关系的运算有两种:内积(点乘)和外积(叉乘),考虑到向量外积模的大小与向量夹角呈正相关,故通过计算外积来得到向量偏差[公式]:
在进行叉乘运算前,应先将理论向量[公式] 和实际向量 [公式] 做单位化处理,有:
考虑到实际情况中理论向量[公式] 和实际向量 [公式] 偏差角不会超过°,而当[公式]在±°内时,[公式] 与[公式]的值非常接近,因此上式可进一步简化为:
得到向量偏差后,即可通过构建PI补偿器来计算角速度补偿值:
其中,比例项用于控制传感器的“可信度”,积分项用于消除静态误差。[公式]越大,意味着通过加速度计得到误差后补偿越显著,即是越信任加速度计。反之[公式]越小时,加速度计对陀螺仪的补偿作用越弱,也就越信任陀螺仪。而积分项则用于消除角速度测量值中的有偏噪声,故对于经过零篇矫正的角速度测量值,一般选取很小的[公式]。最后将补偿值补偿给角速度测量值,带入四元数差分方程中即可更新当前四元数。
考虑到四元数不具备直观几何意义,故最后还需通过四元数反解出欧拉角。这里直接套用上文给出的公式即可:
回到欧拉角的计算,最终通过四元数反解出欧拉角,完成姿态解算过程。
本文仅介绍了基于四元数的mahony姿态解算算法的主要原理与步骤,包括四元数的定义与性质、四元数表示姿态与旋转、传感器数据融合以及姿态解算的具体方法。通过融合加速度计和陀螺仪的数据,利用四元数表示机体坐标系与大地坐标系之间的旋转关系,实现姿态的准确估计。在传感器数据融合部分,通过理论重力加速度向量与实际重力加速度向量的偏差来补偿陀螺仪的角速度误差,提高姿态估计的准确性。最后,通过四元数反解欧拉角,完成姿态解算的全过程。在实际应用中,还需要根据具体情况进行算法的优化与调整,以满足不同场景的需求。