背景
面对海平面上升和全球变暖的威胁,以及人口的稳步增长,农民甚至家庭必须保持农业产量以保证稳定的产品交付。由于野火和飓风等自然灾害带来的杀虫剂、杂草和空气毒性,这一直具有挑战性。虽然商业农场可能有能力消除大部分危害并扩大规模以应对中断的全球供应链,但小型工业化农场主发挥着至关重要的作用,但他们一直无法做到这一点。得益于低成本硬件和加速人工智能技术,工业物联网和机器人技术将成为彻底改变农业需求的工具。
Hovergame 生态系统将允许早期的人类互动来绘制兴趣点、有害昆虫、不需要的杀虫剂、杂草,以及早期发现田间发生故障的设备。在无人机上进行人工监督的早期监视和监测将使我们能够由包括农业研究人员、工程师和科学家在内的专家进一步进行分析,以提高作物生长的性能并满足生产需求。由于缺乏遥测和传感器数据,现场的工业人员一直面临着不断解决此类问题的挑战。如果不全神贯注,产量监测也被证明是困难的。
[幸运的是,货物到达并收集了所有重要部件以组装 RC 控制试驾!得益于指导性MR-BUGGY3 构建指南(NXP CUP 的一部分),节省了许多时间
主要障碍(你必须在进入机器人开发和 NAVQ+ 集成之前解决问题)
硬件磨合:a) 远程控制/遥测 - 由于无线电控制器配置问题,寻求稳定的 PX4 版本用于 Rover 机身。throttle not zero
解决了PX4 version: v1.13.2-28-ga5ccd145aa
带有 ESC 的额外 PWM 微调。该版本还允许为流动站禁用 GPS 锁定以进行飞行测试。通过调整和映射到上限上限,油门在适当的转向和转向角度下适当地降低动力。
nsh> pwm test -d /dev/pwm_output0 -c 4 -p
b) HW revC 6 针 PWM 上的 ESC 配置。c) 元器件洗牌、接线整理、配电板固定。
Software Grind : a)nxp_fmuk66-v3
在 Mac M1 上使用 PX4-Autopilot 克服构建/编译/Flash(请参阅要点了解 python3 版本和 conda 要求)
b) 使用 UART/TELEM2 在 NavQ+ 和飞行控制器之间建立串行通信(设备树分配给/dev/ttymxc2上的 SPI ,使用/dev/ttyUSB0的解决方法) c) NavQ+ 上用于构建eIQ工具的 ubuntu 稳定版本的 UUU 闪存和MAVSDK
需要进行一些调整来包装与 Bosch C++ API 通信的 PX4 驱动程序(I2C/SPI HAL 不可知代码)。固件端口的详细信息可以在本教程和Github页面上找到。
uint64 timestamp # time since system start (microseconds)
uint64 timestamp_sample
uint32 device_id # unique device ID for the sensor that does not change between power cycles
uint32 sample_count # bme688 sample counts
float32 temperature # temperature in degrees Celsius
float32 pressure # static pressure measurement in Pascals
float32 humidity # Humidity in percentage (%)
float32 gas_resistance # gas resistance (ohm)
uint8 device_status # byte hex 0xB0
uint32 error_count
uint8 ORB_QUEUE_LENGTH = 4
Use of I2C scan (default address: 0x77 on adafruit BME688 breakout)
nsh> i2cdetect -b 1
Scanning I2C bus: 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77 -- -- -- -- -- -- -- --
nsh> bme688 start -X -f 200000
NFO [SPI_I2C] adding a running instance -set started to true
bme688 #0 on I2C bus 1 address 0x77
nsh> bme688 status
INFO [SPI_I2C] Running on I2C Bus 1, Address 0x77
bme688: sample: 108 events, 115304us elapsed, 1067.63us avg, min 884us max 1411us 93.582us rms
bme688: measure: 109 events, 16119470us elapsed, 147885.05us avg, min 147140us max 148614us 266.258us rms
bme688: comms errors: 0 events
传感器 uORB 主题对 PX4 系统是透明的,并且可以由农作物监控应用程序订阅,如下所示(下面使用测试listener
)
nsh> uorb status
TOPIC NAME INST #SUB #Q SIZE PATH
sensor_gas 0 0 4 48 /obj/sensor_gas0
nsh> listener sensor_gas
TOPIC: sensor_gas
sensor_gas
timestamp: 185075367 (0.630325 seconds ago)
timestamp_sample: 185074305 (1062 us before timestamp)
device_id: 12744457 (Type: 0xC2, I2C:1 (0x77))
sample_count: 1
temperature: 23.7633
pressure: 101306.1875
humidity: 59.5401
gas_resistance: 35814.2148
error_count: 0
device_status: 176
By
将 app 命令添加到PX4 src/boards/nxp/fmuk66-v3/init/rc.board_sensors
,气体传感器驱动程序将在设备启动时启动 I2C 状态机,在测量和收集状态之间切换发布sensor_gas主题 @ 2 Hz(每 500 毫秒)
# auto start BME688 gas sensor on external i2c bus 1 @200k
bme688 start -X -b 1 -f 200000
static constexpr uint32_t _measure_interval{250 * 1000}; // every 0.5 sec
数据采样是在强制(而不是并行模式)下完成的,因为我们以高数据速率发布推理决策(不需要长时间的热分析)以获取温度、湿度、气压和气体指标。
这个简短实验的目标是收集传感器数据并提供可部署到 IoT Edge 的基本分类模型,在我们的例子中是一个相当占用的 FMUK-66。Bosch BME688 开发套件(x8 传感器)用于收集具有各种传感配置文件的一些植物的温度、压力、湿度和气体成分,以最大限度地减少数据差异并避免 Bosch AI studio 中的 BSEC 训练出现异常。收集阶段耗时数小时,并在控制环境下进行了两次(相隔约 1.5 周),一次是在这些植物处于最健康状态时,一次是在其易碎、腐烂的状态(叶子呈褐色,活力较差,和干腐烂的根
在数据收集之前,电路板传感器已经稳定(准备 24 小时)。加热器配置文件是使用 8 传感器评估套件(ESP32 Teensy 模块)创建的。虽然尚不清楚额外的气体成分(如 CO、NO2、乙醇、气体混合物)是否是植物样本健康恶化的任何因素,但该模型能够得出一些可靠的结果,而不是严重过度拟合(门控通过工作室训练的混淆矩阵)通过暗示温度、湿度等其他因素。
训练方法:批量大小为32 的ADAM ,1024轮,70%/30%数据拆分
除了 AI studio 生成的 BSEC 配置头文件和 .config 二进制文件,我们还需要导入其 cortex-M4库(FMUK-66 架构)以包含在bsec.h
分类任务中。预测结果作为 uORB crop_health 主题的一部分发布,该主题由在 PX4 上开发的作物监测 C++ 应用程序推断
珊瑚相机支架和NAVQ+ 集成
pixy2 pan tilt 套件被修改为连接珊瑚短壳并尝试让云台控制相机(物理安装但未使用,考虑到飞行控制上的 CPU 负载很重 ~91%)设法在底部钻了几个洞NavQ+ 机箱,同时为配套计算机腾出空间。USB 集线器安装在第一个 PCB 的顶部,它允许 NavQ+ 与 /dev/ttyUSB0 上的 FMUK66 通信以获取 MAVLink 消息。
uORB sensor_gas主题必须由机载农作物监控应用程序定期使用,该应用程序在通过 MAVLink 发送它们之前计算分类结果和指标。
uint64 timestamp # time since system start (microseconds)
char[20] crop_type # type of crops
float32 temperature # temperature in degrees Celsius
float32 pressure # static pressure measurement in Pascals
float32 humidity # Humidity in percentage (%)
float32 gas_resistance # gas resistance (ohm)
float32 health_index # general health index
uint8 pred_longevity # model prediction
1) 添加rcS文件以允许 Edge ML 订阅、解释、监控农作物健康状况。crops_monitor
2) 添加 MAVLink stream 命令以启用包流以周期性速率到地面站和 NavQ+ 的串行/遥测(这两个文件都在ROMFS/px4fmu_common/init.d-posix 下)px4-rc.mavlink
# custom CROPS_MONITOR startup stream for mavlink
mavlink stream -r 2 -s CROPS_MONITOR -d /dev/ttyS1
crops_monitor.cpp
PX4_INFO("Crops monitor evaluate identified plant health using BME688 gas sensor metrics");
// subscribe to sensor_gas topic
int sensor_gas_fd = orb_subscribe(ORB_ID(sensor_gas));
// limit the update rate to 50 Hz
orb_set_interval(sensor_gas_fd, 20);
struct crops_health_s ch{};
orb_advert_t ch_pub = orb_advertise(ORB_ID(crops_health), &ch);
px4_pollfd_struct_t fds[] = {
{ .fd = sensor_gas_fd, .events = POLLIN },
};
3) health_index作为植物健康的一般指标,由湿度、压力和温度的比例值组成。pred_longevity是上述 BSEC 分类模型使用来自 BME688 的实时样本的推理结果。
<mavlink>
<include>development.xmlinclude>
<dialect>1dialect>
<messages>
<message id="437" name="CROPS_HEALTH">
<description>Mavlink Crop Health Metrics sampled and reported by flight controller FMUK66description>
<field type="uint64_t" name="timestamp">time since system start (microseconds)field>
<field type="char[20]" name="crop_type">crop typefield>
<field type="float" name="temperature">temperaturefield>
<field type="float" name="pressure">pressurefield>
<field type="float" name="humidity">humidityfield>
<field type="float" name="gas_resistance">gas resistancefield>
<field type="float" name="health_index">health indexfield>
<field type="uint8_t" name="pred_longevity">pred longevityfield>
message>
messages>
mavlink>
可以通过流式传输使用 QGC 上的视觉指示器来应用现场条件和标签。远程车辆接近数据样本和目视检查,因为它们被附近的标签识别。颜色编码的指标表示每种植物的健康状况,如下所示:(来自 QGC 直播的照片)
crops_monitor [1360:100]
nsh> INFO [crops_monitor] Crops monitor evaluate identified plant health using BME688 gas sensor metrics
INFO [crops_monitor] Sensor Gas: 25.2710 46.7412 102259.9063
INFO [crops_monitor] Sensor Gas: 25.2710 46.7476 102259.9063
INFO [crops_monitor] Sensor Gas: 25.2760 46.7610 102263.6484
INFO [crops_monitor] Sensor Gas: 25.2710 46.7603 102259.9063
1) 添加rcS文件以允许 Edge ML 订阅、解释、监控农作物健康状况。2) 添加 MAVLink stream 命令以启用包流以周期性速率到地面站和 NavQ+ 的串行/遥测(这两个文件都在ROMFS/px4fmu_common/init.d-posix 下)crops_monitor
px4-rc.mavlink
# custom CROPS_MONITOR startup stream for mavlink
mavlink stream -r 2 -s CROPS_MONITOR -d /dev/ttyS1
项目事后分析
1. ROS2 集成:一个全面的发展战略,以实现哪种方法非常适合我们的家庭和商业农业用例。考虑到完成时间,硬件测试会有所限制。
2.使用 UCANS32K 板扩展 BME688 的环境感测(如 NXP Cup Demo 中采用的那样):虽然使用 FMUK-66 的机载感测在此处运行良好,但我们显着限制了传感器与被监控植物之间的探测和测量距离。一旦总线延伸超过几米,板载 I2C/SPI 噪声几乎呈指数增长。带有 CAN FD 的 UAVCAN 桥将有助于准确地进行机械探测,但会牺牲更多的外围设备。
3.对 YOLO3/MobileNet V3 的训练不足:只有导入 eIQ 用于 NavQ+ 视觉识别的模型是移动网络singleShotDetector ,它在大规模真实世界物体方面表现出色,但在没有进一步训练和监督的情况下无法识别物体类别。训练有素的转换网络可能足以满足我们的用例。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !