系统升级安装不上 会显示一个和机器人聊天升级版 中间!是咋回事

Discuz! 官方站 -
Powered by Discuz!
后使用快捷导航没有帐号?
只需一步,快速开始
扫一扫,访问微社区
随时随地,快速访问
只要手机在手,您都可以快速、方便地看贴发帖,与论坛好友收发短消息。
极致优化,畅快"悦"读
独有的论坛界面和触屏设计,手机论坛也变得赏心悦目,操作自如。
即拍即发,分享生活
不管是风景图画,还是新闻现场,拍照发帖一气呵成,让您在论坛出尽风头。
下载客户端后,拍摄二维码快速访问本站:
或者通过以下地址访问:
Powered by机器人操作系统
在电子工程世界为您找到如下关于“机器人操作系统”的新闻
机器人操作系统资料下载
一种基于Proxy的智能机器人协议转换模块设计摘要:机器人中间件技术逐渐成为复杂机器人系统集成领域的热点。利用LwRTC的代理方法,在分析了构建模块化智能机器人技术的基础上,实现了一种智能机器人协议转换模块。首先介绍了其总体设计需求与设计结构,之后从硬件系统设计、实时系统支持、CAN总线驱动设计、协议转换等方面详细阐述了协议转换模块的设计过程,最后指出了其Proxy的实现。 关键词:机器人...
根据任务需要,研制了具有翻倒恢复功能的关节履带式移动机器人。构建了基于网络通信的遥操作系统,通过人机交互界面完成终端对移动机器人的遥控操作。鉴于履带式移动机器人开环控制的不足,提出遥操作和局部自主控制的翻倒恢复控制方法。实验表明,提出的方法在移动机器人实际作业中有效可行。在机器人视觉技术还没有得到完美解决之前,地面移动机器人不可能自主地完成所有的任务。现阶段,要使移动机器人能够真正实用,必须将人...
&&&&&&&& 研发了基于CAN 总线的新型机器人示教盒系统,采用ARM 芯片为核心,并在其上运行了实时操作系统μC/OS-II。设计了一套CAN 网络通讯协议,实现了一个示教盒同时示教多台机器人的一对多示教模式,在很大程度上改进和提高了机器人示教盒的性能。关键词:CAN 总线 ; 机器人示教盒 ; ARM...
调度的实现机制(778)3.15 基于Linux平台的应用研究(778)3.16 基于Linux的嵌入式系统开发(778)3.17 基于Linux的嵌入式系统设计与实现(778)3.18 基于RTLinux的实时控制系统(778)3.19 基于RTLinux的实时机器人控制器研究(778)3.20 嵌入式Linux系统在温室计算机控制中的应用(778)3.21 基于Linux的USB驱动程序实现(779...
形成带有智能性的机电一体化新产品,如机器人、智能仪器等。机电一体化系统的微型化、多功能化、柔性化、智能化、安全、可靠、低价、易于操作的特性都是采用微型计算机技术的结果,微型计算机技术是机电一体化中最活跃、影响最大的关键技术。五、微机应用领域、选用要点及应注意的问题用微机构成机电一体化系统(或产品)具有以下效果:①小型化——应用LSI技术减少了元件数量,简化了装配、缩小了体积;②多功能化——利用...
单元、基于 6N137 的光电隔离单元、基于 LMD18200 的功率放大单元、传感器接口单元及上位机无线通讯单元的电路设计。软件方面,在μC/OS-Ⅱ实时操作系统的多任务环境下,利用其任务调度功能,合理地协调和组织了控制系统的各项硬件资源,提高了整个系统的实时性和可靠性。上位机采用的无线通讯、Internet 通讯以及可视化监控程序界面,让用户可以方便直观地远程观察和控制机器人。 该控制系统...
测量机、机器人等。第三节& 数控机床的分类按控制功能分类点位控制数控系统直线控制数控系统轮廓控制数控系统第三节& 数控机床的分类& 按联动轴数分,2轴联动(平面曲线)3轴联动(空间曲面,球头刀)4轴联动(空间曲面)5轴联动及6轴联动(空间曲面) 。联动轴数越多数控系统的控制算法就越复杂。第三节& 数控机床的分类&& 按进给伺服系统的类型...
人类在危险、难以到达的环境中作业, 以机器人技术与网络技术为基础, 开发出一种以型四自由度教学机器人为被控单元、为传输控制协议、旧体系结构为网络控制平台的机器人遥操作系统, 给出了该系统的硬件结构、软件流程实践...
基于中间件技术的异构机器人系统设计及实现:基于C++CORBA中间件的技术规范和具体应用,对异构机器人系统的集成技术进行了研究.以ACE?TAO作为开发平台,构建了一个基于CORBA技术的异构机器人互操作系统,实现了分布式环境下具有不同硬件结构、操作系统、通信协议和编程语言的机器人之间的相互通信.系统界面友好、操作简便,可移植性和可维护性强,并且便于升级.该系统的研制成功为多异构机器人的协作提供...
在描述了基于无线通讯网络的遥操作技术原理的基础上,分析了3种具体基于无线通讯网络的机器人遥操作系统,并基于建立的遥操作系统进行了实验,对实验结果进行了分析.同时讨论了手机遥操作机器人技术,实现了手机对机器人的遥操作.从系统实验结果可以看到,基于目前移动通讯网络或无线局域网进行机器人的遥操作是可行的....
机器人操作系统相关帖子
嵌入式linux高级工程师进阶之路
& & 这两年,智能穿戴设备、智能家居、无人机、VR/AR、智能机器人等新兴智能硬件产品引爆眼球,这也使得它们所运用的嵌入式技术迎来了前所未有的发展“钱”景和机遇。随着互联网向物联网时代的转变,嵌入式技术在通信、网络、工控、医疗、电子等领域也将发挥越来越重要的作用。嵌入式领域较新,发展非常快,很多软硬件技术出现的时间都不太长(如ARM...
  例如,百度展示了搭载百度对话式AI操作系统DuerOS2.0的三款硬件产品——小鱼在家VS1智能视频音箱、Sengled生迪智能音箱灯和popIn Aladdin智能投影吸顶灯。
  腾讯携其在人工智能领域的重磅产品——腾讯叮当语音助手在本届CES展上亮相。叮当语音助手是一款基于腾讯技术生态及内容生态的产品,也是腾讯在人工智能领域的探路石。此前,腾讯叮当已通过与广汽、咕咚等公司合作...
歌CEO桑达尔·皮查伊、苹果CEO库克等科技圈大佬悉数亮相,制造了2017年以来科技圈最高的吸睛度。& && &第四届世界互联网大会,AI是个绝对的关键词。几乎所有的互联网科技领域的头部公司都在大会上展示了自己的“作品”:百度展示了“All in AI”的系列成果,包括基于对话式人工智能操作系统DuerOS打造的智能家居场景,以及机器人视觉技术解决方案...
。几乎所有的互联网科技领域的头部公司都在大会上展示了自己的“作品”:百度展示了“All in AI”的系列成果,包括基于对话式人工智能操作系统DuerOS打造的智能家居场景,以及机器人视觉技术解决方案——该解决方案适用于安防机器人、家用机器人、玩具机器人,以使其实现自主移动和避障;阿里云的“ET城市大脑”,应用于城市治理、实时交通感知及优化、特殊车辆绿波带等,为市民节省10%出行时间,为应急车辆压缩...
RFID等短距离数据传输及自组织组网的核心产品与设备,异构网融合、传感网相关接口、接入网关等;
网络架构和数据处理: 包括面向服务的体系架构(SOA)、物联网云平台、网络与信息安全、海量数据存储与处理、物联网地址编码等设备和产品。
系统集成和软件:包括中间件、网络集成、多功能集成、软硬件操作界面基础软件、操作系统、应用软件、中间件软件等产品。智能家居系列产品:综合布线技术、网络通信技术、安全...
了四方面主要任务:一是重点培育和发展智能网联汽车、智能服务机器人、智能无人机、医疗影像辅助诊断系统、视频图像身份识别系统、智能语音交互系统、智能翻译系统、智能家居产品等智能化产品,推动智能产品在经济社会的集成应用。二是重点发展智能传感器、神经网络芯片、开源开放平台等关键环节,夯实人工智能产业发展的软硬件基础。三是深化发展智能制造,鼓励新一代人工智能技术在工业领域各环节的探索应用,提升智能制造...
布局、重点突破、协同创新、开放有序”的原则,工信部提出了四方面主要任务:一是重点培育和发展智能网联汽车、智能服务机器人、智能无人机、医疗影像辅助诊断系统、视频图像身份识别系统、智能语音交互系统、智能翻译系统、智能家居产品等智能化产品,推动智能产品在经济社会的集成应用。二是重点发展智能传感器、神经网络芯片、开源开放平台等关键环节,夯实人工智能产业发展的软硬件基础。三是深化发展智能制造,鼓励新一代...
布局、重点突破、协同创新、开放有序”的原则,工信部提出了四方面主要任务:一是重点培育和发展智能网联汽车、智能服务机器人、智能无人机、医疗影像辅助诊断系统、视频图像身份识别系统、智能语音交互系统、智能翻译系统、智能家居产品等智能化产品,推动智能产品在经济社会的集成应用。二是重点发展智能传感器、神经网络芯片、开源开放平台等关键环节,夯实人工智能产业发展的软硬件基础。三是深化发展智能制造,鼓励新一代...
重点突破、协同创新、开放有序”的原则,工信部提出了四方面主要任务:一是重点培育和发展智能网联汽车、智能服务机器人、智能无人机、医疗影像辅助诊断系统、视频图像身份识别系统、智能语音交互系统、智能翻译系统、智能家居产品等智能化产品,推动智能产品在经济社会的集成应用。二是重点发展智能传感器、神经网络芯片、开源开放平台等关键环节,夯实人工智能产业发展的软硬件基础。三是深化发展智能制造,鼓励新一代...
、缓存、处理与传输。板载EtherCAT主站与从站控制器。可广泛应用于机床控制、机器人控制、工业现场控制、运动平台等工业设备。技术指标板载FPGA实时处理器:XC7K325T-2FFG900I;主机接口指标:& &1.支持PCI Express 2.0规范;& &2.PCIe gen2 x8@5Gbps/lane,理论数据带宽40Gbps;&nbsp...
机器人操作系统视频
你可能感兴趣的标签
热门资源推荐手机自动提示的系统更新,点了之后出现一排英文选项,我选择了第四个,选择之后又出现一排英文选项,还有一个安卓小机器人,中间有一个红色叹号,这是怎么回事,长按关机键,只能关机,开机之后还是英文选项。
按时间排序
请提供手机型号或者英文信息,有的刷机包界面不太一样,你说第四个不一定是什么。要是自己解决不好可以到外面花几十块钱让人帮你刷一下系统。
您可以邀请优质答主更快回答您的问题
擅长领域:&&&&
在手机数码分类下共有90161个回答
擅长领域:&&
在手机数码分类下共有20904个回答
擅长领域:&&&&
在手机数码分类下共有13369个回答
擅长领域:
在手机数码分类下共有10925个回答
yuanzhangtongxue
擅长领域:
在手机数码分类下共有7594个回答
擅长领域:&&&&
在手机数码分类下共有7200个回答
加载更多答主
感谢您为社区的和谐贡献力量请选择举报类型
经过核实后将会做出处理感谢您为社区和谐做出贡献
确定要取消此次报名,退出该活动?有个玩具忘记名字了,就是一个大机器人可以变成球,里面可以装一个小机器人,也可以变成球,求告知名字
有个玩具忘记名字了,就是一个大机器人可以变成球,里面可以装一个小机器人,也可以变成球,求告知名字
个回答感谢评语:
满意答案&LV是不是&镭射机器人*00其他答案(3)匿名网友&LV斗丸战士吧!*0匿名网友&LV可以变成球的我知道,但是里面还能装一个我就没见过了*0匿名网友变形金刚吧*0
最新解决问题列表
问题还没解决?点击查看更多相关“有个玩具忘记名字了,就是一个大机器人可以变成球,里面可以装一个小机器人,也可以变成球,求告知名字”的答案!&&&&figure&&img src=&https://pic3.zhimg.com/f491d68a6be558c7dcbc8e771fbb920a_b.jpg& data-rawwidth=&960& data-rawheight=&493& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&https://pic3.zhimg.com/f491d68a6be558c7dcbc8e771fbb920a_r.jpg&&&/figure&&h2&&b&前言&/b&&/h2&&p&前面讲了搭建监控的方法,但是外网没法访问,怎么算是远程监控呢。因此这篇文章就分享下如何使外网能够访问自己家中电脑主机的经验。&/p&&p&想做到外网能访问内网,那首先要搞清楚自己家中网络搭建的结构,本篇就以本人家中为例。我家网络是电信天翼的一个盒子接入的,上面接上一个网件的路由器,再通过路由器来分配ip给各个连接上使用的电脑、手机。图如下:&figure&&img src=&http://pic1.zhimg.com/bc79446dbae9b_b.jpg& data-rawwidth=&746& data-rawheight=&214& class=&origin_image zh-lightbox-thumb& width=&746& data-original=&http://pic1.zhimg.com/bc79446dbae9b_r.jpg&&&/figure&&/p&&b&原理&/b&&p&看起来很复杂,原理其实很简单,由于我家的网络结构分为两层(如果更多层的网络结构以此类推就行了,如果一层结构的那更简单了)一层路由器,一层天翼盒子,那么首先把电脑上分配到的这个IP和要用的端口跟路由器上的某个端口绑定,然后再把路由器分配到的IP和绑定的端口映射到天翼盒子上的某个端口。本例中就拿树莓派上的监控网站做解释。内网要访问树莓派上的监控网站,那就要用分配到的IP+端口号,即为10.0.0.5:8080,在路由器的设置中将8080端口跟路由器上的某个空闲端口绑定,本例中即用5601端口,那么首先要做到的就是绑定完后能通过192.168.2.2:5601能访问到树莓派上的监控网站。在把路由的端口映射到天翼盒子中,本例就用盒子上的9090端口,那最终实现的就是在其他地方用外网能通过公网xx.xx.xx.xx:9090来访问家中监控网站。其实要做到内网穿透,可以用目前市面上的花生壳等软件,交点钱完事了,但是既然是自己动手搭架,能自己做的都自己做吧,算是练练手。&/p&&h2&&b&实现第一步&/b&&/h2&&p&前面废话讲了这么多,进入正篇,先讲下如何做到电脑绑定到路由。首先要做的就是第一步,打开你的电脑浏览器,输入&b&&i&ip.gs&/i&&/b&会获得一个IP(本人此处就打码了,免得有人杀到我家来),一般来说这个IP就是公网IP,但是也不一定,所以,可以直接在浏览器的地址栏输入这个IP,试试看能不能进入自家天翼盒子的控制页面,如果可以那恭喜里这是你家天翼盒子的公网地址,如果不行,那情况就复杂了,该怎么做我就不知道了,下面的内容可以不用看了,用其他现成的软件吧。&/p&&figure&&img src=&http://pic1.zhimg.com/dfaa2bc14c_b.jpg& data-rawwidth=&277& data-rawheight=&81& class=&content_image& width=&277&&&/figure&&p&首先记得把要映射的主机的IP设置为固定IP,不然下次自动分配的IP变了,又要重新配置咯,如果家里电脑主机比较多的话建议IP分配的后期去点,太靠前的IP容易被占用,造成IP冲突。IP设置完后,打开路由器的控制页面,我就拿我家网件的为例,其他路由器都差不多,这块的教程其实百度下也挺多的。找到内网映射这个选项&/p&&figure&&img src=&http://pic2.zhimg.com/6eaa53bc0c24c7bc73e739ba6e0a2ea9_b.jpg& data-rawwidth=&92& data-rawheight=&286& class=&content_image& width=&92&&&/figure&&p&选择端口映射、http,填写完IP,然后点击添加&/p&&figure&&img src=&http://pic1.zhimg.com/bf7ede3c1c9ad0_b.jpg& data-rawwidth=&377& data-rawheight=&89& class=&content_image& width=&377&&&/figure&&p&添加完后会发现,端口都不是我们想要的,选择中这条服务,点击编辑服务&/p&&figure&&img src=&http://pic3.zhimg.com/d3d571d111e0d4836420ce_b.jpg& data-rawwidth=&554& data-rawheight=&38& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&http://pic3.zhimg.com/d3d571d111e0d4836420ce_r.jpg&&&/figure&&p&把“内部使用相同的端口范围”这个勾去掉,就可以编辑下面的端口了,外部端口组即为外部访问时要用的端口,挑个空闲的即可。内部端口组写上要映射的端口,点击应用,完事了。&figure&&img src=&http://pic3.zhimg.com/4dbb9c8e6_b.jpg& data-rawwidth=&554& data-rawheight=&116& class=&origin_image zh-lightbox-thumb& width=&554& data-original=&http://pic3.zhimg.com/4dbb9c8e6_r.jpg&&&/figure&&/p&&p&测试下,地址栏中输入天翼盒子分配给路由器的地址,192.168.2.2加上端口5601,萌萌哒的龙猫就出来了。&/p&&figure&&img src=&http://pic2.zhimg.com/28b1b3de6fba95c_b.jpg& data-rawwidth=&347& data-rawheight=&384& class=&content_image& width=&347&&&/figure&&p&这时候可能有小伙伴会问了,我咋知道天翼盒子给路由分配了啥地址呢。其实在路由器初始化设置的时候,给路由器配上静态的IP就可以了。如果之前是动态获取的,建议配置成静态的,不然下次路由地址变了就麻烦了。在路由器上找到这个配置的位置,重新配置下即可。&/p&&figure&&img src=&http://pic3.zhimg.com/6d78bd3c276_b.jpg& data-rawwidth=&725& data-rawheight=&255& class=&origin_image zh-lightbox-thumb& width=&725& data-original=&http://pic3.zhimg.com/6d78bd3c276_r.jpg&&&/figure&&p&还有简单的方法,有的路由器有远程管理的选项,这个地方显示的是路由器获取到外层分配给它的IP,如果你的路由是直接连外的话,那这里获取到的就是公网的地址。那我家路由的外层是天翼盒子,那这里获取到的就是天翼盒子给他的地址了。&figure&&img src=&http://pic4.zhimg.com/bc539ecdd91b2d1ef58a0cd197cad557_b.jpg& data-rawwidth=&553& data-rawheight=&274& class=&origin_image zh-lightbox-thumb& width=&553& data-original=&http://pic4.zhimg.com/bc539ecdd91b2d1ef58a0cd197cad557_r.jpg&&&/figure&&/p&&h2&&b&第二步:映射到外网&/b&&/h2&&p&做完了第一步,那就可以如法炮制映射到外网了,打开天翼盒子控制页面,用超级管理员用户登录,这里不知道超级用户登录用户名密码的可以自行百度下破译教程,很简单的,这里就不多说了。&/p&&figure&&img src=&http://pic3.zhimg.com/242caa93ee6c9c49a5666_b.jpg& data-rawwidth=&300& data-rawheight=&212& class=&content_image& width=&300&&&/figure&&p&应用-&高级NAT配置-&虚拟主机配置,打开设置页面:&/p&&figure&&img src=&http://pic3.zhimg.com/3c229f950e61b5b41b2c11d_b.jpg& data-rawwidth=&462& data-rawheight=&294& class=&origin_image zh-lightbox-thumb& width=&462& data-original=&http://pic3.zhimg.com/3c229f950e61b5b41b2c11d_r.jpg&&&/figure&&p&名称随便取,广域网端口这里配置一个空闲的端口,到时候通过这个端口访问,我们就用9090吧,然后虚拟主机的端口,配置要映射的端口,即为刚才路由上配置的5601端口,点击启用就完成了。如下:&/p&&figure&&img src=&http://pic4.zhimg.com/e95b585bcae4cf95b0cf3_b.jpg& data-rawwidth=&243& data-rawheight=&215& class=&content_image& width=&243&&&/figure&&p&迫不及待的在地址栏上敲上了公网IP+9090,但是等待了许久,却告诉我页面无法访问,这是咋回事呢。仔细检查了配置也没啥问题,后来发现不知道为啥,通过这个公网IP+端口访问,居然要FAN墙才行!(难道是哪里没配置好么,一直没搞懂为啥,希望有知道的大神透露下)先不管这么多,启动FQ软件,再次刷新,成功了,但是卡的要命,延迟至少20s以上,不过至少是能看了。找同事同学帮忙测试了下,似乎他们不用FAN墙就能访问,很神奇。。算是成功了吧。&figure&&img src=&http://pic1.zhimg.com/05d022fde9e940d2fc5c_b.jpg& data-rawwidth=&267& data-rawheight=&220& class=&content_image& width=&267&&&/figure&&/p&&p&通过同样的方法,可以配置树莓派的远程桌面等功能。值得一提的是普通家庭宽带是没有固定IP地址的,专线宽带才有。因此有可能你家路由的地址随时都会变掉。可以在树莓派上写个脚本&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&curl ip.gs
&/code&&/pre&&/div&&p&然后再写个脚本把输出出来的数据上传到某个网盘或者FTP或者发个邮件啥的定时执行下,就可以随时获得家中路由的公网地址了。&/p&&p&唉,折腾了这么久,其实最简单的搭建方法就是家里开一台电脑,然后登陆一个QQ,设置下远程自动接入,然后外网再开一个QQ,远程家里的QQ开启视频聊天,简易的监控平台就搭建好了,哈哈。&/p&
前言前面讲了搭建监控的方法,但是外网没法访问,怎么算是远程监控呢。因此这篇文章就分享下如何使外网能够访问自己家中电脑主机的经验。想做到外网能访问内网,那首先要搞清楚自己家中网络搭建的结构,本篇就以本人家中为例。我家网络是电信天翼的一个盒子…
&figure&&img src=&https://pic3.zhimg.com/v2-31c5c61c34bdabce5634fdbc032865ce_b.jpg& data-rawwidth=&1440& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&https://pic3.zhimg.com/v2-31c5c61c34bdabce5634fdbc032865ce_r.jpg&&&/figure&&p&一直感觉,舵机是最难的一部分,所以放到后面才开始研究,但是根据实际情况来看,舵机部分制作倒是问题最少的。跟前面的A篇和B篇隔得有点久了,放上前两篇的地址:&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&树莓派搭建简易远程监控 A篇 - Watchtower的文章 - 知乎专栏&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&树莓派搭建简易远程监控(内网穿透) B篇 - Watchtower的文章 - 知乎专栏&/a& &/p&&p&话说网上关于舵机的资料真是少的可怜,十一放假前还找到一篇详细的资料,打算有空再看。最近想看的时候发现收藏的网址迷の失踪。好不容易又找到一篇,结果博客域名换了,资源全没。不得己祭出我的扶墙利器。&/p&&p&终于功夫不负有心人,在一个貌似是台湾佬的论坛上,找到了一个相对来说比较详细的资料,不过很可惜大半资源也是失效了,只能自己按着仅存的线索去找了。&/p&&h2&&b&准备材料&/b&&/h2&&p&废话不多说,介绍下使用的材料:&/p&&ol&&li&辉盛 &b&SG90 9g&/b&伺服舵机&b& x 2&/b& &/li&&li&&b&16&/b&路&b&PWM&/b&舵机驱动板&b&PCA9685&/b& &/li&&li&&b&20&/b&克&b&FPV&/b&双轴舵机云台
&/li&&li&杜邦线若干
&/li&&/ol&&p&&br&&/p&&p&这里要说下,&b&PWM&/b&舵机的驱动板一定要买这种装好的:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-fc988dfd595c322ceb012d_b.jpg& data-rawwidth=&388& data-rawheight=&261& class=&content_image& width=&388&&&/figure&&p&不要买这种散件的:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-7b5d4cebb79f_b.jpg& data-rawwidth=&402& data-rawheight=&301& class=&content_image& width=&402&&&/figure&&p&本人就是被那淘宝上的套餐坑的,里面给的就是这散件,难焊不说,还缺斤少两的,跟装好的比,很明显能看到少了一个电容。目前也不是很清楚没这个电容有啥影响,反正我只装两个舵机还能正常运行。
&/p&&p&我焊接的方法也不对,连接舵机的排针应该横着来焊,不过我只接两个舵机就偷懒了。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ee900d694edfa_b.jpg& data-rawwidth=&1920& data-rawheight=&1440& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic2.zhimg.com/v2-ee900d694edfa_r.jpg&&&/figure&&p&家里的电烙铁也有点旧,不是很好用,原谅本人手残党 = =&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f7faf963faf6adea5d05ff2_b.jpg& data-rawwidth=&1920& data-rawheight=&1440& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic1.zhimg.com/v2-f7faf963faf6adea5d05ff2_r.jpg&&&/figure&&p&驱动板准备好了,接下去是舵机及云台。舵机上配套给的几个力臂,要根据实际情况削掉一部分才能安装进去&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c2c4e2f2b91ef5c81c0dff1_b.jpg& data-rawwidth=&1920& data-rawheight=&1440& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic1.zhimg.com/v2-c2c4e2f2b91ef5c81c0dff1_r.jpg&&&/figure&&p&顶部那个舵机安装挺简单的就不多说了,底盘的安装给大家看下:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-12693dddf4ad4152fbe653_b.jpg& data-rawwidth=&1920& data-rawheight=&1440& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-12693dddf4ad4152fbe653_r.jpg&&&/figure&&p&反正看不到,我就直接砍掉边上太大的部分,打磨也懒得打了。话说这设计真是操蛋,直接按照力臂的大小来做不是更好么 -_-///&/p&&p&&b&这里要提醒一下的是,刚开始玩的时候以为舵机是可以360°全方位无死角自由旋转的,结果用了才发现,原来只能180°左右旋转。因此,建议装舵机时,先在舵机上套上一个力臂,用手掰着旋转到最左或者最右的极限位置,再按照平台的死角位置组装平台,这样就不会出现装完平台发现没法旋转至最左或最右,最上或最下的某个极限位置了。&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-7fad95c80f0_b.jpg& data-rawwidth=&1920& data-rawheight=&1440& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic1.zhimg.com/v2-7fad95c80f0_r.jpg&&&/figure&&p&&br&&/p&&p&记得打上螺丝,组装好是下图这样的
&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ace353cc25da0ecfe5cfd0_b.jpg& data-rawwidth=&1440& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&https://pic1.zhimg.com/v2-ace353cc25da0ecfe5cfd0_r.jpg&&&/figure&&p&细心的观众朋友可能发现这个平台顶部有个卡扣,目前此类云台是可以装&b&28x28&/b&的摄像头模块的,如果有条件的话,买个这种摄像头模块可以直接插入装上。其他摄像头模块就自己想办法绑上去吧。&/p&&h2&&b&驱动板及舵机接线&/b&&/h2&&p&各个部件都组装完毕后,开始接线。驱动板的接线图也真是难找,好不容易找到一张,经过本人测试还是有问题了,根据实际经验修改了下,如下图所示:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-8cab5e8f3b67d12b087a_b.jpg& data-rawwidth=&640& data-rawheight=&448& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic1.zhimg.com/v2-8cab5e8f3b67d12b087a_r.jpg&&&/figure&&p&大概讲解下,驱动板右侧的黑黄蓝红4条线的接法毫无争议。关键是最底下我自己加上的一根紫色的&b&v+&/b&线,这根线要连接至电源才能驱动舵机,至于是&b&3v&/b&电源还是&b&5v&/b&电源,是树莓派&b&GPIO&/b&口提供的还是外接电源都无所谓,只要接上电源即可。一般接&b&3v&/b&的就够用了,如果有扩展板的话,就接到树莓派的&b&1&/b&号&b&3v&/b&供电口。如果没有拓展板的话,&b&3v&/b&供电口已经被驱动板的&b&vcc&/b&供电口占了,那接树莓派&b&2&/b&号&b&5v&/b&供电口也是可以的,这是比较简洁的接线方式。反正舵机如果没动静,多半是电源线的问题。一般情况下,&i&config.txt&/i&文件配置完成后,电源如果接通的话,无需任何代码舵机就会开始旋转至最大角度。&/p&&p&至于如果要连接很多舵机,需要更强大的额外供电的话,可以动用图中绿色框框内的外接电源供电口。本人无意间看到一个面包板的供电模块,便宜又好用,需要额外供电的时候就用这玩意。&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-56d677d4e8b158dd0cb7baa_b.jpg& data-rawwidth=&1920& data-rawheight=&1440& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic2.zhimg.com/v2-56d677d4e8b158dd0cb7baa_r.jpg&&&/figure&&p&驱动板部分完成了,下面该接舵机了。舵机的接线就简单多了。驱动板上一共有3排舵机的接口,如果绿色外接电源口那侧为顶部的话,依次是&b&PWM&/b&、&b&v+&/b&、&b&GND&/b&。舵机线的配色方案有很多种,但是一般来说就是浅色的线接&b&PWM&/b&,红色线是电源在中间,深色的线是接&b&GND&/b&。&/p&&p&一块驱动板上有编号为&b&0-15&/b&的&b&16&/b&个接口,可以接&b&16&/b&个舵机,记下自己接的是哪几个接口,等下要用到。笨人用的是&b&0&/b&号口和&b&15&/b&号口。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-0d50a136d84f1bb0dad417_b.jpg& data-rawwidth=&1920& data-rawheight=&1440& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic3.zhimg.com/v2-0d50a136d84f1bb0dad417_r.jpg&&&/figure&&h2&&b&配置文件及代码部分&/b&&/h2&&p&惯例配置下&i&/boot/config.txt&/i&文件,这里要着重提下,如果要用下面的驱动代码,&i&config.txt&/i&文件一定要配置对,不然会直接报错的。&/p&&p&&i&config.txt&/i&中加入下列代码即可:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&dtparam=i2c_arm=on
device_tree=bcm2710-rpi-3-b.dtb
&/code&&/pre&&/div&&p&&b&dtparam=i2c1=on&/b&这条不加问题也不大,反正我没加,加了会不会出问题就不知道了。
&/p&&p&有的教程里会提到,加入以下代码:
&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&dtoverlay=i2c-pwm-pca9685a,addr=0x40
&/code&&/pre&&/div&&p&千万别加,加入后执行接下去的代码驱动舵机时,会报设备被占用的错。至于为啥,有兴趣了解的小伙伴可以执行百度&b&PCA9685&/b&驱动板的原理使用介绍,这块内容网上多的飞起,但是至于实质性如何调用的代码真是少之又少。。&/p&&p&配置完成后,重启树莓派。&/p&&p&如果已经安装了&b&i2c-tools&/b&工具的话&b&,&/b&可以直接用以下代码进行查看,设备是否接入(树莓派&b&1&/b&的话最后一个数字改成&b& 0&/b&):&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo i2cdetect -y 1
&/code&&/pre&&/div&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-863e881dfa74f9e52df9_b.jpg& data-rawwidth=&414& data-rawheight=&136& class=&content_image& width=&414&&&/figure&&p&如图,接入前多出了一个地址,就说明已经接入成功,本例中地址是&b&40&/b&,有的机子上可能是&b&20&/b&等等。&/p&&p&&br&&/p&&p&代码部分自己也是找了好久才找到,不过等找到后发现,原来之前配置气压计的时候已经顺带下载了&b&PWM&/b&驱动的代码了。有种众里寻他千百度的感觉,真是醉了。
&/p&&p&&br&&/p&&p&代码及驱动下载地址:
&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/adafruit/Adafruit_Python_PCA9685& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - adafruit/Adafruit_Python_PCA9685: Python code to use the PCA9685 PWM servo/LED controller with a Raspberry Pi or BeagleBone black.&/a& &/p&&p&很幸运,是&b&python&/b&的,本人比较喜欢&b&python&/b&语言。另外有啥用到&b&i2c&/b&的驱动模块,可以在下面的网址进行下载对应的驱动。&/p&&p&&br&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - adafruit/Adafruit-Raspberry-Pi-Python-Code: Adafruit library code for Raspberry Pi&/a&&/p&&p&安装的方法网页上写的很清楚了,我再简单的补充下。&/p&&p&首先几个必要的依赖环境&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&sudo apt-get install python-smbus
sudo apt-get install git build-essential python-dev
&/code&&/pre&&/div&&p&然后cd到想要安装的目录执行下面命令(个人比较推荐这种方法):&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git
cd Adafruit_Python_PCA9685
sudo python setup.py install
&/code&&/pre&&/div&&p&安装完成后,在&i&Adafruit_Python_PCA9685&/i&目录下的&i&examples&/i&文件夹中,已经有个&i&simpletest.py&/i&范例文件了。直接&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&python simpletest.py
&/code&&/pre&&/div&&p&即可运行。运行的效果就是舵机左右来回旋转。前面也提到过了,有时候舵机接入后直接就会开始旋转至最大距离。运行过驱动脚本后,这种情况可能就不会出现了。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-6f0a3d0c83f23b334bb2ac0dc6deb200_b.jpg& data-rawwidth=&320& data-rawheight=&240& class=&content_image& width=&320&&&/figure&&p&&a href=&https://link.zhihu.com/?target=https%3A//pic1.zhimg.com/v2-6f0a3d0c83f23b334bb2ac0dc6deb200_b.gif& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&点击查看动图&/a&&/p&&p&在&i&Adafruit_PCA9685.py&/i&驱动文件中,除了&i&simpletest.py&/i&范例文件中使用到的&b&set_pwm( )&/b&方法外,还有个&b&set_all_pwm( )&/b&的方法,大家从字面上就能自己理解了,我就不过多解释了,有需要的可以自行调用。
&/p&&p&下面分享一段自己写的利用键盘来控制舵机转动的代码,运行后会出现一个简陋的画面,然后通过&b&1,2,3,4&/b&这几个按键就能控制舵机上下左右的旋转。&/p&&p&cd至&i&examples&/i&目录&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&vi servocontrol.py
&/code&&/pre&&/div&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# -*- coding: utf-8 -*-&/span&
&span class=&c1&&#导入控制驱动&/span&
&span class=&kn&&from&/span& &span class=&nn&&__future__&/span& &span class=&kn&&import&/span& &span class=&n&&division&/span&
&span class=&kn&&import&/span& &span class=&nn&&time&/span&
&span class=&kn&&import&/span& &span class=&nn&&Adafruit_PCA9685&/span&
&span class=&kn&&import&/span& &span class=&nn&&math&/span&
&span class=&c1&&#导入pygame&/span&
&span class=&kn&&import&/span& &span class=&nn&&pygame&/span&
&span class=&kn&&from&/span& &span class=&nn&&pygame.locals&/span& &span class=&kn&&import&/span& &span class=&o&&*&/span&
&span class=&c1&&#可以开启debug日志&/span&
&span class=&c1&&# import logging&/span&
&span class=&c1&&# logging.basicConfig(level=logging.DEBUG)&/span&
&span class=&c1&&# 初始化PCA9685,默认使用地址(0x40).&/span&
&span class=&n&&pwm&/span& &span class=&o&&=&/span& &span class=&n&&Adafruit_PCA9685&/span&&span class=&o&&.&/span&&span class=&n&&PCA9685&/span&&span class=&p&&()&/span&
&span class=&c1&&# 可以自己指定一个不同的地址&/span&
&span class=&c1&&# pwm = Adafruit_PCA9685.PCA9685(address=0x41, busnum=2)&/span&
&span class=&c1&&# 设置舵机活动范围&/span&
&span class=&n&&servo_min&/span& &span class=&o&&=&/span& &span class=&mi&&10&/span&
&span class=&c1&&# Min pulse length out of 4096&/span&
&span class=&n&&servo_max&/span& &span class=&o&&=&/span& &span class=&mi&&800&/span&
&span class=&c1&&# Max pulse length out of 4096&/span&
&span class=&n&&servo_angle&/span& &span class=&o&&=&/span& &span class=&mf&&0.03&/span& &span class=&c1&&# sleep时间,值越大,一次的转动幅度越大&/span&
&span class=&n&&servo_Dvalue&/span& &span class=&o&&=&/span& &span class=&mf&&0.01&/span& &span class=&c1&&# 控制左右旋转产生的误差&/span&
&span class=&c1&&# 辅助功能,一个更简单的驱动方法&/span&
&span class=&k&&def&/span& &span class=&nf&&set_servo_pulse&/span&&span class=&p&&(&/span&&span class=&n&&channel&/span&&span class=&p&&,&/span& &span class=&n&&pulse&/span&&span class=&p&&):&/span&
&span class=&n&&pulse_length&/span& &span class=&o&&=&/span& &span class=&mi&&1000000&/span&
&span class=&c1&&# 1,000,000 us per second&/span&
&span class=&n&&pulse_length&/span& &span class=&o&&//=&/span& &span class=&mi&&60&/span&
&span class=&c1&&# 60 Hz&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'{0}us per period'&/span&&span class=&o&&.&/span&&span class=&n&&format&/span&&span class=&p&&(&/span&&span class=&n&&pulse_length&/span&&span class=&p&&))&/span&
&span class=&n&&pulse_length&/span& &span class=&o&&//=&/span& &span class=&mi&&4096&/span&
&span class=&c1&&# 12 bits of resolution&/span&
&span class=&k&&print&/span&&span class=&p&&(&/span&&span class=&s1&&'{0}us per bit'&/span&&span class=&o&&.&/span&&span class=&n&&format&/span&&span class=&p&&(&/span&&span class=&n&&pulse_length&/span&&span class=&p&&))&/span&
&span class=&n&&pulse&/span& &span class=&o&&*=&/span& &span class=&mi&&1000&/span&
&span class=&n&&pulse&/span& &span class=&o&&//=&/span& &span class=&n&&pulse_length&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm&/span&&span class=&p&&(&/span&&span class=&n&&channel&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&pulse&/span&&span class=&p&&)&/span&
&span class=&c1&&# 设置频率为60Hz,这是一个比较好的值&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm_freq&/span&&span class=&p&&(&/span&&span class=&mi&&60&/span&&span class=&p&&)&/span&
&span class=&c1&&#初始化&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&init&/span&&span class=&p&&()&/span&
&span class=&c1&&#制造一个窗口&/span&
&span class=&n&&screen&/span& &span class=&o&&=&/span& &span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&display&/span&&span class=&o&&.&/span&&span class=&n&&set_mode&/span&&span class=&p&&((&/span&&span class=&mi&&600&/span&&span class=&p&&,&/span&&span class=&mi&&500&/span&&span class=&p&&))&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&display&/span&&span class=&o&&.&/span&&span class=&n&&set_caption&/span&&span class=&p&&(&/span&&span class=&s2&&&The Servo Control - Press 1,2,3,4&&/span&&span class=&p&&)&/span&
&span class=&n&&myfont&/span& &span class=&o&&=&/span& &span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&font&/span&&span class=&o&&.&/span&&span class=&n&&Font&/span&&span class=&p&&(&/span&&span class=&bp&&None&/span&&span class=&p&&,&/span& &span class=&mi&&60&/span&&span class=&p&&)&/span&
&span class=&c1&&#参数&/span&
&span class=&n&&color&/span& &span class=&o&&=&/span& &span class=&mi&&200&/span&&span class=&p&&,&/span& &span class=&mi&&80&/span&&span class=&p&&,&/span& &span class=&mi&&60&/span&
&span class=&n&&width&/span& &span class=&o&&=&/span& &span class=&mi&&4&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&mi&&300&/span&
&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&mi&&250&/span&
&span class=&n&&radius&/span& &span class=&o&&=&/span& &span class=&mi&&200&/span&
&span class=&n&&position&/span& &span class=&o&&=&/span& &span class=&n&&x&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&p&&,&/span& &span class=&n&&y&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&p&&,&/span& &span class=&n&&radius&/span&&span class=&o&&*&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&n&&radius&/span&&span class=&o&&*&/span&&span class=&mi&&2&/span&
&span class=&k&&while&/span& &span class=&bp&&True&/span&&span class=&p&&:&/span&
&span class=&k&&for&/span& &span class=&n&&event&/span& &span class=&ow&&in&/span& &span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&event&/span&&span class=&o&&.&/span&&span class=&n&&get&/span&&span class=&p&&():&/span&
&span class=&k&&if&/span& &span class=&n&&event&/span&&span class=&o&&.&/span&&span class=&n&&type&/span& &span class=&o&&==&/span& &span class=&n&&QUIT&/span&&span class=&p&&:&/span&
&span class=&nb&&exit&/span&&span class=&p&&()&/span&
&span class=&k&&elif&/span& &span class=&n&&event&/span&&span class=&o&&.&/span&&span class=&n&&type&/span& &span class=&o&&==&/span& &span class=&n&&KEYUP&/span&&span class=&p&&:&/span&
&span class=&k&&if&/span& &span class=&n&&event&/span&&span class=&o&&.&/span&&span class=&n&&key&/span& &span class=&o&&==&/span& &span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&K_ESCAPE&/span&&span class=&p&&:&/span&
&span class=&nb&&exit&/span&&span class=&p&&()&/span&
&span class=&k&&elif&/span& &span class=&n&&event&/span&&span class=&o&&.&/span&&span class=&n&&key&/span& &span class=&o&&==&/span& &span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&K_1&/span&&span class=&p&&:&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm&/span&&span class=&p&&(&/span&&span class=&mi&&15&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&servo_min&/span&&span class=&p&&)&/span&
&span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&sleep&/span&&span class=&p&&(&/span&&span class=&n&&servo_angle&/span&&span class=&o&&-&/span&&span class=&n&&servo_Dvalue&/span&&span class=&p&&)&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm&/span&&span class=&p&&(&/span&&span class=&mi&&15&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&)&/span&
&span class=&k&&elif&/span& &span class=&n&&event&/span&&span class=&o&&.&/span&&span class=&n&&key&/span& &span class=&o&&==&/span& &span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&K_2&/span&&span class=&p&&:&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm&/span&&span class=&p&&(&/span&&span class=&mi&&15&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&servo_max&/span&&span class=&p&&)&/span&
&span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&sleep&/span&&span class=&p&&(&/span&&span class=&n&&servo_angle&/span&&span class=&p&&)&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm&/span&&span class=&p&&(&/span&&span class=&mi&&15&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&)&/span&
&span class=&k&&elif&/span& &span class=&n&&event&/span&&span class=&o&&.&/span&&span class=&n&&key&/span& &span class=&o&&==&/span& &span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&K_3&/span&&span class=&p&&:&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&servo_min&/span&&span class=&p&&)&/span&
&span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&sleep&/span&&span class=&p&&(&/span&&span class=&n&&servo_angle&/span&&span class=&o&&-&/span&&span class=&n&&servo_Dvalue&/span&&span class=&p&&)&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&)&/span&
&span class=&k&&elif&/span& &span class=&n&&event&/span&&span class=&o&&.&/span&&span class=&n&&key&/span& &span class=&o&&==&/span& &span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&K_4&/span&&span class=&p&&:&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&servo_max&/span&&span class=&p&&)&/span&
&span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&sleep&/span&&span class=&p&&(&/span&&span class=&n&&servo_angle&/span&&span class=&p&&)&/span&
&span class=&n&&pwm&/span&&span class=&o&&.&/span&&span class=&n&&set_pwm&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&)&/span&
&span class=&c1&&#清屏&/span&
&span class=&n&&screen&/span&&span class=&o&&.&/span&&span class=&n&&fill&/span&&span class=&p&&((&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&200&/span&&span class=&p&&))&/span&
&span class=&c1&&#每片pie绘制&/span&
&span class=&n&&textImg1&/span& &span class=&o&&=&/span& &span class=&n&&myfont&/span&&span class=&o&&.&/span&&span class=&n&&render&/span&&span class=&p&&(&/span&&span class=&s2&&&1&&/span&&span class=&p&&,&/span& &span class=&bp&&True&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&)&/span&
&span class=&n&&screen&/span&&span class=&o&&.&/span&&span class=&n&&blit&/span&&span class=&p&&(&/span&&span class=&n&&textImg1&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&y&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&/&/span&&span class=&mi&&2&/span&&span class=&p&&))&/span&
&span class=&n&&textImg2&/span& &span class=&o&&=&/span& &span class=&n&&myfont&/span&&span class=&o&&.&/span&&span class=&n&&render&/span&&span class=&p&&(&/span&&span class=&s2&&&2&&/span&&span class=&p&&,&/span& &span class=&bp&&True&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&)&/span&
&span class=&n&&screen&/span&&span class=&o&&.&/span&&span class=&n&&blit&/span&&span class=&p&&(&/span&&span class=&n&&textImg2&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&y&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&/&/span&&span class=&mi&&2&/span&&span class=&p&&))&/span&
&span class=&n&&textImg3&/span& &span class=&o&&=&/span& &span class=&n&&myfont&/span&&span class=&o&&.&/span&&span class=&n&&render&/span&&span class=&p&&(&/span&&span class=&s2&&&3&&/span&&span class=&p&&,&/span& &span class=&bp&&True&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&)&/span&
&span class=&n&&screen&/span&&span class=&o&&.&/span&&span class=&n&&blit&/span&&span class=&p&&(&/span&&span class=&n&&textImg3&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&/&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&n&&y&/span&&span class=&p&&))&/span&
&span class=&n&&textImg4&/span& &span class=&o&&=&/span& &span class=&n&&myfont&/span&&span class=&o&&.&/span&&span class=&n&&render&/span&&span class=&p&&(&/span&&span class=&s2&&&4&&/span&&span class=&p&&,&/span& &span class=&bp&&True&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&)&/span&
&span class=&n&&screen&/span&&span class=&o&&.&/span&&span class=&n&&blit&/span&&span class=&p&&(&/span&&span class=&n&&textImg4&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&/&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&n&&y&/span&&span class=&p&&))&/span&
&span class=&c1&&#piece1&/span&
&span class=&n&&start_angle&/span& &span class=&o&&=&/span& &span class=&n&&math&/span&&span class=&o&&.&/span&&span class=&n&&radians&/span&&span class=&p&&(&/span&&span class=&mi&&45&/span&&span class=&p&&)&/span&
&span class=&n&&end_angle&/span& &span class=&o&&=&/span& &span class=&n&&math&/span&&span class=&o&&.&/span&&span class=&n&&radians&/span&&span class=&p&&(&/span&&span class=&mi&&135&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&arc&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&n&&position&/span&&span class=&p&&,&/span& &span class=&n&&start_angle&/span&&span class=&p&&,&/span& &span class=&n&&end_angle&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&line&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&),(&/span&&span class=&n&&x&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&+&/span&&span class=&mi&&60&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&+&/span&&span class=&mi&&60&/span&&span class=&p&&),&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&line&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&),(&/span&&span class=&n&&x&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&-&/span&&span class=&mi&&60&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&+&/span&&span class=&mi&&60&/span&&span class=&p&&),&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&c1&&#piece2&/span&
&span class=&n&&start_angle&/span& &span class=&o&&=&/span& &span class=&n&&math&/span&&span class=&o&&.&/span&&span class=&n&&radians&/span&&span class=&p&&(&/span&&span class=&mi&&225&/span&&span class=&p&&)&/span&
&span class=&n&&end_angle&/span& &span class=&o&&=&/span& &span class=&n&&math&/span&&span class=&o&&.&/span&&span class=&n&&radians&/span&&span class=&p&&(&/span&&span class=&mi&&315&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&arc&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&n&&position&/span&&span class=&p&&,&/span& &span class=&n&&start_angle&/span&&span class=&p&&,&/span& &span class=&n&&end_angle&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&line&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&),(&/span&&span class=&n&&x&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&-&/span&&span class=&mi&&60&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&-&/span&&span class=&mi&&60&/span&&span class=&p&&),&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&line&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&),(&/span&&span class=&n&&x&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&+&/span&&span class=&mi&&60&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&-&/span&&span class=&mi&&60&/span&&span class=&p&&),&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&c1&&#piece3&/span&
&span class=&n&&start_angle&/span& &span class=&o&&=&/span& &span class=&n&&math&/span&&span class=&o&&.&/span&&span class=&n&&radians&/span&&span class=&p&&(&/span&&span class=&mi&&135&/span&&span class=&p&&)&/span&
&span class=&n&&end_angle&/span& &span class=&o&&=&/span& &span class=&n&&math&/span&&span class=&o&&.&/span&&span class=&n&&radians&/span&&span class=&p&&(&/span&&span class=&mi&&225&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&arc&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&n&&position&/span&&span class=&p&&,&/span& &span class=&n&&start_angle&/span&&span class=&p&&,&/span& &span class=&n&&end_angle&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&line&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&),(&/span&&span class=&n&&x&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&+&/span&&span class=&mi&&60&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&+&/span&&span class=&mi&&60&/span&&span class=&p&&),&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&line&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&),(&/span&&span class=&n&&x&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&+&/span&&span class=&mi&&60&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&-&/span&&span class=&mi&&60&/span&&span class=&p&&),&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&c1&&#piece4&/span&
&span class=&n&&start_angle&/span& &span class=&o&&=&/span& &span class=&n&&math&/span&&span class=&o&&.&/span&&span class=&n&&radians&/span&&span class=&p&&(&/span&&span class=&mi&&315&/span&&span class=&p&&)&/span&
&span class=&n&&end_angle&/span& &span class=&o&&=&/span& &span class=&n&&math&/span&&span class=&o&&.&/span&&span class=&n&&radians&/span&&span class=&p&&(&/span&&span class=&mi&&405&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&arc&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&n&&position&/span&&span class=&p&&,&/span& &span class=&n&&start_angle&/span&&span class=&p&&,&/span& &span class=&n&&end_angle&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&line&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&),(&/span&&span class=&n&&x&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&-&/span&&span class=&mi&&60&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&o&&-&/span&&span class=&n&&radius&/span&&span class=&o&&+&/span&&span class=&mi&&60&/span&&span class=&p&&),&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&draw&/span&&span class=&o&&.&/span&&span class=&n&&line&/span&&span class=&p&&(&/span&&span class=&n&&screen&/span&&span class=&p&&,&/span& &span class=&n&&color&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&),(&/span&&span class=&n&&x&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&-&/span&&span class=&mi&&60&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&o&&+&/span&&span class=&n&&radius&/span&&span class=&o&&-&/span&&span class=&mi&&60&/span&&span class=&p&&),&/span& &span class=&n&&width&/span&&span class=&p&&)&/span&
&span class=&n&&pygame&/span&&span class=&o&&.&/span&&span class=&n&&display&/span&&span class=&o&&.&/span&&span class=&n&&update&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&运行后的界面:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-5f3cf0c155f13a655fa75_b.jpg& data-rawwidth=&1280& data-rawheight=&1024& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-5f3cf0c155f13a655fa75_r.jpg&&&/figure&&p&是不是很迷人,按1,2,3,4键可以控制舵机转动。&/p&&p&看下效果图:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-488e2a4fc8a6_b.jpg& data-rawwidth=&320& data-rawheight=&240& class=&content_image& width=&320&&&/figure&&p&&a href=&https://link.zhihu.com/?target=https%3A//pic4.zhimg.com/v2-488e2a4fc8a6.gif& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&点击查看动图&/a& &/p&&figure&&img src=&https://pic2.zhimg.com/v2-a5a368e2a19eb5f283be7c_b.jpg& data-rawwidth=&320& data-rawheight=&240& class=&content_image& width=&320&&&/figure&&p&&a href=&https://link.zhihu.com/?target=https%3A//pic4.zhimg.com/v2-a5a368e2a19eb5f283be7c.gif& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&点击查看动图&/a& &/p&&p&这里线太硬了,经常出现转不动的情况,于是我把给舵机供电的接口从3v接到了5v,给力许多。是不是感觉很像《机器人总动员》里的瓦力最后祝各位玩的愉快! XD&/p&&p&&br&&/p&&p&&br&&/p&&p&-- End --&/p&
一直感觉,舵机是最难的一部分,所以放到后面才开始研究,但是根据实际情况来看,舵机部分制作倒是问题最少的。跟前面的A篇和B篇隔得有点久了,放上前两篇的地址:
&figure&&img src=&https://pic3.zhimg.com/v2-42ecfbf2db7ff78ea75fa_b.jpg& data-rawwidth=&1440& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&https://pic3.zhimg.com/v2-42ecfbf2db7ff78ea75fa_r.jpg&&&/figure&&h2&&b&简介&/b&&/h2&开篇先简单的介绍下&b&ELK&/b&平台。本身自己是做运维工作的,前年开始因为单位里的需求开始接触这款开源软件,在单位里也搭建了一个&b&ELK&/b&日志监控平台来进行运维工作,获得不错好评。感觉这&b&ELK&/b&做的真心不错,算是&b&ELK&/b&的粉丝。&p&今年刚接触到树莓派的时候,第一个想法就是:这货能搭&b&ELK&/b&平台么?经过不断的尝试,终于成功了。在此分享个大家。&/p&&p&&b&ELK&/b&平台包含了3个核心软件,采集、处理、过滤数据的(一般是日志文件)&b&Logstash&/b&,文件数据库(分析、存储的核心)&b&Elasticsearch&/b&(简称&b&ES&/b&),前台展示界面&b&Kibana&/b&。目前市面上许多的日志分析产品(如日志易等等),核心都是用了&b&Elasticsearch&/b&这套开源的软件。&/p&&p&基本原理就是&b&Logstash&/b&采集分析过滤了数据, 传到&b&Elasticsearch&/b&中存储,用户访问&b&Kibana&/b&浏览数据,根据需要发送搜索、聚合请求到&b&Elasticsearch&/b&,&b&Elasticsearch&/b&对这些数据进行计算处理,最终返回到&b&Kibana&/b&的页面上进行展示,可以在&b&Kibana&/b&上可以绘制出各种图表,展示当前时间段内的变化情况,或者近7天的数据趋势等等,非常直观。&/p&&p&放一张早期我搭建时候设计的架构图:&/p&&br&&figure&&img src=&https://pic3.zhimg.com/v2-d88da2e0d3dc_b.jpg& data-rawwidth=&900& data-rawheight=&849& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic3.zhimg.com/v2-d88da2e0d3dc_r.jpg&&&/figure&&br&&p&广告就打到这里,下面讲下具体思路。&/p&&h2&&b&应用范围&/b&&/h2&&p&&b&ELK&/b&中我们只是用&b&Elasticsearch&/b&处理数据和&b&Kibana&/b&作为展示,数据的接入我直接用&b&python&/b&写程序,调用&b&Elasticsearch&/b&的&b&API&/b&接口导入数据即可。&/p&&p&任何设备、传感器,只要跟我部署了&b&Elasticsearch&/b&的树莓派联网了,都能通过接口将数据传到我的监控平台上,得到实时的监控。这也就是目前很流行的物联网的概念。设备智能化,智能设备之间互相联网,可以在一个终端上监控、控制所有设备。&/p&&p&目前市面上流行的树莓派小型气象站、智能花盆什么的都可以通过这个&b&ELK&/b&平台的数据收集、分析来实现。还有人花了好几个月的时间打造的什么物联网平台放在网上卖钱,在我看来,这些功能完全可以用&b&ELK&/b&加上&b&web.py&/b&来开发,方便、简洁。&b&Kibana&/b&中还支持&b&markdown&/b&、&b&html&/b&内容的编辑(虽然是阉割版的),方便在页面上增添说明及链接,灵活的在各页面之间跳转。&/p&&p&效果图:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-6b0f1ceffc_b.jpg& data-rawwidth=&1080& data-rawheight=&1920& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-6b0f1ceffc_r.jpg&&&/figure&&p&(亦可作为魔镜的系统的一部分)&/p&&h2&&b&部署搭建&/b&&/h2&&p&&b&Elasticsearch&/b&&/p&&p&&b&ELK&/b&有了解的朋友会知道,目前已经快更新到&b&5.0&/b&的版本了,就目前最新的稳点版也是&b&2.X&/b&、&b&3.X&/b&的版本。但是想要部署到树莓派上有个问题要解决。&b&Kibana&/b&从&b&4.X&/b&的版本开始,为了方便使用,整合了&b&node.js&/b&作为后端来启动web服务,只需运行一个脚本就可以拉起,不需要像3代一样,还需部署到&b&tomcat&/b&或&b&weblogic&/b&这种容器中才能启动。但是因为树莓派是&b&ARM&/b&架构的,&b&Kibana4.X&/b&版本似乎并没有考虑在&b&ARM&/b&上运行,其自带的node.js后端没有ARM架构编译版的。解决方法也是有的,找个ARM架构编译好的node.js替换掉软件中的文件即可。&/p&&p&不过我采取的方案是直接使用&b&Kibana3&/b&代的版本,&b&Kibana3&/b&也有很多亮点的地方,个人也是挺喜欢的。&b&kibana&/b&退到了&b&3.X&/b&的版本,&b&Elasticsearch&/b&也要跟着降级版本要跟&b&Kibana&/b&的对应,本人使用的是&b&1.0.1&/b&的版本,&b&ELK&/b&从&b&2013&/b&年(貌似是这个时间段)出现后飞速的发展,这几个老版本可以算得上是上古时代的版本了,官网上几乎已排到末页了,找了半天才找到。&br&&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//www.elastic.co/downloads/past-releases/elasticsearch-1-0-1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Elasticsearch 1.0.1&/a&&/p&&p&这是官网的下载地址,实际上只要是这个版本附近的几个版本,都是可以匹配上&b&Kibana3&/b&的版本的。&b&Logstash&/b&我们这里就不装了,因为Logstash作为采集端,有很多软件可以代替,由于数据量不大,所以本例中就用&b&py&/b&写的脚本来采集录入&b&Elasticsearch&/b&中。&b&Elasticsearch&/b&的部署,没什么好说的,找个目录扔进去,然后解开下载好的压缩包,启动。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&bin/Elasticsearch
&/code&&/pre&&/div&&p&如果出现下面的这行日志说明启动成功。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&[INFO ][node
] [node-0] started
&/code&&/pre&&/div&&p&一般的个人使用中,也没必要搭建什么集群,一个节点,性能也是够用的。这里就简单的讲解下&b&Elasticsearch&/b&几个常用的配置。&/p&&p&首先是启动时候的内存配置,个人比较习惯在&i&bin/elasticsearch.in.sh&/i&中配置,找到以下两句,就是配置最大内存和最小内存的。根据个人使用经验,两个值最好配的一样。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&ES_MIN_MEM=128m
ES_MAX_MEM=128m
&/code&&/pre&&/div&&p&树莓派中使用的时候,会出现一个&b&bug&/b&,不知道哪里出的问题,这个值无论写多少,只是控制初始的时候请求的内存大小,但是使用过程中并不会受到你的配置限制,会几乎吃完所有内存,然后进行&b&GC&/b&再次回收释放。因此在实际的使用中,本人部署了&b&ELK&/b&的那块树莓派仅做一个服务器使用,常年开着跑着,并不会在打开图形界面或者做其他工作了,不然内存被吃完了做其他的卡的要死。(买了好几块板子,就是这么任性,哈哈)&br&&/p&&p& 接下去是&b&Elasticsearch&/b&的常规配置。这里就讲几个常用的配置,如果所有内容都说的话,讲个3天3夜也讲不完。想要详细了解的同学,自行百度。打开&i&config/elasticsearch.yml&/i&文件。&i&elasticsearch.yml&/i&文件中的注释写的其实很详细了,大家看着改就行了。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# 集群名字,如果要搭集群的话,同个网段内的Elasticsearch应用集群名取得一样就行了,应用会自动广播组成集群的,非常方便
cluster.name: Watchtower
# 节点的名称,这个应用的节点名字叫啥,用于区分同个集群里的不同节点
node.name: &node-0&
# 是否为主节点,一个集群里必须有一个主节点,也只能有一个主节点。当出现一个主节点后,其他master: true的节点都只会成为备用主节点,只有当之前的主节点挂了的时候其他备用的节点才会顶上来。
node.master: true
# 时候是数据节点,一个集群必须要有至少一个数据节点来存储数据
node.data: true
# 默认这个集群中每个索引的分片数量。Elasticsearch中的数据都是存储在索引(index)中的(不同于sql数据库中的索引的概念),每个索引会被分成多个分片到不同的数据节点中进行保存。这就是一个分布式文件数据库的概念
index.number_of_shards: 1
# 默认这个集群中每个分片的副本数量。Elasticsearch中的每个分片都会产生等同于该配置数量的副本,副本分片一般不会与主分片存储在相同的主机节点中,当有主机挂掉的时候,该节点上的分片就丢失了,这时,如果设置了副本分片(相当于备份),那就会保证索引的完整性。如果是单节点没有集群的话,这里配置0就可以了
index.number_of_replicas: 0
# 节点中数据存储的路径,这条不配也没事,默认存储在Elasticsearch文件夹中
# path.data: /path/to/data
&/code&&/pre&&/div&&p&#开头是备注,配置的语句注意前面不要留空格,不然是无效的。看不懂注释的没事,按照我上面给出的来配置就好了。&/p&&p&&b&Kibana&/b&&/p&&p&&b&Kibana&/b&的安装相对来说,更加的简单,只需要下载解压后扔到&b&tomcat&/b&或者&b&weblogic&/b&之类的容器中解压即可,这里就不多说了。下面是下载地址。&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//www.elastic.co/downloads/past-releases/kibana-3-0-0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Kibana 3.0.0&/a&&br&&/p&&p&这里提一下,&b&Kibana3&/b&的配置文件是在&b&kibana&/b&文件夹下的&i&config.js&/i&文件,如果看不懂的同学只需要知道一句配置&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&elasticsearch: &http://&+window.location.hostname+&:9200&
&/code&&/pre&&/div&&p&这句是配置连接&b&Elasticsearch&/b&的。&b&Elasticsearch&/b&开放两个端口,默认一个是&b&9300&/b&,这个是集群内部通信的端口。另外一个是&b&9200&/b&是对外部开放的,增删改查的操作都可以通过向这个端口发送命令来完成。如果你&b&E&/b&&b&lasticsearch&/b&跟&b&kibana&/b&部署在一起的话,这条代码不用改,如果不是则改成对应的&b&IP&/b&。&/p&&h2&&b&对Elasticsearch进行增删改查操作&/b&&/h2&&p&&b&Elasticsearch&/b&可不止是个存储用的文件数据库,而且一个具有很强计算能力的“大脑”。&b&Elasticsearch&/b&对外提供了一个&b&API&/b&接口,用户可以通过这个接口实现增删改查操作,及聚合统计。这也是一个讲三天三夜也讲不完的模块,这里就简单提下,想要深入了解的请自行百度。&br&&/p&&p&&b&增&/b&&/p&&p&本人在树莓派上的应用,主要用于收集各个传感器汇总过来的数据,及统计各个智能设备发送汇总的系统数据。发送和汇总信息的脚本,主要都是由&b&python&/b&写的。&b&Elasticsearch&/b&中也是有针对&b&python&/b&的插件的,不过杀鸡焉用牛刀,我并没有使用插件来传送数据(其实插件的原来也是一样的),这样也方便大家对&b&Elasticsearch&/b&的理解。 &/p&&p&这里就拿DHT11温湿度传感器为例,&/p&&p&增加文档(&b&Elasticsearch&/b&中,记录都称之为文档)的命令很简单:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&curl -XPUT 'http://localhost:9200/home-/DHT11/1' -d '{
&@timestamp& : &T20:04:46.636+08:00&,
&TEMP& : &25&,
&HUMIDITY& : &40&
&/code&&/pre&&/div&&p&这条命令传入的数据有:&/p&&p&记录的时间字段(&b&@timestamp&/b&)为&b&T20:04:46.636+08:00&/b&,温度字段(&b&TEMP&/b&)为&b&25&/b&,及湿度字段(&b&HUMIDITY&/b&)为&b&40&/b&&/p&&p&简单的解释下,&b&localhost:9200&/b&是&b&Elasticsearch&/b&的应用的&b&IP&/b&及开放的端口,&/p&&p&&b&home-&/b&则为记录的索引名。&b&DHT11&/b&为类型,1为文档的&b&ID&/b&。&/p&&p&下面&b& -d&/b&后面跟着的&b&json&/b&格式的内容即为要插入的字段内容。(&b&Elasticsearch&/b&中输入输出的内容都为&b&json&/b&格式)&/p&&p&这里简单的讲下概念,前面说了&b&Elasticsearch&/b&中的数据都是以存储在索引中的,以文档为单位。&b&Elasticsearch&/b&中的索引(&b&index&/b&)类似&b&sql&/b&数据库中数据库名的概念,类型(&b&type&/b&)类似sql数据库中表的概念,文档(&b&doc&/b&)则类似&b&sql&/b&数据库中每一条数据的概念。&/p&&p&通常情况下&b&ID&/b&号可以不填,由系统自动生成,除非你想操作某个特定&b&ID&/b&的文档数据。&/p&&p&那么我们只要把代码写成这样,就可以不断的往Elasticsearch中发送传感器的数据了:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# -*- coding: utf-8 -*-&/span&
&span class=&kn&&import&/span& &span class=&nn&&json&/span&
&span class=&kn&&import&/span& &span class=&nn&&time&/span&
&span class=&kn&&from&/span& &span class=&nn&&datetime&/span& &span class=&kn&&import&/span& &span class=&n&&datetime&/span&
&span class=&kn&&import&/span& &span class=&nn&&commands&/span&
&span class=&k&&def&/span& &span class=&nf&&currentTEMP&/span&&span class=&p&&(&/span& &span class=&n&&temp&/span& &span class=&p&&):&/span&
&span class=&n&&tmp&/span& &span class=&o&&=&/span& &span class=&nb&&float&/span&&span class=&p&&(&/span& &span class=&n&&temp&/span& &span class=&p&&)&/span&
&span class=&k&&if&/span& &span class=&n&&tmp&/span& &span class=&o&&!=&/span& &span class=&mi&&0&/span&&span class=&p&&:&/span&
&span class=&n&&tmp&/span& &span class=&o&&=&/span& &span class=&n&&tmp&/span& &span class=&o&&/&/span& &span class=&mi&&1000&/span&
&span class=&k&&return&/span& &span class=&n&&tmp&/span&
&span class=&k&&def&/span& &span class=&nf&&currentHumidity&/span&&span class=&p&&(&/span& &span class=&n&&humidity&/span& &span class=&p&&):&/span&
&span class=&n&&tmp&/span& &span class=&o&&=&/span& &span class=&nb&&float&/span&&span class=&p&&(&/span& &span class=&n&&humidity&/span& &span class=&p&&)&/span&
&span class=&k&&if&/span& &span class=&n&&tmp&/span& &span class=&o&&!=&/span& &span class=&mi&&0&/span&&span class=&p&&:&/span&
&span class=&n&&tmp&/span& &span class=&o&&=&/span& &span class=&n&&tmp&/span& &span class=&o&&/&/span& &span class=&mi&&1000&/span&
&span class=&k&&return&/span& &span class=&n&&tmp&/span&
&span class=&k&&def&/span& &span class=&nf&&main&/span&&span class=&p&&():&/span&
&span class=&n&&info&/span& &span class=&o&&=&/span& &span class=&p&&{}&/span&
&span class=&n&&TEMP&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&
&span class=&n&&HUMIDITY&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&
&span class=&k&&print&/span& &span class=&s2&&&start&&/span&
&span class=&c1&&# 写个死循环来发送数据&/span&
&span class=&k&&while&/span& &span class=&bp&&True&/span&&span class=&p&&:&/span&
&span class=&k&&try&/span&&span class=&p&&:&/span&
&span class=&n&&TEMP&/span& &span class=&o&&=&/span& &span class=&nb&&open&/span&&span class=&p&&(&/span&&span class=&s1&&'/sys/bus/iio/devices/iio:device0/in_temp_input'&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&read&/span&&span class=&p&&(&/span& &span class=&p&&)&/span&
&span class=&n&&HUMIDITY&/span& &span class=&o&&=&/span& &span class=&nb&&open&/span&&span class=&p&&(&/span&&span class=&s1&&'/sys/bus/iio/devices/iio:device0/in_humidityrelative_input'&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&read&/span&&span class=&p&&(&/span& &span class=&p&&)&/span&
&span class=&n&&TEMP&/span& &span class=&o&&=&/span& &span class=&n&&currentTEMP&/span&&span class=&p&&(&/span& &span class=&n&&TEMP&/span& &span class=&p&&)&/span&
&span class=&n&&HUMIDITY&/span& &span class=&o&&=&/span& &span class=&n&&currentHumidity&/span&&span class=&p&&(&/span& &span class=&n&&HUMIDITY&/span& &span class=&p&&)&/span&
&span class=&k&&except&/span&&span class=&p&&:&/span&
&span class=&n&&TEMP&/span& &span class=&o&&=&/span& &span class=&n&&TEMP&/span& &span class=&o&&+&/span& &span class=&mf&&0.01&/span&
&span class=&n&&HUMIDITY&/span& &span class=&o&&=&/span& &span class=&n&&HUMIDITY&/span& &span class=&o&&+&/span& &span class=&mf&&0.01&/span&
&span class=&c1&&# 将字段信息处理成json格式&/span&
&span class=&n&&info&/span&&span class=&p&&[&/span&&span class=&s2&&&@timestamp&&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&datetime&/span&&span class=&o&&.&/span&&span class=&n&&utcnow&/span&&span class=&p&&()&/span&&span class=&o&&.&/span&&span class=&n&&strftime&/span&&span class=&p&&(&/span&&span class=&s1&&'%Y-%m-&/span&&span class=&si&&%d&/span&&span class=&s1&&T%H:%M:%S.&/span&&span class=&si&&%f&/span&&span class=&s1&

我要回帖

更多关于 小度机器人怎么升级 的文章

 

随机推荐