养了一只熊类仓鼠,每天晚上疯狂跑轮。据我熬夜的时候观察,长达三四个小时连续不断。轮子有轻轻的嗡嗡声,小爪子打在跑轮的内壁上,嗒嗒嗒嗒。据二猫查资料,仓鼠每天要跑8.4公里,不然不舒服。据说有人录了视频,他家仓鼠跑了5个多小时。
那么,时速多少呢?我想实测一下。
1. 技术方案的逐步退化
最初考虑,在跑轮上贴张小纸片,当跑轮带动小纸片切断光源时,红外传感器检测到转了一圈。用树莓派,或者用 arduino 记录红外传感器的信号,然后显示在LED上并且上传到手机APP或者小程序上。最后一步,数据由树莓派上推到服务器,然后从APP或小程序周期下拉。
又考虑,这得把树莓派翻出来,arduino放哪了?得在PC机上安装开发环境,好几个G,只能干这个,没啥别的用处。
要不,不用树莓派或arduino,换成PC机?
红外传感器上行咋接PC?把红外传感器换成摄像头?那么,需要 OpenCV,也许训练AI识别小纸片?
摄像头,手机就有……
总之,从捕捉跑轮转动这个动机出发,考虑用手机,手动,一次性的解决方案。如此对付。
2.速度
求速度的话,可以从视频信号中抽取出仓鼠腿的移动。这样 步频 可以从视频中观察 每秒小腿儿倒腾的次数 得到,步幅,可以在整理箱或跑轮上粘贴坐标纸作为背景。但是如果亲眼看到仓鼠跑轮,就会放弃这个想法。因为小腿倒腾得实在太快了,在频闪50Hz的日光灯下看不太清楚。通过手机的摄像头看,有虚影。仓鼠无影脚。
所以,准备采用上节中提到的通过跑轮间接测量。
(1)跑一圈的位移
跑轮直径标称25cm。我把手掌张开比划了一下作为交叉验证,大致差不多。根据圆的周长公式可以求得周长为 25*3.14=78.5cm。仓鼠每驱动跑轮转一周,虽然事实上并无位移,简称 跑一圈,行进距离计为78.5cm。以下为跑轮大致侧视角度,直尺用于作为参照物,其量程不够测量25厘米。
(2)跑轮转速 跑轮每转一圈所花费时间的测量
在跑轮的外圈表面上用马克笔做明显标记,称为 mark。我打了3个加号“+”,排成一行,与跑轮的轴平行。以下为跑轮的顶视角度。
把手机摄像头近距离对准mark,开启视频录制功能。在仓鼠奔跑的中间阶段,速度较为稳定时,开始录制,十几秒后停止。保存视频。以上,录制多次得到多个视频文件。
把上述视频用 anlink 传到 PC 机,以下在PC机上操作。
用视频编辑工具 shotcut 打开视频文件中的一个。
在filters 中 选择 timer 加入。之所以选用这个过滤器的原因,是因为 shotcut默认的时间戳为 xx:yy:zz 格式,其中最后一个冒号后为30进制,而不是60进制,需要换算。我在最初使用的时间不知道那是30进制,算了几次时间感觉不对,逐帧查看时间戳才找到原因。
逐帧向后翻,找到如下图所示,mark刚刚显露出来的时候。
在 output 的 track 上打标记。
同时,由于 filter | timer 的效果,时间戳会显示在视频的当前帧上。
为每个要计时的时刻按如上方法打标记。把所有标记抄写到 excel 中,求出每两个时间戳的时间差。
求时间差的平均值 0.895333333 秒。
以上表明,仓鼠跑轮周圈0.9秒左右。不到1秒,25厘米,一“拿”多长的的跑轮,就要转一圈。快不快?
(3)速度
根据上述数据 周长 78.5cm,转速 0.90秒左右,求得仓鼠速度为
=3.14*0.25/0.895333333=0.876768429 米/秒。约每秒跑将近1米。
合 3.156366345公里/小时。比我快速徒步6公里/小时或5公里/小时略慢,比我漫步时还要快一些。现在如果持续三四个小时,我不知道自己能不能走到3公里/小时这么快。
(4)关于精度和误差的讨论
我最担心的是测量精度不够,特别是亲眼看到仓鼠的小腿跑出虚影的时候。在跑轮上与在地面上不同,仓鼠的脚没有与地面保持相对静止的那个时间段,脚一直在随着跑轮的转动而移动,所以更难测量。当然,在地面上有另外的困难,可能需要镜头拉远,才能看到仓鼠的脚不止一次落地。
先做了个可行性的技术原型,用手机摄像头在暗光下,人手动转跑轮,速度差不多与仓鼠转得在相同数量级,能够明显看到mark标记在镜头里出现。那么,差不多能测出来。
大约1秒钟跑轮转1圈。1秒钟,手机视频采样30帧,因此测量的时间间隔,即时间分辨率为 1/30 约0.033秒。上述测得的每圈花费时间0.90秒左右,考虑到时间分辨率,应为0.90-0.03~0.90+0.03,即0.87秒~0.93秒。
以上是对测量精度的考虑。
测量误差我的考虑有问题。从跑轮正上方拍摄,计时的时机是mark出现在边缘,还是mark到达正中间?mark在正中间附近时,线速度在视野中投影的值 比 在边缘要 大。因此,相同的mark位移误差时,mark在正中间对应的时间误差更小。所以mark在正中间可以测得更精确的时刻。但是我测量的时间没有考虑到这一点。后来又考虑到,多次测量取平均值,在累加的过程中会把这一误差消除掉,所以保留了这一方案。
(5)小结
仓鼠奔跑每秒跑将近1米。
2.步频
仓鼠跑起来嗒嗒嗒,每秒多少步呢?求步频。想起来我练跑步的时候,tiger和zhumao分别告诉我,不要那么大的步子,对心脏压力太大,小步倒腾,倒腾的频率要高。仓鼠深得其中精髓。
(1)原理
观看仓鼠奔跑侧面的视频,同时听声音,可以知道仓鼠的两只前脚仅负责支撑,并且产生的声音较小;仓鼠两条后腿后蹬是主要动力,并且会产生“嗒”的一声。
我们测量这些嗒声音之间的时间间隔。
(2)音频
用 ffmpeg 把上述视频转为 mp3格式。
>ffmpeg -i 1.mp4 1.mp3
(3)测量嗒声的时间间隔
用 audacity 打开得到的mp3文件。
上图中,较亮颜色为选中的区段,3个红色箭头所指的,就是发出嗒嗒声的位置。因为声音轻微,所以看起来振幅不明显。上图中右下角是来自窗口下边缘的截图,需要注意的是选中部分时长为0.294秒。
可以看出,大约0.3秒,嗒声3次。即每0.1秒跑出一步。
为了现象更明显,对声音做 normalize ,得到下图。大约0.5秒,共5次踏步。
能够看出/听出,在每次嗒的时候,波形较密集地穿越了零点,即频率较高。转换成频谱可以看到,此处有几个与其他部分相比频率较高的峰。
再看一段,0.3秒左右3次踏步。
(4)小结
每0.1秒跑出1步,合每秒10步。
3.步幅
步幅可以用 速度/步频 大致算出。
0.9 (米/秒) / 10(步/秒) = 0.09米/步
9厘米!每步9厘米这么大的步子。耗子全身抻直了大约12厘米也没有多长啊,一步这么远么?
考虑到仓鼠行动时在跑轮上,而不是在地面上。所以,此时的步幅为每次跨步跑轮转过的边缘长度长,与地面上每两次跨步间的地面距离不同。人类在跑步机上和在地面上的跨步、步频,还有能耗,也是不同的。由于在跑步机上不需要推动身体,仅需要每步保持抬起身体,据说更容易一些。不过,仓鼠确实向身后以线速度推动了滚轮,转动惯量转换为线速度再与仓鼠的质量相比,不知道哪个更大,差多少。
4. 总结
周长接近1米的跑轮,仓鼠每1秒钟转1圈,这1秒钟1圈仅10步,每条后腿迈步5步。
无论速度1米/秒、步频10步/秒、步幅10厘米/步,都远比我原以为的要厉害。真快啊!每天看它跑个不停,我都觉得人生美好、积极向上、阳光开朗,它可真是享受生活。
Узнайте, как приобрести диплом о высшем образовании без рисков
Быстрая схема покупки диплома старого образца: что важно знать?
Как правильно купить диплом колледжа и пту в России, подводные камни
Процесс получения диплома стоматолога: реально ли это сделать быстро?
bagira-school.com.ua/ru/stati/kupit-diplom-bakalavra-bistro-i-nadezhno-v-2023-godu
Как не стать жертвой мошенников при покупке диплома о среднем полном образовании