精华内容
下载资源
问答
  • 将tiny4412的开发板外接人体感应传感器 1.先读懂传感器的电器特性,以及引脚的功能。  一般会有三个引脚, 接地 5V电压 以及输出信号(OUT) 2.链接好引脚到开发板上,一般OUT链接开发板的引脚时注意查看芯片...

    将tiny4412的开发板外接人体感应传感器

    1.先读懂传感器的电器特性,以及引脚的功能。

          一般会有三个引脚,  接地  5V电压   以及输出信号(OUT)

    2.链接好引脚到开发板上,一般OUT链接开发板的引脚时注意查看芯片手册。

          比如说链接到GPA0(3)引脚上    就得设置GPA0(3)的引脚功能,用GPIO的宏实现,不用对具体的寄存器引脚进行操作。

    3.因为传感器的输出信号是3.3V,所以得外接电平转换信号进行转换,转换成1.8V的输出信号链接到开发板。

          电平转换芯片的使用。

    4.电路链接好后开始写驱动程序,先写GPIO框架(想伸手的留言,或请看驱动之GPIO子系统),在设置引脚为输如功能,在函数集中定义open一个操作函数就行。

    这是我写的程序:

    static ssize_t demo_read(struct file *filp, char __user *buf, size_t cnt, loff_t *fops)
     40 {
     41     int ctu;
     42     char buf_n[8] = {"copy cg"};//没用我用来测试用的
     43     int gv = 0;
     44     gv = gpio_get_value(leds[0]);//得到人体感应器的值
     45     //itoa(gv, buf_n);(char)(gc)
     46     buf_n[0] = gv + '0';   //将得到的引脚信号的int值转换成char型
     47
     48     if((ctu = copy_to_user(buf,buf_n,cnt)) < 0){    //将得到的信号值拷贝到用户空间
     49         printk("copy_to_user ctu = %d\n",ctu);       //打印调试信息
     50         return ctu;
     51     }
     52
     53     /*if(gv == 0)//没用,本人调试用的。
     54     {
     55         
     56     }*/
     57     return gv;
     58 }

     

     

    5.然后就自己写APP.C

        先open,  再read      读的值就是传感器的输出信号。

    展开全文
  • “自动泊车、公路巡航控制和自动紧急制动等自动驾驶汽车功能在很大程度上是依靠传感器来实现的。重要的不仅仅是传感器的数量或种类,它们的使用方式也同样重要。目前,大多数路面上行驶车辆内的ADAS都是独立工作的,...

    “自动泊车、公路巡航控制和自动紧急制动等自动驾驶汽车功能在很大程度上是依靠传感器来实现的。重要的不仅仅是传感器的数量或种类,它们的使用方式也同样重要。目前,大多数路面上行驶车辆内的ADAS都是独立工作的,这意味着它们彼此之间几乎不交换信息。只有把多个传感器信息融合起来,才是实现自动驾驶的关键。”

     

    现在路面上的很多汽车,甚至是展厅内的很多新车,内部都配备有基于摄像头、雷达、超声波或LIDAR等不同传感器的先进驾驶员辅助系统(ADAS)。

     

    这些系统的数量将会随着新法案的通过而不断增加,例如在美国,就有强制要求安装后视摄像头的法案。此外,诸如车险打折优惠和美国公路交通安全管理局(NHTSA)、欧洲新车安全评鉴协会(Euro-NCAP)等机构做出的汽车安全评级正在使某些系统成为汽车的强制功能;另一方面,这也助长了消费者对它们的需求。

     

    诸如自动泊车、公路巡航控制和自动紧急制动的自动驾驶汽车功能也在很大程度上依靠传感器来实现。重要的不仅仅是传感器的数量或种类,它们的使用方式也同样重要。目前,大多数路面上行驶车辆内的ADAS都是独立工作的,这意味着它们彼此之间几乎不交换信息。(没错,某些高端车辆具有非常先进的自动驾驶功能,不过这些功能还未普及)。后视摄像头、环视系统、雷达和前方摄像头都有它们各自的用途。通过将这些独立的系统添加到车辆当中,可以为驾驶员提供更多信息,并且实现自动驾驶功能。不过,你还可以突破限制,实现更多功能——参见图1。

    640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

    图1:ADAS以汽车内单个、独立的功能存在。

    传感器融合

     

    仅仅通过多次使用相同种类的传感器无法克服每种传感器的缺点。反之,我们需要将来自不同种类传感器的信息组合在一起。工作在可见光谱范围内的摄像头CMOS芯片在浓雾、下雨、刺眼阳光和光照不足的情况下会遇到麻烦。而雷达缺少目前成像传感器所具有的高分辨率。我们可以在每种传感器中找到诸如此类的优缺点。

     

    传感器融合这一想法的伟大之处在于获得不同传感器和传感器种类的输入内容,并且使用组合在一起的信息来更加准确地感知周围的环境。相对于独立系统,这样可以做出更好、更安全的决策。雷达也许不具有光传感器所具有的分辨率,不过它在测距和穿透雨、雪和浓雾方面具有很大优势。这些天气条件或光照不足的恶劣情况不利于摄像头发挥作用,不过摄像头能够分辨颜色(可以想一想街道指示牌和路标),并且具有很高的分辨率。目前路面上图像传感器的分辨率已经达到1百万像素。在未来几年内,图像传感器的发展趋势将是2百万,甚至4百万像素。

     

    雷达和摄像头是两项传感器技术完美融合、互为补充的典范。采用这种方法的融合系统所实现的功能要远超这些独立系统能够实现的功能总和。使用不同的传感器种类可以在某一种传感器全都出现故障的环境条件下,额外提供一定冗余度。这种错误或故障可能是由自然原因(诸如一团浓雾)或是人为现象(例如对摄像头或雷达的电子干扰或人为干扰)导致。即使是在一个传感器失效的情况下,这样的传感器融合系统也可以保持某些基本或紧急的功能。完全借助报警功能,或者让驾驶员时刻做好准备,从而接管对车辆的控制,系统故障也许就不那么严重了。然而,高度和完全自动驾驶功能必须提供充足的时间让驾驶员重新获得对车辆的控制。在这段驾驶员接管车辆控制之前的时间范围内,控制系统需要保持对车辆最低限度的控制。

     

    传感器融合系统示例

     

    传感器融合的复杂程度有所不同,并且数据的类型也不一样。两个基本的传感器融合示例是:a)后视摄像头加上超声波测距;b)前方摄像头加上多模式前置雷达——参见图2。现在,我们可以通过对现有系统进行轻微更改和/或通过增加一个单独的传感器融合控制单元来对其进行实现。

    640?wx_fmt=jpeg

    图2:将前方雷达与前方摄像头融合在一起,以实现自适应巡航控制加车道保持辅助,或者将后视摄像头与超声波测距报警组合在一起来实现自动泊车。

    • 后视摄像头+超声波测距

    超声波泊车辅助技术在汽车市场内被广泛接受,并且已十分成熟;这项技术在泊车时能对邻近物体给出听得见或看得见的报警。正如之前提到的那样,到2018年,美国所有新出厂的车辆都必须安装后视摄像头。将来自二者的信息结合在一起,才能实现先进的泊车辅助功能,而其靠单一系统是无法实现的。后视摄像头使驾驶员能很清楚地看到车辆后方的情况,而机器视觉算法可以探测物体,以及路肩石和街道上的标记。通过超声波提供的补充功能,可以准确确定识别物体的距离,并且在低光照或完全黑暗的情况下,也能确保基本的接近报警。

    • 前视摄像头+多模前置雷达

    另一种强大的组合是将前视摄像头的功能与前置雷达组合在一起。前置雷达能够在任何天气条件下测量高达150米的物体的速度和距离。摄像头在探测和区分物体方面(包括读取街道指示牌和路标)十分出色。通过使用具有不同视场角(FoV)和不同光学元件的多个摄像头传感器,系统可以识别车前通过的行人和自行车,以及150米甚至更远范围内的物体,同时,其还可以可靠实现自动紧急制动和城市启停巡航控制等功能。

    许多情况下,在特定的已知外部条件下,仅通过一种传感器或单个系统,就能够执行ADAS功能。然而,考虑到路面上有很多不可预计的情况,这还不足实现可靠运行。传感器融合除了能实现更复杂和自主的功能外,还可以在现有功能中实现更少的误报和漏报。说服消费者和立法者,使他们相信汽车可以由“一台机器”自主驾驶,将会十分关键。

    传感器融合系统分割

     

    与汽车内每个系统单独执行各自的报警或控制功能不同,在一个融合系统中,最终采取哪种操作是由单个器件集中决定的。现在的关键问题就是在哪里完成数据处理,以及如何将传感器的数据发送到中央电子控制单元(ECU)。当对不是集中在一起而是遍布车身的多个传感器进行融合时,我们就需要专门考虑传感器和中央融合ECU之间的连接和电缆。对于数据处理的位置也是如此,因为它也会影响整个系统的实现。让我们来看一看可能的系统分割中的两种极端情况。

    ·  集中式处理

     

    集中式处理的极端情况是,所有的数据处理和决策制定都是在同一个位置完成,数据是来自不同传感器的“原始数据”——请见图3。

    640?wx_fmt=jpeg

    图3:具有“传统”卫星式传感器模块的集中处理。

    优点:

    传感器模块——传感器模块体积小巧,成本低,功耗也低,这是因为其只需要执行检测和数据传输任务。传感器的安装位置也很灵活,并且所需安装空间很小。替换成本低。通常情况下,由于无需处理或做决策,传感器模块具有较低的功能安全要求。

    处理ECU——中央处理ECU可以获取全部数据,这是因为数据不会因为传感器模块内的预处理或压缩而丢失。由于传感器成本较低,并且外形尺寸较小,因此可以部署更多的传感器。

    缺点:

    传感器模块——实时处理传感器数据需要提供宽带通信(高达数Gb/s),因此可能出现较高电磁干扰(EMI)。

    处理ECU——中央ECU需要有高处理能力和速度来处理所有输入数据。对于很多高带宽I/O和高端应用处理器来说,这意味着更高的电能需求和更大的散热量。传感器数量增加将大幅增加对中央ECU性能的需要。通过使用FPD-Link III等接口,在一根同轴电缆上传送传感器及功耗、控制和配置等多种数据(双向反向通道),有些缺点可以被克服。这样便可极大降低系统的接线要求。

    · 全分布式系统

     

    另一种截然不同的极端情况是全分布式系统。这种情况是由本地传感器模块进行高级数据处理,并在一定程度上进行决策制定的。全分布式系统只将对象数据或元数据(描述对象特征和/或识别对象的数据)发回到中央融合ECU。ECU将数据组合在一起,并最终决定如何执行或做出反应——请见图4。

    640?wx_fmt=jpeg

    图4:传感器数据由传感器模块处理、决策由中央ECU制定的分布式系统。

    全分布式系统既有优点又有缺点。

    优点:

    传感器模块——传感器模块与中央ECU之间可以使用更低带宽、更加简单且更加便宜的接口。在很多情况下,小于1Mb/s的CAN总线就足够用了。

    处理ECU——中央ECU只将对象数据融合在一起,因此其所需处理能力更低。对于某些系统来说,用一个高级的安全微控制器就足够了。模块更小,所需功耗也就更低。由于很多处理都是在传感器内部完成的,传感器数量增加不会大幅增加对中央ECU的性能需求。

    缺点:

    传感器模块——传感器模块需要有应用处理器,这样的话就会变得体积更大、价格更高且功耗更大。由于本地处理和决策制定,传感器模块的功能安全要求也就更高。当然,增加更多的传感器,成本也会大幅上升。

    处理ECU——中央决策制定ECU只能获取对象数据,而无法访问实际的传感器数据。因此,想要“放大”感兴趣的区域很难实现。

    寻找黄金分割

     

    根据系统中所使用传感器的数量与种类,以及针对不同车型和升级选项的可扩展性要求,将两个拓扑混合在一起就可获得一个优化解决方案。目前很多融合系统使用带本地处理的传感器用于雷达和激光雷达(LIDAR),使用前置摄像头用于机器视觉。一个全分布式系统可以使用现有的传感器模块与对象数据融合ECU组合在一起。诸如环视和后视摄像头的系统中的“传统”传感器模块可以让驾驶员看到周围的环境情况——请见图5。可以将更多的ADAS功能集成进驾驶员监测或摄像头监控系统等融合系统中,但是传感器融合的原理还是一样。

    640?wx_fmt=jpeg

    图5:寻找分布式和集中式处理的完美结合。

    平台管理、目标汽车细分、灵活性和可扩展性是重要的经济因素;这些因素也在分割和设计融合系统时发挥着重要作用。对于任一特定情况,所得系统也许不是最佳设计方案,但是从平台和车队的角度看,它却可能是最佳方案。

    谁是所有这些传感器数据的“观看者”?

     

    关于ADAS,我们还有两个方面没有讨论到:信息ADAS对功能ADAS。前者就是当驾驶员仍然对汽车完全掌控时,扩大和延伸驾驶员的感官范围(例如环视和夜视)。第二个是机器视觉,它使汽车能够感知周围环境,并做出自我决策以及执行(自动紧急制动、车道保持辅助)。传感器融合自然而然地将这两个世界合而为一。

    正因如此,我们才有可能将同一传感器应用于不同用途,不过这么做的代价就是在选择最佳模块间通信和处理位置方面受到了限制。以环视为例,这项功能最初的设计目的是,通过将视频传入到中央显示屏上,为驾驶员提供360度视场角。为什么不使用同样的摄像头,并将机器视觉应用到其上呢?后视摄像头可用于实现倒车保护或自动停车,而侧视摄像头可用于实现盲点检测/报警,也包括自动泊车。

    单独使用的机器视觉在传感器模块内进行本地处理,然后通过CAN总线等简单的低带宽连接将对象数据甚至是命令传送出去。然而,这种连接不足以传送完整的视频流。视频压缩当然可以降低所需带宽,但是还不足以将所需带宽降到百兆位范围内,并且它本身也存在一些问题。随着高动态范围(HDR)分辨率、帧速率和曝光数增加,这变得更加困难。高带宽连接和摄像头模块不参与数据处理解决了视频的问题,但是现在需要将处理添加到中央ECU,以便在其中运行机器视觉。缺少中央处理能力或散热控制会成为这种解决方案的瓶颈。

    虽然在传感器模块中进行处理并同时使用高带宽通信在技术上并不是不可实现,但从总体系统成本、功耗和安装空间角度来讲并不十分有利。

    传感器融合配置的可靠运行

     

    由于很多融合系统能够在没有驾驶员的情况下执行特定汽车功能(例如转向、制动和加速)的自主控制,我们需要对功能安全进行认真考虑,以确保在不同条件下和汽车的使用寿命内系统能够安全和可靠运行。一旦做出决策,并随后采取自主操作,那么对于功能安全的要求将会大幅提升。

    若采用分布式的方法,每个处理关键数据或制定决策的模块必须符合那些增加的标准。与只搜集和发送传感器信息的模块相比,这会增加物料清单(BOM)成本、尺寸、功耗和软件。在安装空间不足的环境中,器件很难冷却,并且其损坏的风险和所需的更换也很高(一次简单的小事故有可能需要更换保险杠和所有相连的传感器),这可能抵消具有多个传感器模块的分布式系统的优势。

    如果采用“传统”传感器模块,则需进行自检和故障报告,以实现整个系统的安全运转,但是其还未达到智能传感器模块的程度。

    虽然纯粹的驾驶员信息系统可以在它们的功能受到损害时关闭并将其通报给驾驶员,但是高度自主驾驶功能就没有那么自由了。想象一下一辆汽车正在执行紧急制动操作,然后又突然解除并松开制动器的情况。或者说,汽车在公路上行驶时,整个系统关闭,而此时驾驶员正在汽车“全自动驾驶”状态下呼呼大睡(未来可能的一个场景)。在驾驶员能够安全控制车辆之前,系统需要继续保持工作一段时间,而这至少需要有几秒到半分钟。系统必须运行到何种程度,以及如何确保在故障情况下运转,这些问题在业内似乎还未达成明确共识。具有自动驾驶功能的飞机通常情况下使用冗余系统。虽然我们一般情况下认为它们是安全的,不过它们造价昂贵并且占用大量空间。

    传感器融合将会是迈向自动驾驶及享受旅途时光和驾驶乐趣的关键一步。

    多传感器信息融合算法

    智能汽车的显著特点在于智能,意思就是说汽车自己能通过车载传感系统感知道路环境,自动规划行车路线并控制车辆到达预定目标。目前而言,车载感知模块包括视觉感知模块、毫米波雷达、超声波雷达、360°环视系统等,多源传感器的协同作用识别道路车道线、行人车辆等障碍物,为安全驾驶保驾护航。因此,感知信息也需要融合,感知信息也需要相互补充。

     

    这里引出一个重要的概念:多传感器信息融合(information fusion)。各种不同的传感器,对应不同的工况环境和感知目标。比方说,毫米波雷达主要识别前向中远距离障碍物(0.5米-150米),如路面车辆、行人、路障等。超声波雷达主要识别车身近距离障碍物(0.2米-5米),如泊车过程中的路沿、静止的前后车辆、过往的行人等信息。两者协同作用,互补不足,通过测量障碍物角度、距离、速度等数据融合,刻画车身周边环境和可达空间范围。

     

     

    640?wx_fmt=jpeg

     

    图6:智能汽车感知模块

     

    信息融合起初叫做数据融合(data fusion),起源于1973年美国国防部资助开发的声纳信号处理系统,在20世纪90年代,随着信息技术的广泛发展,具有更广义化概念的“信息融合”被提出来,多传感器数据融合MSDF (Multi-sensor Data Fusion)技术也应运而生。

     

    数据融合主要优势在于:充分利用不同时间与空间的多传感器数据资源,采用计算机技术按时间序列获得多传感器的观测数据,在一定准则下进行分析、综合、支配和使用。获得对被测对象的一致性解释与描述,进而实现相应的决策和估计,使系统获得比它各组成部分更为充分的信息。

     

    一般地,多源传感器数据融合处理过程包括六个步骤,如下图所示。首先是多源传感系统搭建与定标,进而采集数据并进行数字信号转换,再进行数据预处理和特征提取,接着是融合算法的计算分析,最后输出稳定的、更为充分的、一致性的目标特征信息。

     

    640?wx_fmt=jpeg

    图7:多源数据融合过程

     

    利用多个传感器所获取的关于对象和环境全面、完整信息,主要体现在融合算法上。因此,多传感器系统的核心问题是选择合适的融合算法。对于多传感器系统来说,信息具有多样性和复杂性,因此,对信息融合方法的基本要求是具有鲁棒性和并行处理能力,以及方法的运算速度和精度。以下简要介绍三种种常用的数据融合算法,包括贝叶斯统计理论,神经网络技术,以及卡尔曼滤波方法。

     

    贝叶斯统计理论

     

    640?wx_fmt=jpeg

    图8:文氏图

     

    英国数学家托马斯·贝叶斯(Thomas Bayes)在1763年发表的一篇论文中,首先提出了这个定理。贝叶斯统计理论是一种统计学方法,用来估计统计量的某种特性,是关于随机事件A和B的条件概率的一则定理。所谓"条件概率"(Conditional probability),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。根据上述文氏图,容易推导得到:P(A ∩ B) = P( A | B) * P(B) = P( B | A) * P(A),由此可以推导出条件概率的公式,其中我们把P(A)称为先验概率(Prior probability),即在事件B发生之前,我们对事件A发生概率有一个认识。

    640?wx_fmt=jpeg

    举个简单的例子,视觉感知模块中图像检测识别交通限速标志(Traffic Sign Recognition, TSR )是智能驾驶的重要一环。TSR识别过程中,交通限速标志牌被树木,灯杆等遮挡是影响识别的主要干扰。那么我们关心的,是交通限速标志被遮挡的情况下,检出率有多少呢?这里我们定义事件A为交通信号标志正确识别,事件为交通信号标志未能识别;B为限速标志被遮挡,事件为限速标志未被遮挡。

     

    640?wx_fmt=jpeg

    图9:被遮挡的交通限速标志

     

    根据现有算法,可以统计出事件A正确识别交通限速标志的概率,此处事件A的概率称为先验概率。通过查看视觉感知模块的检测视频录像,我们可以统计检测出来的交通限速标志中有多少被遮挡,有多少是没被遮挡的,还可以统计漏检的交通限速标志中,有多少是被遮挡的,有多少是没被遮挡的。因此,我们可以得到下面值:

    640?wx_fmt=jpeg

    由此,可以推算出被遮挡的情况下,正确识别限速标志的概率:

    640?wx_fmt=jpeg

    那么,也有人可能会问,如果限速标志没有被遮挡,识别率有多高呢?同理,我们这里也可以一并计算:

    640?wx_fmt=jpeg

    从以上计算我们可以看到,限速标志未被遮挡完全暴露出来,识别率是相当高的,但如果限速标记牌被阻挡住,识别率是比未遮挡的低很多。这两个指标的融合使用,可以用于作为评价目前图像处理算法识别限速标志性能的重要参考。当然,实际的融合过程比这复杂得多,小鹏汽车工程师们正努力不断优化,提高各种工况下的识别率,提供更为舒适的智能驾驶辅助。

     

    神经网络理论

     

    640?wx_fmt=jpeg

    图9:神经网络

     

    神经网络(Artificial Neural Network,ANN)是机器学习(Machine Learning,ML)的其中一种方式,是人工智能、认知科学、神经生理学、非线性动力学、信息科学、和数理科学的“热点”。

     

    ANN的发展经历了三个阶段

     

    • 第一个阶段是起步阶段,从20世纪40年代开始逐渐形成了一个新兴的边缘性交叉学科。1943年,心理学家McCulloch和数学家Pitts合作,融汇了生物物理学和数学,提出了第一个神经计算模型: MP模型。1949年,心理学家Hebb通过对大脑神经细胞、学习和条件反射的观察与研究,提出了改变神经元连接强度的、至今仍有重要意义的Hebb规则。

       

    • 第二阶段是发展阶段,1957年,Rosenblatt发展了MP模型,提出了感知器模型:Perception Model,给出了两层感知器的收敛定理,并提出了引入隐层处理元件的三层感知器这一重要的研究方向。1960年,Widrow提出自适应线性元件模型:Ada-line model以及一种有效的网络学习方法:Widrow-Hoff学习规则。

       

    • 第三阶段是成熟阶段,1982年美国加州工学院的物理学家Hopfield提出了一个用于联想记忆和优化计算的新途径——Hopfield网络,使得神经网络的研究有了突破性进展。1984年在Hopfield的一篇论文中,指出Hopfield网络可以用集成电路实现,很容易被工程技术人员和计算机科技工作者理解,引起工程技术界的普遍关注。

     

    上世纪八十年代后期,神经网络的光芒被计算机技术、互联网掩盖了,但这几年计算机技术的发展,恰恰给神经网络更大的机会。神经网络由一层一层的神经元构成。层数越多,就越深,所谓深度学习(Deep Learning)就是用很多层神经元构成的神经网络达到机器学习的功能。辛顿是深度学习的提出者,2006年,基于深度置信网络(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。目前,深度学习的神经网络技术广泛用于计算机视觉、语音识别、自然语言处理识别上。

     

    关于神经网络的研究包含众多学科领域,涉及数学、计算机、人工智能、微电子学、自动化、生物学、生理学、解剖学、认知科学等学科,这些领域彼此结合、渗透,相互推动神经网络研究和应用的发展。

     

    640?wx_fmt=jpeg

    图10:一个人工神经细胞

     

    接着,简单介绍下神经网络的基础。生物的大脑是由许多神经细胞组成,同样,模拟大脑的人工神经网络ANN是由许多叫做人工神经细胞(Artificial neuron,也称人工神经原,或人工神经元)的细小结构模块组成。人工神经细胞就像真实神经细胞的一个简化版,如图所示,左边几个蓝色圆中所标字母w代表浮点数,称为权重(weight,或权值,权数)。进入人工神经细胞的每一个input(输入)都与一个权重w相联系,正是这些权重将决定神经网络的整体活跃性。你现在暂时可以设想所有这些权重都被设置到了-1和1之间的一个随机小数。因为权重可正可负,故能对与它关联的输入施加不同的影响,如果权重为正,就会有激发(excitory)作用,权重为负,则会有抑制(inhibitory)作用。当输入信号进入神经细胞时,它们的值将与它们对应的权重相乘,作为图中大圆的输入。大圆的‘核’是一个函数,叫激励函数(activation function),它把所有这些新的、经过权重调整后的输入全部加起来,形成单个的激励值(activation value)。激励值也是一浮点数,且同样可正可负。然后,再根据激励值来产生函数的输出也即神经细胞的输出:如果激励值超过某个阀值(作为例子我们假设阀值为1.0),就会产生一个值为1的信号输出;如果激励值小于阀值1.0,则输出一个0。这是人工神经细胞激励函数的一种最简单的类型。

     

    640?wx_fmt=jpeg

    图11:神经网络结构

     

    大脑里的生物神经细胞和其他的神经细胞是相互连接在一起的。为了创建一个人工神经网络,人工神经细胞也要以同样方式相互连接在一起。为此可以有许多不同的连接方式,其中最容易理解并且也是最广泛地使用的,就是如图所示那样,把神经细胞一层一层地连结在一起。这一种类型的神经网络就叫前馈网络(feed forward network)。这一名称的由来,就是因为网络的每一层神经细胞的输出都向前馈送(feed)到了它们的下一层(在图中是画在它的上面的那一层),直到获得整个网络的输出为止。

     

    神经细胞通过输入层、隐含层和输出层的链接,形成一个复杂的神经网络系统,通过有效的学习训练,使输出层的结果与现实越来越靠近,误差越来越小,当其精度满足一定的功能需求时,神经网络训练完毕,此刻构建的神经网络系统即能为我们解决众多机器学习上的图像识别、语音识别、文字识别上的问题。

     

    在智能驾驶目前的发展历程上看,人工神经网络技术,乃至现在最新的深度学习技术,广泛用于视觉感知模块的车辆识别、车道线识别、交通标志识别上。通过对中国路况工况的数据采集和处理,广泛获取国内不同天气状况(雨天、雪天、晴天等),不同路况(城市道路、乡村道路、高速公路等)的真实的环境数据,为深度学习提供了可靠的数据基础。此处神经网络的输入层数据,也即是传感器获取的数据,是多源多向的,可以是前挡风玻璃片上视觉感知模块的障碍物位置、形状、颜色等信息,也可以是毫米波雷达、超声波雷达检测的障碍物距离、角度、速度、加速度等信息,还可以是360°环视系统上采集的车位数据、地面减速带数据。

     

    卡尔曼滤波

     

    卡尔曼滤波(Kalman filtering)一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,它是最优,效率最高甚至是最有用的。Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态。由于,它便于计算机编程实现,并能够对现场采集的数据进行实时的更新和处理, Kalman滤波是目前应用最为广泛的滤波方法,在通信、导航、制导与控制等多领域得到了较好的应用。
     

    卡尔曼滤波是多源传感数据融合应用的重要手段之一,为了扼要地介绍卡尔曼滤波的原理,此处形象地用毫米波雷达与视觉感知模块融合目标位置的过程描述。举一个简单的例子,目前高级辅助驾驶系统(Advanced Driver Assistance System,ADAS)上,搭载有毫米波雷达和超声波雷达模块,两者均能对障碍物车辆进行有效的位置估计判别。雷达利用主动传感原理,发射毫米波,接收障碍物回波,根据波传播时间计算角度距离。两者均能识别出车辆位置,那么我们该如何融合信息,如何取舍,计算出具体的车辆位置呢?卡尔曼正是解决这个问题的方法之一。我们获取的车辆位置在任何时刻都是有噪声的,卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),还可以是对过去位置的估计(插值或平滑)。卡尔曼滤波就是这样一个根据当前时刻目标的检测状态,预测估计目标下一时刻目标检测状态的一个动态迭代循环过程。

     

    高级辅助驾驶系统ADAS是目前智能汽车发展的重要方向,其手段是通过多源传感器信息融合,为用户打造稳定、舒适、可靠可依赖的辅助驾驶功能,如车道保持系统(Lane Keeping Assist, LKA),前碰预警(Forward Collision Warning, FCW),行人碰撞警告(Pedestrian Collision Warning,PCW),交通标记识别(Traffic Sign Recognition,TSR),车距监测报告(Head Monitoring and Warning,HMW)等。多源信息的融合,目的在于数据信息的冗余为数据信息的可靠分析提供依据,从而提高准确率,降低虚警率和漏检率,实现辅助驾驶系统的自检和自学习,最终实现智能驾驶、安全驾驶的最终目标。

    ▎本文转自电子技术设计,知乎小鹏汽车,作者:Hannes Estl,德州仪器(TI)汽车ADAS部门的总经理,如需转载请注明来源。

    --------------------- 本文来自 人人都是极客 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/p23onzq/article/details/79257269?utm_source=copy

    展开全文
  • 传感器

    2017-09-11 16:35:13
    一、引入:手机内置的传感器是一种微型的物理设备,它能够探测、感受外界的信号,将来自真实世界的...比较常见的传感器有:方向传感器、磁场传感器、温度传感器、光传感器、压力传感器、加速度传感器、重力传感器、陀

    一、引入:

    手机内置的传感器是一种微型的物理设备,它能够探测、感受外界的信号,将来自真实世界的数据提供给应用程序,应用程序然后使用传感器数据向用户通知真实世界的情况,或用来控制游戏进度、或实现增强现实等。至于具体如何去利用这些信息就要充分发挥开发者的想象力了。
    传感器目前已经成为了智能手机的标配。比较常见的传感器有:方向传感器、磁场传感器、温度传感器、光传感器、压力传感器、加速度传感器、重力传感器、陀螺仪传感器等。传感器就像一个个触手,不断采集着外部的信息,并将这些信息传送回手机进一步处理。在Android的特色开发技术中,除了基于位置的服务外,传感器技术绝对是最值得期待的技术。通过在Android应用中添加传感器,可以充分激发开发者的想象力,开发出各种新奇的程序。比如电子罗盘、水平仪,各种感知型游戏。
    

    目前Android设备中可能出现的一些传感器类型包括:

    • 方向传感器
    • 磁场传感器
    • 温度传感器
    • 光传感器
    • 压力传感器
    • 加速度计
    • 距离传感器
    • 陀螺仪传感器
    • 重力传感器(Android2.3开始)
    • 线性加速度传感器(Android2.3开始)
    • 旋转矢量传感器(Android2.3开始)
    • 相对湿度传感器(Android2.3开始)
    • NFC(近场通信)传感器(Android2.3开始):NFC传感器与其他传感器不同,因为它使用与其他传感器完全不同的方式来访问。将在本书《提高篇》中单独讲解。

    二、检测设备中的传感器 :

      Android SDK中定义了十多种传感器,但是不是每个手机都完全支持这些传感器。Google Nexus S支持9种传感器,HTC G7支持5种,红米手机支持9种(不支持压力、温度和相对湿度传感器)。如果手机不支持的传感器,程序运行往往不会抛出异常,只是无法获得传感器传回的数据。
        那么如何知道设备上有哪些传感器可用呢?有两种方式:一是直接的,二是间接的。
    

    1、直接方式:
    首先获取SensorManager对象,通过上下文对象的getSystemService(SENSOR_SERVICE)方法就可以获取到系统的传感器管理服务。然后调用SensorManager对象的getSensorList()方法获取传感器集合,遍历获取到的集合就能得到传感器信息。

    上图为红米手机运行上述示例代码后的结果。每个item有三行文本,第一行为传感器名称,第二行为传感器类型,第三行为传感器的Vendor(即传感器提供商)。其中第二行的int值为传感器的类型,它是Sensor对象调用getType()方法的返回值。在Sensor类中定义了很多int型常量来表示传感器的类型。
    

    表1 传感器类型

    这里写图片描述

    2.间接方式:
    在AndroidManifest.xml配置文件中,指定该应用程序只支持运行在具有哪些硬件功能的设备上。如果应用程序需要温度传感器,可以在配置文件中添加下面一行代码:

    <uses-feature android:name="android.hardware.sensor.temperature" android:required="true" />

    Android Market只将应用程序安装在有温度传感器的设备上。但是该规则并不适用于其他Android应用商店。也就是说,一些Android应用商店不会执行检测以确保将应用程序安装在支持指定传感器的设备上。

    三、使用传感器的步骤

    (一)、一般使用传感器都有以下5个通用步骤:

    1、调用Context的getSystemService(Context.SENSOR_SERVICE)方法获取SensorManager对象;
    
    2、调用SensorManager的getDefaultSensor(int type)方法获取指定类型的传感器;
    
    3、在onCreate()生命周期方法中调用SensorManager的registerListener()方法为指定的传感器注册监听;
    
    4、实例化SensorEventListener接口,作为registerListener()方法的第一个参数。重写SensorEventListener接口中onSensorChanged()方法;
    
    5、在onDestroy()生命周期方法中调用SensorManager对象的unregisterListener()方法释放资源。

    (二)、SensorManager的registerListener()方法的用法进行说明

    public boolean registerListener(SensorEventListener listener, Sensor sensor, int rate)
    参数说明如下:

    1. listener:监听传感器事件的监听器。该监听器需要实现SensorEventListener接口;
    2. sensor:通过SensorManager的getDefaultSensor(int type)方法获取到的传感器对象;
    3. rate:获取传感器数据的频率。该参数由SensorManager中的几个常量来定义。
      1)int SENSOR_DELAY_FASTEST = 0;
      以最快的速度获得传感器数据。只有特别依赖传感器数据的应用才推荐采用这种频率。这种模式会造成手机电量大量耗费。

      2)int SENSOR_DELAY_GAME = 1; 适合游戏的频率。在一般实时性要求的应用上适用这种频率。

      3)int SENSOR_DELAY_UI = 2; 适合普通用户界面的频率。这种模式比较省电,系统开销也小,但是延迟较长。

      4)int SENSOR_DELAY_NORMAL = 3; 正常频率。一般实时性要求不是特别高的应用上采用这种频率。

    【注意:】
    重写SensorEventListener接口中onSensorChanged(SensorEvent event)方法是实现传感器应用的关键。其中参数SensorEvent中有一个非常重要的属性:float[]类型的values数组。可以通过这个values数组取出传感器传回的数据。values数组长度为3,但不一定每一个数组元素都有意义,对于不同的传感器,每个数组元素的含义不同。

    四、光传感器

    光传感器的类型常量为Sensor.TYPE_LIGHT (数值为5)。values数组只有第一个元素values[0]有意义,表示光线的强度。
    Android SDK中将光线强度分为不同等级,每一个等级的最大值由一个常量表示,这些常量定义在SensorManager类中。其中最大值为120000.0f。

    • public static final float LIGHT_SUNLIGHT_MAX = 120000.0f;//最强光线强度
    • public static final float LIGHT_SUNLIGHT= 110000.0f;//万里无云阳光直射的光线强度
    • public static final float LIGHT_SHADE = 20000.0f;//阳光被云遮挡后的光线强度
    • public static final float LIGHT_OVERCAST= 10000.0f;//多云时光线强度
    • public static final float LIGHT_SUNRISE= 400.0f;//刚日出时光线强度
    • public static final float LIGHT_CLOUDY = 100.0f;//阴天无太阳时光线强度
    • public static final float LIGHT_FULLMOON= 0.25f;//夜晚满月时光线强度
    • public static final float LIGHT_NO_MOON = 0.001f;//夜晚无月亮时光线强度

    五、加速度传感器

    加速度传感器的类型常量为Sensor.TYPE_ACCELEROMETER (数值为1)。values数组的三个元素含义如下:

    • 1、values[0]:表示沿X轴方向的加速度(手机水平放置,手机横向左右移动);
    • 2、values[1]:表示沿Y轴方向的加速度(手机水平放置,手机前后移动);
    • 3、values[2]:表示沿Z轴方向的加速度,也就是重力加速度(手机竖向上下移动)。

    图2 加速度传感器三轴示意图
    这里写图片描述
    接下来模仿《微信摇一摇》的功能。实现思路是:获取X、Y、Z轴三个方向上的加速度,三个方向上任何一个方向上的加速度只要大于预定值,就可以认为用户摇动了手机。当判定摇动手机后,执行:播放动画效果、同时启动震动模式、2秒后toast提示。到底这个预定加速度数值该为多大呢?考虑到重力加速度9.8m/s2,因此预定值必须大于重力加速度,所以设定为15m/s2。因为本例中用到振动,所以要给应用授予开启振动的权限。

    <uses-permission android:name="android.permission.VIBRATE"/>

    五、磁场传感器

    磁场传感器的类型常量为Sensor.TYPE_MAGNETIC_FIELD (数值为2)。values数组的三个元素含义如下:

    • 1、values[0]:表示沿X轴方向的磁场分量,单位uT微特斯拉;
    • 2、values[1]:表示沿Y轴方向的磁场分量,单位uT微特斯拉;
    • 3、values[2]:表示沿Z轴方向的磁场分量,单位uT微特斯拉。

      磁场传感器可以检测地球的磁场,进而告诉我们北极在哪里,所以此传感器也被称为罗盘传感器。接下来拿《指南针》作为案例,来实践磁场传感器的用法。指南针的实现原理很简单,只需要检测手机围绕Z轴的旋转角度,然后对这个数值进行处理就可以了。说到这里,大家很容易想到使用方向传感器Sensor.TYPE_ORIENTATION,因为方向传感器中values[0]记录围绕Z轴的旋转角度。但是遗憾的是方向传感器Sensor.TYPE_ORIENTATION已经被废弃。目前获取手机旋转的方向和角度,Android推荐使用磁场传感器和加速度传感器共同计算得出。制作指南针效果的步骤如下:
      1.分别获取加速度传感器和磁场传感器实例,并分别注册监听器。传感器输出信息的更新速率要高一些,使用SENSOR_DELAY_GAME模式;
      2.在onSensorChanged()方法中进行判断,如果当前SensorEvent中包含的是加速度传感器,就将event中的values数组赋值给加速度传感器values数组;
      如果当前SensorEvent中包含的是磁场传感器,就将event中的values数组赋值给磁场传感器values数组。为了避免两个数组指向同一个引用,要使用clone()克隆方法;
      3.定义一个长度为9的float数组R,调用SensorManager的静态方法getRotationMatrix(),将接收自加速度传感器和罗盘传感器的数据进行计算,将计算出的旋转数据放在R数组中;
      4.定义一个长度为3的float数组values,调用SensorManager的静态方法getOrientation(),将手机在各个方向上的旋转数据都存放到values这个数组中。其中values[0]记录着手机围绕Z轴的旋转弧度,调用Math.toDegrees(values[0])方法将其转成角度值,最后对值进行处理即可。
      以上步骤涉及到两个核心方法:
      public static boolean getRotationMatrix(float[] R, float[] I,float[] gravity, float[] geomagnetic)
      作用:SensorManager的getRotationMatrix()方法,它接收来自加速度传感器和罗盘传感器的数据,然后计算出一个用于确定方向的矩阵存放到R数组中。
      参数解释:
      float[] R:是一个长度为9的float数组,当调用getRotationMatrix()方法后会将计算出的旋转数据存在该R数组中;
      float[] I:用于将地磁向量转换成重力坐标的旋转矩阵,通常指定为null即可;
      float[] gravity:加速度传感器输出的values值;
      float[] geomagnetic:磁场传感器输出的values值。
      public static float[] getOrientation(float[] R, float values[])
      作用:SensorManager的getOrientation()方法用于获取上一步中的旋转矩阵并提供一个方向矩阵。方向矩阵的值表明设备相对于地球磁场北极的旋转,以及设备相对于地面的倾斜度和摇晃。
      参数解释:
      float[] R:getRotationMatrix()方法执行后,存储了旋转数据的R数组;
      float values[]:一个长度为3的float数组。当调用SensorManager的静态方法getOrientation()后,将手机在各个方向上的旋转数据都存放到values这个数组中。其中values[0]记录着手机围绕Z轴的旋转弧度,values[1]记录着手机围绕X轴的旋转弧度,values[2]记录着手机围绕Y轴的旋转弧度。

    六、方向传感器

    方向传感器的类型常量为Sensor.TYPE_ORIENTATION(数值为3)。values数组的三个元素含义如下:

    • values[0]:记录手机围绕Z轴的旋转角度;
    • values[1]:记录手机围绕X轴的旋转角度;
    • values[2]:记录手机围绕Y轴的旋转角度。

    方向传感器Sensor.TYPE_ORIENTATION已经被废弃。

    展开全文
  • Android中的传感器

    千次阅读 2013-01-07 14:36:17
    当应用程序请求特定的采样率时,其实只是对传感器子系统的一个提示,或者一个建议。不保证特定的采样率可用。准确性高、低、中、不可靠。 SensorListener 接口是传感器应用程序的中心。它包括两个必需方法:...
    Android中传感器的种类

     

    传感器类型
    方向、加速表、光线、磁场、临近性、温度等。
    采样率
    最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个提示,或者一个建议。不保证特定的采样率可用。
    准确性
    高、低、中、不可靠。

    SensorListener 接口是传感器应用程序的中心。它包括两个必需方法:

    onSensorChanged(int sensor,float values[]) 方法在传感器值更改时调用。该方法只对受此应用程序监视的传感器调用(更多内容见下文)。该方法的参数包括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。

    当传感器的精度更改时,将调用 onAccuracyChanged(int sensor,int accuracy) 方法。参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。

    要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。注册使用SensorManager 类的 registerListener 方法完成。本文中的 代码示例 演示了如何注册和注销SensorListener

    下面是Android中支持的几种传感器:


      Sensor.TYPE_ACCELEROMETER:加速度传感器 (详细实现代码http://blog.csdn.net/onlyonecoder/article/details/8477072

      Sensor.TYPE_GYROSCOPE:陀螺仪传感器

      Sensor.TYPE_LIGHT:亮度传感器

      Sensor.TYPE_MAGNETIC_FIELD:地磁传感器

      Sensor.TYPE_ORIENTATION:方向传感器(详细实现代码http://blog.csdn.net/onlyonecoder/article/details/8475653

      Sensor.TYPE_PRESSURE:压力传感器

      Sensor.TYPE_PROXIMITY:近程传感器

      Sensor.TYPE_TEMPERATURE:温度传感器



    展开全文
  • 本设计是基于单片机的环境空气质量检测系统的设计,主要实现以下功能: 实现通过甲烷气体传感器检测室内甲烷浓度 实现通过甲醛气体传感器检测室内甲醛浓度 实现甲烷浓度或甲醛浓度超标蜂鸣器报警 实现甲烷浓度或...
  • 当应用程序请求特定的采样率时,其实只是对传感器子系统的一个提示,或者一个建议。不保证特定的采样率可用。 准确性: 高、低、中、不可靠。 SensorListener 接口是传感器应用程序的中心。它包括两个必需方法: ...
  • Android之sensor 传感器

    2013-01-13 13:49:34
    当应用程序请求特定的采样率时,其实只是对传感器子系统的一个提示,或者一个建议。不保证特定的采样率可用。 准确性 高、低、中、不可靠。 SensorListener 接口是传感器应用程序的中心。它包括两个必需方法: ...
  • 从本章开始,我们进行IIO子系统专栏的分析文档,本次IIO子系统专栏分析文档大概包含如下几章: 一、 IIO子系统概述 二、IIO子系统相关数据结构分析 三、iio trigger 介绍 四、iio event介绍 五、iio buffer介绍...
  • 汽车电子是车体汽车电子控制装置和车载汽车电子控制装置的总称。同时汽车电子化被认为是汽车技术发展进程中的一次革命,汽车电子化的程度被看作是衡量现代汽车水平的...智能汽车装备有多种传感器,能够充分感知驾...
  • android传感器系统整体框架分析

    千次阅读 2013-08-26 15:41:11
    从以上图可以看出,整个sensor传感器框架主要分为4层,其中包括 1、传感器java部分,frameworks/base/core/java/android/hardware/SensorManager.java 2、传感器jni部分,frameworks/base/services/sensorservice/...
  • 现在的手机或者其他便携设备中用到了越来越多的传感器,什么加速度传感器,方向传感器、重力传感器、陀螺仪、g-sensor、o-sensor等等,这些传感器到底是干什么用的,各自有什么特点,彼此之间又有什么区分?...
  • 《电子DIY》之《单片机实践项目》之基于51单片机的SHT11温湿度传感器数据采集系统设计(Proteus仿真) 添加链接描述
  • 一文读懂柔性电子传感器

    千次阅读 2019-01-10 23:00:42
    来源:传感器技术目前,许多智能化的检测设备已经大量地采用了各种各样的传感器,其应用早已渗透到诸如工业生产、海洋探测 、环境保护 、医学诊断 、生物工程 、宇宙 开发 、智...
  • 一、基于传感器融合的无人驾驶汽车 (一)什么是多传感器融合?         利用计算机技术将来自多传感器或多源的信息和数据,在一定的准则下加以自动分析和综合,以完成所...
  • 上一篇文章我们实现了一个模拟的hwmon...attribute实现的,然后进行了hwmon_device的注册,相对而言hwmon子系统倒没有提供太多的帮助,而在linux 4.x的版本(4.14已经支持)中,则对hwmon子系统中进行了丰富,针对te...
  • 传感器练习题

    万次阅读 2018-07-05 13:11:17
    1.传感器位于自动化系统的那个环节() A.反馈 B.协调 C.控制 2.利用电阻式传感器可以测量以下非电量( ) A 形变 B 压力 C 加速度 D 以上均可测量 3.电桥测量电路的作用是把传感器的参数变化为()的输出 ...
  • 飞控传感器

    千次阅读 2017-02-14 10:42:00
    传感器
  • 基于多传感器的AUV控制系统

    千次阅读 2019-10-26 11:46:38
    第3章是基于多传感器的AUV分布式控制系统设计,首先对AUV分布式控制系统总体结构设计并阐述设计思想,然后对各个子系统实现进行详细介绍,最后设计了分布式系统的软件结构和算法方案。 第4章是AUV的控制算法研究、...
  • 传感器应用开发

    千次阅读 2017-05-12 22:21:40
    学习内容Ø 传感器的基本概念Ø Android中常见的传感器Ø 如何在Android中开发传感器应用能力目标Ø 了解传感器的基本概念Ø 掌握Android中常见的传感器Ø 掌握Android环境下如何使用SensorSimulator进行...
  • Android之传感器系统(Gsensor) .

    千次阅读 2013-03-26 10:27:45
    比如我们的Gsensor是走的输入输出子系统,就打开相应的event文件来读取驱动上报的坐标数据。       四、Kernel中的驱动  这个我们的实现比较简单,是走的input子系统。你可以选择用...
  • 隧道磁阻式传感器应用之系统设计

    千次阅读 2014-05-20 19:49:41
    最近研究了隧道磁阻式传感器(以下简称为TMR)在汽车检测领域的应用,它是一种根据磁性材料的磁阻效应制成的新型传感器,被广泛应用于汽车、电力电子、磁信息读写、工业自动控制等领域。TMR将车辆引起的地磁扰动准确...
  • 本文系列文章先从宏观上了解linux中输入子系统的作用,再看看其在应用层是如何表现出来的,...在移动设备上的触摸屏、按键、各类传感器也都是基于输入子系统的。 (2)提供了用于分发输入报告给用户应用程序的简单的事
  • 目录:[ - ] 1 加速度传感器 2 磁力传感器 ...3 方向传感器 ...4 陀螺仪传感器 ...5 光线感应传感器 ...6 压力传感器 ...7 温度传感器 ...在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用。
  • MTK Android操作系统11种传感器介绍

    千次阅读 2016-11-03 11:10:08
    Android操作系统11种传感器介绍 1 加速度传感器 2 磁力传感器 3 方向传感器 4 陀螺仪传感器 5 光线感应传感器 6 压力传感器 7 温度传感器 8 接近传感器 9 重力传感器 10 线性加速度传感器 11 旋转...
  • 结构化综合布线系统中的干线子系统是指(33)。 (33)A.管理楼层内各种设备的...工作区子系统、水平子系统、干线子系统、设备间子系统、管理子系统和建筑群子系统,如下图所示。 ​ ①工作区子系统(Work Loc...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,350
精华内容 19,340
关键字:

传感器子系统