爱好者的机器视觉相机。 如何使用相机进行离线导航?

我们制作了一个摄像头,用于使用mROS检测AprilTag和ArTag。 通过Uart或以太网连接。



我们尝试了JeVois和OpenMV,欣赏了利弊,并组装了我们的相机。



根据数据搜索视觉标签和机器人的方向。 我们正在开发一种用于在练习场上收集高尔夫球机器人 。 现在,世界上只有一家公司出售机器人来解决这个问题。 市场前景十分广阔,这鼓励我们将项目从DIY转变为技术创业公司。

使用不带RTK的GPS来导航机器人,很难获得正确搜索基地和停放所需要的精度。 使用实时运动学,在接近建筑物时会遇到问题。 我们尝试了各种选择,并决定制作自己的相机以在底座入口处寻找视觉标记。

机器人的部分发展是将其停放在扩展坞上,以卸载球室并为电池充电。 我们考虑了很长一段时间如何停放它,同意机器人会找到一个明亮的光学物体并跟随它。

选择了AprilTag或ArTag标签作为目标,具体取决于它们在字段中的显示方式。 因为 我们不会遭受NIH综合征的困扰-搜索支持这些标记并直接在脚本上提供脚本支持的机器视觉相机已经开始。

第一杰沃斯


很快发现-JeVois ,由南加州大学实验室开发。 不幸的是,我不得不通过亚马逊订购到俄罗斯,没有内部经销商,而且显然没有任何经销商-显然,营销和销售是由开发商自己进行的(当我们不得不从Jevois转到Jevois inc来购买相机时,我们感到非常惊讶。 ,然后寻找目录的链接-在10-12个位置中间的某个位置选择摄像机)。



在计算机上进行的第一次运行非常令人鼓舞,总的来说,一切都开箱即用,看起来很有趣。 但是,在测试连接到控制板后,发现了四个严重问题:

广告材料中指出的60-90 FPS是针对160x120或320x240的分辨率给出的,这根本不适合停车-距离至少5米的距离仍然需要捕获。 为了使正方形从6到8米落入160x120的纹理中-您需要使其尺寸至少为半米,并且在接近正方形时,它首先会完全关闭框架,然后完全停止检测。

消耗800mA的电流,而仅通过带有mini USB的USB电缆供电,可以承受该电流而不会产生太大的电压降。 事实证明,找到具有此类功能的长度至少为半米的电缆非常困难-选择了大约15种选件,无论如何结果都不是很令人满意。

相机在夜间失明或在白天闪烁。 自动平衡的作用远非善恶。

照相机由风扇冷却。 风扇很小,速度很高-高频噪音或发出刺耳的尖叫声。

尖叫机器人是我们要做的最后一件事。

在相机内部编写执行代码是一项单独的工作-安装环境是一件相当令人困惑的事情,组装并上传到SD卡至少需要2-5分钟。 是的,没有闪光灯-一切都在SD卡上。

结论:可以在室内且光线充足的情况下与发烧友一起玩的相机。 同时,如果发烧友是学生,那将是可取的-照相机的界面,文档和使用方法生动地使我想起了学生实验室的工作,在该实验室中,几乎没有人关注使用该系统和其他功能的便利性。 当然,这是关于C ++模块的。 可以通过Jevois Inventor来编辑Python脚本,但FPS远低于此。 在房屋外,摄像机甚至连两次大雨都无法幸免,风扇以空速堵塞了场上的灰尘。

结果-它不适合在机器人上使用,但是已经证明了停车的基本可能性。

OpenMV 3及其所有变体




首次搜索时,它根本不可用-Kickstarter上有一个广告活动。

在我们与JeVois玩够了之后,将100美元扔进了垃圾箱-找到了一个有库存的卖家,并购买了2件。

总的来说,印象非常令人愉悦-OpenMV IDE中的界面非常深思熟虑,透明的python编译,可以方便地观察和调试算法。 但是,这里有问题:

  • 分辨率可以是任意分辨率,但只能在不超过200x200像素的区域中搜索AprilTag。 我们回到谷物等问题。 开发人员建议先拉blob,然后查看其中的代码。 但是,在普通背景(理想情况下是白墙)以外的其他东西上则不起作用,绿草和明亮的阳光将所有东西变成粥。 加上FPS最多下降5。
  • 便宜的Omnivision传感器+便宜的光学元件=肥皂性图片。 在视觉上,当观看视频流时,这不是很明显,但是当观看单个帧时,它清晰可见。
  • 没有红外幕,但有红外照明。 [WHAAAAT?]
  • 不受外部环境的影响。 一点也不。



该脚本已在此摄像机上调试,进行了数十次停车。 但是,当机器人从莫斯科滑向圣彼得堡并返回后,相机停止启动-电源调节器被击倒。 明显的作用是封装和电源稳定。 在这里,发现了最有趣的东西-根本找不到具有适用于此摄像机的IP的情况,或者它是带有透明盖的盒子,没有内部安装和紧紧的电缆输入/输出。 搜寻的结果是,找到了大量带有合适箱子的廉价中国监控摄像机。 买了相机并去掉了镜头,第二张OpenMV副本代替了木板,一切正常。
但是,夜晚和夜晚成了几乎不可逾越的障碍-没有IR帘。

结果:该相机非常便于原型制作,资源有限,根本不受外部环境的保护(第二台相机随后进入工业冰箱,并在-30℃下无法幸存)。 不好

然后,对于我们来说,从中国相机中获得什么样的板子变得非常有趣

海思克隆


经过仔细检查,结果发现该板具有2核ARM,DSP处理器,IR幕布,IR照明,Sony的体面传感器,该板覆盖有用于街道的保护性化合物+外壳。 正是您需要的-仍然需要收集软件。

事实证明,Hisilicon + u-boot里面的Linux克隆相当不错。
我必须从中文资源下载SDK并处理程序集。 原则上,在此过程中没有发现任何可怕的问题,只是有必要修复SDK内的多个文件-SDK在该Linux发行版上已经很老了,并且此后的某些头文件已更改。 好吧,我不得不将外壳从zsh更改为bash。 我将省略详细信息;好的,这应该是另一篇文章。

这些资源帮助:

解析,连接到相机

示例软件组装图

然后一切都按照众所周知的方案进行:



大部分时间都是从传感器上获取图片,其余的我只用了4个小时就完成了,只是将调试后的算法从Python移植到C ++。
使用传感器大约需要一个半星期的时间。 当然,这些设备中没有/ dev / video0,几乎是裸露的硬件,可以直接使用内存和端口。
我们必须马上说,SDK中的示例无需修改就可以在这些SDK的调试板上正常工作,否则,需要进行许多小的编辑。 看起来很有趣,主要的问题是确定相机中的传感器,因为 中文在描述中写一个,另外一个标在板上,第三个模型在软件中初始化。 例如,照相机在说明中具有IMX323传感器,该板标记为SC2235,在初始化脚本中启动时,该板以AR130开头,并且照相机软件将其初始化为SC2235P。

所有这些的原因非常简单:对于最终用户而言,IMX323和SC2235都是相同的,图片非常相似。 带有int脚本的内核和rootfs是通过SDK进行的,只需很少的更改,并且不会为每个模型使用单独的初始化脚本而烦恼-仅启动参数正确,并且名称保持不变。 在用于摄像头的软件中,已经启动了用传感器初始化DSP的第二步,并且摄像头的精确模型在那里已经很关键-因此,日志已经具有精确模型-SC2235P。 P-这很重要,因为传感器的特性不同,与SC2235相比,它甚至可以在略微不同的总线频率和不同的分辨率下工作。

任务的第二部分是关于传感器的数据表,而基本上没有。 因此,我必须重新构建hi_i2c模块,并通过printk打印到日志中,然后将其替换为从摄像机中移除的转储中,编写视频处理器的DSP配置阻尼器并从工作中的摄像机中移除配置,以及几次以查看DafangSoftware项目中的驱动程序。 详细地说,这将绘制3-4篇单独的文章,我打算在NG之后写。

最后,所有结果都比预期的还要好-即使在几乎完全黑暗的环境中,25-12 fps,PID停车控制控制器等条件下,也可以从6米范围内捕获AprilTag的自信工作。
结果-这是在野外工作最多的结果,为了防止外部条件,已经考虑了许多因素。 唯一无法完全验证的事情是在灿烂的阳光下进行的工作,自10月以来的天气已经恶化。

发展理念


在这里,我们有了一个主意-我们手中有一个类似OpenMV的产品,它具有更好的硬件功能和大量生产的产品。 仍然需要将相机的工作提升到OpenMV级别,在那里使用micropython,制作一个方便的IDE,并仔细检查OpenMV当前脚本的工作方式。 另外,mRos完全移植到了那里,这立即扩展了此类摄像机在ROS系统中的使用。

因此,我们计划在三月份交付OpenMV类似物,在五月份交付mROS。

为了降低定制相机的价格,我们准备将其提供给您。 填写表格 ,当我们准备订购第一批产品时,我们将与您联系。

Source: https://habr.com/ru/post/zh-CN426695/


All Articles