×

Farmaid植物病害检测机器人

消耗积分:0 | 格式:zip | 大小:0.17 MB | 2022-10-19

李欢

分享资料个

描述

介绍:

受到 Plantvillage.psu.edu 和 iita.org 工作的启发,我们希望使用 DonkeyCar 平台构建一个自主机器人,该机器人可以在农场环境中移动而不会损坏现有植物或土壤,并使用物体检测来查找和标记病害作物具有环保色彩。传统上,在大多数高科技案例中,人类必须使用手机手动检查大型农场以标记农作物。这需要大量的时间和精力。此外,使用的各种手机不一定具备高效完成任务所需的所有功能,或者他们必须等待拥有合适设备的人。围绕农场运行的统一机器人平台将解决这些问题并使标记速度更快。速度还可以更轻松地在多个农场之间共享平台。

挑战:

  • 保持机器人的尺寸/重量足够小,以免损坏作物本身。
  • 在不损坏现有作物的情况下导航。
  • 寻找一种安全标记患病作物的方法。
  • 寻找一个数据集和农场来测试平台
 
poYBAGNOSvSAN70aAABS2c5Zkks034.png
 

背景:

我们的 Teamato 团队之所以走到一起,是因为我们都是底特律自动驾驶汽车集团和安娜堡自动驾驶汽车集团的成员。这些都是聚会小组。我们的团队成员 Sohaib 以上述概念参加了挑战,并创建了一个帖子询问是否有人有兴趣参与。Alex、Juanito 和 David 加入了 Sohaib,因此开始了在以前从未合作过的个人之间的共同探索。除了在方法、技术、时间安排等方面找到共同点之外,我们还必须制定一个包含会议时间表、存储库、会议技术等的框架。从本质上讲,专业项目的所有组成部分都必须到位,除了没有人得到报酬,我们没有预算,而且所有人都有工作、学校、家庭等方面的承诺。不是问题,因为我们有共同的愿景和执行意愿。有趣的是,我们的四人小组代表了一个国际社会。我们团队的每个成员都精通多种语言,并且与以下一个或多个国家有直接的家庭关系:中国、德国、巴基斯坦、菲律宾、俄罗斯。我们都度过了愉快的时光,这是一次了不起的学习经历。

构建机器人:

底盘、自主导航和图像分类的工作立即开始,进展顺利。我们遇到了与底盘和驱动系统相关的重大意外挑战和延误。简而言之,我们没有预料到测试温室中的地形变化如此之大,在场景 A 中表现良好的电机、车轮、接线、控制等在场景 B 中不堪重负。我们通过大量的 mod 来拨入一个适用于我们所有环境的工作机箱。我们不得不做出大量时间和预算限制,但最终产品超出了我们最初的最小可行配置目标。提交时的最终设计如下所述。

相机杆:

为了能够观察凸起的植物床,并可能升级到可以观察番茄顶部和底部的移动摄像头,我们使用从车库出售的碳纤维杆建造了一个摄像杆。该杆装有 2 个 3D 打印夹具,用于导航和分类摄像头。我们还在杆子上添加了 1.2v 太阳能照明,以及在泳池顶部添加了 12v 多色状态灯。是的,那是一个在杆子顶部涂成黑色的重新利用的药丸容器。我们众多零基预算住宿之一,效果非常好!

 
poYBAGNOSveAaDJkAACdutQObHw390.png
 

这些相机是连接到两个由 USB 充电器供电的不同 Pi 上的 Raspberry Pi 相机。使用 2 Pi 的原因是分类和导航都使用需要大量处理能力的神经网络。此外,分类摄像头必须指向植物,而导航摄像头必须指向前方。杆子的顶部也必须有灯作为指示器。在寻找足够亮的 RGB 灯时,我们发现它们要花费 100 美元以上,所以我们使用扬声器的灯、一个用于反射的小塑料袋并装在一个空药瓶中制作了自己的灯。因为灯需要 12 伏我们的 Arduino 输出为 5 伏,我们将其连接到继电器。连接需要与 Arduino 和 3 根电线共同接地,我们在 Arduino 的引脚 7、8 和 11 上放置的绿色和蓝色灯。我们可以通过使用analogWrite 函数为所有三根线提供不同的值来模拟这些灯的RGB 光谱。请注意,为了正确着色,所有三个都需要写入,否则之前在任何一个引脚上写入的颜色可能会显示出意想不到的结果。

 
poYBAGNOSvqADzH4AADH_Go8nf4048.jpg
 

机壳:

我们在 Stone Coop 和Growing Hope 农场对带有轮子和履带的塑料底盘进行的实验证明是不成功的,这两种选择都将挖入有利于植物的沙地。我们剥离了其中一个临时底盘版本很多塑料齿轮在升级到金属之前和处理更高电流的能力:

 
poYBAGNOSvyAf8cPAACfrLaShdo672.png
 

由于其强大的电机和大轮子,我们最终选择了 Mountain Ark SR13 底盘,并按照以下说明进行组装。

我们对 Mountain Ark 进行了修改,添加了一个平台以将计算技术与电源分开,并通过定制涂漆的轻质外壳和独特的徽标为 Farmaid 增添了一丝风格。

 
poYBAGNOSv-ADgKiAACK5H8Xr1A168.jpg
 

组装好底盘后,我们需要电机和电池为其供电。虽然底盘带有电池盒,但我们决定使用 12V 锂聚合物电池,因为我们已经有了可用的电池,并且已将其与旧底盘一起使用。电机使用接线端子连接到电池,以获得更高的电流消耗。

 
pYYBAGNOSwGABdkSAACArAdp3Sw219.jpg
 

我们最初使用的是我们拥有的普通 L298 电机控制器,但发现电流太低,无法为我们现在拥有的 320 RPM 电机供电。因此,我们改用 IBT-2 电机控制器,这是另一个创客空间成员捐赠的。IBT-2 电机控制器的问题在于它们只能控制 1 个电机,所以我们必须连接其中的 4 个。我们拼接了左右 PWM 线,接头将左侧电机和右侧电机的 L-PWM 和 R-PWM 相互连接。

 
pYYBAGNOSwWAY0LXAAC057ehxOg320.jpg
 

我们使用的另一种节省空间的技术是将所有电机的使能引脚直接连接到 Arduino 的 5 伏电压。

 
pYYBAGNOSwiAEE7JAACdSge_4WI430.jpg
 

在此之后,我们需要直接连接到 Arduino 的唯一电机部分是 PWM 引脚。在左侧,我们将左侧电机的 R_PWM 连接到 Arduino 上的 6 引脚,将 L_PWM 连接到 5 引脚。请注意,左侧两个控制器的 R_PWM 引脚和左侧两个控制器上的 L_PWM 是拼接的,因此向一个的正向命令将同时向前移动,向一个反向命令将在左侧的两个轮子反转。右侧也进行了同样的拼接。右侧的 R_PWM 连接到 Arduino 的 9 针,L_PWM 连接到 Arduino 的 10 针。对于碰撞检测,我们首先尝试了我们小组成员中的一个 Garmin 激光雷达,但我们很难让它工作,所以我们决定使用 SR04 超声波传感器。

 
poYBAGNOSwqAUIRrAACpcfGhJJA362.jpg
 

我们还在后面添加了另一个传感器,但由于使用定时器中断的方式,我们无法在手动控制机器人的同时使用它。请注意,我们制作了另一个 Arduino 例程,仅使用传感器在障碍物之间移动机器人,但这不符合行为克隆方法。

 
poYBAGNOSw2AFswkAACXEXqtr4E070.jpg
 

驾驶:

由于我们无法使用类似于驴车的底盘,因为它无法在我们给定的环境中行驶,因此我们必须编写自己的驾驶代码。为此,我们使用了两个灵感,Donkey Car 自己的方法以及 YouTuber Sentdex 的一系列视频。驾驶模型基于 Donkey Car,除了没有回归和均方误差,我们使用分类来使用图像在 7 个按钮之间进行分类. 我们还将它转换成一个全卷积神经网络,使其更快,并与新的研究相一致。在测试中,我们发现它不断输出一个按钮,这与训练中我们在几个间隔后按下一个键不同。为了解决这个问题,我们后来在 Arduino 脚本中添加了一些代码来输出按钮按下之间经过的时间。

病株分类:

对于分类,我们使用 MobileNet SSD 模型,因为它的尺寸相对较小,而且它已经有一种上传到安卓应用程序的方法。我们通过使用 5-10 秒的视频获取数据并创建了一个脚本来从这些视频中提取图像视频。视频本身被放置在以疾病和植物命名的文件夹中。我们确保在不同的条件和不同的地点拍摄这些视频。整个训练数据集由大约 2000 张图像组成。我们还制作了一个网站来展示分类的输出以及温室及其植物健康的整体地图。该网站使用 XML 数据创建此网格。我们没有时间从分类器向网站添加实时更新,但这是我们未来的目标之一。我们还测试了 Twillo 的 SMS 系统,以在植物病害高于给定阈值时向手机发送消息。同样由于时间限制,我们还没有将它连接到分类器。

有趣的旁注:

 
pYYBAGNOSw-AWza1AABT_BTc8a4158.jpg
 

从我们的一个测试日开始,温室工作可以得到相当温暖、真实的画面。

 
poYBAGNOSxOAMnVqAACQXcw0rvg601.jpg
 

在项目期间,我们还强调了在被要求时带 Farmaid 参加公共活动。

 
poYBAGNOSxaADt3JAADDoxEJ8Sc288.jpg
 

在一次活动中,我们的 Farmaid 机器人甚至遇到了一些机器人朋友,包括 Mowbot 和一些高功率机器人。未来构建和协作的协同作用!


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'Farmaid植物病害检测机器人',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);