Skip to content

Yanshee传感器 1 充满魔力的红外线距离传感器

UBTEDU edited this page Aug 31, 2018 · 5 revisions

课程目标:

通过本课程你可以学到一些物理概念之外,还可以学到什么叫红外传感器,在生产生活中人们为什么会使用传感器,而红外传感器又是如何在我们的机器人Yanshee身上使用的。你将学会红外传感器的使用方法和应用场景。最后,通过一个有趣的手掌游戏,你会发现原来你也可以拥有魔力般的掌法。

课程引入原因:

当代社会越来越多的场景用到了传感器,传感器相当于机器人的触觉、我们可以通过多种传感器来让机器人达到感知环境的目的。距离传感器让机器人知道周围的障碍物,温度传感器让机器人知道周围的温度,触摸传感器让机器人知道是否被触摸,压力传感器让机器人感知所受的压力、颜色传感器让机器人看到物体的颜色等等。传感器就是为了让机器人真正更像人的一个非常关键的部件。广义来讲视觉和听觉都是传感器的一部分。回到红外传感器,比如波斯顿机器狗是如何实现避障的?扫地机器人如何避开家居扫地的?机器蜘蛛是如何跨越障碍物而到达目的地的?等等。这些都跟距离传感器有关系。没有传感器的机器人相当于没有知觉的人类,想想是一件多么可怕的事情。 从这一课起我们将陆续介绍Yanshee机器人身上六种智能传感器。

基础概念及知识点介绍:

红外光:

又叫红外线,是波长比可见光要长的电磁波(光),波长为770纳米到1毫米之间,光谱上面在红色光的外侧。任何物体都是一个红外辐射源。

距离:

严格来说,距离指同一时间下,空间两点之间的空间最短连线长。该最短连线的性质取决于距离所在的空间性质,在经典物理中的平直空间里是直线,但在弯曲空间里则可以是曲线。

传感器:

通常意义的传感器是由敏感元器件、CPU处理单元、ADC转换器、放大电路等组成,通敏感元器件通过对周围环境的变化比如光源、温度、压力、红外、CO2浓度等等来转换成电信号,然后通过数模转换器交给中央处理单元处理,输出测量结果。例如:光感传感器通过感知周围环境的有无光源使得光敏元器件发生变化产生电信号,通过中央处理单元处理为0、1数字信号控制灯光亮灭。

传感器信息融合:

人类本能地具有将身体上的各种器官(眼、耳、鼻和四肢等)所探测的信息(景物、声音、气味和触觉等)与先验知识进行综合的能力,以便对其周围的环境和正在发生的事件做出评估。多传感器信息融合实际上是对人脑综合处理复杂问题的一种功能模拟。与单传感器相比,运用多传感器信息融合技术在解决探测、跟踪和目标识别等问题方面,能够增强系统生存能力,提高整个系统的可靠性和健壮性,增强数据的可信度,提高精度,扩展系统的时间、空间覆盖率,增加系统的实时性和信息利用率等。作为多传感器融合的研究热点之一,融合方法一直受到人们的重视,这方面国外已经作了大量的研究,并且提出了许多融合方法。目前,多传感器数据融合的常用方法大致可分为两大类:随机和人工智能方法。信息融合的不同层次对应不同的算法,包括加权平均融合、卡尔曼滤波法、Bayes估计、统计决策理论、概率论方法、模糊逻辑推理、人工神经网络、D-S证据理论等。

环境准备:

硬件需求:

Yanshee机器人一台、红外测距传感器一个

软件需求:

树莓派Rasbian系统、linux系统、python环境

实物图:

普通红外传感器:

普通红外传感器

Yanshee配套的红外传感器:

Yanshee的红外传感器

硬件连接示意图:

树莓派连红外传感器

工作原理:

红外测距传感器利用红外信号遇到障碍物距离的不同反射的强度也不同的原理,进行障碍物远近的检测。红外测距传感器具有一对红外信号发射与接收二极管,发射管发射特定频率的红外信号,接收管接收这种频率的红外信号,当红外的检测方向遇到障碍物时,红外信号反射回来被接收管接收,经过处理之后,通过数字传感器接口返回到机器人主机,机器人即可利用红外的返回信号来识别周围环境的变化。

原理图:

工作原理图

Yanshee机器人身上的红外传感器安装图

Yanshee身上的红外传感器安装图

举例:通过python编程实现红外距离数据读取

基础实验:

基本数据读取,我们通过相应的Yanshee SDK API 实现了红外传感器数据读取的过程。

#!/usr/bin/python
# _*_ coding: utf-8 -*-

importtime
importRobotApi

RobotApi.ubtRobotInitialize()
#------------------------------Connect----------------------------------
gIPAddr=""
robotinfo=RobotApi.UBTEDU_ROBOTINFO_T()
#The robot name you want to connect
robotinfo.acName="Yanshee_0A7E"
ret=RobotApi.ubtRobotDiscovery("SDK", 15, robotinfo)
if (0!= ret):
print ("Return value: %d"% ret)
exit(1)

gIPAddr=robotinfo.acIPAddr
ret=RobotApi.ubtRobotConnect("SDK", "1", gIPAddr)
if (0!= ret):
print ("Can not connect to robot %s"%robotinfo.acName)
exit(1)

#---------------------------Read Sensor Value-------------------------

infrared_sensor=RobotApi.UBTEDU_ROBOTINFRARED_SENSOR_T()
whileTrue:
time.sleep(2)
ret=RobotApi.ubtReadSensorValue("infrared",infrared_sensor,4)
if ret !=0:
print("Can not read Sensor value. Error code: %d"% (ret))  
else:
print("Read Infrared Sensor Value: %d mm"% (infrared_sensor.iValue))    

#---------------------------Disconnect---------------------------------
RobotApi.ubtRobotDisconnect("SDK","1",gIPAddr)
RobotApi.ubtRobotDeinitialize()

代码执行:

保存文件名为:ubtReadSensorValue.py。在终端执行pythonubtReadSensorValue.py观察结果输出。

代码说明:

首先我们引入time库和RobotApi库,然后输入机器人名称,通过发现函数和连接函数连接机器人。之后,通过while循环读取红外传感器数据,最后断开连接。

结果输出:

结果输出

高级实验:魔法手掌游戏

在基础实验的基础上当手靠近小于20cm时机器人后退后蹲下,当大于20cm时,机器人站立并向前走跟随,当大于30cm时机器人停止跟随做出挥手告别动作。请根据前面的实验自行编写python程序。

应用场景:

红外线距离传感器在电子玩具、智能机器人、工业探测、生物仿生、医学影像、教育、农业等行业具有广阔的应用场景。

拓展阅读:

后续有了红外传感器我们就可以通过它获得机器人的距离障碍物的远近来编写出各式各样有趣的场景了。它就像是机器人的障碍物触觉,让机器人变的更加聪明智慧。

Clone this wiki locally