自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(112)
  • 收藏
  • 关注

原创 C++线程操作、异常、智能指针

它通过引用计数来管理资源的生命周期,引用计数的增加和减少是线程安全的,但资源本身的访问不是线程安全的。实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。3.C++中异常经常会导致资源泄漏的问题,比如在new和delete中抛出了异常,导致内存泄漏,在lock和unlock之间抛出了异常导致死锁,C++经常使用RAII来解决以上问题。

2024-07-20 10:42:15 1001

原创 Linux:网络编程基础

协议本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计成为层状结构的。其实在网络角度,OSI 定的协议 7 层模型其实非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是 5 层协议。• 0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的端口号都是固定的.•局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac 地址判。PID和端口号是共生的,但是端口号才能做到网络通信!

2024-07-17 14:43:25 748

原创 Linux:多线程

生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。虽然上面加锁解决了会将票数抢到负数的问题,但是,我们发现一旦某个线程开始抢票,那么这个线程就会一直抢,从而导致别的线程不能抢票。tid是给用户提供线程的id,不是内核中的lwp,而是自己维护的一个唯一值,tid是一个地址(线程控制块的地址)!只适用不同的方法完成同样的目标罢了!

2024-07-13 13:48:35 1041

原创 复现ORB3-YOLO8项目记录

Thirdparty/fastdeploy-linux-x64-1.0.3/lib/libfastdeploy.so”,由“…这个项目的博主没有说应该用哪个版本的fastdeploy-linux-x64-1.0.3,我就先下载了fastdeploy-linux-x64-1.0.3版本,但是编译不过去。[CMakeFiles/Makefile2:126:CMakeFiles/ORB_SLAM3.dir/all] 错误 2 make: ***/Examples/RGB-D/rgbd_tum] 错误。

2024-07-12 15:58:11 1267 2

原创 MySQL:视图、用户管理、C/C++/图形化界面链接访问数据库、网页逻辑

接口函数使用文档:首先进入mysql官网:https://dev.mysql.com这样也行,因为我们设置的就是本地环回int main()//要使用库,必须先进行初始化!return 1;//初始化完毕之后,必须先链接数据库,在进行后续操作return 2;//关闭mysql链接mysql_closereturn 0;停止mysql,或者登录信息不对,都会造成链接mysql失败。链接mysql的信息在哪里查看,之前的博客都已经说过这里不再赘述!

2024-07-07 15:49:01 675 1

原创 复现YOLO_ORB_SLAM3_with_pointcloud_map项目记录

所遇到的问题是因为read_file_list()函数需要两个参数,而你在调用时只传递了一个参数。1.按照要求下载数据集,我下载的是rgbd_dataset_freiburg3_walking_xyz,将其解压到你喜欢的目录.我个人放在了evalution下。当然我看到有人说只需要把COMPILEDWITHC11改为COMPILEDWITHC14就可以了,这个我没有尝试,我只用了上面的方法,大家可以自己尝试。这个时2.3.1版本的,我们只需要将上面的数字换掉,然后直接浏览器粘贴就可以下对对应的版本!

2024-07-06 18:26:44 1117

原创 MySQL:事务

事务就是由一条或者多条SQL共同组成的一个集合体,这个集合体需要共同完成某个任务,这就是事务!!!**假设一种场景:**你毕业了, 学校的教务系统后台 MySQL 中,不在需要你的数据,要删除你的所有信息(一般不会:) ), 那么要删除你的基本信息(姓名,电话,籍贯等)的同时,也删除和你有关的其他信息,比如:你的各科成绩,你在校表 现,甚至你在论坛发过的文章等。这样,就需要多条MySQL 语句构成,那么所有这些操作合起来,就构 成了一个事务。

2024-07-04 16:15:22 1042

原创 MySQL:表的内连接和外连接、索引

索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。但是天下没有免费的午餐,查询速度的提高是以插入、更新、删除的速度为代价的,这些写操作,增加了大量的IO。它有着更高的IO场景,所以,为了提高基本的IO效率, MySQL 进行IO的基本单位是 16KB。如上面的5条记录,如果MySQL要查找id=2的记录,第一次加载id=1,第二次加载id=2,一次一条记录,那。用多少,加载多少不香吗?

2024-07-01 12:07:13 1062

原创 使用evo工具比较ORB-SLAM3的运行轨迹(从安装到解决报错)

我们跑完数据集会生成如图所示的轨迹。

2024-06-30 18:27:42 481

原创 保姆教程教你如何使用数据集运行ORB-SLAM3

链接:这篇文章是详细教怎么运行ORB-SLAM2的,那么下来我们就看看怎么运行ORB-SLAM3理论上ORB-SLAM2的环境也是可以跑ORB-SLAM3的,因为我之前试过,编译成功了,由于某些原因,我把虚拟机给删了。所以只能从头再来!还有就是远程连接虚拟机在windows上下载传到ubuntu上,我给大家推荐WinSCP这个软件,比我前面用的Xshell,Xftp好用多了!远程链接如果连接不上,大家自行网上搜索解决方案!

2024-06-29 17:12:21 811 1

原创 MySQL:内置函数、复合查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。自连接是指在同一张表连接查询。

2024-06-26 15:55:58 522

原创 MySQL:表的增删查改

增删查改:: Create(创建), Retrieve(读取),Update(更新),Delete(删除)

2024-06-20 17:27:13 446

原创 C++11(1)

arg_list中的参数可能包含形如_n的名字,其中n是一个整数,这些参数是“占位符”,表示newCallable的参数,它们占据了传递给newCallable的参数的“位置”。①左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。①右值也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引用返回)等等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值不能 取地址。

2024-06-19 15:29:09 783

原创 MySQL:表的约束

表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过技术手段,倒逼程序员,插入正确的数据!

2024-05-26 13:25:48 808

原创 MySQL库/表/数据的操作

当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符 占用2字节)。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。①引擎是 MyISAM,数据目中有三个不同的文件,分别是。

2024-05-25 11:16:28 898

原创 哈希表/哈希桶

①插入:根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放。②搜索:对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(Hash Table)(或者称散列表)该方式就和计数排序非常相似。

2024-05-24 16:40:02 323

原创 linux:信号深入理解

所谓同步和异步就是:比如我正在上课,我让一个学生去帮我拿快递,然后我停下等那个学生回来再继续讲,即同步。如果学生去拿快递,我不管他,我接着讲就是异步!信号的处理大致分为三种:a.默认动作b.忽略动作c.自定义处理—信号的捕捉core,temp都是终止,在本篇文章的后面会有更详细的介绍!信号产生的三种主要方式和两种不常用接口:如果把所有信号都捕捉,换成自定义动作那么怎么办?答:操作系统有些信号是不允许自定义捕捉的,比如9号信号killed。如果所有信号都能被捕捉那不乱套了!!!而且信号的发

2024-05-18 16:55:22 928 1

原创 MySQL数据库基础

⑤SQLite:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。在修改配置文件之后,重启数据库,然后要把我们原来创建的helloworld删除了,不能再原来的数据库里面直接写入中文,否则会报错!④PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。

2024-05-18 12:20:44 690

原创 Linux(Ubuntu)下MySQL5.7的安装

修改位于/etc/mysql/mysql.conf.d/mysqld.cnf 的配置文件,将bind-address=127.0.0.1修改成0.0.0.0,并添加 port = 开放的具体端口号,默认端口号为3306 ,即可实现开放外网访问和自定义端口的目的。此时mysql安装完成了,但是不能为我们的程序提供服务(使用连接工具现在是连接不上的)。修改host字段的值,将localhost修改成需要远程连接数据库的ip地址,或者直接修改成%,使所有主机都可以通过root用户访问数据库。

2024-05-18 10:05:06 1052

原创 红黑树!!

红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。最长路径≤最短路径×2。

2024-05-14 10:18:08 404

原创 AVL树!

②左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)如果一棵二叉搜索树是高度平衡的,它就是AVL树。①它的左右子树都是AVL树。

2024-05-13 10:04:25 185

原创 进程间通信

①既然父子进程要关闭不需要的fd(文件描述符),那为什么曾经要打开?可以看到父进程收消息,子进程发消息。这就是一个简单的管道的例子!②既然不需要刷新到磁盘,那么需要重新设计通信接口嘛?这个BUG会造成管道阻塞。

2024-05-04 11:24:10 732

原创 map和set

set就是key模型的搜索树map就是key_value模型的搜索树但是他们的底层不是搜索二叉树,是AVL树和红黑树!

2024-05-01 21:53:21 888

原创 两种类型的二叉搜索树

②KV模型:每一个关键码key,都有与之对应的值Value,即<Key, Value>的键值对。①K模型:K模型即只有key作为关键码,结构中只需要存储Key即可,关键码即为需要搜索到的值。比如英汉词典就是英文与中文的对应关系,通过英文可以快速找到与其对应的中文,英。再比如统计单词次数,统计成功后,给定单词就可快速找到其出现的次数,单词与其出。①若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。②若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。③它的左右子树也分别为二叉搜索树。

2024-04-29 14:54:10 272

原创 C++多态

总结一下派生类的虚表生成:a.先将基类中的虚表内容拷贝一份到派生类虚表中b.如果派生类重写了基类中某个虚函数,用派生类自己的虚函数覆盖虚表中基类的虚函数c.派生类自己新增加的虚函数按其在派生类中的声明次序增加到派生类虚表的最后。

2024-04-23 11:57:53 834

原创 C++继承

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承一定程度破坏了基类的封装,基类的改变,对派生类有很大的影响。类之间的关系可以用继承,可以用组合,就用组合。基类的其他 成员在子类的访问方式 == Min(成员在基类的访问限定符,继承方式),public > protected> private。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。

2024-04-19 15:17:26 700

原创 软硬链接与动静态库

它提供了一系列函数来控制终端的光标位置、颜色、文本输出等。使用ncurses库需要先初始化,然后使用各种函数来控制终端的输出和输入。ncurses库是一个用于控制终端屏幕输出和输入的库,可以用于创建交互式的命令行界面。上面的举例都是我们自己写的垃圾库,没什么应用价值。现在来说明一个真是应用的库:ncurses库!库加载和静态库没有关系,因为。

2024-04-17 18:03:27 377

原创 C++模板进阶

所以也就是说,知识具有滞后性。学到后面才知道前面为啥要那么做。前面还不知道这个的时候,写STL的底层可把我折磨坏了!

2024-04-15 12:13:06 353

原创 反向迭代器的底层

因此,只要你有一个满足上述条件的迭代器,这个适配器就可以适配你的容器。比如,你可以将这个适配器用于std::vector、std::list等STL容器的迭代器,甚至可以用于你自己实现的容器的迭代器(只要满足上述条件)。容器类名::const_reverse_iterator 迭代器名;②Ref:表示返回值的引用类型,通常是迭代器指向元素的引用类型。③Ptr:表示返回值的指针类型,通常是迭代器指向元素的指针类型。①Iterator:表示要适配的容器的迭代器类型。容器类名::iterator 迭代器名;

2024-04-14 18:15:16 339

原创 C++STL(stack类、queue类)

stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。

2024-04-13 19:25:58 827

原创 Linux文件IO

重定向之前提到了很多次,但都没有很好的理解它。今天让我们看看下图来进行深度理解!机械硬盘偏一并且存储量大,所以机房使用的都是机械硬盘。这便是dd指令的一个用法,当然其也可以用于制作系统镜像!首先来说一下怎么获取文件大小。

2024-04-12 10:25:41 351

原创 C++STL(list类)

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。

2024-04-08 14:52:40 337

原创 shell的编写

上面的shell为了和系统本身的shell做区分,所以前的路径都是绝对路径,一长串。这一步我们需要获取,命令字符串,因为有空格。我们知道shell是一直存在的,所以首先我们第一步就是要搭建一个框架,使其一直存在。我们可以从环境变量中获取,env查看环境变量。getenv函数就可以帮我们获取环境变量,可以获取用户名、地址等等!getenv获取成功就会取到那个对象,如果获取失败就会返回空!那么也很简单,一个while循环就可以完成。我们的shell最前面都是有一个命令行的。到这里,第一步就结束了!

2024-04-04 12:08:46 363

原创 C++STL(vector类)

首先vector是什么呢?vector就是顺序表1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。

2024-04-02 10:58:59 972

原创 环境变量与进程详解

宏(WNOHANG):非阻塞等待, 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。而我们自己编译完成的可执行程序得./a.out才可以运行,为什么不可以直接像ls那些一样直接运行呢?即pid>0,则表示等待制定的子进程退出。main中有时候带参数,有时候不带参数,那么这个参数到底是什么?当正常返回的时候waitpid返回收集到的子进程的进程ID;返回值:自进程中返回0,父进程返回子进程id,出错返回-1。阻塞等待就是父进程等子进程的时候什么也不做。

2024-03-26 17:19:36 640

原创 rikibot机器人调参

先看下面两步,按照另一个配置文件改!这个是模板,按照这个改上面的!

2024-03-25 13:38:49 577

原创 Linux调试器:gdb与linux(多)进程理解

假设有一个进程的时间片是2ms,那么这个程序要是在2ms内运行完成那么就没事,如果超过2ms,那么操作系统就会将这个程序从CPU上拿下来!然后放到程序队列的尾部,执行下一个进程!⑦ I/ O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。⑥上下文数据:进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。⑤内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。⑧记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

2024-03-22 11:28:04 820

原创 ROS2通信机制额外内容(2)

一个完整的机器人系统启动之后,其组成是比较复杂的,可能包含十几个、几十个甚至上百个节点,不同的节点可能又包含一个或多个通信对象(话题发布方、话题订阅方、服务端、客户端、动作服务端、动作客户端、参数服务端、参数客户端),通信时还需要使用到各种各样的msg、srv或action接口消息,那么在开发过程中,如何才能方便的获取这些节点、话题、服务、动作、参数以及接口相关的信息呢?①可以通过命令 -h 或 命令 --help的方式查看命令帮助文档,比如:ros2 node -h或 ros2 node --help。

2024-03-13 20:46:47 894

原创 ROS2通信机制额外内容(1)

经过前面四种通信机制的学习,ROS2的大致结构如下:当然,其中还有一些问题。

2024-03-12 20:57:31 1051

原创 ROS2参数服务的实现

保存参数的节点称之为参数服务端,调用参数的节点称之为参数客户端。参数客户端与参数服务端的交互是基于请求响应的,且参数通信的实现本质上对服务通信的进一步封装。导航实现时,会进行路径规划,路径规划主要包含,全局路径规划和本地路径规划,所谓全局路径规划就是设计一个从出发点到目标点的大致路径;上述场景中,就可以使用参数服务实现,在一个节点下保存车辆尺寸数据,其他节点可以访问该节点并操作这些数据。需求: 编写参数客户端, 获取或修改服务端参数。需求: 编写参数服务端, 设置并操作参数。然后colcon build。

2024-03-10 12:51:31 476

《数字通信原理》李白萍 张鸣 龙光利编著 西安电子科技大学出版社课后习题答案

本人为第一作者,希望大家不要导卖!!!23考研专业课130分,自己所编著的课后习题答案,里面包含所有题目的答案(真的是所有题目)不像别的资源一样坑人,挂羊头卖狗肉,一共38页,题目答案都是没问题的。如有需要相关辅导连理本人即可。

2024-01-04

基于Simulink的IDR卫星通信通信系统与SCPC卫星通信系统

IDR卫星通信通信系统基于MATLAB2009a SCPC卫星通信系统系统基于MATLAB2015b SCPC系统运行时,注意你的话音信号文件的位置,否则会运行报错。 注意在运行时首先要打开文件中的TX文件,拖拽到两个通信系统中,否则两个通信系统会有红框框显示缺失东西,因为TX中的东西是自己做的不是simulink库中含有的,除此之外还有个PPT是对两个系统的简单介绍,两个系统比较复杂,可以作为本科生毕业设计,课程设计,研究生通信相关课程大作业等。 由于论文牵扯个人信息,所以不便将论文放入。 且资源还包含两个通信系统的演示视屏。

2023-12-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除