网络机器人吧社区

机器人射击比赛中,操作手如何知道自己当前的剩余弹量?

安信工Artisans战队 2018-12-05 14:07:33

RoboMaster 技术智囊团,用简单的方式带你入门机器人知识,每周日准时更新。


在工厂里,许多饮料装罐流水线都采用自动化的设备,无需人工,机器就能将瓶罐用饮料装满。机器只要设定好一个量,每次就能注入同量的饮料。


装罐流水线


有种难度比较大的是,工厂补充水库的水量时,需要知道水量是否过低,然后再补充对应需要的水量。这需要机器自动检测水位,再计算所需水量。


要如何知道自己的剩余量呢?在 RoboMaster 比赛中,机器人也面临同样的问题。


机器人的弹仓容量是有限的,每进行完一轮射击攻击,就要赶紧“回家”补一次弹。


对抗场面激烈


在虚拟的射击游戏中,游戏界面会实时显示剩余弹量,而真实比赛中,操作手不知道机器人剩余的弹量,往往在打得火热时,没弹了!只能被对手打得落花流水。


游戏界面


所以,检测机器人弹仓内的剩余弹量是非常有必要的。机器人如何获知剩余弹量?下面我们来分析,如何通过传感器和其他技术手段,来设计一个弹量检测装置。


弹量的检测原理一般有两种:一种是直接测机器人弹仓里有多少弹丸,另一种是检测之前补充的弹量,然后再减去打出去的弹量来获得。



直接检测弹仓弹丸数量



最简单粗暴的方法就是直接检测弹仓内弹丸的数量。方法当然不是做一只手在弹仓里一颗颗地数弹丸啦,而是用称重的方式。


因为单颗弹丸的重量是固定的,所以只要测出总重量,再除以单颗重量,就可以得到数量了微型称重传感器就可以满足我们的要求,它的精度达到 1g 甚至更低。


称重传感器


那么,传感器应该装在哪呢?因为弹丸在弹仓里,所以我们可以直接安装在弹仓下,就有:测得重量-弹仓重量=弹丸总重量。而且弹仓的材料普遍较轻(3D 打印材料或轻铝板),传感器的负载压力不会那么大。


装在弹仓下


但这有个大毛病,当机器人想瞄准上方目标时,云台就会抬起来,弹仓也会一起倾斜。我们用初中学过的受力分析看一下,传感器称到的重量就是弹仓和总弹丸在 y 轴上的分力了。



有人说只要检测云台的仰角 α,再把称到的 y 分量除以 cos α 不就得到重量了吗?嘿嘿,如果有这工夫,我就会选择下面这种方法。


另一种安装方式安装在整个云台下方,测量的是云台和弹丸的总重量,基本消除了云台运动带来的误差。


装在云台下


这种方法也有个毛病,就是传感器压力很大。整个云台包括了两个转动方向的电机,还有各种零部件,云台有这么大的负载还要求传感器有高精度,这些要求就会让传感器价格很贵。


同时由于云台结构存在内应力(材料内部的作用力),这种干扰的力也会对传感器产生一定的误差。


直接测弹仓内的弹量,这种方法虽然直接干脆,但将传感器装在运动激烈的机器人身上,对研发人员的技术水平有较高要求,也对检测效果有较大的影响。所以我们还有第二种方法!



间接检测弹仓弹丸数量



机器人打光了弹丸之后需要再补充弹丸,间接检测就是检测机器人补充了多少弹丸,然后再检测之后打出去了多少弹丸,有:补充的弹量-打出去的弹量=当前弹量


整个过程不需要知道弹仓弹量,但要求每次补给弹丸之前,都要将弹仓清空。


我们先看如何检测机器人补充了多少弹丸。




补充的弹量检测




机器人的弹丸一般是通过补给站(相当于一个储存弹丸的仓库,机器人会从补给站处补给弹丸。)直接补给, 所以最简单的方法就是:设定供给口打开的时长。只要弹丸流出过程的时间一样,弹丸数量就会一致。这和市面上的自动喂狗机的原理一样。 


自动喂狗机


但这种方法精度太低,弹量很难控制住。


我们可以用第二种方法:在补给站底下加装一个带有称重传感器的预备弹仓,补给站先把弹丸放进预备弹仓,再给机器人。就像我们吃饭前会先把饭装进碗里再吃一样。这样就可以通过预备弹仓上的称重传感器获知弹量了。



相比装在机器人上,补给站的安装更简单,只要保证没有外力影响,就可以精准测量。


如果经费有限,还可以考虑另一种方法——测量弹丸堆叠的高度,通过高度算出弹丸数量,这可以用光电传感器来实现。比起称重传感器,光电传感器的价格更低,实现方法也比较简单。


光电传感器


我们将传感器安装在容器顶部,传感器测量自己到弹丸的距离,从而算出弹丸堆叠的高度,用总的容器高度减去测量值就是弹丸高度。


但这种方法的精确度没有称重传感器好。因为弹丸堆叠得不齐整,同样的弹丸数量可能会有不同的高度。


补给站


因为补给站是固定的,使传感器工作环境稳定,受干扰因素较少。比起在机器人身上装传感器,补给站测量的精度会更高。


但机器人在补弹时,很可能会站歪导致没接住弹丸,漏一地的弹丸。这时,我们可以在补给站上装一些指示的 LED 灯,来指示机器人对准供弹口。




英雄机器人的补弹量




比赛中,还有英雄机器人,它无法通过补给站补给弹丸,只能登上资源岛,在资源岛里抓取两种不同大小的弹丸。而检测装置不能装在公用的资源岛上,所以必须装在机器人体内。


英雄机器人在资源岛取弹


在机器人抓取后,弹丸要经过筛选装置,大小两种弹丸会被装进不同的弹仓。我们可以在筛弹机构和弹仓之间的管路安装一个光电传感器。



传感器的发射端和接收端分别装在管路的两侧,当弹丸流入时,接收端所接收的信号就会被阻断,由此判断有多少弹丸流入。


光电传感器相比称重传感器更便宜,当机器人有筛弹机构时,这种方法更加实用。




检测弹丸打击量




知道了补充的弹量,只要再减去打击出去的弹量就可以算出剩余弹量了。


比赛规则规定,炮管外必须安装官方的裁判系统,弹丸发射时,裁判系统可以对发射状态进行检测,比如射击频率和射速。在检测时,系统会有中断,也就是每检测完一颗,系统就断开一次,所以我们可以读取中断次数来计数。


裁判系统


通过裁判系统读取的方式是最直接有效准确率也较高的方法。但必须熟悉裁判系统的工作原理才能加以利用。


如果不通过裁判系统,我们可以再次利用文中出镜率超高的传感器来获得打击弹量。


第一种是通过光电传感器,将它装在发射装置里,原理和测量英雄机器人补弹量一样,弹丸经过发射机构时,就会阻断传感器信号,从而检测发射次数。


第二种是通过电机码盘。弹丸在发射之前,会先进入拨弹机构,然后被拨盘拨进发射管路里。拨盘每转动一格,就拨进一颗弹丸。


拨盘转动


电机里有电机码盘,可以检测电机转动的角度,从而知道拨盘转了多少格通过读取码盘数据就可以获得打击弹量了但前提是拨弹电机不空转。(空转就是电机转动,但拨盘却没动)


电机内有码盘


相比通过裁判系统或加装光电传感器读取数据,这种利用码盘的方法是最简单。因为这不需要加装其他器械,而且在控制机器人的时候,我们正好也需要读取电机码盘的数据,不需要增加过多的额外操作。


但这得保证拨弹电机不会空转,否则测量数据就会有很大误差了。




如何让操作手看到弹量




所有以上方式所得到的测量数据,最后都需要让机器人操作手知晓。RoboMaster 官方在裁判系统的设定中开放了编写 CustomDATA 数据的权限,用户可以通过编程,让剩余弹量数据在电脑上显示。



粗略的剩余弹量检测



其实,在激烈的比赛中,机器人到底剩 8 颗弹丸还是 10 颗弹丸都没有差别,因为都要“回家”补弹,所以我们在不追求精度的情况下,可以用更简单粗暴的方法——弹丸低于某个量就发出提示


方法有很多种,这里举一个简单的例子,还是使用出镜率最高的光电传感器。我们将发射器和接收器分别装在弹仓内的两侧,当接收器接能够收到信号,就说明这个高度已经没有弹丸了。


弹仓


然后再额外搭配一个非常小的控制器(比如 Arduino 控制器或单片机),再加上一个 LED 灯对不同的状态显示不同的颜色。一个简易的“弹量不足”警报就做好啦!


◆◆◆


以上讲了获知机器人剩余弹量的思路,其实不止在机器人比赛,同样的原理在生活中也被广泛应用。


比如在精确装瓶的制药厂中,需要对每瓶药精确地分配,就可以用称重传感器,保证每瓶药的重量以及颗粒数是一定的。


本文通过机器人需要知道剩余弹量的这个需求,来多角度分析了如何设计机器人的功能。希望这种分析方法可以为大家提供一个细致的思考问题的思路,在未来设计机器人或实际的生产应用中都有所帮助。


 本期作者 


新加坡南洋理工大学 许悦聪

深圳职业技术学院 RoboMaster 战队顾问

没事爱造无人机,热爱机器学习的博士生



本文来自 RoboMaster 技术智囊团许悦聪,文章部分有修改。如果你也希望加入技术智囊团,请通过 robomaster@dji.com 联系我们。文章部分素材来自公共网络,侵权删除。


阅读原文

学习往期机器人的技术文章





- 专业不枯燥,解读机器人信息 -


Copyright © 网络机器人吧社区@2017