找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 20570|回复: 15

你的魔方为什么解不开——详述颜色传感器

  [复制链接]
发表于 2016-6-5 12:26:33 | 显示全部楼层 |阅读模式
本帖最后由 xvholly 于 2016-6-5 12:38 编辑

光传感器可以通过检测窗检测到颜色或光强度,光传感器可设定三种模式:环境光模式、反射光模式和颜色模式。


环境光模式

光传感器在环境光强度模式下不发光(其实是蓝色的),能够测量从周围环境进入到检测窗的光强度,如太阳光或手电筒的光束,测量范围从0(极暗)到100(极亮)。利用传感器识别环境光的能力可让机器人完成诸如早晨光闹钟,或在灯灭时停止行动等动作。

反射光模式

光传感器在反射光强度模式下发出红色的光,能够测量从红灯(即发光灯)反射回来的光强度,测量范围从0(极暗)到100(极亮)。利用传感器识别可见光的能力可让机器人完成诸如在白色表面上移动直到检测到黑线或颜色识别卡的动作等。

颜色模式

光传感器在颜色模式下发出彩色的光,EV3官方编程软件可识别七种颜色:黑色、蓝色、绿色、黄色、红色、白色、棕色,和无颜色。利用传感器区别不同颜色的能力可让机器人完成诸如分类彩色球的工作,让机器人说出各种检测到的颜色,或见到红色即停止动作等。

光传感器特性

光传感器采样频率为1 kHz。当处于“颜色模式”或“反射光强度模式”时,为求最精确传感器必须角度正确,尽量靠近但不接触到正在检测的物体表面。另外,在颜色模式下虽然官方编程软件预设七种颜色,但在我们的python库里面在颜色模式下是可以将R、G、B三种颜色值都读出来,就是说可以识别更多的颜色,以及提高识别准确度。

程序设计

本文的程序设计是基于ev3dev项目使用python语言来做的,感兴趣的同学可以自行搜索,或者参阅我的个人博客:http://www.pazhong.net/?p=112

分别针对三种模式,我们看看实际的测量值读取结果。首先将光传感器连接在EV3主机1-4的任意接口上,这里我们连接到1口。我们只需要调取color_sensor()这个函数就可以自动识别、连接传感器。

  1. from ev3dev import *
复制代码
  1. cs = color_sensor()
复制代码

刚才说的光传感器有三种模式,使用modes,可以列举出ev3dev支持的所有模式。

  1. cs.modes
复制代码

主要的几种模式分别对应:COL-AMBIENT(环境光模式)、COL-REFLECT(反射光模式)、COL-COLOR(颜色模式)、RGB-RAW(RGB模式)。

环境光模式

使用mode对象,一方面可以读取当前的模式,另一方面可以写入模式名称进行模式转换。将光传感器改为环境光模式:

  1. cs.mode = 'COL-AMBIENT'
复制代码

接下来可以通过value()函数读取此时的测量值。

  1. cs.value()
复制代码

你会发现,当用手捂住时可以看到数值接近0,而冲着亮的地方数值会变大。

反射光模式

首先改变传感器模式,此时会发现传感器发出的光变成了红色。在这种模式下进行测量时,传感器要尽量贴近测量物体才能够准确。

  1. cs.mode = 'COL-REFLECT'
复制代码
  1. cs.value()
复制代码

当我们对着白色区域和黑色区域进行测量时,会发现数值出现明显的变化。白色区域读值更加接近100,黑色区域读值更加接近0。

彩色模式

在彩色模式下读取测量值,会发现此时的读值只是0-7的数字,正如前文所说,数字分别对应的无颜色和七种颜色。

  1. cs.mode = 'COL-COLOR'
复制代码

这8个数字对应的颜色分别是:

  • 0:无颜色
  • 1:黑色
  • 2:蓝色
  • 3:绿色
  • 4:黄色
  • 5:红色
  • 6:白色
  • 7:棕色

现在我们对着魔方的蓝色块测试,获得结果是:2。

RGB模式

显然,在颜色模式下,有的时候7种颜色并不能满足我们的需求,比如当我们去检测红色和橘色时,测量的结果都是5(红色)。RGB模式会让我们获得的测量结果的更准确。

当转换为RGB模式后,会发现此时的测量值有三个,反馈测量值数量可以通过num_values对象获得。

  1. cs.mode = 'RGB-RAW'
复制代码
  1. cs.num_values
复制代码

这三个反馈值分别对应的R值、G值、B值,可以通过value(0), value(1), value(2)分别获得。

  1. for i in range(3): cs.value(i)
复制代码

现在我们来看对魔方上面红色和橘色进行测量的结果:

红色

橘色
  • 红色:255 30 17
  • 橘色:229 42 18

非常接近,这也难怪颜色模式下区分不开这两种颜色。如果采用RGB模式,我们可以重新定义各个颜色的识别范围,从而将他们进行区分。理论上,RGB模式能够识别的颜色数量为:256 x 256 x 256 = 16777216种,也就是我们听说过的24位真彩色。




如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2016-6-5 13:11:49 | 显示全部楼层
学习了 ~~~~~~~~~~~~~~~
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-6-5 18:34:57 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-6-6 10:21:11 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-6-6 15:31:31 | 显示全部楼层
学习了,感谢楼主分享,我按照网上的教程做的魔方机器人,原来的时候能复原55MM的圣手风光面和极光面的魔方,后来全是SCAN ERROR  ,现在只能识别57MM的圣手磨砂面的魔方,风光和极光面的无法扫描成功了已经,不知道什么情况,感觉这个机器人出错的概率也不小,复原的多了会发现里面MC3 V1P9整个程序APP没有掉了,重新导入又出现无法扫描成功,不知道出错的环节在哪个?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-6-6 16:42:12 | 显示全部楼层
我比较好奇  怎么用EV3的编程平台来做到区分  红色 和橙色呢
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-6-6 23:53:50 | 显示全部楼层
事实上,并不是使用EV3自带编程系统识别颜色的。ev3b模块实际上输出数据同RGB-RAW模式,解魔方时,仅仅是扫描,对颜色的识别则是通过C++软件中的BRIGHTNESS参数实现的。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-6-7 09:29:26 | 显示全部楼层
牛叉
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2016-6-8 14:08:44 | 显示全部楼层
hmq011212 发表于 2016-6-6 23:53
事实上,并不是使用EV3自带编程系统识别颜色的。ev3b模块实际上输出数据同RGB-RAW模式,解魔方时,仅仅是扫 ...

没错,如果你指的也是David Gilday提供的解决方案,那么需要事先安装专门的Block的功能就是额外提供RGB模式的读取。我最近也准备学习下解魔方的算法。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-6-8 22:02:56 | 显示全部楼层
xvholly 发表于 2016-6-8 14:08
没错,如果你指的也是David Gilday提供的解决方案,那么需要事先安装专门的Block的功能就是额外提供RGB模 ...

可惜DG大神没有开放解魔方算法的代码,我们只能通过生成的日志文件和反编译才能了解其中的原理,这一点我们还差得很远。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2016-9-25 19:05:11 | 显示全部楼层
hmq011212 发表于 2016-6-8 22:02
可惜DG大神没有开放解魔方算法的代码,我们只能通过生成的日志文件和反编译才能了解其中的原理,这一点我 ...

魔方算法老早从数学上给出了,搜一下很多
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-3-6 23:00:23 | 显示全部楼层
佩服,学习了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-4-19 00:51:42 | 显示全部楼层
受教了,以前对颜色传感器不了解
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-4-19 08:54:59 | 显示全部楼层
这个要认真学习。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-5-1 11:27:09 | 显示全部楼层
厉害
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-5-4 04:04 , Processed in 0.088882 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表