- 博客(180)
- 收藏
- 关注
原创 自动驾驶中使用 ROS 与 Python 对点云数据进行处理
在自动驾驶场景中,点云处理是关键技术之一,主要流程包括去噪、下采样、地面去除和点云配准。去噪通过统计滤波去除离群点;下采样利用体素栅格减少点云密度,提高计算效率;地面去除通过RANSAC算法分离地面与障碍物;点云配准则使用ICP算法进行多帧点云的对齐,用于建图和定位。常用工具包括ROS、Python、Open3D/PCL和RViz。这些步骤不仅优化了点云数据,还为自动驾驶系统的感知和决策提供了可靠的数据支持。
2025-05-14 13:27:36
713
原创 点云相关操作
特征提取的目标是提取能够描述点云局部或整体几何形状的特征信息,便于配准、分类、识别等后续任务。点云重建旨在从离散的点云数据中重建连续的表面模型,常用于三维建模和可视化。点云抽稀旨在减少点的数量,以降低计算复杂度,同时尽可能保留原始结构信息。点云去噪旨在移除由于传感器误差或环境因素引入的噪声点,以提高数据质量。点云分割旨在将点云划分为具有相似属性的区域,以实现物体识别或场景理解。在ROS中,PCL提供了相关滤波器。点云配准旨在将多个点云数据对齐到同一坐标系,以实现数据融合或建图。在ROS中,可使用PCL的。
2025-04-16 11:36:04
929
原创 复数与向量
复数在数学、工程、物理等多个领域都有非常重要的作用。下面我们来简单介绍一下复数的定义和作用。复数是形如 a + bi 的数,其中:复数最初是为了解决形如 x2+1=0x^2 + 1 = 0x2+1=0 这样的方程而提出的,因为在实数范围内没有解,而复数中有 x=±ix = \pm ix=±i。在交流电分析中,电压和电流通常用复数(或称“相量”)表示。比如阻抗、电抗等都可以通过复数来简化计算。复数可用于表示二维平面中的旋转,例如用欧拉公式:eiθ=cosθ+isinθe^{i\theta} = \co
2025-04-16 11:09:23
728
原创 矿区自动驾驶
矿区自动驾驶是一类,具备较高的商业落地可行性。其设计目标是在矿山运输作业中,实现无人化作业,降低安全风险、提高作业效率、节省人力成本。
2025-04-10 15:14:36
584
原创 高精度定位技术
高精度定位技术在很多领域都具有广泛的应用,包括无人驾驶、智能交通、农业自动化、无人机等。随着技术的不断发展,精度和稳定性有望得到进一步提升,能够支持更多高精度、高实时性的场景。
2025-04-10 15:13:14
662
原创 SynchronousQueue用法
无容量的容量为 0,表示它不缓存任何元素。当一个线程将元素放入队列时,它必须等待另一个线程取出该元素,反之亦然。阻塞性put操作会阻塞,直到有线程调用take操作;take操作会阻塞,直到有线程调用put操作。即时交换:线程调用put和take时,数据被直接交换,而不存储在队列中。是一种非常特殊的队列,适用于需要精确控制线程间任务交换的场景。它广泛应用于线程池、异步任务交换、限时任务等场景,在多个线程直接交换数据时能够提供高效的机制。但是,由于它没有缓存能力,过度依赖。
2025-01-23 16:33:23
818
原创 OLTP,OLAP区别
OLTP(在线事务处理,Online Transaction Processing)和 OLAP(在线分析处理,Online Analytical Processing)是两种不同类型的数据处理系统,它们各自针对不同的应用场景和需求。
2024-12-30 13:48:19
1285
原创 网络代理详解
代理是一种通过中间服务器来帮助客户端访问目标服务器的技术。代理服务器位于客户端与服务器之间,充当两者的中介,从而实现客户端和服务器之间的隔离。用户的所有请求经过代理后,再发往目标服务器,而目标服务器的响应则返回代理,再由代理传递给用户。
2024-11-05 15:23:28
6843
原创 常用的限流算法
如果需要简单的实现,且对突发流量不敏感,可以选择计数器法。如果希望平滑流量、避免突发效应,可以选择滑动窗口法。如果需要限制流量处理速率并允许少量突发流量,可以选择令牌桶算法。如果系统压力较大,且需要稳定处理流量,可以使用漏桶算法。如果系统错误率较高,可能需要通过熔断器保护系统。
2024-10-30 14:36:03
1359
原创 分布式锁实现方式
实现方式优点缺点适用场景数据库简单实现,适用小规模系统性能较低,易造成死锁低频、小规模分布式锁需求Redis高性能、自动过期、支持 Redlock 算法锁误释放风险,数据一致性受主从架构影响高并发、高性能场景ZooKeeper高可靠性、自动释放,支持选主和分布式队列性能略低,复杂性高长时间锁和一致性要求高场景。
2024-10-30 14:01:17
1827
原创 Java中常用的监控命令
Java 提供了多种监控工具,这些工具包含了许多命令行工具,用于监控、诊断和管理 Java 应用程序的性能。这些工具主要位于 Java 安装目录下的bin。
2024-10-30 13:49:13
1230
原创 矩阵基本的计算规则
矩阵的加法和减法可以看作向量的分量逐个相加或相减的推广。矩阵中的元素本质上可以看作是数据或者空间中的某些点的坐标,因此加减矩阵就是在对应的点上叠加或抵消这些坐标。例如在空间中的二维向量,每个分量按相同的比例缩放,结果是一个按比例放大或缩小的新矩阵。:对于表示向量集合的矩阵,转置操作会把数据的横向和纵向结构进行对调。:转置操作把矩阵的行变成列,列变成行。:在几何上,可以理解为对每个数据点或坐标点的“拉伸”或“压缩”操作。:矩阵的每个元素都乘以该数,得到一个新的矩阵。:将矩阵的行和列对换,得到转置矩阵。
2024-10-29 15:42:24
3522
原创 矩阵和向量关系
假设我们在分析一个用户购买行为的数据集,每个用户的特征包括年龄、收入、购买频率等,可以用一个向量表示每个用户的数据,例如。通过选择合适的线性组合系数,这两个基向量可以生成该平面上的任意点,因此矩阵的列空间实际上就是由所有列向量的线性组合所构成的向量空间。总体而言,矩阵和向量关系紧密:向量可以看作是矩阵的基本单位,矩阵操作可以实现对向量的线性变换,而矩阵的列空间和行空间又可以定义向量空间。矩阵的列向量或行向量可以被视为一个向量空间的“基向量”,它们的线性组合构成了该空间的列空间或行空间。
2024-10-29 15:07:27
3033
原创 矩阵现实中使用的场景
矩阵在现实中的应用广泛,涉及图像处理、计算机科学、物理、工程、经济等多个领域。矩阵主要用于表示数据、描述变换和计算复杂关系,以下是矩阵在各个领域的具体应用场景和例子。
2024-10-28 16:02:58
2615
原创 树型数据结构
节点是树中的基本组成单位。节点的定义是树结构的核心。通过节点之间的引用关系,可以构造出复杂的层次结构。根节点是树结构的入口,位于树的最顶层。树中只有一个根节点,它没有父节点,所有其他节点可以通过根节点直接或间接访问。例如,在文件系统中,根节点通常代表文件系统的根目录,所有文件和文件夹都是从根目录派生出来的。父节点是直接连接到一个或多个子节点的节点。它是子节点的上一级节点。在文件系统中,父节点可以是文件夹,而文件夹中的文件和子文件夹就是它的子节点。子节点是父节点下的直接后代。
2024-10-25 10:38:15
1097
原创 常用的数据结构
数组是最基本的数据结构之一,它是具有固定大小、同类型数据的集合,所有元素的地址在内存中是连续的,可以通过索引(下标)直接访问每个元素。: 链表是由一系列节点组成的,每个节点包含数据域和指针域,指针域指向下一个节点。: 哈希表是一种通过哈希函数将键映射到数组中的一个位置的结构,可以实现快速的查找、插入和删除操作。: 栈是一种线性数据结构,遵循“先进后出”(LIFO)的规则,即最后一个被插入的元素最先被取出。: 树是一种分层的、非线性的数据结构,由节点和边组成,每个节点可以有多个子节点。
2024-10-25 10:27:52
902
原创 Go 语言的 GMP 模型
Go 语言的 GMP 模型是 Go 语言实现高并发的基础,它包含了 Goroutine(G)、操作系统线程(M)、调度器上下文(P)三个关键部分。每个组件各司其职,共同协作完成 Goroutine 的高效调度。我们来详细剖析每个组件及其工作原理。
2024-10-24 17:28:23
398
原创 如何设计一个消息队列
设计一个消息队列系统需要从多个维度进行考虑,包括性能、可扩展性、可靠性、一致性等。以下是一些关键点和设计思路:消息队列的核心功能是支持生产者发送消息,消费者接收消息,并确保消息的可靠传递。通常的架构如下:假设需要设计一个类似于RabbitMQ的系统,可以采用以下模块:
2024-10-24 15:49:25
671
原创 Websocket协议
WebSocket 连接后,数据传输无需请求:一旦 WebSocket 握手完成,连接建立,客户端和服务器都可以主动向对方发送数据,不需要发起新的请求。与 HTTP 的区别:在传统的 HTTP 中,客户端只能向服务器发送请求,服务器只能在收到请求后发送响应,通信是半双工的,每次通信都是短暂的。WebSocket 则只需一次握手,之后的通信开销很小,特别适合高频低延迟的应用。HTTP 是半双工:在 HTTP 中,客户端只能发送请求,服务器只能被动响应,请求响应之后连接就会关闭,每次请求都是一个独立的事务。
2024-10-24 14:03:01
976
原创 长轮询机制
这个请求与普通的HTTP GET或POST请求没有本质区别,通常会携带某些参数以告知服务器当前客户端的状态或希望接收的消息类型。相反,服务器会在有数据产生之前,保持这个请求的连接,使得客户端“等待”新的数据。总结来说,长轮询是一种通过保持HTTP连接来实现近实时数据推送的技术,具有兼容性好、易于实现的特点,但在高并发和资源开销方面存在一定的局限。当服务器有了新数据或事件(例如一条新消息,或者数据库中的数据有更新),它会立即生成响应并将其返回给客户端。客户端在收到响应后,立即发出新请求,更新。
2024-10-24 11:19:26
591
原创 布隆过滤器
布隆过滤器是一种高效、低存储的概率性数据结构,特别适用于需要快速判断元素是否存在的大规模数据场景。它通过多个哈希函数和位数组实现高效查询,但也存在误判和无法删除元素的缺点。在缓存系统、去重操作、数据库索引加速等场景中,布隆过滤器得到了广泛应用,同时可计数布隆过滤器和可伸缩布隆过滤器等扩展版本也进一步增强了它的功能和适用性。
2024-10-24 09:40:52
885
原创 数据结构之BKD树
BKD 树是一种专为处理大规模、多维数据设计的高效索引结构,通过分块存储和空间分割的方式,极大提高了范围查询和空间查询的性能。BKD 树 vs. K-D 树:K-D 树是 BKD 树的基础思想,但传统的 K-D 树在面对大规模数据和磁盘访问时效率不佳,而 BKD 树通过优化磁盘访问和块的存储方式,解决了这些问题。分割数据块:在选定的维度上,选择中值作为分割点,将数据块分成两部分。支持大规模数据:BKD 树通过块的分区存储方式,能够支持海量的多维数据索引和查询,适合大规模的数值型、空间型数据的处理。
2024-10-24 01:30:00
788
原创 跳跃表数据结构
跳跃表是一种高效的、基于链表的数据结构,通过多级索引层实现了快速查找操作。它以简单的随机算法代替了复杂的平衡树结构,提供了接近 O(logn)的查找性能,并且在数据库、全文搜索等场景中有广泛应用。特别是在倒排索引中,跳跃表的跳跃查找机制可以加速大规模数据的查询操作。
2024-10-23 20:37:57
1104
原创 倒排索引详解
倒排索引是一种专为快速全文检索设计的数据结构,它通过将词语映射到包含该词的文档集合来加速查询。它的高效性来源于避免了逐个扫描文档内容,而是通过预先构建好的词汇表和倒排列表来直接定位相关文档。在Elasticsearch等搜索引擎中,倒排索引与其他优化技术(如跳跃表、缓存等)结合使用,大大提高了文本检索的速度和效率。
2024-10-23 20:36:12
865
原创 Elasticsearch查询速度快的原因
Elasticsearch 的快速搜索性能得益于其精心设计的倒排索引、分布式架构、缓存机制、Lucene 优化、多级数据结构、并行处理、近实时搜索以及压缩和优化等多个技术的综合作用。这些技术和机制相辅相成,使得 Elasticsearch 能够在大规模数据集上提供极快的搜索响应时间。
2024-10-23 20:34:47
1448
原创 kafka
Kafka 提供副本机制,每个分区可以有多个副本。Topic 的分区设计使得 Kafka 天然支持水平扩展,不同的分区可以分布在不同的 broker 上,多个生产者和消费者可以并行处理同一个 topic 的消息。当某个 broker 故障时,Kafka 集群会重新分配分区的 leader,通过 Zookeeper 选举新的 leader,确保系统的高可用性。Zookeeper 保存了 Kafka 集群的所有元数据信息,比如哪些 broker 在线,topic 的分区和副本分布情况,消费者的消费偏移量等。
2024-10-23 16:51:45
905
原创 Rocketmq
RocketMQ 的消息模型基于发布-订阅模式,主要角色包括(生产者)、(消费者) 和(消息中间件),其中消息通过 Topic 进行分类,Queue(队列) 用于存储消息。
2024-10-23 16:01:20
647
原创 Java中线程池参数如何设置
如果任务在执行过程中,发现处理速度主要受限于CPU计算能力,且较少等待I/O操作,说明是CPU密集型。如果任务是CPU密集型的(例如计算任务),设置过多的核心线程数会导致线程过度竞争CPU资源,增加上下文切换次数,从而降低整体效率。对于I/O密集型任务,核心线程数设置过小会限制并发任务的处理能力,无法充分利用系统的I/O带宽,导致系统整体性能下降。:任务主要依赖I/O操作,CPU使用率较低,I/O等待较多(如磁盘读写、网络请求)。:任务主要依赖于CPU进行复杂计算,CPU使用率高,I/O等待较少。
2024-10-23 10:29:00
941
原创 RabbitMQ
集群模式提供了横向扩展和容错能力。镜像队列确保队列及其消息在多个节点上复制,防止单点故障。队列分片(Quorum Queues)提供了高效的队列管理和更高的容错性。网络分区管理帮助处理集群中网络故障时的分区问题。心跳检测与自动恢复确保节点或客户端故障时的快速检测和恢复。负载均衡和自动重连提供了客户端侧的高可用支持。持久化机制确保队列和消息在 RabbitMQ 重启时不丢失。
2024-10-23 01:15:00
2089
原创 Redis处理速度快的原因
Redis 之所以能在处理数据时表现出极高的速度,是通过多个层面的优化设计实现的,包括内存存储、单线程模型、高效的数据结构、持久化机制等。
2024-10-22 17:21:51
871
原创 Redis的数据结构
Redis 的数据结构是其高性能和灵活性的重要基础。每种数据结构都针对不同的场景和需求设计,了解每种结构的细节能帮助我们更好地使用 Redis。
2024-10-22 17:10:27
881
原创 Redis的部署架构详解
单机模式适用于简单应用,对高可用性和扩展性要求低。主从复制和哨兵模式适用于有高可用性需求的场景,特别是哨兵模式可以实现自动化故障转移。集群模式适用于需要水平扩展和高并发访问的场景。云服务Redis适用于希望免去运维复杂性的用户,尤其是在云环境下的应用。
2024-10-22 17:02:05
408
原创 jvm中是如何判断对象是否存活的
JVM中判断对象是否存活的机制通过多种方法共同作用。引用计数法虽然简单,但在处理复杂引用时存在局限性。可达性分析算法作为JVM主要的垃圾回收机制,通过GC Roots的追踪有效解决了循环引用问题。三色标记法和SafePoint等机制则进一步优化了并发GC的效率,减少了GC对系统性能的影响。而代际假说则基于对象生命周期的不同特点,优化了GC的执行流程。这些机制和技术点在大型应用项目中,特别是在高并发、实时响应等要求较高的场景中,都有着非常重要的应用。
2024-10-22 14:18:11
834
原创 JVM中垃圾回收
JVM中的垃圾回收是通过对堆内存进行管理、清理无用对象,从而确保应用的高效运行。整个垃圾回收过程包括对象的分代存储、不同的垃圾回收算法(标记-清除、复制、标记-整理等),以及多种垃圾回收器(Serial GC、Parallel GC、CMS GC、G1 GC等)来适应不同的应用场景。优化垃圾回收是一个综合的过程,需要根据应用的特性选择合适的垃圾回收器,并通过合理的内存分配、减少对象创建与销毁、调优对象晋升策略等方法减少GC对应用性能的影响。
2024-10-22 10:28:38
2059
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人