2024-04-10 ROS 通信机制 ROS 通信机制 节点和 Master当一个ROS节点启动时,它会执行以下步骤来注册自己并与其他节点通信:节点注册:新启动的节点会向ROS Master发送一个注册请求,以便让Master知道它的存在。这个注册请求是通过XMLRPC和HTTP协议发送的,其中包含了节点的名称、类型和提供的话题、服务等信息。ROS Master响应:ROS Master收到节点的注册请求后,会记录下节点的信息,并在节点注册表中注册该节点。Master会为节点分配一个唯一的ID,并为该节点分配一个动态端口号,用于后续的通信。订阅或发布话题:节点可能会订阅或发布一个或多个话题,以便与其他节点进行通信。当节点需要订阅特定话题时,它会向ROS Master发送一个订阅请求,请求订阅某个话题的消息。同样地,当节点需要发布特定话题时,它会向ROS Master发送一个发布请求,请求发布某个话题的消息。ROS Master响应订阅/发布请求:ROS Master收到节点的订阅/发布请求后,会查询话题注册表,并返回该话题的发布者地址信息给订阅者或发布者节点。这个地址信息包括了发布者节点的IP地址和端口号。建立连接:订阅者节点收到RO... 2024-04-10 2024年04月10日 0 阅读 0 评论
2024-04-08 ROS 核心概念和框架介绍 ROS 核心概念和框架介绍 ROS 是一个开源的机器人操作系统,其已经在学术界和工业界广泛应用。其为开发者提供了大量的资源和工具,促进了社区的创新和合作。ROS的模块化设计允许开发者创建可重用的组件,这有助于快速开发和部署机器人应用。ROS 是一个开源的机器人操作系统,其已经在学术界和工业界广泛应用。其为开发者提供了大量的资源和工具,促进了社区的创新和合作。ROS的模块化设计允许开发者创建可重用的组件,这有助于快速开发和部署机器人应用。随着时间的推移,ROS的生态系统不断扩大,类似于Android生态系统的扩展,提供了丰富的库和工具。ROS 核心概念Node(节点):在ROS中,节点是执行特定任务的独立进程,例如传感器驱动程序或提供控制服务的程序。每个节点通常只执行一个特定的功能,但可以与其他节点协同工作以实现复杂的机器人行为。Topics(话题):话题是ROS中一种常见的消息传递机制,允许节点之间异步地传递消息。发布者将消息发布到特定的话题,而订阅者则从该话题接收特定的消息。这种机制适用于需要持续数据流的场景,例如传感器数据的传输。Message(消息):消息是ROS中节点之间通信时传递的数据类型和结构。... 2024-04-08 2024年04月08日 0 阅读 0 评论
2024-03-07 `QFileSystemModel::mkdir()` 在UI界面文件创建踩坑 `QFileSystemModel::mkdir()` 在UI界面文件创建踩坑 修复 QFileSystemModel::mkdir() 中的崩溃问题 🔧在使用 Qt5 的 QFileSystemModel 替换Qt4中的 QDirmodel 中的文件创建方法时遇到问题。初步检查 🕵️♂️在点击创建文件后,如果不输入新建文件名并点击确认,崩溃就不会发生。因此,首先排除了下面右键菜单代码的问题void MainWindow::showLocalTreeViewMenu(const QPoint &pos) { QMenu* menu=new QMenu(this); menu->addAction(QString(tr("新建文件夹")),this,SLOT(mkdir())); menu->addAction(QString(tr("删除")),this,SLOT(rm())); menu->addAction(QString(tr("刷新")),this,SLOT(localDirRefresh())); menu->exe... 2024-03-07 2024年03月07日 0 阅读 0 评论
2024-03-04 Libevent 事件通知库 Libevent 事件通知库 基本概念可以基于不同的 I/O 通知方式(epoll, kqueue, select, poll等)来调度事件。其通过事件循环的方式来不断地等待事件的发生,在事件发生时调用相应的回调函数。下面直接 show code 不浪费时间使用 libevent 创建一个事件循环#include <event2/event.h> int main() { struct event_base *base; base = event_base_new(); // 创建新的事件基础结构 if (!base) { fprintf(stderr, "Could not initialize libevent!\n"); return 1; } event_base_dispatch(base); // 启动事件循环 event_base_free(base); // 释放事件基础结构 return 0; } 由上面代码可知,使用 libevent 库时的必要代码。创建事件基础... 2024-03-04 2024年03月04日 0 阅读 0 评论
2024-02-12 科研成果2 科研成果2 论文标题: Multi-Branch Feature Learning Network via Global-Local Self-Distillation for Vehicle Re-Identification发表情况: IEEE Transactions on Vehicular Technology (SCI 中科院2区 Top期刊)下文主要关注于方法的介绍整体网络模型在本研究中,继续采用了广泛应用的ResNet网络家族,并选择ResNet50作为模型的骨干网络。该方法借鉴了当前最先进的车辆重识别技术,如UMTS、PPT和FastReID,对骨干网络进行了特定的配置优化。具体来说,移除了网络中的最后一个下采样层,并将最终卷积层的步长从2调整为1。这一调整显著增强了网络在保留细节空间信息方面的能力,为细粒度的车辆重识别任务提供了高分辨率的特征图,从而有助于提升识别性能。为了进一步促进全局与局部特征的学习,本研究采纳了一个部分共享架构的骨干网络。ResNet的四个阶段结构允许从简单到复杂逐步提取特征,其中前两个阶段着重于初级视觉特征如边缘和纹理的提取,而后两个阶段则专注... 2024-02-12 2024年02月12日 0 阅读 0 评论
2024-02-02 科研成果1 科研成果1 论文标题: Global–Local Discriminative Representation Learning Network for Viewpoint-Aware Vehicle Re-Identification in Intelligent Transportation发表情况: IEEE Transactions on Instrumentation and Measurement (SCI 中科院2区 Top期刊)下文主要关注于方法的介绍整体网络模型如模型图所示,本研究引入了一个经过改良的ResNet50网络作为核心的主干网络,专注于从车辆图像中提取具有高度区分度的特征。这一改进的网络设计,特别强调对车辆中信息丰富、区分能力强的局部的关注,同时减少对那些区分信息有限的局部的依赖。这种方法有助于提高网络在车辆重识别任务中的表现,确保能够从复杂的视觉数据中提取出关键信息。进一步地,本研究提出了一个特征融合模块,旨在有效整合主干网络在第三阶段和第四阶段的输出。通过这种融合,能够增强网络对于重识别任务所需的信息的提取能力,从而生成更加丰富和细腻的特征表示。此外,本研究... 2024-02-02 2024年02月02日 0 阅读 0 评论
2024-01-28 银行家算法 银行家算法 银行家算法(Banker's Algorithm)是一种著名的用于避免死锁的资源分配算法。它由 Edsger Dijkstra 提出,并因其模拟银行家借贷的行为而得名。银行家算法的核心思想是仅在系统处于安全状态时分配资源,以确保系统不会进入死锁状态。银行家算法的基本概念银行家算法的基本概念包括以下几个关键点:系统资源:系统中有若干种资源,每种资源有一定数量。进程:系统中有若干进程,每个进程需要若干资源才能完成其工作。最大需求:每个进程对每种资源的最大需求量。已分配资源:每个进程当前已经分配到的资源数量。需要资源:每个进程还需要的资源数量,即最大需求量减去已分配资源。可用资源:系统当前可以分配的资源数量。银行家算法的步骤银行家算法通过以下步骤来决定是否分配资源:安全性检查:在分配资源前,系统模拟分配资源并检查是否处于安全状态。安全状态意味着系统能够按某种顺序分配资源,使得所有进程都能完成工作。资源分配:如果系统处于安全状态,则分配资源;否则,拒绝资源请求。安全性检查算法为了检查系统是否处于安全状态,银行家算法使用以下步骤:初始化:定义向量 Work 表示当前可用资源。定义向量 Fi... 2024-01-28 2024年01月28日 0 阅读 0 评论
2024-01-02 生产者消费者模型 生产者消费者模型 生产者消费者模型这个模型是一个非常重要的并发编程问题,主要用于处理生产者(生成数据的线程或进程)和消费者(使用数据的线程或进程)之间的同步。这里我们将使用C++的线程、互斥锁和条件变量来实现一个基本的生产者消费者系统。核心概念:生产者负责生成数据放入缓冲区。消费者从缓冲区取数据进行处理。共享缓冲区通常是有限大小的,需要同步机制来安全地访问。互斥锁用来保护共享数据的一致性。条件变量用来在缓冲区空或满时暂停和唤醒线程。实现步骤定义共享数据结构:这通常是一个队列,用于存储生产的数据。使用互斥锁保护共享数据:确保任何时候只有一个线程可以修改数据。使用条件变量处理等待和通知:当缓冲区满时生产者等待,当缓冲区空时消费者等待。示例代码我们将实现一个使用 std::queue 作为缓冲区的生产者消费者模型。在这个示例中:生产者生成从0到49的整数,当缓冲区达到最大容量时等待。消费者从缓冲区中取出数据并显示,直到读取特殊值-1结束。#include <iostream> #include <thread> #include <mutex> #include &l... 2024-01-02 2024年01月02日 0 阅读 0 评论
2023-12-30 科研流水账81 科研流水账81 修改模型,复现了之前的图卷积加蒸馏的最好性能,保证进一步修改是在最好性能上的。修改之前损失加和的方式。下载原UFDN代码,对模型和损失修改后复现最好性能。尝试可视化局部特征的注意力。只使用图卷积图卷积+蒸馏修改损失加和方式去掉了基于损失全局局部CE损失对比的自适应权重局部与全局分类软标签蒸馏的KL散度损失和局部与真实值CE损失之间权重从0.5:0.5改回1:1去掉蒸馏之后的实验结果问题分析在进行热力图可视化绘图时的问题由于按通道划分后直接使用了图卷积,由于图卷积计算需要,局部特征的张量变形为三个维度,空间上的宽高被取消了。因此之前的可视化方法没法直接使用。经过网上查看资料修改代码后实现了对局部特征的可视化,但目前还需要继续完善。下一步首先对局部进行可视化,根据可视化结果好坏决定是否对divers损失进一步修改。修改代码为使其在其它数据集上运行进行消融实验。 2023-12-30 2023年12月30日 0 阅读 0 评论
2023-12-22 科研流水账80 科研流水账80 论文阅读Diversified branch fusion for self-knowledge distillation参考论文中的动态logits融合的方案对全局局部蒸馏进行改造。使用推理时cat全局局部的方式融合全局局部特征为一支加在训练阶段。对图卷积中图节点构成边的过程进行实验,其原始为保留所有边。将图卷积直接加到之前性能最好的模型里。使用论文logits融合的方法同时使用标签对融合后的logits分类进行指导Cat全局和局部为一支加入训练图节点生成边矩阵时阈值为0.5-0.6使用原始图节点生成矩阵问题分析多Logits融合的方法第一次实验时忘记使用标签的对融合后logits的分类进行指导。第二次实验加上指导后性能反而更差了。这可能是损失权重没有平衡好的原因。下一步一方面继续对多logits融合进行实验,因为目前实验结果来看这个对性能可能更有价值。可以考虑将之前自己设计的CE损失权重加上去。另一方面尝试复现单独使用图卷积后达到82.0左右的性能。 2023-12-22 2023年12月22日 0 阅读 0 评论