- 博客(53)
- 收藏
- 关注
翻译 [论文阅读]: HE-Nav: A High-Performance and Efficient Navigation...
在这封信中,我们介绍了 HE-Nav,这是第一个针对杂乱环境中运行的 AGR 量身定制的高性能和高效导航系统。感知模块利用由鸟瞰(BEV)特征融合指导的轻量级语义场景完成网络(LBSCNet),并通过精心设计的SCBFusion模块和注意机制增强。这使得杂乱区域的实时高效的障碍物预测成为可能,生成一个完整的局部地图。基于这个完成的地图,我们的新 AG-Planner 采用节能的运动学 A* 搜索算法来保证规划是节能的。随后的轨迹优化过程产生安全、平滑、动态可行和无ESDF的空中地面混合路径。
2025-01-16 17:15:34
57
1
翻译 [论文阅读]: AGRNav: Efficient and Energy-Saving Autonomous Navigation...
在这项工作中,我们提出了 AGRNav,一个旨在寻找安全和节能的空-地混合路径的新框架。AGRNav包含一个轻量级的语义场景完成网络(SCONet),具有自注意力机制,通过捕获上下文信息和遮挡区域特征来实现准确的障碍物预测。该框架随后采用基于查询的方法将预测结果低延迟地更新到网格图。最后,基于更新后的地图,分层路径规划器高效搜索节能路径进行导航。我们通过模拟和现实环境中的基准测试验证了AGRNav的性能,证明了其优于经典和最先进的方法。
2025-01-15 22:09:19
65
1
原创 Fast-Planner 改进与优化:支持ROS Noetic构建与几何A*路径规划
复现后的项目开源在:https://github.com/bhu619/Fast-Planner-Noetic
2024-12-16 18:14:00
1091
原创 11. 将webserver部署到公网(使用阿里云服务器)
webserver的云服务器配置;设置开机自启动;使用域名访问服务器;云端和本地端的压力测试。
2024-11-11 23:51:55
1003
原创 14. 进程池和线程池
之前的章节中,我们通过动态创建子进程或子线程来实现并发服务器,这样做的缺点有:+ 动态创建进程或线程比较耗时,这将导致较慢的客户响应。+ 动态创建的子进程或子线程通常只用来为一个客户服务(除非我们做特殊处理),这将导致系统上产生大量的细微进程或线程,进程或线程间的切换将消耗大量CPU时间。+ 动态创建的子进程是当前
2024-11-08 15:17:50
699
原创 7. 触发模式
触发模式决定了服务器如何接收和处理事件,具体涉及到。在高性能网络编程中,常用的事件通知机制是。的值,设置服务器的监听套接字((在 Linux 系统中)。
2024-11-04 18:19:50
247
原创 8. 定时器 / 信号处理
事件驱动服务器的核心实现,包括定时器管理、文件描述符操作、信号处理、以及错误处理;统一事件源简化事件管理流程;基于双向升序链表的定时器管理系(`sort_timer_lst`类);定时器处理非活动连接
2024-11-04 18:14:09
1028
原创 使用 Github 进行项目管理
简单使用 Github 管理项目;配置 SSH 访问远程 Git 仓库;使用 github 在本地新建一个仓库,并推送到远程;
2024-10-31 18:21:55
985
原创 5. 数据库连接池实现
数据库连接池的实现;单例模式和RAII机制在数据库连接池中的使用;使用智能指针对源代码改进,不需要手动管理数据库连接,避免资源泄露
2024-10-30 22:43:21
823
原创 2. 从服务器的主接口入手
Webserver 的主函数 main.cpp,完成了哪些功能?Config类实现了哪些功能?是怎么实现的?有哪些可以改进的地方?
2024-10-29 23:09:50
1201
原创 【HOT100】技巧篇(136. 只出现一次的数字/169. 多数元素/75. 颜色分类/31. 下一个排列/287. 寻找重复数)
【HOT100】技巧篇(136.只出现一次的数字/169.多数元素175.颜色分类/31.下一个排列/287.寻找重复数)
2024-10-29 18:46:13
340
原创 查找(线性/顺序、二分/折半、分块/索引、哈希)
查找的平均查找长度(Average Search Length,简称 ASL)是衡量查找效率的一个重要指标,表示在查找表中查找元素时,平均需要检查的元素个数。它与查找方法、查找表的结构以及查找成功或失败的概率等因素有关。根据不同的查找方法,平均查找长度的计算方式会有所不同,下面介绍线性查找、二分查找和哈希查找的平均查找长度的计算方法。
2024-10-18 15:07:44
2031
原创 15. 服务器调制、调试和测试
主要包括:使用 tcpdump 抓包;使用 gdb 调试器;使用压力测试工具,模拟现实世界中的高并发请求,测试服务器在高压状态下的稳定性。
2024-09-25 15:15:48
965
原创 13. 多线程编程
进程:进程是操作系统进行资源分配和调度的基本单位,是程序的一次执行过程。它是系统进行资源分配和调度的一个独立单位。每个进程都有自己的地址空间、内存、数据栈以及其他用于跟踪执行的辅助数据。线程:线程是进程中的实际运行单位,是进程中的一个单一顺序控制流,也被称为轻量级进程(LWP)。一个进程可以包含多个线程,所有线程共享进程的资源,如内存和文件描述符。线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。根据运行环境和调度者的身份,线程可分为内核线程和用户线程。
2024-08-28 22:53:53
948
原创 12. 多进程编程
本章讨论Linux多进程编程的以下内容:复制进程映像的fork系统调用和替换进程映像的exec系列系统调用。僵尸进程以及如何避免僵尸进程。进程间通信(Inter Process Communication,IPC)最简单的方式:管道。三种System V进程间通信方式:信号量、消息队列、共享内存。它们是由AT&T System V2版本的UNIX引入的,所以统称为System V IPC。在进程间传递文件描述符的通用方法:通过UNIX本地域socket传递特殊的辅助数据。(关于辅助数据
2024-08-28 19:32:42
1265
原创 11. 高性能I/O框架库Libevent
I/O框架库以库函数的形式,封装了较为底层的系统调用,给应用程序提供了一组更便于使用的接口。各种I/O框架库的实现基本原理相似,要么以Reactor模式实现,要么以Proactor模式实现,要么同时以这两种模式实现。例如,基于Reactor模式的I/O框架库包含以下组件:句柄(Handle)、事件多路分发器(EventDemultiplexer)、事件处理器(EventHandler)、具体的事件处理器(ConcreteEventHandler)、Reactor。
2024-08-27 20:39:31
1102
2
原创 10. 定时器
网络程序需要处理定时事件,如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,有效地组织这些定时事件,使其在预期的时间被触发且不影响服务器的主要逻辑,对于服务器的性能有至关重要的影响。为此,我们要将每个定时事件分别封装成定时器,并使用某种容器类数据结构,如链表、排序链表、时间轮,将所有定时器串联起来,以实现对定时事件的统一管理。本章主要讨论两种高效的管理定时器的容器:时间轮和时间堆。
2024-08-27 14:23:04
867
原创 9. 信号
信号是由用户、系统、进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常。Linux信号可由以下条件产生:对于前台进程,用户可通过输入特殊终端字符来给它发送信号,如输入Ctrl+C通常会给进程发送一个中断信号。系统异常。如浮点异常或非法内存段访问。系统状态变化。如alarm定时器到期将引起SIGALRM信号。运行kill命令或调用kill函数。服务器程序必须处理(或至少忽略)一些常见信号,以免异常终止。
2024-08-24 18:31:51
1140
原创 8. I/O 复用
I/O 复用使得程序能够同时监听多个文件描述符,从而提高程序的性能。I/O 复用本身是阻塞的。Linux 下实现 I/O 复用的系统调用主要有selectpoll和epoll。
2024-08-23 21:10:48
1331
原创 7. 高性能服务器程序框架
一书中,把这一章节作为全书的核心,同时作为后续章节的总览。这也意味着我们在经历了前置知识的学习后,正式进入了 Web 服务器项目的核心部分!TCP 三次握手、四次挥手,流量控制、拥塞控制等。socket 的创建、绑定、监听、连接等。文件描述符、管道、readvwritev函数等。进程 PID,用户 UID,组 GID,会话 ID 等。
2024-08-21 17:22:30
1534
原创 6. Linux服务器程序规范
UID:标识用户身份,决定用户本身的所有权限。EUID:用于实际判断用户的权限,可能与 UID 不同。GID:标识用户所属的组,决定用户组的权限。EGID:用于实际判断用户的组权限,可能与 GID 不同。在权限管理中,UID 和 GID 决定了用户和组的基本身份和权限,而 EUID 和 EGID 决定了用户在特定情境下(如执行带有setuid或setgid标志的程序时)所拥有的实际权限。这些标识符是 UNIX 权限模型的重要组成部分,用于确保系统资源的安全访问和管理。
2024-08-20 16:47:45
1146
原创 4. Linux网络编程基础API
还是给我的语雀文档打个广告:我的文章都是先在语雀里记录的,然后再同步发送到优快云上,有些格式问题实在是懒得改了,可能会导致大家看的不舒服,建议有需要的大家可以看看我的原文:语雀。
2024-08-16 20:31:03
1088
原创 C++ 设计模式(8. 装饰模式)
基本概念 通常情况下,扩展类的功能可以通过继承实现,但是扩展越多,子类越多,装饰模式(Decorator Pattern,结构型设计模式)可以在不定义子类的情况下动态的给对象添加一些额外的功能。具体的做法是将原始对象放入包含行为的特殊封装类(装饰类),从而为原始对象动态添加新的行为,而无需修改其代码。 举个简单的例子,假设你有一个基础的图形类,你想要为图形类添加颜色、边框、阴影等功能,如果每个功能都实现一个子类,就会导致产生大量的类,这时就可以考虑使用装饰模式来动态地添加,而不需要修改图形类本身的代码,
2024-08-16 13:44:21
298
原创 C++ 设计模式(7. 代理模式)
基本概念 代理模式Proxy Pattern是一种结构型设计模式,用于控制对其他对象的访问。 在代理模式中,允许一个对象(代理)充当另一个对象(真实对象)的接口,以控制对这个对象的访问。通常用于在访问某个对象时引入一些间接层(中介的作用),这样可以在访问对象时添加额外的控制逻辑,比如限制访问权限,延迟加载。 比如说有一个文件加载的场景,为了避免直接访问“文件”对象,我们可以新增一个代理对象,代理对象中有一个对“文件对象”的引用,在代理对象的load 方法中,可以在访问真实的文件对象之前进行一些操作,比
2024-08-16 13:42:48
200
原创 C++ 设计模式(6. 适配器模式)
适配器模式Adapter Pattern是一种结构型设计模式,它可以将一个类的接口转换成客户希望的另一个接口,主要目的是充当两个不同接口之间的桥梁,使得原本接口不兼容的类能够一起工作。 基本结构 Target 是目标接口,Adaptee 是需要适配的类,Adapter 类将 Adaptee 的接口适配成 Target 接口,使得客户端可以通过 Target 接口来调用Adaptee 的功能。这样,客户端就可以使用目标接口,而不需要对原来的Adaptee进行修改,Adapter起到一个转接扩展的作用。
2024-08-16 13:41:50
506
原创 C++ 设计模式(5. 原型模式)
原型模式一种创建型设计模式,该模式的核心思想是基于现有的对象创建新的对象,而不是从头开始创建。 原型模式的基本结构 实现原型模式需要给原型对象声明一个克隆方法,执行该方法会创建一个当前类的新对象,并将原始对象中的成员变量复制到新生成的对象中,而不必实例化。并且在这个过程中只需要调用原型对象的克隆方法,而无需知道原型对象的具体类型。 原型模式包含两个重点模块: 抽象原型接口prototype: 声明一个克隆自身的方法clone 具体原型类ConcretePrototype: 实现clone方法,
2024-08-16 13:40:26
537
原创 C++ 设计模式(4. 建造者模式)
建造者模式(也被成为生成器模式),是一种创建型设计模式,软件开发过程中有的时候需要创建很复杂的对象,而建造者模式的主要思想是将对象的构建过程分为多个步骤,并为每个步骤定义一个抽象的接口。具体的构建过程由实现了这些接口的具体建造者类来完成。同时有一个指导者类负责协调建造者的工作,按照一定的顺序或逻辑来执行构建步骤,最终生成产品。 基本结构 建造者模式有下面几个关键角色: 产品Product:被构建的复杂对象, 包含多个组成部分。 抽象建造者Builder: 定义构建产品各个部分的抽象接口和一个返回复杂
2024-08-16 13:39:16
422
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人