自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多智能体路径规划算法(1.SIPP改良,考虑边约束)

比如对于agent1在t4时刻在(2,3)位置,在t5时刻在(3,3)位置。如果agent2在t4时刻在(3,3)位置,在t4时刻在(2,3)位置。如下图,如果这个地图中有agent1, agent2,其中agent1的优先级高于agent2,那么比如在t4时刻,agent2就不可以到达(2,3)这个位置。如何描述障碍物呢,通过点约束和边约束。高优先级的路径搜索出之后,每条路径就会产生点约束和边约束,低优先级在满足点约束和边约束的情况下进行A*搜索,搜索出一条路径。二、python代码。

2025-08-01 15:33:25 119

原创 计算机网络学习(一、Cisco Packet Tracer软件安装)

直接点击安装后的软件,它弹出登录界面,这个不登陆没办法使用。这个网址藏得很深很深。

2025-07-31 21:30:51 272

原创 STL学习(五、list容器)

inster(pos, beg, end) // 在pos迭代器位置插入另外一个list的[beg,end)之间的元素。list(beg, end) // 将另外一个list的【beg, end) 之间的元素拷贝到本身。也不能at,[]访问。resize(num,elem) // 如果变小,删除多余的,如果变多,elem填充。assign(beg, end) // 将[beg,end)之间的元素拷贝到本身。erase(beg,end) // 删除从[beg,end) 之间的元素。

2025-07-31 17:03:55 381

原创 STL学习(十一、常用的算数算法和集合算法)

/ 返回值为容器最后一个非零值对应的迭代器。// dest 目标容器开始迭代器。// dest 目标容器开始迭代器。// beg1 容器1开始迭代器。// beg2 容器2开始迭代器。// end2 容器2结束迭代器。// beg1 容器1开始迭代器。// beg2 容器2开始迭代器。// end2 容器2结束迭代器。// end 容器1结束迭代器。// end 容器1结束迭代器。// end 结束迭代器。// 求两个集合的并集。// 向容器中填充元素。// beg开始迭代器。// 计算元素累计和。

2025-07-30 17:10:40 262

原创 STL学习(十、常用排序、拷贝、替换算法)

public:v.push_back(Person("张三", 10));v.push_back(Person("李四", 20));v.push_back(Person("王五", 30));cout << "排序前" << endl;cout << "排序后" << endl;return 0;

2025-07-30 16:37:10 307

原创 STL学习(九、常用的遍历算法和查找算法)

v.push_back(Person("张三",18));v.push_back(Person("李四",19));v.push_back(Person("王五",20));vector<Person>::iterator it = find(v.begin(),v.end(), Person("张三",18));if(it!=v.end())cout<< "找到" << endl;elsecout<< "未找到" << endl;

2025-07-29 21:57:55 490

原创 STL学习(六、set容器)

值得一提的是,对于自定义消息类型的set,必须手动指明排序规则,不然编译器报错,因为编译器也不知道怎么排。cout<<endl;public:s2.insert(Person("张三",18));s2.insert(Person("李四",19));s2.insert(Person("王五",20));return 0;

2025-07-28 14:18:16 403

原创 C++学习(线程相关)

/ 这个锁的参数很有必要,因为上面给锁住了,所以需要先释放了锁才行,所以锁也需要作为参数传入,后面的就是条件,如果为True就等待。使用lock加锁之后,当子线程执行一般,此时还没释放锁,进入主线程,主线程也调用lock(),发现锁已经被占用了,于是就等待,之后时间片到了进入子线程,子线程程序执行完毕后释放锁unlock()。对于上面第一个的例子,存在主线程或者子线程打印一半,时间片结束,进入另外一个线程打印,导致乱码,为了解决这个问题,引入锁。f.get() // 读取函数的返回值。

2025-07-27 21:20:07 628

原创 解决ubantu系统下matplotlib中文乱码问题

之后便可以在自己/usr/share/fonts/MyFonts目录下看到很多字体。在需要使用中文字体的地方,如legend。最后的prop=myfoot比较关键。

2025-07-27 20:18:09 178

原创 STL学习(七、map容器)

erase(begin, end) / / [beigin, end), 删除迭代器这个范围的元素。find(key) // 若存在返回这个键值对应的迭代器,若不存在返回end迭代器。map(const map & mp) // 拷贝构造。erase(pos) // 删除迭代器所指向元素。erase(key) // 按照key删除元素。insert(elem) //向容器中插入元素。swap(st) // 交换两容器元素。size() // 返回容器中元素数目。

2025-07-24 21:11:03 251

原创 STL学习(八、函数对象,谓词,内建函数对象)

template<<class T> T multiplies<T> // 乘法仿函数。template<<class T> T negate<T> // 取相反数仿函数。template<<class T> T divides<T> // 除法仿函数。template<<class T> T minus<T> // 减法仿函数。template<<class T> T plus<T> // 加法仿函数。这里排序使用的仿函数就是STL自带的了,而不是自己写的了。

2025-07-23 22:34:53 744

原创 STL学习(四、队列和堆栈)

/ 重载等号操作符。back() // 返回最后一个元素。empty() // 判断堆栈是否为空。size() // 返回栈的大小。push(elem) // 往队尾添加一个元素。front() // 返回第一个元素。pop() // 弹出队头元素。// 向栈顶添加元素。// 从栈顶移除第一个元素。empty() // 判断堆栈是否为空。size() // 返回栈的大小。

2025-07-23 15:43:53 287

原创 STL学习(三、deque容器)

assign(beg, end) // 将其他deque的【beg, end)内容赋值到本身。insert(pos, begin, end) // 在pos位置插入别的deque[begin,end)区间元素。deque.resize(num) // 重新指定容器的长度为num,若容器变长,则以默认值补齐,若容器变。//短,则删除超过容器长度的元素。deque(beg, end) // 拷贝从别的deque的beg 到end 给本身。

2025-07-23 15:05:07 842

原创 STL学习(二、vector容器)

函数原型vector<int> v // 默认构造,size为0vector(const_iterator beg, const_iterator end) // 将v的[begin, end) 元素拷贝过来vector(n, elem) // 构造函数将n个elem拷贝到本身vector(const vector & v) // 拷贝构造。

2025-07-23 12:06:43 605

原创 STL学习(一、string容器)

int rfind(const string &str, int pos = 0) // 从pos开始查找 string最后一次出现的位置。int find(const string &str, int pos = 0) // 从pos开始查找 string第一次出现的位置。int rfind(const char * s, int pos = 0) // 从pos开始查找字符串最后一次出现的位置。string (const string &str) // 使用string 初始化。

2025-07-22 22:37:35 687

原创 关于使用vscode修改docker容器里面的代码

开始的时候我下载了vscode中的docker插件,他自动又给我安装了Container Tool插件,我可以直接使用Container Tool进入容器修改代码。但是碰到了这个问题,就是我修改cpp代码后,重新编译,但是修改无效。甚至我故意加上语法错误,但是编译还是可以通过。每次只有catkin clean一下,才可以重新编译,下面记录这个问题的解决办法。

2025-07-16 15:35:00 330

原创 最简单的实验室资产管理系统,使用Flask,mysql,html(四、知识补充)

GET请求的数据放在URL里,读取用。POST请求的数据放在请求体里,读取用。

2025-07-07 16:35:32 220

原创 最简单的实验室资产管理系统,使用Flask,mysql,html(三、实验室资产管理系统)

用户通过前端的按钮或者什么的触发回调函数向后端服务器发送请求,后端服务器接收到请求之后处理mysql数据返回数据给前端,之后前端再进行可视化。其中后端也会将请求日志保存下来。

2025-07-07 16:05:04 295

原创 最简单的实验室资产管理系统,使用Flask,mysql,html(二、使用DBeaver可视化管理mysql表格)

对于ubantu20.04下载Debian。之后在下拉菜单中选择新建数据库链接。双击表格修改,之后ctrl+s保存。点击下面的按钮新建数据。

2025-07-07 15:27:16 211

原创 最简单的实验室资产管理系统,使用Flask,mysql,html(一、如何在ubantu配置mysql)

本文介绍了MySQL数据库的安装、配置和基本操作。安装部分包括更新软件包、安装MySQL服务及检查运行状态。配置部分详细说明了如何创建数据库(lab_assets)并指定字符集和排序规则,创建用户(flaskuser)并授权,以及刷新权限等操作。数据表部分展示了如何创建资产表(assets),其中包含自增ID、资产名称、描述、状态(可用/借出)、借用人和借用日期等字段,并对每个字段的用途和特性进行了说明。该指南提供了完整的MySQL数据库设置流程,适用于实验室资产管理系统的数据库搭建。

2025-07-07 15:11:19 886

原创 c++学习(十、共享指针和一般指针)

2.如果一个共享指针a申请了内存,另另外一个共享指针b等于a,那么即使a,b都被reset了,那么这个内存其实只释放了一次。因为共享指针维护了一个计数器,他能计数有多少个共享指针指向了当前的内存,当计数为0的时候,才会释放一次内存。因为程序结束的时候,已经申请好的内存会被释放,但是共享指针也会释放它,所以相同的内存被释放了两次,所以报错。对于一般指针,使用delete释放内存,指针不会自动变null,如果此时操作指针,那么就会造成内存泄漏。主要用于管理对象生命周期,不支持指针运算,可通过。

2025-07-02 17:25:40 383

原创 c++学习(九、内联函数)

由于在代码区,main函数和需要调用的函数对应的指令没有放在一起,所以执行函数的时候需要跳转,所以肯定需要保存现场,至少要保存当前指令的指针,为了函数执行结束之后可以跳转回来。对于内联函数,它只直接把函数的代码嵌入到main区域,如果函数多次调用的话,他就会多次嵌入,缺点就是占内存,优点就是计算快了,因为不需要来回保存现场和跳转了。当我们使用类创建一个对象,之后再某些场景下调用这个对象的成员函数,编译器会直接将该对象的成员函数对应的代码直接嵌入到当前区域。

2025-07-02 10:23:13 280

原创 c++学习(八、函数指针和线程)

对于auto boundFunc = boost::bind(&CBSROS::updateObstacleThread, this);,this是对象,updateObstacleThread是成员函数,有对象有成员函数,绑定在一起返回一个函数,可以直接调用这个函数了,就相当于调用当前成员的成员函数。上面的代码相当于创建了一个线程类,线程类里面执行的是当前对象的成员函数,之后找到一个指针来指向这个线程类,用来管理线程,比如让线程开始或者结束等。函数指针调用时候应该是。

2025-07-01 22:37:20 394

原创 c++学习(六、面向对象编程)

当子类继承父类的时候,也会继承这个虚函数指针和虚函数表,指向和父类相同的虚函数,这个时候对子类进行virtual重载,那会就会重写这个虚函数指针和虚函数表,虚函数表里面是重载的函数。因为编译器不会自动提供默认构造,需要自己写默认构造。正常来讲函数是不属于类的一部分的,但是如果在函数前面加上virtual关键字,那么就会在类中产生一个指针,这个指针指向一个虚函数表,这个表就是函数储存的位置。假设有class A,A中有class B,那么构造函数的时候,先构造B后构造A,析构的时候,先析构A,再析构B。

2025-06-30 23:00:36 983

原创 c++学习(七、模版)

比如交换两个变量的值,如果两个变量都是int需要写一个函数,都是double又需要写一个函数,但是使用模版函数,只需要一个函数就可以了。对于下面的例子,对于模版T,如果传入一个参数是int类型,一个是char类型,模版T不知道自己是int还是char类型,所以会报错。当有两个自定义类型比较是否相等的时候,直接==就会有问题,需要做额外的处理,也就是定制模版函数,定制的模版函数优先调用。普通类的成员函数在类初始化的时候创建。对于下面的func,是一个模版函数,但是没办法确定T的类型,所以报错。

2025-06-30 15:18:52 778

原创 c++学习(五、函数高级)

当传入变量的时候,操作系统选择没有const的函数,当传入的是一个常量的时候,操作系统选择有const的函数。函数占位还可以有默认参数,有了默认参数就不需要传参数了。又会产生歧义,操作系统不知道调用哪个重载函数。3.函数的类型不同或者个数不同或者顺序不同。函数站位需要传参数,不然报错。1.在同一个作用域下。

2025-06-28 23:31:03 405

原创 c++学习(四、引用)

2.既然是指针常量,那么一旦初始化之后就不可以更改,这个很正常,因为比如c现在是一个指针常量,我怎么修改它的指向呢,直接c = xxx,这会自动被编译器识别是值的变化,如果是&c没有这个语法。1.不能返回函数内部的局部变量,因为函数执行结束之后,这个变量的内存就被回收了,但是却返回了这个内存,所以当访问这个内存的时候,相当于调用了野指针,就会内存报错。3.引用可以作为左值,只要理解引用的本质是一个指针常量,其实这1,2,3都容易理解。当引用作为函数的参数的时候,希望可读而不可写,使用这种方式。

2025-06-28 23:12:36 296

原创 c++ 学习(二、结构体)

调用函数的时候,希望这个结构体是可读而不可写的时候,传指针,使用const修饰,方式误操作。结构体的所有成员变量默认全部都是public的,而class默认都是private的。

2025-06-28 22:48:30 190

原创 c++学习(一、指针)

对于32位操作系统,指针4个字节,对于64位操作系统,指针占8个字节。所以通过这种办法还可以判断你的操作系统的位数。初始化指针的时候,可以初始化空指针,空指针地址0-255,无法访问这个地址里面的内容,如果访问会报错。野指针也不可以访问,因为操作系统并没有分配这部分内容,直接访问可能出问题。所以如果强制访问会报错。2.指针不可变,值可变 指针常量。1.指针可变,值不可变。3.指针和值都不可变。

2025-06-28 22:40:20 248

原创 c++学习(三、内存四区)

文章摘要:程序内存主要分为四个区域:代码区存放编译后的指令;全局区存储全局变量、静态变量和常量;堆栈区由系统自动管理,存放函数参数和局部变量,函数结束即释放;堆区通过new申请内存,需手动释放或程序结束时自动释放。不同区域的变量存储位置和生命周期存在显著差异。

2025-06-28 14:03:24 267

原创 机械师ubantu双系统(五)系统盘回复普通u盘

完成上述操作后,在u盘创建文件夹没问题。

2025-06-18 16:53:24 159 2

原创 YOLOv5检测红花(自制数据集)

下面的这个代码中,我的基本文件夹是/home/yzh/红花视频,在这个文件夹下有文件名为21, 22, 23, 24, 26五个文件夹,这段代码的作用是将这五个文件夹的图片放到同级文件夹combined_images下,所有图片会自动重新命名。因为我们有很多视频,每个视频都分割一个图片放到一个文件夹里面,之后进行标注为了方便,我们还需要把所有的图片放到一个文件夹,之后还需要给所有的图片命名。image_original_path:图片路径/home/yzh/红花视频/相对稀疏的/21.mp4。

2025-06-15 11:25:20 767

原创 ESP32的spi通讯(Arduino)

这个路径下找到ESP32SPISlave库文件,上面的路径都是安装的第三方库都放在这里,重启Arduino,如果情况和下面一样,那么安装成成功。直接下载会有-master,把这个后缀删除即可。编译代码,版本正确,路径正确,那么成功配置。如果搜不到这个开发板那就执行下面操作。最后设置编译,查看是不是用的这个库。esp32自己核心的库放在。导入到arduino。

2025-06-14 20:44:55 640

原创 ubantu截图flameshot

【代码】ubantu截图flameshot。

2025-05-26 11:49:55 355

原创 ubantu给github配置ssh

之后一路回车就可以了。

2025-05-26 11:41:08 322

原创 ubantu给普通用户配置sudo指令

最后一行添加如下内容,其中yzh是用户名,这个文件默认可读,可能还需要加写权限。使用下面指令验证sudo。第一次可能要设置密码。

2025-05-26 11:16:00 226

原创 docker部署XTdrone

由于修改了PX4 sitl_gazebo中的gazebo_gimbal_controller_plugin.cpp(源代码不能控制多无人机的云台),要再编译一次。在第四部安装gazebo的时候,实际上需要将xtdrone的gazebo_ros_pkgs放到一个工作空间中。Gazebo启动后,在另一个终端运行(注意要等Gazebo完全启动完成,或者可能脚本会报错)Gazebo包括Gazebo本身和ROS的插件,需要分别安装。首先卸载之前的Gazebo。编译完成后,会弹出Gazebo界面,将其关闭即可。

2025-05-25 23:00:07 707

原创 机械师安装ubantu双系统:三、GPT分区安装Ubantu

插入磁盘,重启系统,狂按F7(具体我也忘了),进入u盘启动模式,之后选择第三个UERF OS。选中空闲分区,点击加号,开始进行磁盘分区。之后出现下面的这个菜单,选第一个。第一个选EFI,分配500MB。右击左边灰色区域,点击属性。之后点击现在安装,开始安装。剩下的可以全部给根挂载点。所有附带软件正常安装。

2025-05-25 22:29:17 624

原创 机械师安装ubantu双系统:二、磁盘分区

如果发现可用压缩空间远小于磁盘的空闲空间,可以将磁盘的所有内容转到u盘里面,之后再从u盘复制到磁盘里面,出现这种现象的原因是磁盘存储的东西不连续。swap表示交换分区,当内存爆了或者程序挂起,会把数据放在这里。efi表示ubantu系统的引导程序。右击要分区的磁盘,之后点击压缩卷。将home和/放在一起。在搜索栏中搜索磁盘分区。home储存个人数据。

2025-05-25 17:30:54 358

原创 机械师安装ubantu双系统:一、制作系统盘

映像文件选择刚刚下载的ubantu.iso文件,设备选择自己的u盘,之后写入,等待。下载完成后一路安装就可以了。准备一个空的u盘,插入电脑。

2025-05-25 17:11:39 220

空空如也

空空如也

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

TA关注的人

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