完全模型组 EdgeBoard 端快速调车经验分享
2022-08-26
快速的调车造就快速的车车,故为了能够快速调试小车的图像,我们写了许多工具,在这里我将这些工具分享出来供车友们一起使用。
工具部分的代码已经在 Github 上开源:hilookas/Homo_Vision
关于协同搬运组的分享,请参见:协同搬运组上位机方案分享
了解我这次智能车之旅,请参见:十七届智能车——南京之旅
回放和录制
官方方案以及其他网上的方案,获取摄像头一般都是使用 opencv 提供的 capture 进行,但是这个 capture 存在 bug,很挑摄像头,并且 opencv 读取到的图片会自动转换成矩阵形式,直接存到硬盘中很慢。
Linux 提供的底层 API V4L2 ,从摄像头采集到的图片原始是经过 jpeg 压缩过的,将这个图片直接保存,绕过了使用 opencv 解压缩图片然后再压缩图片的过程,提升了效率。
故我们根据 V4L2 的例程,手撸了一个摄像头采集录制并且在之后回放的代码,这个程序效率很高,经过实测录像过程基本不增加小车的延迟,不影响小车的运行。
Python 与 C 的选择
这里也引出了这两种代码到底哪种更加适合小车程序的编写,我们的结论是,如果需要与底层的 API 交互,并且方便底层 bug 的调试,更加推荐使用 C 来编写代码。
此外内核日志也是一个很好的工具,通过 dmesg
命令打出内核提示的错误,可以更加准确的定位错误。比如 EdgeBoard USB 总线带宽不足的问题,在 ffmpeg 中会提示内存不够,而 dmesg 中才能准确提示错误。
VSCode Remote
VSCode 的远程功能可以让 EdgeBoard 像本机一样使用。强烈推荐试用一下,同时也可以在远端配置一下 ssh 密钥,这样每次 VSCode 重连的时候就可以免密码登录。
需要在本机上安装有 Git Bash,在 Git Bash 中先执行 ssh-keygen
生成密钥对,然后再 ssh-copy-id
将公钥拷贝到 EdgeBoard 上。
TightVNC
随时插着屏幕也是非常头疼的一件事情,于此我们推荐安装轻量化的 VNC 服务——tightvnc
结语
虽然因为线上成绩的锅,最后无缘国赛,但是调车本身,一年多的调试过程,给我们了很多工程上的宝贵经验。
另外附上一个我们小车省赛的录像,纪念一下,这个线下可能最快的车: