- 博客(16)
- 收藏
- 关注
原创 无人机指南
在开始装驱动的时候,遇到了很多问题,最头疼的就是兼容性问题,t265的sdk最高支持版本是2.53,但是ros2控制深度相机源码的要求的最低sdk版本是2.56,所以就需要解决兼容性问题,不然colcon build会一直报错,主包的解决办法是修改realsense2_camera里的cmakelist.txt,搜索2.56,将2.56改成自己下载的版本,建议下载的是2.53版本,保存。对了提一嘴遥控器的校准,打开遥控器,然后用镊子戳遥控器接收器的一个小按钮,等到遥控器的光不闪烁,常亮之后就行了。
2025-06-15 19:06:03
1092
原创 匈牙利算法+卡尔曼滤波实现多目标跟踪
是卡尔曼滤波多目标跟踪中“谁是哪个”的关键步骤,也可以理解为目标匹配,因为在拍摄记录的每一帧中如果目标的位置发生了变化,怎么让计算机产生“记忆”,也就是能认出同一个物体在不同位置的表现。:通过构建尽可能多的0,这些0就表示这个工人做这个工作所付出的代价是0,用线覆盖这些0所在的行或者列,如果这些线等于n,就说明每个工作都找到了代价最小的工人来完成。不同的工人干不同的活所需要的薪水是不同的,同时每种工作不能有多个人干,计算不同搭配方式得出不同总代价,总代价最小的搭配方式如上。
2025-05-14 16:09:56
774
原创 PNP :距离计算器
pnp一般用在单目摄像头,因为单目摄像头不具有像深度相机那样可感知深度的能力,只能传来2D图像信息,于是这个时候就可以用激光雷达建立三维的世界坐标,然后就可以获得3D的信息,然后经过pnp解算,就能得到相机的姿态信息(包括三维世界中的位置还有姿态角,比如yaw,pitch,roll)。,没有旋转还有平移,第一步求得相机坐标就是世界坐标(1,2,5),然后除z,归一化得到平面坐标为(0.2,0.4),然后用公式得到像素点为(800*0.2+320,0.4*800+240)。水平方向是X轴(右正方向)。
2025-05-01 22:19:32
947
原创 leecode刷题记录(二):双指针
方法,通过维护两个指针,分别从数组的两端向中间逼近,同时保持两个变量(leftCeil 和 rightCeil)来记录左右两边的柱子高度的最大值。这样,代码能够在线性时间内计算出能接的水量。:使用多个循环,首先第一轮的循环先筛选出不是零的部分,然后计算原列表和非零列表的差,即0的个数,直接加到末尾。来遍历、比较、筛选或交换元素,以达到优化时间复杂度的目的。用两个指针同时操作数据,通常比用嵌套循环效率高很多。思路:使用双指针,此处为对撞指针。:双指针+上次讲过的哈希表。→ 为双指针和去重做准备。
2025-05-01 22:13:29
312
原创 leecode刷题记录(一):哈希表
**defaultdict()**是一种特殊的字典,这个字典的特点就是当访问的键不存在时,可以抛出一个‘空’来避免因为找不对对应的值而发生错误。 dict():创建一个字典,可以储存数据的键值对,然后就可以根据键寻找对应的值,增快寻找速度。:返回一个 迭代器,该迭代器生成一个元组,其中第一个值是元素的索引(位置),第二个值是元素的值。题目:给定一个数组nums,target,找到nums中两个数相加等于target的值的下标。哈希表可以理解为一种储存。
2025-05-01 15:10:25
583
原创 机器视觉之yolov8:实现物体检测
作用:训练数据集,首先选定模型,比如yolov8n(小型且准确度高),yolov8s(小型),yolov8m(中型),yolov8l(大型),然后导入上面我们写的yaml文件,epochs表示训练的次数,次数越多代表精确度越高,相应的需要的时间也越多。收集好了数据集之后,就需要在工作目录中新创建一个目录(dataset),然后按照下列的的顺序构建文件夹:iamges下的train和val存放的都是图像(jpg或者png),labels下的(train,val)放的都是解压后的txt。
2025-04-26 17:39:03
764
原创 Kalman Filter:卡尔曼滤波示例
数据融合:举个例子便于理解,在测量小车的姿态位置时,使用到了imu还有gps,imu的特点是可以实时测量但是具有一定误差,gps的准确率高但是实时性不高,会有几秒的更新时间,也就是说这两个都获取了数据但是各自的数据都有误差,我们每次取完这些数据的平均值时,同时也会得到一个方差,然后权衡利弊,按照一定的比例融合形成新的估计数据,通过数学运算,算出方差最小的比例(因为方差越小,稳定性越高)。:通过当前时刻的观测数据(测量值)对预测的状态进行修正,得到更准确的状态估计,并更新不确定性(协方差)。
2025-04-22 19:56:46
1925
原创 机器视觉之opencv:从理论到实践(二)
原理:因为图像中的边缘点经常是散乱的,或者噪音太大,不好判断这个边缘到底是不是共线的,可以创建一个二维坐标系,记录每个边缘点的坐标,然后霍夫空间就是一种可以把这个二位坐标系中的每个点转化为一条直线,你可以这么想,每个点都可能经过无数的直线,每条直线都会有不同的角度,还有到原点的距离,如果很多个点对应的霍夫曲线交在一点,就说明无数个二维空间中的点都经过这个直线,从而确定这个这条直线确实存在,即共线。概念和作用:找A图像在B图像中最相似的地方,可以用于在大物体里面寻找小物体,用于目标定位,物体检测,视频跟踪。
2025-04-11 21:39:04
1317
原创 机器视觉之opencv:从理论到实践(一)
插值是指在对图像进行几何处理时,给无法直接通过映射得到值的像素点赋值,也就是说在缩放的时候,有些点是无法映射的,插值就是用来处理这些多余的点的操作,比如当缩小图像时,使用区域插值方式(INTER_AREA)能够得到最好的效果;到图像上,contours是函数cv2.findContours返回的contours,contourldx是轮廓索引,一般用-1表示画出所有轮廓,color是颜色,(255,0,0)表示蓝色,thickness是线条的粗细,一般用-1代表填充整个轮廓。mat是要显示的图像。
2025-04-06 15:14:44
2039
原创 ROS2直通车
两个节点通信,最重要的方式就是话题(topic),话题可以看作是一个数据流,此时引入发布、订阅的概念,数据的生产者称为发布,数据的接受叫做订阅,话题上的数据是实时传输的,如果没有及时接受,数据就会丢失,话题可以看作是不同节点之信息传递的。:首先,为大家梳理这个项目所需文件的构建框架:这些功能包的构建 不熟悉的可以回顾文章最上面,有写怎么构建功能包的,构建功能包完毕之后,大家可以colcon build 一下,要是不想每次都加载环境变量,可以直接加到.bashrc中。:节点间的你问我答。
2025-03-20 09:48:20
697
原创 PCB学习及项目实践
然后对照封装信息给的焊盘的长和宽修改表贴焊盘的尺寸,一般要修改的比给的最大值要大,此处焊盘要设置为长圆形,最大长是b(0.48),最大宽是L1(1.04),然后都修改的稍大一点就好了,然后看封装图有八个表贴焊盘,根据尺寸画好图,修改好编号,固定住之后,打开顶层,框选原理图的某个模块,按住shift+x,就能打开对应的pcb模块,也可以按住pcb模块,找到对应的原理图模块,就PCB布局,将顶层的东西放好。1:老规矩,首先新建一个工程,然后查看这个板子的原理图,选元器件,改参数。
2025-03-18 20:10:40
853
原创 ros1和ros2的区别
选择 ROS 1快速验证算法原型。依赖现有 ROS 1 生态(如大量开源包)。选择 ROS 2需要实时性、分布式部署或工业级应用。长期维护和新项目开发。随着 ROS 2 生态的完善,新项目建议直接使用 ROS 2,尤其是涉及实际落地的机器人系统。
2025-03-05 19:01:53
902
原创 C语言学习
7:逗号运算符:用逗号链接两个计算式,以其右边的算式为结果,但是逗号的运算等级比较低,所以先算完两边的在进行逗号运算。2.字符运算:一个字符加一个数字得到ASCII码表中那个书之后的字符,两个字符的减,得到他们在表中的距离。4:调用c语言的逗号时,,f(a,b)中的a,b是两个数值,而f((a,b))计算的是b。for循环(i = 1;5:const是一个修饰符,加在int前面,表示一个不变的量,就不能再被修改了。7:const是一个修饰符,加在int前面,表示一个不变的量,就不能再被修改了。
2025-03-04 15:24:11
575
原创 PID学习
积分分离的设定,通过积分分离可以实现抗积分饱和(指机构达到极限输出能力,但是还是没有达到目标值,由于误差积累导致超调或失调),积分分离是指在累计误差小于某个阈值的时候才使用积分项,过大时就不再进行误差积累。PID是经典的闭环控制算法,具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点。pid的一些个人理解:P可以是一种动力,D相当于阻力,作用是始终阻止物块远离平衡位置,而I就是误差,现实中可能存在某种外力阻碍物体保持稳定状态,I的误差积分可以消除系统的静态误差。
2025-03-04 14:32:13
537
空空如也
OLED只能显示一部分
2024-12-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人