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
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号