2019电赛--无人机题目OpenMV总结

2023-05-16

此文章在我的博客链接:https://sublimerui.top/archives/d508d500.html


NOTES:上一篇相关博文,准备阶段OpenMV学习笔记链接
https://blog.csdn.net/qq_41462923/article/details/97518023
https://sublimerui.top/archives/f10b0e1a.html


2019年电赛,前前后后经历了四天吧。从8月7好开始,到10号结束,浑浑噩噩,不分白昼地为了无人机的题目而努力吧。我的队友负责飞控,我也就负责视觉模块OpenMV程序的编写啦。虽然比赛下来感觉发挥不是特别好,但还是有所收获吧。这里,我把比赛自己用到的相关程序代码贴出来并做了简要总结。

无论如何都不能放弃呀!勤做笔记,加油!

无人机题目分析

今年的电赛题目着实让人觉得出题挺新颖的。新颖的同时,困难度就直线提升了(呜呜呜,我们队就是受害者之一,说好的光流可以定点呢,结果那种灰白条纹地面根本就定不住,真的想狠狠地吐槽一下砖家组

哎,做下来大部分时间懵逼,都是一把辛酸一把泪呀~

言归正传,今年的电赛无人机题目B题——巡线机器人,具体要求是让我们的无人机从一个杆起飞,沿着线飞向宁一个杆,飞行过程中会拍摄条形码和二维码,绕杆一圈后,再降落。题目如下:

题目1
题目2
题目3
题目4
题目5
题目6
题目7

PS:这里附上2019年电赛的各方向题目,已经放在Github上:2019电赛题目.zip

分类

题目中,涉及OpenMV的部分,主要可以分为以下几类吧:

  1. 识别并拍摄条形码和二维码,储存于SD卡中;

  2. OpenMV巡线(此方法是由于实际比赛中发现无法用光流在灰白条纹地面上定点,即无法控制其水平方向的误差偏移)

    • 方法一:识别并拟合两条杆之间线缆的直线,返回偏差距离和偏差角度(缺点:OpenMV视野横向不丢失距离太小了);

    • 方法二:拟合识别条纹边缘(由于条纹宽度规定了,可以寻找灰白条纹和外部白色地面的交界处),拟合出边缘直线,返回偏差距离和偏差角度(相对来说更稳定,这也是我们队最后用的方法);

  3. 识别并返回环形圆板中心红点坐标位置,使飞机定圆点(发挥部分)

  4. 其他(例如起飞后用OpenMV识别靠杆,识别到特定标志后开始绕杆等等)

逐类型分析

拍摄条形码和二维码并储存SD卡

有关于条形码和二维码的讲解我已将在上一篇博文中有所总结和归纳了,这里,直接贴上我写的部分代码吧,全部代码已经放在我的Github上面了,需要的话可以自己下载呐~

自己手写的完整程序已放在Github上:shot_images_to_save.py

  • 条形码和二维码拍摄:
    函数shot_images_while_tracking_lines()用于拍摄并储存找 照片于SD卡中。其中,此段程序会分别对条形码连续循环拍3三张,分别命名为“barcod_1.jpg”,“barcod_2.jpg”和“barcod_3.jpg”(二维码同理),只要OpenMV插上了SD卡后,一旦识别到相关条码后,便会拍摄并自动保存到卡中。
    完整程序代码中,如果识别到条形码,OpenMV就会闪绿灯拍照;识别到二维码后,OpenMV会闪红灯拍照。
############ 拍照 ###############

barcode_num = 0
qrcode_num = 0

# 拍摄照片
def shot_images_while_tracking_lines():
    #global had_finished_barcode, had_finished_qrcode
    global barcode_detected, qrcode_detected, barcode_num, qrcode_num

    if barcode_detected: #and (not had_finished_barcode):
        #sensor.set_framesize(sensor.QVGA)
        #barcode_detected = 0

        if barcode_num <= 3:
            barcode_num += 1
            barcode_name = "barcode_" + str(barcode_num)
            sensor.snapshot().save(barcode_name + ".jpg")

            print(barcode_name + ".jpg is saved!")
            time.sleep(5)


            if barcode_num >= 3:
                barcode_num = 0
                #barcode_detected = 0
                print("bar:", barcode_detected)
                #had_finished_barcode = 1
                return True

    if qrcode_detected: #and (not had_finished_qrcode):
        #sensor.set_framesize(sensor.QVGA)
        #qrcode_detected = 0

        if qrcode_num <= 4:
            qrcode_num += 1
            qrcode_name = "qrcode_" + str(qrcode_num)
            sensor.snapshot().save(qrcode_name + ".jpg")

            print(qrcode_name + ".jpg is saved!")
            time.sleep(5)

            if qrcode_num >= 3:
                qrcode_num = 0
                #qrcode_detected = 0
                print("qr:", qrcode_detected)
                #had_finished_qrcode = 1
                return True
  • 识别条形码(识别黄色)和二维码(二值化后计算像素点,设置阈值):
    此段程序中,函数count_pixels_with_movement(img)用于识别并判断识别条形码和二维码的条件和阈值。以条形码为例,这里通过色块识别的方法,调用img.find_blobs()函数,通过设置黄色阈值,达到识别到黄色条码的目的。其中,barcode_pixels_threshold是一个列表,储存的2个元素分别是黄色阈值下限和上限。
    此外,我也尝试运用统计像素点的方式去识别二维码和条形码(这里已经被注释掉),其方法是先将图像按照一定的阈值二值化后,调用img.get_pixel()函数,统计满足像素值为255(即白色)的像素个数,同时,设定特定的像素阈值(如qrcode_pixels_threshold等等,与黄色检测同理,也有阈值上下限两个阈值),也可以达到同样的效果。
############ 像素识别 ###########

barcode_cnt = 0
qrcode_cnt = 0
pole_cnt = 0
LED_ON = 0

def count_pixels_with_movement(img):
    global x_width, y_height
    global barcode_detected, qrcode_detected
    global barcode_cnt, qrcode_cnt, pole_cnt
    global LED_ON

    blob = img.find_blobs(barcode_pixels_threshold, pixels_threshold=150, area_threshold=150, merge=True, margin=5)
    if blob:
        pass
        for i in blob:
            img.draw_rectangle(i.rect(), color = 127)
            barcode_detected = 1
            LED_ON = 1
            print("132123132131313131112311231") #测试用,可删除
            print("aaaaaaaaaaaaaaaaaaaaaaaaaaaa")
            return
    else:
        barcode_detected = 0
        LED_ON = 0
        return
    x_pos = 0
    y_pos = 0
    total_white_pixels = 0
    for x_pos in range(x_width):
        for y_pos in range(y_height):
            if img.get_pixel(x_pos, y_pos) == 255:
                total_white_pixels += 1

    #print("total white pixels are", total_white_pixels)
#    if total_white_pixels >= verticle_pixels_threshold[0] and \
#            total_white_pixels <= verticle_pixels_threshold[1]:       #直角
#        singleline_check.is_verticle = 2

#    elif total_white_pixels >= track_line_pixels_threshold[0] and \
#            total_white_pixels <= track_line_pixels_threshold[1]:     #巡线
#        singleline_check.is_verticle = 1

    if total_white_pixels >= barcode_pixels_threshold[0] and \
            total_white_pixels <= barcode_pixels_threshold[1]:        #条形码
       if barcode_cnt >= 0 and barcode_cnt <= 49:
            barcode_cnt += 1
       if barcode_cnt == 50:
            barcode_cnt = -1
            barcode_detected = 1

    #        LED(1).toggle()  #红灯
    #        time.sleep(200)
    #        LED(1).toggle()

    #if total_white_pixels >= qrcode_pixels_threshold[0] and \
    #        total_white_pixels <= qrcode_pixels_threshold[1]:         #二维码
    #    if qrcode_cnt >= 0 and qrcode_cnt <= 49:
    #        qrcode_cnt += 1
    #    if qrcode_cnt == 50:
    #        qrcode_cnt = -1
    #        qrcode_detected = 1

    #        LED(3).toggle()   #蓝灯
    #        time.sleep(200)
    #        LED(3).toggle()

    #elif total_white_pixels >= near_the_pole_threshold[0] and \
    #        total_white_pixels <= near_the_pole_threshold[1]:         #到达杆
    #    if pole_cnt >= 0 and pole_cnt <= 49:
    #        pole_cnt += 1
    #    if pole_cnt == 50:
    #        pole_cnt = -1
    #        send_flag.pole_is_near = 1

    print("the flags are: %d %d %d"%(barcode_detected, qrcode_detected, send_flag.pole_is_near))   #测试用,可删除

OpenMV巡线

自己手写的完整程序已放在Github上:detect_and_track_edges.py

方法一(拟合两杆间直线)

巡线的时候,使用的是最小二乘法的线性回归算法,即运用img.get_regression()函数(这里打开了鲁棒算法robust = True,效果更好),计算其拟合直线后的结果,并拥有两个返回值(误差偏离值singleline_check.flag2.rho()和偏角值singleline_check.flag2.theta()

#找线
def found_line(img):
    #对图像所有阈值像素进行线性回归计算。这一计算通过最小二乘法进行,通常速度较快,但不能处理任何异常值。 若 robust 为True,则将
    #使用泰尔指数。泰尔指数计算图像中所有阈值像素间的所有斜率的中值。thresholds:追踪的颜色范围
    singleline_check.flag2 = img.get_regression([(255,255)], robust = True)
    if (singleline_check.flag2):
        #print(clock.fps())
        singleline_check.rho_err = abs(singleline_check.flag2.rho())-0 #求解线段偏移量的绝对值
        if singleline_check.flag2.theta()>90: #求解角度的偏移量
            singleline_check.theta_err = singleline_check.flag2.theta()-0
        else:
            singleline_check.theta_err = singleline_check.flag2.theta()-0
        #在图像中画一条直线。singleline_check.flag2.line()意思是(x0, y0)到(x1, y1)的直线;颜色可以是灰度值(0-255),或者是彩色值
        #(r, g, b)的tupple,默认是白色
        img.draw_line(singleline_check.flag2.line(), color = 127)
        #print(singleline_check.theta_err)

拟合示意图如下,(其中,红色的为拟合直线):

拟合直线

PS:此方法准确度较高,但是OpenMV图像视野范围有限。当直线从图像视野最下端到达最上端,换算成无人机横向移动的距离仅有5-10cm,当无人机超出此范围时,将无法获取直线了,有一定的局限性。

方法二(拟合识别条纹边缘)

此函数track_edges(img)中,同样使用img.find_blobs()找色块的方法,其中运用了简单角度和距离的计算方法。并返回条纹底色边界线的拟合直线,此函数的计算结果为拟合直线距离画面左边界距离rho和中心线的偏离角度theta

def track_edges(img): #invert = True
    blobs = img.find_blobs([edge_thresholds], pixels_threshold=50, area_threshold=50, merge=False, margin=5)
    if blobs:
        sum_x = 0
        sum_theta = 0
        for i in range(len(blobs)):
            img.draw_rectangle(blobs[i].rect(), color = 127)
            sum_x += (blobs[i].x() + blobs[i].w())
            sum_theta += math.degrees(blobs[i].rotation())

        per_x = sum_x / len(blobs)
        per_y = y_height / 2
        per_theta = sum_theta / len(blobs)

        if per_theta >= 0 and per_theta < 90:
            true_theta = 90 - per_theta

        elif per_theta >= 90 and per_theta <180:
            true_theta = (180 - per_theta) + 90

        print("per_x: %d per_y: %d true_theta: %d"%(per_x, per_y, true_theta))
        horizontal_line = (int(per_x), int(per_y), 0, int(per_y))
        centre_cross    = (int(per_x), int(per_y))

        img.draw_line(horizontal_line, color = 127)
        img.draw_cross(centre_cross, color = 127)

        singleline_check.rho_err = int(per_x)
        singleline_check.theta_err = int(true_theta)

    line.flag = 1
    uart.write(pack_linetrack_data())

拟合示意图如下(其中,红色的为拟合直线):

拟合直线

这样,当检测到条纹边界的时候,会计算拟合出条纹边界的直线。

PS:注意,使用这种方法一定要打开白平衡和自动增益!!!非常重要!!!我们队就吃了这样的亏,使得OpenMV距离地面较近的时候识别正常,一旦远离地面一定距离后,图像中将无法识别边界直线!!!

#在这里,应该将自动增益和白平衡打开
sensor.set_auto_gain(True)
sensor.set_auto_whitebal(True)

飞机悬停定圆点

定特定颜色的原点时,将运用img.find_blobs()函数(这里将图像二值化了),返回色块其中心坐标cx()cy()即可。对于不同的颜色的色块(如题目中的红色),需要实地测试得到不同的阈值。
这里的返回值为圆点中心坐标、像素大小和标志位。

圆点

自己手写的完整程序已放在Github上:main.py

找圆点函数:

# 点检测函数
def check_dot(img):
    #thresholds为黑色物体颜色的阈值,是一个元组,需要用括号[ ]括起来可以根据不同的颜色阈值更改;pixels_threshold 像素个数阈值,
    #如果色块像素数量小于这个值,会被过滤掉area_threshold 面积阈值,如果色块被框起来的面积小于这个值,会被过滤掉;merge 合并,如果
    #设置为True,那么合并所有重叠的blob为一个;margin 边界,如果设置为5,那么两个blobs如果间距5一个像素点,也会被合并。
    for blob in img.find_blobs(thresholds, pixels_threshold=80, area_threshold=80, merge=True, margin=5):
        if dot.pixels<blob.pixels():#寻找最大的黑点
            ##先对图像进行分割,二值化,将在阈值内的区域变为白色,阈值外区域变为黑色
            img.binary(thresholds)
            #对图像边缘进行侵蚀,侵蚀函数erode(size, threshold=Auto),size为kernal的大小,去除边缘相邻处多余的点。threshold用
            #来设置去除相邻点的个数,threshold数值越大,被侵蚀掉的边缘点越多,边缘旁边白色杂点少;数值越小,被侵蚀掉的边缘点越少,边缘
            #旁边的白色杂点越多。
            img.erode(2)
            dot.pixels=blob.pixels() #将像素值赋值给dot.pixels
            dot.x = blob.cx() #将识别到的物体的中心点x坐标赋值给dot.x
            dot.y = blob.cy() #将识别到的物体的中心点x坐标赋值给dot.x
            dot.ok= 1
            #在图像中画一个十字;x,y是坐标;size是两侧的尺寸;color可根据自己的喜好设置
            img.draw_cross(dot.x, dot.y, color=127, size = 10)
            #在图像中画一个圆;x,y是坐标;5是圆的半径;color可根据自己的喜好设置
            img.draw_circle(dot.x, dot.y, 5, color = 127)

            print("centre_x = %d, centre_y = %d"%(dot.x, dot.y))

    #判断标志位 赋值像素点数据
    dot.flag = dot.ok
    dot.num = dot.pixels

    #清零标志位
    dot.pixels = 0
    dot.ok = 0

剩下的其他功能自己就没有写啦(T_T),比赛四天太紧张了,这样已经很不错了,已经是全部成果~


感谢你的耐心阅读呀(๑๑),原创总结不易,收藏并评论一下呗~

你的支持就是我前进的动力呀~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2019电赛--无人机题目OpenMV总结 的相关文章

  • OpenMV超声波测距

    OpenMV超声波测距 本文首发于 xff1a https www bilibili com read cv3051569 参考链接 xff1a https blog csdn net bei dai he article details
  • openmv与其他单片双向串口通信

    Openmv与其他单片双向串口通信 目的 为了让openmv进行阈值切换或者只运行某一部分代码 xff0c 因此需要openmv与其他单片建立双向通信进行更改内部参数 起因 openmv自带接收函数uart read 进行接收 xff0c
  • SQL server 2019和 SSMS下载与安装教程

    SQL server xff08 2019版本 xff09 安装 一 SQL server 下载 1 下载链接 xff1a SQL server官网 2 打开开始安装 xff0c 如果出现以下问题 以管理员身份运行PowerShell xf
  • OPENMV的学习(三)巡线

    存储文件 插入sd卡 xff0c 会将默认储存地址flash改为sd卡 image save span class token punctuation span span class token string 34 example jpg
  • openmv中模块解析

    模块解析 1 sensor摄像头模块 xff1a 包含了感光芯片与图像预处理的各项操作 sensor reset 重置并初始化OpenMV sensor set pixformat sensor RGB565 选择颜色空间与像素格式RGB5
  • win10 下编译用于 Visual Studio 2019 的 OpenCV4.5.2(含 opencv_contrib 扩展模块)附编译好的OpenCV(图文)

    win10 下编译用于 Visual Studio 2019 的 OpenCV4 5 2 xff08 含 opencv contrib 扩展模块 xff09 附编译好的OpenCV 准备安装 OpenCV 和 扩展开始编译使用Debug 模
  • Visual Studio 2019 重新生成 OpenCV 解决方案报 LNK2019 无法解析的外部符号 __imp__Py_NegativeRefcount、__imp_Py_RefTotal

    Visual Studio 2019 重新生成 OpenCV 解决方案报 LNK2019 无法解析的外部符号 imp Py NegativeRefcount imp Py RefTotal 错误问题详情解决方法修改 96 pyconfig
  • IntelliJ IDEA 2019.2.3中文乱码问题

    今天打开idea突然发现java文件里面的中文极其怪异 61 61 43 于是乎百度搜索不下十来篇文章 xff08 思路大概一致 甚至尝试 重装IDEA amp 重启电脑 来解决问题 但是我的idea貌似没什么反应 最后发现改Editor
  • 【DIY】基于OpenMV的STM32追球小车

    目录 xff1a 总体设计1 基础硬件DIY设计1 xff09 整体原理图2 xff09 PCB电路 2 OpenMV简单识别程序设计 与 STM32控制程序设计1 xff09 OpenMV简单识别程序设计 microPython 2 xf
  • 【OpenMV小车——第1.2篇】OpenMV主控板的简介与入门使用

    前言 xff1a 视觉小车最重要的是视觉功能 xff0c 其实现方式主要有 xff1a Opencv 43 外置计算机摄像头 需要计算机作为上位机 Stm32 43 OV7670 较难 xff0c 大师级 OpenMV摄像头 较简单 xff
  • 【python/tensorflow】pycharm 2019,python 3.6.2, win7 64bit系统,安装tensorflow出错,错误如下,解决办法给出!

    D aWork PycharmProjects Pro3 test venv Scripts python exe D aWork PycharmProjects Pro3 test test 1 py Traceback most rec
  • openmv 自学笔记(APRILTAG标记追踪)

    由图可知 id 为5 旋转角度 为11 0 左边旋转 角度增加 正式时候调度接近0 右边旋转 角度减少 由360度 向右减少 Tx 在左边的时候 为负数 右边为正值 Ty 在上边的时候为正数 左边为负值 Tz 从远处 到近处 由负数到向正数
  • C++之初识多态(Visual Studio 2019)

    此文章关于多态的代码全部是使用Visua Studio2019 x86 实现的 xff0c C 43 43 多态在不同编译器中的实现细节可能不同 xff0c 所以部分情况下相同代码运行结果可能不同 xff0c 在此声明 目录 多态的概念 多
  • OpenMV——色块识别

    OpenMV有很多示例代码 xff0c 下面是我学习过程中有关知识的总结 目录 前言 一 阈值选择 二 代码 前言 函数RGB 255 0 0 表示的是红色 RGB 255 0 0 含义 xff1a 红色值 Red 61 255 xff1b
  • 2019新买电脑必备软件

    都2019了 xff0c 怎么还要安装这些垃圾软件 xff01 群丫头买了个新电脑 xff0c 为了避免她踩到笔者曾今踩到的坑 xff0c 更舒心的使用电脑 xff0c 为此特写此文 作为一个电脑平凡使用者 xff0c 用过无数的软件 xf
  • 华为2019校招笔试题之旋转方阵(C语言版、python)

    题目描述 输入一个N阶方阵 0 lt N lt 10 输出此方阵顺时针旋转M 0 lt 61 M lt 61 10000 次后的方阵 旋转举例 xff1a xff08 如下四个三阶方阵从上到下为数字围绕中心顺时针旋转 1 2 3 4 5 6
  • 2019年厦门大学计算机系夏令营经历

    2019 07 12 2019 07 15 厦门大学信息学院夏令营 计算机系笔试 上机 面试 一 笔试 数据结构 2019 07 13 填空题 一空三分 顺序存储 将一个数插到数字i下标的前面 需要移动多少个元素 m数组和n数组 最坏情况下
  • 简单分析 C 语言的 qsort() 源码

    简单分析 C 语言的 qsort 源码 stdlib h 是使用 C 语言需要引入的库 在系统文件下可以搜索到这个文件夹 在里面可以看到有一个 qsort 文件用编译器或者记事本打开就能看到里面的源码了 单从文件名看 qsort 采用的是快
  • 【Twinkle】2019面试总结

    人生第一次找工作 因为没把自己培养成大神直接导致找工作累成了狗 秋招已经过了一大半 虽然还没有定目标企业 但是现在也简单的谢谢自己的经历和经验 留作纪念或者分享给大家 找工作前期说实话我还是准备了一段时间的 剑指offer 牛客之类的书籍或
  • 基于STM32F407的人脸追踪

    整体概述 本项目采用两个舵机构成的二自由度的电动云台作为执行机构 控制摄像头在水平和垂直方向的运动 舵机带动摄像头进行二维平面的运动的同时 摄像头进行实时人脸检测 一旦检测到人脸 则进行人脸跟踪 摄像头采用星瞳openMV H7 主控采用的

随机推荐

  • 无人机高度控制

    这个第一次看就完全没看懂 xff0c 现在再看还是没看懂orz xff0c 而且定高还是重要的功能和考点 xff0c 详细分析一下程序吧 首先是表示高度信息的结构体 xff1a 数据结构声明 typedef struct float Z S
  • ssh_exchange_identification: Connection closed by remote host

    ssh exchange identification Connection closed by remote host 导致这个问题的原因有很多 xff0c 笔者是因为在ssh中设置了代理 xff0c 这个可以作为阅读者排查问题的一个点
  • 匿名无人机飞控代码整理5

    先跳过高度部分 xff0c 这里看location部分 可以看出来这部分也是直接与我们的循迹 追踪任务相关的 所以这部分的掌握应该很重要把 前面有很多暂时不需要看 xff0c flyctrl那个巨长 所以就先看速度环控制部分了 if swi
  • 匿名无人机飞控代码整理

    看了半天 xff0c 各部分都看得都很零散 xff0c 写的也很简略 xff0c 但目前为止还是无法对系统各部分做具体一点的整合 xff0c 今天试试看 1 先从主函数起 xff0c 进入主轮询函数 Main Task 这个主函数的调用就在
  • 一直没看的无人机定高

    除了定高的部分 xff0c 其他没看的还有一些控制函数 定高的原理的话 xff0c 也是利用了两级pid xff0c 按照原本的理解 xff0c 从外环开始看的话 xff0c 反馈高度比较容易获得 xff0c 就是激光测距得到的高度 期望高
  • 匿名无人机代码FlightCtrl简单分析

    这个flightCtrl文件 xff0c 是真的很长又很难 各种标志位啊 xff0c 判断啊 xff0c 开关啊 xff0c 逻辑判断啊什么的 xff0c 趁通宵把代码梳理一遍 这个文件里的函数虽不算最多 xff0c 但引用的头文件相当多
  • 简历—项目经验范例

    xff08 看着比较专业的一份项目经验样板 xff09 原文链接https mp weixin qq com s rxGTTVKryvYoyst jsayLw 项目一 米乐淘网上商城 项目名称 xff1a 米乐淘网上商城 开发环境 xff1
  • 家庭网络和路由器

    1 什么是家庭网络 xff1f 一个典型的家庭网络由多个设备组成 xff0c 且几乎所有的家庭网络都有一个路由器作为它们的中心设备 路由器连接到 Internet 连接 xff0c 然后与本地网络上的一台或多台计算机共享该连接 家庭网络通常
  • ROS动态调整PID

    64 动态调整PID ROS提供了一个专门用于动态调整参数的功能包dynamic reconfigure 它实现了动态配置参数的机制 我们先来创建一个功能包 添加相应的一些依赖 cd catkin ws src catkin create
  • CubeMX配置串口的程序烧入板子不跑的解决方法

    对于cubeMX配置串口 xff0c keil5编译通过的 xff0c 自己确定无问题的程序 xff0c 以ISP烧入 xff0c 烧入板子后无法运行的情况 xff0c 我暂时的解决策略是按住reset键点击 开始编程 xff0c 点击后松
  • realsense D455+ROS+OpenCV4.5完成目标距离检测

    ROS OpenCV 1 环境配置 1 1 realsense SDK2 0安装 通过官网找到最新的SDK包并下载 Intel RealSense SDK 2 0 解压安装包 xff08 librealsense 2 47 0 tar gz
  • 什么是 PID 控制器:工作原理及其应用

    什么是 PID 控制器 xff1a 工作原理及其应用 什么是PID控制器 xff1f 历史PID控制器框图PID控制器的工作P 控制器I 控制器D 控制器 PID控制器的类型开 关控制比例控制标准型PID控制器实时 PID 控制器 调优方法
  • 什么是缓冲区

    1 什么是缓冲区 缓冲区又称为缓存 xff0c 它是内存空间的一部分 也就是说 xff0c 在内存空间中预留了一定的存储空间 xff0c 这些存储空间用来缓冲输入或输出的数据 xff0c 这部分预留的空间就叫做缓冲区 缓冲区根据其对应的是输
  • FreeRTOS系统解析-1、FreeRTOS系统简介

    1 系统简介 不同的的多任务系统有不同的侧重点 以工作站和桌面电脑为例 xff1a 早期的处理器非常昂贵 xff0c 多以那时的多任务用于实现在单处理器上支持多用户 这类系统中的调度算法侧重于让每个用户 公平共享 处理器时间 随着处理器的功
  • 目标检测 YOLOv5 常见的边框(bounding box )坐标矩形框表示方法

    将txt格式的真值框 xff08 Ground Truth xff09 在原图上显示 具体过程坎坷 xff0c 以下博主提供了思路 xff0c 学习了yolo格式label的归一化和坐标求解 xff01 1 https blog csdn
  • momenta实习面经

    走的火箭计划内推 xff0c 链接https mp weixin qq com s zllOky0biV9zn1Qfbg4XZg 线上先做了一套题 xff0c 写的2小时但是打开界面发现倒计时有10小时 xff0c 于是悠哉悠哉慢慢做结果2
  • 树莓派4B + Ubuntu18.04 + RealSense SDK

    有段时间没写博客了 xff0c 今天心血来潮 xff0c 记录一下 我自己的配置在标题写的很清楚 xff0c 用的是ros1 安装步骤我是建议 xff1a ubuntu gt realsense SDK gt ros gt ros wrap
  • ubuntu18.04安装ROS Melodic(最详细配置)

    前期准备 61 61 设置软件源 xff1a 国外的 xff1a sudo sh c 39 echo 34 deb http packages ros org ros ubuntu lsb release sc main 34 gt etc
  • 3步搞定CSDN中代码背景颜色的修改

    1 进入内容管理 xff0c 点击最下方的博客设置 2 修改
  • 2019电赛--无人机题目OpenMV总结

    此文章在我的博客链接 xff1a https sublimerui top archives d508d500 html NOTES xff1a 上一篇相关博文 xff0c 准备阶段OpenMV学习笔记链接 xff1a https blog