- 博客(47)
- 收藏
- 关注
原创 QT代码通过ros代码实现topic 报文录制,有什么办法可以判断topic报文录制写入文件正常
2.使用日志记录: 你可以在你的ROS节点中使用ROS的日志系统(roscpp或rospy)来记录日志消息。1.检查文件是否创建: 在你的ROS节点中,你可以使用标准的C++或Python文件I/O操作来写入topic报文到文件。5.检查ROS Topic的状态,你可以使用ROS的Subscriber来监听Topic,然后根据接收到的消息进行状态检查。如果你的ROS节点订阅了某个Topic,你可以检查Topic的状态信息,比如消息是否正常发布、是否有订阅者等等。你可以定期检查文件大小,以确保录制在进行中。
2023-10-19 23:44:38
179
原创 QT计时器QTime的使用举例
在上述代码中,this 是指定了 QTimer 的父对象,通常是一个 QObject,以确保 QTimer 在父对象销毁时自动释放。**连接信号和槽:**如果您希望在定时器触发时执行特定的操作,可以将定时器的 timeout() 信号连接到一个槽函数。**设置定时器间隔:**使用 setInterval() 方法来设置定时器的触发间隔,以毫秒为单位。**创建 QTimer 对象:**在您的应用程序中创建一个 QTimer 对象。**包含头文件:**首先,确保您的Qt应用程序中包含了 QTimer 头文件。
2023-10-10 11:32:07
757
原创 rviz配置文件是什么
在ROS中,RViz(Robot Visualization)的配置文件通常是以.rviz文件扩展名的文本文件,用于定义RViz的可视化设置和显示配置。这些配置文件允许您定义要在RViz中显示的3D可视化元素,如点云、激光扫描、机器人模型、地图、坐标轴、TF树等。配置文件允许用户自定义RViz的显示和行为,以便在RViz中查看和分析与ROS系统相关的数据。您可以根据自己的需求创建和编辑这些配置文件,并使用RViz工具加载它们以显示所需的可视化信息。:这是配置RViz显示的核心部分。
2023-10-10 10:03:14
896
原创 QT界面显示rviz的可视化信息
这样,您就可以将Rviz的可视化窗口嵌入到您的Qt应用程序中,并显示Rviz的可视化信息。根据您的项目需要,您还可以使用rviz的API来创建和配置Rviz显示以显示不同类型的可视化信息。过Qt界面显示Rviz的可视化信息,您可以使用ROS提供的rviz的C++ API来集成Rviz的可视化窗口到您的Qt应用程序中。:使用Qt的布局管理器或窗口容器将Rviz的渲染面板嵌入到您的Qt界面中。:在您的Qt应用程序的源文件中,包括必要的ROS和rviz头文件,以便访问rviz的API和功能。
2023-10-10 09:57:46
778
原创 ros lidar 点云显示验证步骤
需要注意的是,具体的验证步骤和工具可能会因您的LIDAR硬件、ROS软件包和项目需求而有所不同。您可以查看ROS和您使用的LIDAR硬件的文档以获取更详细的信息和指南。:在可视化工具中,您可以验证点云数据,检查其是否与预期一致,或者分析点云以获取感兴趣的信息。验证ROS中的激光雷达(LIDAR)点云显示通常涉及使用ROS中的一些可视化工具和库来查看和分析点云数据。:在可视化工具中,您可能需要配置点云的显示参数,例如颜色、点的大小、透明度等,以便更好地查看点云数据。是您的LIDAR驱动程序的软件包名称,
2023-10-10 09:53:16
139
原创 Qt如何在视频画面上新增车道线显示
请注意,车道线检测和绘制是一个相对复杂的任务,具体实现取决于您的应用需求和所使用的算法。3.在画布上绘制车道线:根据您在第2步中得到的车道线信息,您需要将车道线绘制在视频帧上。2.处理视频帧:在每一帧上,您需要进行车道线检测或识别的处理。4.显示绘制后的视频帧:一旦您在视频帧上绘制了车道线,您需要将更新后的帧显示在UI上。6.清除绘制:如果需要,您可以添加功能以清除之前绘制的车道线,以便在下一帧上重新绘制。5.循环处理:重复执行第2至第4步,以处理视频流中的每一帧,并将车道线绘制在每一帧上。
2023-10-10 09:49:08
502
原创 QT位置相关函数
Qt(Qt Framework)是一个流行的C++应用程序开发框架,提供了丰富的位置相关函数和类,用于处理窗口、窗口小部件和图形的位置和几何操作。
2023-10-09 17:44:22
1904
原创 linux中命令行如何使用git
安装Git:如果您的Linux系统上还没有安装Git,可以使用适合您的包管理器来安装它。克隆(Clone)存储库:要获取一个Git存储库的副本,您可以使用 git clone 命令。配置Git:在首次使用Git之前,您需要配置您的用户名和电子邮件地址,以便提交您的代码。添加(Add)和提交(Commit)更改:将更改添加到暂存区并提交它们到本地存储库。这个命令将本地分支(例如 master)的更改推送到远程存储库(origin)。拉取(Pull)更新:从远程存储库拉取最新的更改并合并到本地分支。
2023-10-09 09:34:22
151
原创 QString的常用操作
QString 是Qt框架中用于处理字符串的类。它提供了丰富的字符串操作功能,可以用于处理文本、格式化输出、拼接字符串等。// 使用正则表达式替换匹配的子串。
2023-10-09 00:01:20
664
原创 使用c++编写一个使用socket通信,实现一个客户端类和一个服务端类;在主函数中启动这两个类,待通信建立成功后,服务端开始循环发送从0到9的整数给客户端(间隔一秒),客户端将接收到的整数打印输出。
在这个示例中,我们创建了一个简单的服务端和客户端,它们分别在不同的线程中运行。服务端在循环中发送从0到9的整数,客户端接收并打印接收到的整数。请根据您的需求进行适当的错误处理和改进。要运行此示例,您需要将服务端和客户端放在不同的线程中,以便它们可以并发运行。
2023-10-08 18:01:12
172
原创 git使用方法
这些是Git的一些基本使用方法。Git提供了强大的版本控制和协作功能,允许多人协作开发项目,并跟踪项目的历史记录。您可以根据项目需求使用Git的不同功能。如果您尚未安装Git,请从Git官方网站下载并安装Git:https://git-scm.com/downloads。在安装Git后,首次使用前,需要配置您的用户信息,包括用户名和电子邮件地址。Git是一个分布式版本控制系统,用于跟踪和管理项目的版本和修改。创建、切换和合并分支是Git的关键功能之一。使用标签可以为重要的提交添加注释。
2023-10-08 17:16:56
131
原创 C++信号量
在C++中,信号量是一种用于多线程编程的同步原语,它用于控制多个线程之间的访问和互斥。C++标准库没有提供原生的信号量,但您可以使用第三方库或操作系统提供的信号量实现来进行多线程编程。在main函数中,我们创建了四个线程,每个线程都尝试获取信号量,然后执行一些工作(在示例中用std::this_thread::sleep_for模拟)。在实际的多线程应用中,您可能会使用操作系统提供的原生信号量或第三方库,因为它们通常提供更多的功能和性能优化。在上面的示例中,我们创建了一个Semaphore类来模拟信号量。
2023-10-07 11:28:07
473
原创 C++中迭代器的使用
这些是C++中迭代器的基本使用方法。请注意,不同类型的容器(如std::vector、std::list、std::map等)可能具有不同类型的迭代器,因此在使用迭代器时,请查阅相关文档以了解正确的迭代器类型。C++中的迭代器是一种用于遍历容器(如数组、向量、列表、映射等)中元素的工具。迭代器提供了一种通用的方式来访问容器中的数据,而不依赖于容器的具体实现。在上面的示例中,我们使用了begin()和end()迭代器来遍历一个整数向量并输出其元素。end():指向容器末尾(最后一个元素之后的位置)的迭代器。
2023-10-07 11:08:54
442
1
原创 回调函数举例
然后,我们有一个函数performOperation,它接受一个整数值和一个回调函数作为参数。在performOperation函数内部,它首先执行一些操作,然后调用传递的回调函数,并将操作结果传递给它。在main函数中,我们调用performOperation并传递一个名为callbackFunction的回调函数作为参数。这个示例演示了回调函数的基本工作原理,允许将函数作为参数传递,并在需要时执行它们。C++中的回调函数是一种允许将函数作为参数传递给其他函数,并在需要时调用它们的机制。
2023-10-01 23:56:32
139
原创 QT实现一个按钮两中状态的切换:
这个示例创建了一个简单的Qt应用程序,其中包含一个按钮,点击按钮时可以在两种状态之间切换(“状态1” 和 “状态2”)。通过使用QStateMachine和QState,您可以轻松地管理按钮的两种状态以及它们之间的转换。当您单击按钮时,它将在状态1和状态2之间切换,并相应地更改按钮的文本。在每个状态下,设置按钮的文本和行为,以便在切换状态时按钮的外观和行为发生变化。下面是一个简单的示例代码,演示如何实现一个具有两种状态的按钮。创建状态迁移,以定义从一个状态到另一个状态的转换条件。
2023-09-28 11:46:44
1398
原创 脚本文件中指定主题、保存路径执行rosbag record脚本文件编写方法
脚本文件中指定主题、保存路径执行rosbag record脚本文件编写方法
2023-09-28 11:27:29
209
原创 QT设置弹窗显示屏幕中央
上述代码中,我们首先创建了一个QMessageBox,然后获取了屏幕的宽度和高度,计算出弹窗应该显示的中心位置,最后使用move方法设置弹窗的位置。您还可以自定义一个继承自QMessageBox的子类,然后在子类的构造函数中设置窗口位置。这样,每次创建该子类的对象时,窗口都会自动居中显示。无论使用哪种方法,确保在显示窗口之前设置窗口的位置,以便窗口在显示时处于屏幕的中央位置。Qt设置每次运行弹窗显示屏幕中央。
2023-09-28 11:19:54
2329
原创 解决linux命令行运行python程序找不到另一个文件夹包现象
一、首先看看目录的结构:项目目录结构二、我在search.py中导入views包下的production.py和search.py,运行search.py的时候直接报错找不到views包,其实问题就在于包的搜索路径,因为是在flaskr这个目录下运行的,打印出来的包搜索路径为([‘/project/my_flask_project/flaskr’, ‘/usr/local/python3/lib/python36.zip’, ‘/usr/local/python3/lib/python3.6’, ‘/u
2022-04-25 22:10:08
3882
原创 推荐系统冷启动概述
1.什么是推荐系统的冷启动?新用户、新内容对推荐系统来说都是没有过往信息积累的、陌生的,需要通过一定的曝光量和互动量来收集基础数据。这个从0到1积累基础数据的过程就是冷启动。其效果的好坏直接关系的整个产品新用户的留存于与转化,而用户留存与转化的提升是做冷启动优化的动力来源。2.冷启动分类用户冷启动:主要解决如何对新用户做个性化推荐。当用户到来时,没有任何行为数据,无法根据其历史行为预测其兴趣,从而无法借此做个性化推荐。物品冷起动:主要解决如何将新的物品推荐给可能对他感兴趣的用户。系统冷启动:主要
2022-03-14 11:01:27
3329
原创 推荐系统召回服务
召回服务相关–向量服务平台:向量服务平台,也称向量检索服务,其解决的问题是从海量向量数据中高精度、高性能的召回出与目标最相似的数据。向量服务平台的底层架构有多种:基于量化的索引基于树的索引基于图的索引基于哈希的索引这里主要我们使用最多的,基于树的索引方法原理:(搜索树的思想)用超平面把高维空间分割成多个子空间,并把这些子空间以树型结构存储的索引方式。算法实现:ANN(Approximate Nearest Neighbor)搜索算法,faiss,Annoy, balltree。召回服
2022-03-13 16:04:49
1602
原创 绝命毒师八股文
java基础解释下什么是面向对象?面向对象和面向过程的区别?面向对象的三大特性?分别解释下?JDK、JRE、JVM 三者之间的关系?重载和重写的区别?Java 中是否可以重写一个 private 或者 static 方法?构造方法有哪些特性?在 Java 中定义一个不做事且没有参数的构造方法有什么作用?Java 中创建对象的几种方式?抽象类和接口有什么区别?静态变量和实例变量的区别?12、short s1 = 1;s1 = s1 + 1;有什么错?那么 short s1 = 1; s
2022-01-10 22:28:46
91
原创 后端面试经
一面怎么理解微服务微服务的缺点微服务之间怎么做负载均衡Oauth2基本流程、原理登录模块是怎么做的cookie和session的区别购物车为什么用Redis存,是永久存储吗为什么购物车多读多写Redis怎样清除过期key,有哪些策略lru是怎样的过程Redis字典底层怎么实现的hashtable是怎样实现的ziplist怎样实现的普通的哈希表怎样实现的哈希表怎么扩容使用MQ的好处MQ解耦和微服务解耦的区别算法:最长回文子串https建立连接的过程(SSL/TLS协商的
2022-01-10 10:01:33
71
原创 leetcode 206.反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。一、迭代方法:# java:# Definition for singly-linked list. public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = va
2021-12-07 19:17:33
264
转载 229. 求众数 II
求众数 II给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。示例 1:输入:[3,2,3]输出:[3]示例 2:输入:nums = [1]输出:[1]示例 3:输入:[1,1,1,3,3,2,2,2]输出:[1,2]提示:1 <= nums.length <= 5 * 104-109 <= nums[i] <= 109进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。方法一:哈希统计.
2021-10-22 10:38:43
78
原创 jupyter notebook 中打开指定路径文件
打开jupyter点击new---->点击teminal------>输入指令:jupyter-notebook 路径名
2021-10-18 15:50:22
634
原创 leetcode412. Fizz Buzz
Fizz Buzz给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:answer[i] == "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。answer[i] == "Fizz" 如果 i 是 3 的倍数。answer[i] == "Buzz" 如果 i 是 5 的倍数。answer[i] == i 如果上述条件全不满足。示例 1:输入:n = 3输出:["1","2","Fizz.
2021-10-13 15:10:35
78
原创 leetcode517. 超级洗衣机
超级洗衣机假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意 m (1 <= m <= n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。给定一个整数数组 machines 代表从左至右每台洗衣机中的衣物数量,请给出能让所有洗衣机中剩下的衣物的数量相等的 最少的操作步数 。如果不能使每台洗衣机中衣物的数量相等,则返回 -1 。示例 1:输入:machines = [1,0,5]输出:3.
2021-09-29 09:59:18
81
原创 LeetCode58. 最后一个单词的长度
最后一个单词的长度给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s = "Hello World"输出:5示例 2:输入:s = " fly me to the moon "输出:4示例 3:输入:s = "luffy is still joyboy"输出:6提示:1 <= s.length <= 104s 仅有英文字母和.
2021-09-21 18:22:49
65
原创 LeetCode 1. 两数之和
两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], ta.
2021-09-21 18:20:34
59
原创 208. 实现 Trie (前缀树)
实现 Trie (前缀树)Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。bool.
2021-09-17 11:20:13
64
原创 LeetCode
回旋镖的数量给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。返回平面上所有回旋镖的数量。示例 1:输入:points = [[0,0],[1,0],[2,0]]输出:2解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]题解:class Solution.
2021-09-13 09:43:38
64
原创 pytorch开发环境安装,DGL框架的融入
图神经网络学习环境配置安装经验:第一步:安装Anaconda1.测试conda是否安装成功, conda list2.查看conda版本,conda --version第二步:安装cuda1.测试cuda安装是否成功nvcc -V第三步:安装pytorch-GPU版本:第四步:安装DGL框架;第五步:将DGL文件夹移入到pytorch文件夹下将pytorch环境导入pycharm中测试pycharm中pytorch是否可用安装DGL库
2021-09-12 22:53:14
2612
1
转载 python的异常种类
异常名称描述ArithmeticError所有数值计算错误的基类AssertionError断言语句失败AttributeError对象没有这个属性BaseException所有异常的基类BaseException所有异常的基类DeprecationWarning关于被弃用的特征的警告EOFError没有内建输入,到达EOF 标记Exception常规错误的基类EnvironmentError操作系统错误的基类Fut...
2021-04-01 19:58:41
83
原创 套接字工作流程
套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行,Linux所提供的功能(如打印服务,ftp等)通常都是通过套接字来进行通信的,套接字的创建和使用与管道是有区别的,因为套接字明确地将客户和服务器区分出来,套接字可以实现将多个客户连接到一个服务器。套接字,也称为BSD套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。应用层通过传输层进.
2021-03-30 23:27:59
625
原创 Word2Vec
word2vec是将词变成向量,顾名思义,node2vec其实就是将复杂网络中的节点变成向量。其核心思想为:生成随机游走,对随机游走采样得到(节点,上下文)的组合,然后用处理词向量的方法对这样的组合建模得到网络节点的表示。Deepwalk和node2vec的思想是高度一致的。相比于deepwalk,node2vec在生成随机游走过程中做了一些创新。这里我们不对两者进行深入比较,但由此提出一个结论,也请出今天的二号主角,这一类编码方式的核心结构:我个人把它看做是“上、下”结构上:想尽一切办法,在你的网络.
2021-03-18 18:08:41
167
原创 python-NameError: name ‘_name_‘ is not defined(主函数)
if _name_ == '_main_':错误的原因可能是name是双下划线,不是单下划线。(明显下面的下划线要长一点)if __name__ == '_main_'
2021-03-16 21:59:58
599
转载 多模态的几种融合方法
目前,多模态数据融合主要有三种融合方式:前端融合(early-fusion)或数据水平融合(data-level fusion)、后端融合(late-fusion)或决策水平融合(decision-level fusion)和中间融合(intermediate-fusion)。前端融合将多个独立的数据集融合成一个单一的特征向量,然后输入到机器学习分类器中。由于多模态数据的前端融合往往无法充分利用多个模态数据间的互补性,且前端融合的原始数据通常包含大量的冗余信息。因此,多模态前端融合方法常常与特征提取方法相
2020-12-02 10:48:38
9187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人