「2019-4」【每周分享】操作手如何知道自己的剩余弹量?
![火星探索](https://hz-rm-bbs-web-prod.oss-cn-hangzhou.aliyuncs.com/avatar/pre/v1/000017620_avatar_big.jpg)
在工厂里,许多饮料装罐流水线都采用自动化的设备,无需人工,机器就能将瓶罐用饮料装满。机器只要设定好一个量,每次就能注入同量的饮料。
有种难度比较大的是,工厂补充水库的水量时,需要知道水量是否过低,然后再补充对应需要的水量。这需要机器自动检测水位,再计算所需水量。
要如何知道自己的剩余量呢?在 RoboMaster 比赛中,机器人也面临同样的问题。
机器人的弹仓容量是有限的,每进行完一轮射击攻击,就要赶紧“回家”补一次弹。
在虚拟的射击游戏中,游戏界面会实时显示剩余弹量,而真实比赛中,操作手不知道机器人剩余的弹量,往往在打得火热时,没弹了!只能被对手打得落花流水。
所以,检测机器人弹仓内的剩余弹量是非常有必要的。机器人如何获知剩余弹量?下面我们来分析,如何通过传感器和其他技术手段,来设计一个弹量检测装置。
弹量的检测原理一般有两种:一种是直接测机器人弹仓里有多少弹丸,另一种是检测之前补充的弹量,然后再减去打出去的弹量来获得。
直接检测弹仓弹丸数量
最简单粗暴的方法就是直接检测弹仓内弹丸的数量。方法当然不是做一只手在弹仓里一颗颗地数弹丸啦,而是用称重的方式。
因为单颗弹丸的重量是固定的,所以只要测出总重量,再除以单颗重量,就可以得到数量了。微型称重传感器就可以满足我们的要求,它的精度达到 1g 甚至更低。
那么,传感器应该装在哪呢?因为弹丸在弹仓里,所以我们可以直接安装在弹仓下,就有:测得重量-弹仓重量=弹丸总重量。而且弹仓的材料普遍较轻(3D 打印材料或轻铝板),传感器的负载压力不会那么大。
但这有个大毛病,当机器人想瞄准上方目标时,云台就会抬起来,弹仓也会一起倾斜。我们用初中学过的受力分析看一下,传感器称到的重量就是弹仓和总弹丸在 y 轴上的分力了。
有人说只要检测云台的仰角 α,再把称到的 y 分量除以 cos α 不就得到重量了吗?嘿嘿,如果有这工夫,我就会选择下面这种方法。
另一种安装方式安装在整个云台下方,测量的是云台和弹丸的总重量,基本消除了云台运动带来的误差。
这种方法也有个毛病,就是传感器压力很大。整个云台包括了两个转动方向的电机,还有各种零部件,云台有这么大的负载还要求传感器有高精度,这些要求就会让传感器价格很贵。
同时由于云台结构存在内应力(材料内部的作用力),这种干扰的力也会对传感器产生一定的误差。
直接测弹仓内的弹量,这种方法虽然直接干脆,但将传感器装在运动激烈的机器人身上,对研发人员的技术水平有较高要求,也对检测效果有较大的影响。所以我们还有第二种方法!
间接检测弹仓弹丸数量
机器人打光了弹丸之后需要再补充弹丸,间接检测就是检测机器人补充了多少弹丸,然后再检测之后打出去了多少弹丸,有:补充的弹量-打出去的弹量=当前弹量。
整个过程不需要知道弹仓弹量,但要求每次补给弹丸之前,都要将弹仓清空。
我们先看如何检测机器人补充了多少弹丸。
补充的弹量检测
机器人的弹丸一般是通过补给站(相当于一个储存弹丸的仓库,机器人会从补给站处补给弹丸。)直接补给,所以最简单的方法就是:设定供给口打开的时长。只要弹丸流出过程的时间一样,弹丸数量就会一致。这和市面上的自动喂狗机的原理一样。
但这种方法精度太低,弹量很难控制住。
我们可以用第二种方法:在补给站底下加装一个带有称重传感器的预备弹仓,补给站先把弹丸放进预备弹仓,再给机器人。就像我们吃饭前会先把饭装进碗里再吃一样。这样就可以通过预备弹仓上的称重传感器获知弹量了。(当然在新赛季不用考虑了)
相比装在机器人上,补给站的安装更简单,只要保证没有外力影响,就可以精准测量。
如果经费有限,还可以考虑另一种方法——测量弹丸堆叠的高度,通过高度算出弹丸数量,这可以用光电传感器来实现。比起称重传感器,光电传感器的价格更低,实现方法也比较简单。
我们将传感器安装在容器顶部,传感器测量自己到弹丸的距离,从而算出弹丸堆叠的高度,用总的容器高度减去测量值就是弹丸高度。
但这种方法的精确度没有称重传感器好。因为弹丸堆叠得不齐整,同样的弹丸数量可能会有不同的高度。
因为补给站是固定的,使传感器工作环境稳定,受干扰因素较少。比起在机器人身上装传感器,补给站测量的精度会更高。
但机器人在补弹时,很可能会站歪导致没接住弹丸,漏一地的弹丸。这时,我们可以在补给站上装一些指示的 LED 灯,来指示机器人对准供弹口。(仅限于2018前的赛季)
检测弹丸打击量
知道了补充的弹量,只要再减去打击出去的弹量就可以算出剩余弹量了。
比赛规则规定,炮管外必须安装官方的裁判系统,弹丸发射时,裁判系统可以对发射状态进行检测,比如射击频率和射速。在检测时,系统会有中断,也就是每检测完一颗,系统就断开一次,所以我们可以读取中断次数来计数。
通过裁判系统读取的方式是最直接有效准确率也较高的方法。但必须熟悉裁判系统的工作原理才能加以利用。
如果不通过裁判系统,我们可以再次利用文中出镜率超高的传感器来获得打击弹量。
第一种是通过光电传感器,将它装在发射装置里,原理和测量英雄机器人补弹量一样,弹丸经过发射机构时,就会阻断传感器信号,从而检测发射次数。
第二种是通过电机码盘。弹丸在发射之前,会先进入拨弹机构,然后被拨盘拨进发射管路里。拨盘每转动一格,就拨进一颗弹丸。
电机里有电机码盘,可以检测电机转动的角度,从而知道拨盘转了多少格,通过读取码盘数据就可以获得打击弹量了。但前提是拨弹电机不空转。(空转就是电机转动,但拨盘却没动)
如何让操作手看到弹量
相比通过裁判系统或加装光电传感器读取数据,这种利用码盘的方法是最简单。因为这不需要加装其他器械,而且在控制机器人的时候,我们正好也需要读取电机码盘的数据,不需要增加过多的额外操作。
但这得保证拨弹电机不会空转,否则测量数据就会有很大误差了。
所有以上方式所得到的测量数据,最后都需要让机器人操作手知晓。RoboMaster 官方在裁判系统的设定中开放了编写 CustomDATA 数据的权限,用户可以通过编程,让剩余弹量数据在电脑上显示。
粗略的剩余弹量检测
其实,在激烈的比赛中,机器人到底剩 8 颗弹丸还是 10 颗弹丸都没有差别,因为都要“回家”补弹,所以我们在不追求精度的情况下,可以用更简单粗暴的方法——弹丸低于某个量就发出提示。
方法有很多种,这里举一个简单的例子,还是使用出镜率最高的光电传感器。我们将发射器和接收器分别装在弹仓内的两侧,当接收器接能够收到信号,就说明这个高度已经没有弹丸了。
然后再额外搭配一个非常小的控制器(比如 Arduino 控制器或单片机),再加上一个 LED 灯对不同的状态显示不同的颜色。一个简易的“弹量不足”警报就做好啦!
◆◆◆
以上讲了获知机器人剩余弹量的思路,其实不止在机器人比赛,同样的原理在生活中也被广泛应用。
比如在精确装瓶的制药厂中,需要对每瓶药精确地分配,就可以用称重传感器,保证每瓶药的重量以及颗粒数是一定的。
本文通过机器人需要知道剩余弹量的这个需求,来多角度分析了如何设计机器人的功能。希望这种分析方法可以为大家提供一个细致的思考问题的思路,在未来设计机器人或实际的生产应用中都有所帮助。
本期作者
新加坡南洋理工大学许悦聪
深圳职业技术学院 RoboMaster 战队顾问
没事爱造无人机,热爱机器学习的博士生
本文来自 RoboMaster 技术智囊团许悦聪,文章部分有修改。如果你也希望加入技术智囊团,请通过robomaster@dji.com 联系我们。文章部分素材来自公共网络,侵权删除。
本期分享具有一定的时效性,在2019赛季可能有些内容已经不适用,仅供参考
请问这篇文章对你有用吗?
「2019-4」【每周分享】操作手如何知道自己的剩余弹量?