自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ROS动态参数 - dynamic reconfigure 动态配置参数

动态参数与普通参数的主要区别在于其修改时机和灵活性。普通参数(静态参数)只能在节点启动时通过launch文件或命令行设置,一旦节点运行,参数值无法动态修改,必须重启节点才能生效。而动态参数允许在节点运行过程中实时调整,无需重启,适用于需要频繁调整的场景,如机器人标定或导航参数调整。动态参数通过dynamic_reconfigure库实现,采用C/S架构,服务端集成动态参数服务器,客户端通过服务调用或可视化工具发送参数修改请求。动态参数的生命周期与节点绑定,节点关闭后参数自动销毁,增强了节点的封装性和独立性。

2025-05-09 16:48:06 750

原创 C++20新特新——02特性的补充

至此,我们对协程的学习就更进一步了;

2025-05-07 21:00:50 791

原创 C++函数栈帧详解

需要注意的是,上面这里我们是把10放进入了,如果没有把10放进入,此时就是默认提供的随机值,需要注意的是,在调用main函数之前,调用main函数的那两个函数的栈帧已经被创建好了!需要注意的是:ebp和esp维护的是当前执行的函数的栈帧空间,而不是整个程序的栈帧空间!在不同的编译器下,函数调用过程中栈帧的创建是略有差异的,具体取决于编译器的实现!截止到现在,做的都是初始化相关的任务,此时才开始到函数体内执行对应的任务;其中,上面一堆的逻辑和main函数一样,都是开辟对应的空间,然后进行初始化;

2025-05-07 20:59:40 951

原创 Linux第20节 --- inode和文件系统

一、没有被打开的文件如果一个文件没有被打开,那么该文件存储在哪里?该文件是存储在磁盘当中的!文件 = 文件内容 + 文件属性!如上图所示:绿色的是磁道,红色的是扇区;磁盘中,一圈同心圆被称为磁道,磁道会被且为一小段一小段的区域,这一小段区域被称为扇区!磁盘会被分为无数个扇区;磁盘被访问的最基本单元是扇区;一个扇区大小通常是512字节,甚至有4KB;我们可以把磁盘看作是无数个扇区构成的存储介质;要把数据存储到磁盘,第一个要解决的问题就是定位一个扇区!

2025-05-03 23:56:39 1187

原创 C++20新特新——01协程的入门及一些语法知识

C++20 引入了 指定初始化器(Designated Initializers) 语法,允许在初始化聚合类型(如结构体或数组)时,通过成员名称显式指定初始化值。语法要求 指定初始化器只能用于初始化 聚合类型(没有用户自定义构造函数、私有/保护的非静态成员、基类或虚函数的结构体/类)。初始化器中使用的名称必须是聚合类型的成员名称。 C++ 不允许打乱成员的初始化顺序,必须按照成员在聚合类型中的声明顺序进行初始化。这与 C 语言不同(C 允许任意顺序)。 可以跳过某些

2025-05-03 04:58:46 1279

原创 AimRT从入门到精通 - 04RPC客户端和服务器

服务通信也是ROS中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。也即:一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。比如如下场景:在上述场景中,就使用到了服务通信。与上述应用类似的,服务通信更适用于对实时性有要求、具有一定逻辑处理的应用场景。概念 服务通信是以请求响应的方式实现不同节点之间数据传输的通信模式。发送请求数据的对象称为客户端,接收请求并发送响应的对象称之为服务端,同话题通信一样,客户端和服务端也通过话题相关联,不同的是服务通信的数

2025-05-02 16:16:01 970

原创 AimRT从入门到精通 - 03Channel发布者和订阅者

刚接触AimRT的小伙伴可能会疑惑,这个Channel和RPC(后面讲的)到底是什么呢?但是当我们接触了之后,就会发现,其本质类似ROS的Topic通信!(其本质基于发布订阅模型)接下来这里我们回顾一下ROS的Topic;

2025-05-02 16:14:11 1299

原创 AimRT从入门到精通 - 02执行器Executor

执行器是AimRT六大模块之一,其主要作用是当我们向其传递任务的时候,可以对任务进行执行;AimRT中关于执行器的种类有很多,但是大致是基于普通的执行器executor、基于协程的执行器executor co这两种执行器进行开发和改进的;

2025-05-02 16:11:32 987

原创 AimRT从入门到精通 - 01实现一个helloworld

CMake 策略是 CMake 用来管理版本兼容性的一种机制。随着 CMake 的更新,某些旧功能的行为可能被修改或废弃。为了保持向后兼容性,CMake 引入了“策略”的概念,每个策略对应一个特定的行为变更,并通过编号(如。

2025-05-02 16:06:11 1146

原创 Protubuf入门 --- 01基本语法与编译使用

字段类型 字段名 = 字段唯一编号字段名称命名规范:全⼩写字⺟,多个字⺟之间⽤ _ 连接。标量数据类型和特殊类型(包括枚举、其他消息类型等)。⽤来标识字段,⼀旦开始使⽤就不能够再改变。// 定义联系人message需要注意的是,两个字段如果使用相同的字段编号就会报错!这里的标量数据类型与C++的内置数据类型相似,在编译后会转化为C++中对应的关系;这里的变长编码指的是:经过protobuf 编码后,原本4字节或8字节的数可能会被变为其他字节数。

2025-05-02 16:03:59 659

原创 Linux第19节 --- 用户缓冲区和文件系统

假设我们当前正常使用四个函数进行往显示器进行打印数据:此时无论是直接显示还是重定向到文件中,都可以正常显示!但是当前我们如果在代码结尾处加上fork();通过结果我们此时可以发现:加上fork()之后,此时在显示器上可以正常显示!但是如果重定向,此时的打印结果变得不一样!

2025-03-12 23:59:06 848

原创 Linux_17进程控制

list指的是像链表一样一个节点一个节点的进行传递(参数为可变参数);所有的exec* 系列的函数的第一个参数都是为了找到执行该程序的地址;找到该程序后应该怎么办?主要是确定如何执行该程序,该程序需不需要覆盖选项?(命令行中如何传,此时我们就如何传)带p指的是:PATH,也就是说execlp会在自己默认的PATH中进行查找!虽然这里显示我们调用写了两个ls,但是实际上!第一个参数ls是为了确定在哪里找到整个程序(即我们需要执行谁)!第二个ls是为了确定我们需要怎么进行执行!这里的v指的是数组!

2025-03-12 23:58:21 1050

原创 Linux_16进程地址空间

上述情况(页表映射,访问物理内存等)一定发生在该进程被执行的情况!一般来说,CPU会根据总线来访问内存;在32位机器上,有32位地址和数据总线!CPU与内存连接起来的线称为系统总线;内存和外设连接起来的线称为IO总线;内存内也有一个地址寄存器;根据地址总线的高低电平,然后在内存里面的地址寄存器寻址,从而找到对应的内存的地址;计算机内数据的拷贝,本质上一个设备向另一个设备充放电的过程!(硬件角度)对于一个进程,操作系统除了需要创建PCB,还要创建对应的进程地址空间的结构体!

2025-03-11 23:59:12 942

原创 Linux第18节 --- 重定向与文件IO的基本认识

增删查改对文件的管理即:先描述再组织!默认情况下,C/C++会打开三个标准流(输入,输出,错误) --- > 一个进程可以打开多个文件;当以"w"的形式读取一个文件的时候,如果该文件不存在,会创建一个新文件;此时创建文件的时候,默认是在当前路径下创建文件!(什么是当前路径?即当前该进程运行的时候,所对应的路径!当前路径:当前进程的cwd路径!如果我们想要改变当前的工作路径,可以通过系统调用接口chdir来实现!如下所示:此时新创建的文件就会在我们chdir指定的路径中!fopenfopen。

2025-03-11 20:53:12 873

原创 Linux第十四节 — 环境变量和进程地址空间

环境变量是系统提供的一组name = value形式的变量,不同的环境变量有不同的用户,通常具有全局属性;直接通过关键字export即可!

2025-02-22 20:25:15 819

原创 Linux第十三节 — 进程状态详解

只要一个进程的PCB还存在内存当中,哪怕此时该进程对应的代码和数据已经在磁盘当中,此时依然认为该进程仍然存在!

2025-02-22 20:24:58 941

原创 Linux第十二节 — 进程概念详解 + 操作系统引入

PPID是父类进程!可以使用getppid()获取父类进程PPID号码!--- 第二个系统调用!重新启动后进程的pid值会发生变化,但是ppid一直不变!此时我们可以自己查看父类进程!(21823为上面一直没有变化的PPID的值!bash就是传说中的王婆,当我们运行一个进程的时候, 命令行解释器会将指令解释成bash的子进程,由子进程执行对应的命令!而一旦子进程出现问题,不会影响bash进程!

2025-02-19 14:13:27 672

原创 C++_022栈的基本使用

概念:deque(双端队列:是一种双开口的连续空间的数据结构,双开口的含义是:可以在头尾两端进行插入和 删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比 较高。deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组,其底层结构如下图所示:数据都存储在每个buff当中,且有一个中控数组,实际上是一个指针数组(包含了指向每个buff的指针)

2024-11-29 03:57:47 1077

原创 数据结构与算法12 - 二叉树(一文搞定二叉树!)

普通的二叉树没有实际价值,真正有意义的是搜索二叉树!搜索二叉树满足左子树都比根节点小,右子树都比根节点大;普通二叉树的增删查改也没有太大的意义,因为对于普通的二叉树来说没有特定的限制,我们不知道将数据插入到哪里有意义,因此这里我们不研究二叉树的增删查改;

2024-11-29 03:56:21 1070

原创 数据结构与算法10 - 栈+队列+二叉树引入

完全二叉树:假如我们的树有K层结构,满足前K-1曾都是满二叉树,最后一层要求从左到右是连续的,满足上面两个条件即为完全二叉树;整个数组是用一个大的结构体数组,其中每个元素都是一个小数组,元素中分别对应值和下一个元素的下标。满二叉树:一个二叉树,如果每一层的结点数都达到最大值,则这个二叉树就是满二叉树;假设当前有4个数据插入栈中(插入顺序为1,2,3,4),此时如果想按照队列出数据,我们应该把1pop!(栈的数据倒一圈就翻过拉了!问题:如果已知结点的个数为N,那么满二叉树的高度和完全二叉树的高度分别为多少?

2024-11-28 05:12:43 868

原创 数据结构与算法11 - 堆

但是此时有一个。

2024-11-28 05:09:02 808

原创 C++第十四节课 string接口函数

对于operator来说,第二个重载函数的const修饰的是*this,也就是说调用[]的对象的值不能改变!底层的判断可能跟有效数据的个数有关,当调用clear清除有效数据的时候,大概率会执行缩容!对于上面的代码,默认reserve想要开辟的空间为100,但是实际开辟的大小为111!作用:获取一个字符在字符串中的位置,同时,at也支持字符串的修改!扩容是要付出代价的,如果是原地扩容的效率还可以,但如果是异地扩容的话效率会比较低!指定pos位置的时候,搜索只从pos位置之前开始找,pos位置之后不搜索!

2024-10-10 19:10:41 640

原创 C++第十六节课 万字详细手动实现string类!

接下来我们可以尝试利用缺省参数将两个string写到一个函数里面:(常量字符串末尾自带/0)

2024-10-10 19:08:03 1230

原创 C++第十一节课 new和delete

对于内置类型,一般不会出现大问题;但是对于自定义类型:直接会引发程序崩溃!

2024-09-20 22:31:30 1325 1

原创 С++第十三节课 string初体验

字符串中是指针。

2024-09-20 22:22:21 1537

原创 C++第十二节课 模板初阶和string引入

我们不需要写具体的函数,而是写这个函数的模板,编译器会根据模板生成对应的函数;两者的作用是等效的!用模板完成的功能有时候也叫泛型编程;可以通过定义多个模板参数来实现;函数模板根据调用,自己退到模板参数的类型,实例化出对应的函数;答案:不可以!规定不可以!

2024-09-19 15:35:20 768

原创 C++第八节课 日期类的补充

(这里一个是日期类对象,还有一个是cout,cout是一个类对象---ostream的类对象!(也就是iostream这个头文件里有ostream类,cout是ostream这个类定义的对象!但是对于d1 + 100,此时d1的值没有被修改,因此运算符重载+函数可以上const来修饰!因为this修饰为const,则*this无法修改,this指向的对象内容无法修改!成员函数后面加上const之后,普通对象和const修饰的对象都可以调用!但是成员函数中的this是隐含的,我们无法修改它!

2024-09-19 15:04:33 1137

原创 C++第七节课 运算符重载

例如:日期减日期可以求得两个日期之间的天数;但是日期 + 日期没有意义!但是,直接放入类中会报错:因为成员函数的第一个参数为隐藏的this!此时调用函数是采用成员函数的方法调用,且依然可以直接进行比较!

2024-09-18 03:19:26 1693

原创 C++第六节课 - 拷贝构造函数

一般情况下,构造函数都需要我们自己去写!但是有两种情况自己可以不用去写构造函数:且对于不同的编译器来说,有的可能也会对内置类型的成员变量进行初始化!下面分别是在VS2013和VS2019中的结果:return之后调用析构函数!注意点:假如当前有一个成员变量如下:这里的_a[100]需不需要使用析构函数来释放?答案是:不需要,析构函数用于释放动态申请的资源,例如下面所示,对于静态的资源(在栈上),不需要我们去手动的释放,出了作用域会自动销毁!(如果定义的是全局对象或者静态对象->不在堆上不需要自己手动释放的,

2024-09-18 00:36:32 1123

原创 C++第五节 - this指针、构造函数、析构函数

此时会发现自定义类型_st被初始化,但是内置类型没有被初始化!

2024-09-11 02:58:33 1182

原创 C++第四节课 - 内联函数 + 初认类

C++中将struct升级为了一种特殊的类(主要是为了兼容以前的C)- class:默认的成员访问控制是 `private这意味着如果没有显式指定访问修饰符,类的成员(变量和函数)将是私有的。- struct:默认的成员访问控制是 `public这意味着如果没有显式指定访问修饰符,结构体的成员将是公共的。int x;// 默认 privateint x;// 默认 public- class:在继承时,默认的继承访问控制是 `private`。

2024-09-11 00:17:34 1084

原创 C++第三节入门 - 引用详解

(引用不能指向。

2024-09-10 01:49:57 1056

原创 C++第二节入门 - 缺省参数和函数重载

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数的时候,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参!2、 缺省参数分类 全缺省参数(给所有的参数指定一个值) 缺省参数的值从左到右依次赋予! 传参是从左往右依次传参! 中间不能隔着给值应用示例:通过缺省参数我们可以默认给栈的初始化赋值为4,如果这个栈过大,存放的数据过多,会一直不断扩容造成效率低下,因此可以使用缺省参数的形式避免这种情况!注意点:缺省参数不能在函数声明和定义中同时出现(且只能在函

2024-09-10 01:49:24 761

原创 数据结构与算法03 顺序表+链表

1、中间头部插入删除数据,效率低下;2、空间不够,需要扩容,但是扩容会有一点的时间消耗,且在空间上可能造成一定的空间浪费!

2024-09-09 03:26:27 1002

原创 C++第一节入门

正常的命名空间定义定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型!// 命名空间中可以定义变量/函数/类型int val;命令空间可以嵌套int a = 0;int b;int a = 2;int d;此时N1和N2的a为两个不同的变量!int main()// 访问N1中的a// 访问N2中的areturn 0;

2024-09-09 03:21:23 1053

原创 数据结构与算法02 - 复杂度

这里只创建了3个变量,为常数个,因此空间复杂度为O(1)。 其空间复杂度为O(n);累计调用Fac从Fac(N) ~ Fac(0)共调用n + 1次(要创建函数栈帧),因此空间复杂度为O(n)下面F1()和F2()打印的值一样吗?Vs下打印的结果相同,在同一块区域进行相同的函数栈帧的创建和销毁!空间复杂度为:O(N)!原因:递归的过程中空间是不断创造和销毁的过程,调用Fib()时先在一侧调用完后返回,此时空间被销毁,然后再重新创建新的空间的过程!GTP解释:在递归算法中,空间复杂度通

2024-09-07 21:28:53 718

原创 Linux第十一节课 - 进程

通过ls查看会发现根据ID号码排列的一个个目录, 系统当中启动的所有进程,默认会在 /proc下面创建一个以该进程PID命名的文件夹!例如网卡出现问题,这时,驱动程序会将有问题的数据报告给操作系统,此时操作系统检测到硬件网卡出现问题,操作系统自动修复,如果修复不了就向上报给用户说明故障!同样的,描述一个进程的时候,如果进程的描述属性足够多,那么我们就可以确定具体的进程!内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针(方便找到对应的数据)操作系统必须对所有的进程管理起来!

2024-09-07 21:27:58 1525 1

原创 Linux第十节课 - gdb + 冯诺依曼体系结构

加了存储器之后,需要将输入设备传入存储器,存储器再交给运算器和控制器后进行计算,然后再返回给存储器,再交给输出设备(串行!

2024-08-15 14:49:33 1268

原创 Linux第九节课 - git / gdb

张三可以是新手程序员李四可以是老手程序员老师可以是产品经理 / 项目经理这个软件就是git ---> 可以保存在本地仓库(在自己电脑下创建一个目录保存),也可以推送到远端仓库(百度云盘);能够做版本管理的软件除了git还有svn(git是开源的!其他软件要收费)具有网络功能的版本控制器;开源的;client和server是一体的;历史有一家公司免费给Linux社区使用,但是有其他程序员尝试自己破解该软件 --->>> 自己研制处git!

2024-08-15 14:17:53 1035

原创 C语言作业二

三角形判断(牛客)

2024-08-02 21:53:32 447

Python的学习笔记第二节 - Numpy

基于Numpy的学习笔记

2024-02-17

空空如也

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

TA关注的人

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