< >
Home » Farmbot开发入门教程 » farmbot开发入门教程-测量土壤高度

farmbot开发入门教程-测量土壤高度

说明:

  • 介绍土壤高度测量的工作原理

概念

  • 使用 FarmBot 的 CNC 摄像机定位系统模拟虚拟立体摄像机。

  • 立体摄影与双目视觉类似,通过视差提供深度信息,在镜头位置之间的画面中,距离镜头较近的拍摄对象比距离镜头较远的拍摄对象移动得更远。OpenCV 计算立体图像帧中检测到的物体位置之间的这种差异。

  • 该过程在多个位置执行,以开发特定相机和环境的视差与距离之间相关性的方程系数。这些系数应用于计算出的视差值(以土壤为主体)以计算距离,最终与 FarmBot 已知坐标系中的相机位置数据相结合,计算土壤的 z 轴坐标。

  • 将土壤位置映射到 FarmBot 的坐标系后,FarmBot 可以执行播种、除草等与土壤表面接触的操作。

备择方案

  • 手动测量 FarmBot 的 UTM 到土壤的距离,并从当前 z 轴位置中减去它。
  • 使用手动控制将 FarmBot 移动到土壤表面并记录 z 轴位置。
  • 在 FarmBot 的 UTM 中添加一个按钮,当它与土壤表面碰撞时触发。
  • 使用超声波、红外线或激光雷达距离传感器。
  • 使用立体相机。

捕获图像

  • 移动到相距一小段距离的位置以模拟立体相机。

请输入图片描述

  • 为了校准,移动到多个 z 轴位置并在每个位置捕获立体对。

请输入图片描述

准备图像

  • 根据需要调整捕获的图像以创建对齐的立体图像对。

请输入图片描述

  • 使用光流检测相机旋转:

请输入图片描述

  • 为了使立体深度计算正确进行,左侧输入图像中的特征必须沿着水平路径追踪到右侧输入图像。

请输入图片描述

计算深度图

  • 组合立体图像来生成视差/深度图

请输入图片描述

请输入图片描述

请输入图片描述

  • 深度图中数值出现频率的直方图:

请输入图片描述

确定图像中土壤的位置

  • 假设最常见的深度图值代表土壤。在下图中,选定的土壤深度以绿色突出显示。远离土壤水平的物体的深度值以红色突出显示,其中亮红色表示距离相机较近的物体,深红色表示距离相机较远的物体。

请输入图片描述

  • 使用相同的颜色编码注释深度图:

请输入图片描述

  • 使用照片Weed detector面板部分提供的值,使用 HSV 过滤器排除植物 。

所选植物:

请输入图片描述

  • 从深度图中移除的植物不会干扰土壤表面选择:

请输入图片描述

校准视差与距离转换因子

请输入图片描述

  • 计算原始视差数据的距离需要两个系数。使用以下系数:

    • 视差倍增因子 ( calibration_factor)
    • 视差偏移常数 ( disparity_offset)
  • 示例计算,其中:

    • 当相机位于 z = 0 时,测量距离相机 250 毫米处的土壤
    • disparity_offset土壤视差是根据z = 0 处的立体图像对 ( ) 计算得出的
    • disparity_value土壤视差是根据z = -50 处的立体图像对 ( ) 计算得出的
disparity_delta = disparity_value - disparity_offset
64              = 176             - 112

z_offset = measured_at_z - current_z
50       = 0             - (-50)

calibration_factor = z_offset / disparity_delta
0.7812             = 50       / 64
  • 请参阅计算距离和土壤 z以了解 z 计算。

计算距离和土壤 z

示例计算,其中:

  • 当相机位于 z = 0 时,测量距离相机 250 毫米处的土壤
  • 校准值已预先计算(calibration_factor 和disparity_offset)
  • disparity_value土壤视差是根据z = -50 处的立体图像对 ( ) 计算得出的
measured_soil_z = measured_at_z - measured_distance
-250            = 0             - 250

disparity_delta = disparity_value - disparity_offset
64              = 176             - 112

distance_offset = disparity_delta * calibration_factor
50              = 64              * 0.7812

distance = measured_distance - distance_offset
200      = 250               - 50

calculated_soil_z = current_z  - distance
-250              = -50        - 200

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: none