tag 标签: 教程

相关博文
  • 热度 4
    2024-10-28 08:20
    2236 次阅读|
    0 个评论
    前言 (一)在当今这个瞬息万变的数字化时代,导航技术已经深入到我们生活的方方面面,从日常出行到物流配送,再到应急救援,无不彰显其重要性。 随着智能手机和物联网技术的飞速发展,对于导航系统的需求不再仅仅局限于简单的路线指引,而是更加追求精准性、实时性和智能化。在此背景下,将高德导航的路径规划算法高效应用于单片机系统及移动APP中,不仅是对传统导航技术的一次革新,更是推动智慧城市、智能交通系统建设的关键一环。 (二)单片机,作为嵌入式系统的核心,凭借其体积小、功耗低、集成度高等特点,在车载设备、智能家居、工业自动化等领域发挥着不可替代的作用。 将高德导航的路径规划功能集成到单片机上,意味着可以实现更为紧凑、低功耗的导航解决方案,为车辆自主导航、无人机路径规划等应用场景提供强有力的技术支持。这不仅要求算法在保持高精度的同时,还需进行深度优化以适应单片机有限的计算资源和存储能力。 (三)所以本文将给大家分享一下,我将高德开放平台的导航、路径规划功能运用到单片机及APP上,从而可以快速开发导航类、规划类的项目。当然方法有非常多种,我本次分享的仅仅是高德的冰山一角,高德提供的API,甚至可以让单片机不需要APP支持,独立运行导航、路径规划等项目 本文末尾,有项目所有代码的下载地址 效果展示 (一)APP展示 由于是快速开发,所以没有任何美化,仅是实现功能。APP开发平台:App Inventor 图:设定目的地后,会自动规划最近的路线,然后实时定位导航 (二)单片机展示 单片机:ESP32 图:APP开始导航后,将导航信息发送到ESP32 项目大纲 APP设定目的地→→地理编码API→→APP定位经纬度→→坐标转换API→→路径规划API→→APP显示静态图→→提交单片机显示 为了不泄露信息,最好对高德API进行封装,然后通过自己的API来操作。同时APP和单片机的通信也用到API。http://api.xemowo.top (一)获取高德开放平台API ①路径规划API:https://lbs.amap.com/api/webservice/guide/api/direction 对步行、公交路径规划,返回从原地到目的地的信息(方向,距离,时间,步行指示等) ②地理编码API:https://lbs.amap.com/api/webservice/guide/api/georegeo 将地址信息,转化为经纬度等信息。如:中山市港口镇政府,返回信息:"location" :"113.384324,22.584733" ③坐标转换API:https://lbs.amap.com/api/webservice/guide/api/convert 将用户输入的非高德坐标(GPS坐标、mapbar坐标、baidu坐标)转换成高德坐标。 ④静态地图:https://lbs.amap.com/api/webservice/guide/api/staticmaps 项目可以不用静态地图,因为路径规划API也会返回带有标记的静态图 (二)封装API(因人而异,后面我会放出PHP源码) ①地址查询经纬度:http://api.xemowo.top/api/gaode/chaxun.php 文档:http://api.xemowo.top/api/chaxun.html ②坐标转换:http://api.xemowo.top/api/gaode/gps.php 文档:http://api.xemowo.top/api/GPS.html ③路径规划:http://api.xemowo.top/api/gaode/walk.php 文档:http://api.xemowo.top/api/walk.html ④单片机接收信息:http://api.xemowo.top/api/gaode/esp_walk.php 文档:http://api.xemowo.top/api/esp_walk.html (三)制作APP App Inventor,Android编程工具https://www.17coding.net/ 采用图形化积木式的拖放组件,完全在线开发的Android编程环境,无需复杂的软件安装,可以通过浏览器直接访问并进行编程。 (四)单片机编程 Arduino IDE,内置很多库函数,对编程极其方便,速成项目,并且资料很多,对初学者帮助非常大 高德API (一)注册高德开放平台的账号https://lbs.amap.com/ (二)应用管理----创建新应用 (三)添加key,选择web服务(请勿泄露key) (四)寻找所需的API,本期项目我们需要4个高德API 注意个人用户调用的限量,企业用户会多一些,超过限量可能被禁止使用 ①路径规划API:https://lbs.amap.com/api/webservice/guide/api/direction 对步行、公交路径规划,返回从原地到目的地的信息(方向,距离,时间,步行指示等) ②地理编码API:https://lbs.amap.com/api/webservice/guide/api/georegeo 将地址信息,转化为经纬度等信息。如:中山市港口镇政府,返回信息:"location" :"113.384324,22.584733" ③坐标转换API:https://lbs.amap.com/api/webservice/guide/api/convert 将用户输入的非高德坐标(GPS坐标、mapbar坐标、baidu坐标)转换成高德坐标。 ④静态地图:https://lbs.amap.com/api/webservice/guide/api/staticmaps 项目可以不用静态地图,因为路径规划API也会返回带有标记的静态图 制作API 搭建API(网站)需要一台服务器,并且需要开发环境 我这里的环境如下: 系统:Orange Pi 1.0.2 Jammy (aarch64) WEB平台:OpenResty PHP:PHP-72 域名:API.XEMOWO.TOP (一)坐标转换API (http://api.xemowo.top/api/GPS.html) 示例:http://api.xemowo.top/api/gaode/gps.php?gps=113.38472,22.59476&photo=0
  • 热度 6
    2023-11-30 10:21
    783 次阅读|
    0 个评论
    一、实验目的 学习直方图统计的原理,掌握图像的读取方法,并实现在LCD上显示灰度图像的直方图统计结果。 二、实验原理灰度直方图 灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是 将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度 级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。 直方图是用来整理计量值的观测数据,分析其分布状态的统计方法,用于对总体的分布特征进行推断。直方图的作用如下: (1)检验数据分布的类型,分析数据是否服从正态分布,判断数据有无异常; (2)与产品规格界限做比较,可直观地判断分布中心是否偏离规格中心,以确定是否需要调整并求出其调整量;还可判断数据分布的散差(分布范围)是否满足规格范围的要求,以确定是否采取缩小散差的技术性措施; (3)用于进行过程能力调查和不合格品率估计; (4)客观地反映操作者的技术水平和主观努力程度。 从概率的观点来理解,灰度出现的频率可看作其出现的概率,这样直方图就对应于概率密度函数 pdf(probability density function),而概率分布函数就是直方图的累积和,即概率密度函数的积分。也可以直接从代表每种灰度的象素数目的直方图来观察。 灰度直方图的计算是很简单的,依据定义,若图象具有 L(通常 L=256,即 8 位灰度级)级灰度,则大小为 MxN 的灰度图象 f(x,y)的灰度直方图 hist 可用如下计算获得: (1)初始化 hist =0 ; k=0,…,L-1 (2)统计 hist ++ ; x, y =0,…,M-1, 0,…,N-1 (3)标准化 hist /=M*N 程序流程 程序流程设计中首先要进行外设使能配置,接着进行LCD管脚复用配置和LCD中断配置,然后进行LCD显示的初始化,最后读取工程目录下的BMP图像并进行直方图统计,并在 LCD 显示灰度值大 小的统计结果。 视频分析与视觉库 VLIB 是一个TI 的软件库,可加速视频分析开发并将性能提高多达 10 倍。VLIB 是针对 C6x DSP 内核优化的可扩展库。包括的40 多个内核的集合可以实现背景建模与减法、对象特征提取、追踪与识别和低级像素处理。 包括适用于 C64x+、C674x 和 C66x 处理器的 Windows 和 Linux 安装可执行文件。每个可执行文件安装一个组件包存储库、一个文档目录、一个 Eclipse 插件目录和一个扩展的组件目录结构,其中包含组件库、头文件和测试示例。 TMS320C6748处理器使用的是vlib_c674x_3_3_2_0。 vlib_c674x_3_3_2_0 将安装到CCS5.5 的安装路径,安装完成后会有相应的文件夹出现。源码所在路径:\vlib_c674x_3_3_2_0\packages\ti\vlib\src 程序源码 初始化缓存 使用VLIB 的库来为直方图计算进行缓存初始化。使用时,直接包含“VLIB_histogram_1D_Init_U8.h”文件 即可。 API 接口 VLIB_histogram_1D_Init_U8(const uint8_t *restrict binEdges,const int32_t numBins, uint8_t *restrict histArray); 程序使用VLIB 的库来进行灰度直方图统计前的缓存初始化,调用的程序源码和使用说明可以安装VLIB后查看。调用的初始化函数中,第一个参数是直方图的边界值,第二个参数是直方图的区间数。第三个参数是内部使用的缓冲器。 直方图计算 使用VLIB 的库来从 8 位无符号整数数组计算直方图。使用时,直接包含“VLIB_histogram_1D_U8.h”文件 即可。 API 接口 VLIB_histogram_1D_U8(const uint8_t *restrict X, const int32_t numX,const int32_t numBins,const uint16_t binWeight,const uint8_t *restrict histArray,uint16_t *restrict H1,uint16_t *restrict H2,uint16_t *restrict H3,uint16_t *restrict H); 程序使用VLIB 的库来进行灰度直方图统计,调用的程序源码和使用说明可以安装VLIB后查看。调用的直方图统计函数中,第一个参数是输入图像的数组,第二个参数是输入图像数组的元素个数。第三个参数是直方图的区间数。第四个参数是直方图中该区域的像素增量。第五个参数是指向内部使用的缓冲器。第六~第八个参数是指向内部使用的数组。第九个参数是用来保存直方图计算结果的数组。 三、操作现象实验设备 本实验使用的硬件接口为LCD,所需硬件为实验板、仿真器、LCD和电源。 硬件连接 (1)连接仿真器和电脑的USB接口, (2)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。 软件操作 导入工程,选择Demo文件夹下的对应工程 编译工程,生成可执行文件 将CCS连接实验箱并加载程序 程序加载完成后点击运行程序 运行程序后,CCS的Console窗口会打印相关信息,同时LCD会显示标题。 稍等片刻后,图像处理完成,LCD会显示直方图的统计结果。 实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验板的连接,最后实验箱断电即可。
  • 热度 7
    2023-11-1 17:28
    1949 次阅读|
    0 个评论
    使用Skydel API构建测试方案 凭借其现代、强大且直观的API,德思特Safran GNSS模拟引擎Skydel免费提供了Python、C#、C++和Labview的开源客户端库,它具有600多条命令,并且有完善的文档与记录。 随着Skydel软件更新添加新功能,API得到改进与软件的发展相同步。了解API的功能不需要具备编程技能,但具有编码经验的高级用户将能够简单的使用API命令并做深度开发,以创建自动化测试和GNSS模拟场景 使用Skydel构建SNMP代理 有一个例子可以很好的说明API的灵活性——通过使用外部OID命令,使用SNMP网络协议来远程驱动您的设备,定制您的系统。可以使用带有特定德思特Safran Skydel API命令的Python脚本构建SNMP子代理,该子代理将成为在系统(Linux或Windows操作系统)上运行的SNMP守护程序的网关,允许SNMP管理功能。 ● SNMP: SNMP,即简单网络管理协议(Simple Network Management Protocol),是一种广泛使用的应用层协议,用于管理和监控网络元素。它由互联网架构委员会根据RFC-1157规范文档定义,用于在网络设备之间交换管理信息,并且是TCP/IP协议的一部分。使用此协议的设备需要启用并配置SNMP代理,以便它们可以与网络管理系统(NMS)进行通信。SNMP代理还负责控制管理信息库(MIB)中定义的控制变量的数据库。 ● OID: OID,即对象标识符(Object Identifier),是一种用于唯一标识网络管理信息的标识符,它类似于一个树状结构,用于表示不同类型的管理信息,例如网络设备的参数、性能统计和配置数据。SNMP使用OID来定位和获取这些管理信息。 如果你想通过使用外部OID命令来远程驱动你的设备,你需要了解目标设备支持的OID,然后使用SNMP协议发送相应的请求,以获取或设置相关信息。OID通常以一种类似于点分割的数字串的形式表示,例如1.3.6.1.2.1.1.1表示系统的描述信息。 要使用SNMP协议来远程管理设备,你需要具备一定的SNMP知识,并使用合适的工具或编程语言来发送SNMP请求,以实现设备的定制和管理。 在此配置中,任何Skydel API命令都可以成为SNMP子代理的新OID(对象标识符)。这将使得任何NMS都能将Skydel命令“转换”为SNMP集,并通过网络获取请求来驱动您的Skydel系统。 如何使用德思特Safran GSG-7/8构建SNMP代理 在此配置中,工程师将能够通过SNMP监控Skydel引擎 ,该测试场景旨在能够通过SNMP检查Skydel引擎是否正常运行,通过独特的OID使用设置命令来启动和停止引擎。 德思特Safran提供了一个基本的SNMP入门套件(Skydel SNMP Stater套件),允许用户集成并通过SNMP管理其Skydel引擎。该套件可以通过添加多个新的API命令进行定制,这些命令将转换为新的SNMP OID,以增强监管能力。使用Skydel SNMP Stater套件远程连接到由Skydel软件驱动的外部笔记本电脑上运行的MIB浏览器。 Skydel SNMP Stater套件包含: skydel_snmp.py 发挥SNMP子代理角色(Skydel API命令和SNMP OID之间的桥梁)的Python脚本,可以由用户定制以添加功能。 snmp_pass.py 仅用于全局SNMP设置的Python脚本。对于简单的情况,添加新的OID不需要进行任何更改。 Install.sh 每次出于自定义目的更改Python脚本时都必须执行的“Makefile”命令。 snmpd.conf 附加到snmpd守护程序的配置文件。 SKYDEL-MIB.txt MIB文件示例基于Skydel标准架构构建,可用于与Python脚本中创建的新OID链接进行自定义。此MIB文件还可用于提供NMS或MIB浏览器来测试您的系统。 如果需要进一步了解德思特Safran Skydel的SNMP代理或需要下载相关文档,请联系德思特技术工程师。
  • 热度 6
    2023-10-8 15:52
    940 次阅读|
    0 个评论
    一、实验目的 本节视频的目的是学习LCD控制器的控制原理原理,并实现StarterWare开发环境下的LCD触摸控制。 二、实验原理1、LCD控制器 要实现LCD的显示与触摸,主要需要LCD驱动器和LCD控制器,LCD控制器一般又分为显示控制器和触摸控制器。通常情况下,LCD驱动器是集成在LCD屏幕上,而LCD控制器是由外部电路实现的。 2、LCD显示控制器 TMS320C6748 CPU内部就有对应的LCD显示控制器(光栅控制器). LCD 控制器由两个独立的控制器组成,即光栅控制器和 LCD 接口显示驱动器 (LIDD) 控制器。每个控制器独立于另一个控制器运行,并且在任何给定时间只有一个控制器处于活动状态。 3、LCD触摸控制器 触摸控制器由于是可选部分,一般会集成在实验底板上,这里用的是XPT2046控制器。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。 4、电阻式触摸屏的原理 当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在 X 和 Y 两个方向上的电压发生变化,产生信号,然后控制器读取信号,并计算出手指触摸的位置。 触摸屏都需要一个 AD 转换器,也就是要将电压变化读取出来,供主机求出触摸的位置。触摸芯片就是XPT2046。 5、XPT2046芯片 为4导线制触摸屏控制器,采用SPI模式进行通信 6、流程设计 程序流程设计中首先要进行外设使能配置,接着进行串口2初始化,用于输出触摸坐标值;然后进行LCD管脚复用配置和LCD中断配置,接着进行LCD显示和触摸的初始化。最后在循环中进行触摸检测,判断是否发生屏幕触摸,如果触摸屏幕则在串口输出触摸的所在位置的坐标值。 7、管脚复用源码 基于StarterWare控制外设时可调用对应的API接口,无需配置复杂的寄存器。 LCD管脚复用配置的函数源码可以查看LCD.c。 8、LCD中断使用流程 三、操作现象1、硬件连接 (1)使用RS232交叉串口母母线和USB转RS232串口线连接实验板的UART2和电脑的USB口。 (2)连接仿真器和电脑的USB接口。 (3)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。 2、软件操作 (1)先在设备管理器查看串口的端口号, (2)再设置串口调试工具,波特率设置为115200。 3、CCS相关操作 导入工程 编译工程 将CCS连接开发板并加载程序 点击运行程序 查看现象,在LCD屏幕上点击触摸任意点可以描画,同时串口调试工具输出触摸相应的坐标值。 实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验板的连接,最后实验箱断电即可。
  • 热度 2
    2023-9-20 10:57
    1835 次阅读|
    0 个评论
    一、实验目的 了解FFT的作用,掌握FFT 算法的算法原理、计算量和算法特点,实现FFT算法并通过CCS图形窗口查看结果。 官方网站:www.tronlongtech.com 二、实验原理1、傅里叶变换 傅里叶变换可以将一个信号从时域变换到频域。时域信号在经过傅立叶变换的分解之后,变为了不同正弦波信号的叠加,我们再去分析这些正弦波的频率,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。 2、离散傅里叶变换 离散傅里叶变换作为信号处理中最基本和最常用的运算,在信号处理领域占有基础性的地位,如果直接按照离散傅里叶变换的公式进行计算,求出N点X(k)需要N^2次复数运算、N(N-1)次复数加法,当N很大时,运算量是非常大的,这对于实时处理是无法接受的。 3、FFT算法 傅里叶快速算法的提出,使傅里叶变换成为一种真正实用的算法。根据傅立叶变换的对称性和周期性,我们可以将DFT运算中有些项合并。 在计算机上进行的DFT,使用的输入值是时域的信号值,输入采样点的数量决定了转换的计算规模。变换后的频谱输出包含同样数量的采样点,但是其中有一半的值是冗余的,通常不会显示在频谱中,所以真正有用的信息是N/2+1个点。FFT算法的原理是通过许多小的更加容易进行的变换去实现大规模的变换,降低了运算要求,提高了与运算速度。FFT不是DFT的近似运算,它们完全是等效的,FFT的过程大大简化了在计算机中进行DFT的过程。 4、程序流程 程序流程设计中首先产生测试信号,接着确定FFT基和旋转因子,然后进行FFT和FFT逆变换运算,最后输出FFT结果 5、数字信号处理库 本实验中的FFT算法是基于TI提供的数字信号处理库完成的。 DSPLIB 包含优化的、C语言可调用的通用信号处理例程,用于计算密集型实时应用程序。 调用这些例程的运行速度比直接用C语言编写的等效代码快得多,可以缩短应用程序开发时间。实验中使用的是 dsplib_c674x_3_4_0_0 。 6、dsplib_c674x_3_4_0_0 在CCS5.5 的安装路径安装DSPLIB后,会有相应的文件夹出现,包含组件库、头文件、测试示例和源码等。 7、函数源码FFT运算函数 程序使用DSPLIB 的库来进行FFT运算,调用的程序源码和使用说明可以安装DSPLIB后 查看。 调用的FFT函数中: 第一个参数是样本中FFT 的长度; 第二个参数是指向数据输入的指针; 第三个参数是指向复杂旋转因子的指针; 第四个参数是指向复杂输出数据的指针; 第五个参数是指向包含64 个条目的位反转表的指针。如果样本的FFT长度可以表示为 4 的幂; 第六个参数是4,否则 第六个参数是 2 ; 第五个参数是从主FFT开始的样本中的子 FFT偏移索引 。; 第六个参数是样本中主FFT的大小。 FFT逆变换函数 程序使用DSPLIB 的库来进行FFT逆变换,调用的程序源码和使用说明可以安装DSPLIB后查看。 调用的IFFT函数中: 第一个参数是样本中FFT 的长度; 第二个参数是指向数据输入的指针; 第三个参数是指向复杂旋转因子的指针; 第四个参数是指向复杂输出数据的指针; 第五个参数是指向包含64 个条目的位反转表的指针 ; 如果样本的FFT长度可以表示为 4 的幂,第六个参数是4,否则第六个参数是2 ; 第七个参数是从主FFT开始的复杂样本中的子FFT偏移索引 ; 第八个参数是样本中主FFT的大小。 8、二进制位翻转 FFT和FFT 逆变换函数中的第五个参数brev是指向包含64个表项的位反转表的指针,因此程序中需要提供64个表项,程序中的位反向表是计算出来的,可以通过代码提前转换的。 采用位反转的原因是因为FFT算法的蝶形内部两点交叉使数据以反转的方式输出而不是数字反转顺序。 二进制位翻转表的原理 首先确认二进制数的位数,64个数只需要有6位的二进制位数; 接着将二进制数分成两部分,前五位一部分,最后一位一部分; 最后进行二进制翻转,把最后一位放到最高位,剩下的五位进行翻转依次放入。 数组内存放的依次是0~63的二进制翻转结果,我们可以来看一个例子, (点击鼠标)以数字5为例,(点击鼠标)转换为二进制数是000101 (点击鼠标)接着进行二进制翻转,将“00010”看为一个部分,“1”看为一个部分,那么将“1”放到第一位,然后将后面的数据翻转过来进行放置即可 (点击鼠标)最后进行十六进制转换得到0x28,所以在数组的第6个数字为0x28。 三、操作现象 导入工程,选择Demo文件夹下的对应工程 编译工程,生成可执行文件 将CCS连接实验箱并加载程序 程序加载完成后点击运行程序 运行程序后,程序执行完成后会在断点处停下。 Single Time"选择单时域信号图,在弹出的界面设置相关参数,可查看DSP计算的FFT结果。 FFT Magnitude",在弹出的界面设置相关参数,可查看CCS计算的FFT结果。 对比后,可发现CCS和DSP计算的FFT结果相同, 实验结束后,点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。
相关资源
  • 所需E币: 2
    时间: 2025-6-9 11:20
    大小: 3.27MB
    上传者: 电子阔少
    满满都是干货,基本是手把手式的教程,对新手小白非常有帮助。手把手保姆级教程零基础快速上手STM32开发
  • 所需E币: 0
    时间: 2025-6-5 16:52
    大小: 2.36MB
    上传者: nicholasyong
    Multisim10教程(强烈推荐给初学者
  • 所需E币: 1
    时间: 2025-6-2 09:05
    大小: 12.8MB
    上传者: 电子阔少
    KiCad5完_美_教程_kicad快速入门教程.pdf
  • 所需E币: 3
    时间: 2025-6-2 09:07
    大小: 11.83MB
    上传者: 电子阔少
    KiCad5快速入门教程.zip
  • 所需E币: 3
    时间: 2025-5-28 22:31
    大小: 73.38KB
    上传者: 电子阔少
    爬虫是门很有意思的技术,可以通过爬虫技术获取一些别人拿不到或者需要付费才能拿到的东西,也可以对大量数据进行自动爬取和保存,减少时间和精力去手动做一些累活。
  • 所需E币: 3
    时间: 2025-5-28 22:27
    大小: 713.44KB
    上传者: 电子阔少
    【干货】工业机器人编程教程-逻辑编程1、逻辑编程输入输出的设置是为了机器人与外设设备的通信,例如工具传感器等
  • 所需E币: 1
    时间: 2025-5-28 21:30
    大小: 5.37MB
    上传者: zhusx123
    嵌入式技术与应用开发项目教程:STM32版
  • 所需E币: 0
    时间: 2025-5-26 20:19
    大小: 24.69MB
    上传者: zhusx123
    CubeIDE使用教程
  • 所需E币: 0
    时间: 2025-4-2 10:23
    大小: 2.95KB
    上传者: huangyasir1990
    一、什么是区块链dapp开发?它能做什么?简单来说,区块链dapp开发是指利用区块链技术来开发分布式应用(dapp)。dapp是一种使用区块链技术构建的分布式应用,它具有更高的安全性和去中心化特性,可以用来建立加密的账本,以保证交易的安全性。区块链dapp开发有以下几个主要作用:1.安全性:dapp使用区块链技术记录信息和数据,并将其存储在一个加密的账本上,从而拥有更高的安全性,可以有效防止信息泄露和数据被篡改2.去中心化:dapp不受中心化系统的限制,不存在单点故障,更加稳定,可以提供更高的可用性。3.交易透明:dapp使用区块链技术记录完整的交易信息,使得交易更加透明,可以更好的保护用户的利益。二、DAPP的核心特征去中心化:没有中心服务器,数据存储在区块链上,由多个节点共同维护。开源:代码公开透明,任何人都可以审查和验证。激励机制:通常使用代币(Token)激励用户参与网络维护。智能合约驱动:业务逻辑由智能合约自动执行,减少人为干预。三、DAPP开发流程(1)确定项目需求明确DAPP的功能(如DeFi、NFT、DAO等)。确定目标用户群体(如投资者、游戏玩家、企业等)。选择合适的区块链平台(如以太坊、BSC、Solana等)。(2)选择区块链平台不同的区块链有不同的特点,开发者需要根据需求选择:以太坊(Ethereum):最成熟的智能合约平台,支持Solidity,但Gas费较高。币安智能链(BSC):兼容EVM(以太坊虚拟机),交易费用低,但中心化程度较高。Solana:高性能链,适合高频交易应用,但生态相对较新。Polygon(Matic):以太坊Layer2解决方案,降低Gas费。(3)智能合约开发智能合约是DAPP的核心逻辑,通常使用以下语言编写:Solidity(以太坊、BSC)Rust(Solana、Polkadot)Vyper(以太坊替代语言)四、DApp能实现的功能与应用场景DApp能够实现的功能多种多样,最典型的包括去中心化金融(DeFi)服务。通过DApp,用户可以无需银行等中介机构直接进行借贷(如AAVE)、交易(如Uniswap)或收益farming(如YearnFinance)。这些应用通过智能合约自动执行金融协议,大幅降低了信任成本和交易门槛。数字资产创建与管理是另一大应用领域。艺术家可以通过DApp发行NFT(非同质化通证),确保数字作品的真实性和所有权。游戏DApp如AxieInfinity允许玩家真正拥有游戏内资产,并能在开放市场中自由交易。去中心化自治组织(DAO)是完全由智能合约和社区投票管理的组织形态。通过DApp,成员可以透明地提出提案、投票表决并自动执行决策,如宪法DAO曾尝试集体竞拍美国宪法副本。供应链管理DApp能实现产品从原料到终端的全程溯源,如IBMFoodTrust帮助沃尔玛等零售商追踪食品来源。身份认证DApp如Microsoft的ION让用户掌控自己的数字身份,无需依赖中心化认证机构。五、编写智能合约智能合约是DApp的核心,它定义了应用的业务逻辑和数据交互规则。开发者使用Solidity等编程语言编写智能合约,并通过特定的工具进行部署。以下是编写智能合约的基本步骤:确定合约功能:首先,明确DApp的功能需求,确定智能合约的核心功能,例如资产转移、数据存储、用户认证等。编写合约代码:使用Solidity等智能合约语言编写合约代码。常见的开发框架包括Truffle、Hardhat等。测试与调试:通过测试网络(如Rinkeby、Ropsten等)进行合约的测试和调试,确保合约无漏洞且行为符合预期。审计:智能合约部署到主网之前,必须进行安全审计,确保代码无漏洞,避免潜在的安全风险。六、公链DApp开发公链DApp是指那些在开放、公有区块链(如以太坊、Polkadot、Solana等)上运行的去中心化应用。与传统的私有链或联盟链相比,公链提供了更加开放的环境,允许任何用户参与和访问。这使得公链DApp在去中心化金融、游戏、NFT等领域具有更大的吸引力。公链DApp开发流程:选择合适的公链平台:选择一个高效且支持智能合约的公链平台,如以太坊、BSC、Polkadot、Solana等。设计去中心化治理:公链DApp往往需要支持去中心化治理机制,让社区成员参与决策。例如,通过DAO(去中心化自治组织)来管理应用的发展方向和资金分配。跨链功能设计:考虑不同公链之间的互操作性,利用跨链协议实现资产的无缝流动。开发与部署:根据需求编写智能合约并部署到公链网络,开发前端应用,确保用户能够无缝访问和使用。安全性和可扩展性:公链DApp的成功不仅依赖于功能的实现,还需要保证系统的安全性和可扩展性,确保能够处理大量并发请求。推荐开发平台:Ethereum:最为成熟的智能合约平台,拥有庞大的开发者社区和丰富的开发工具。Polkadot:支持多链互操作性,适用于开发跨链应用。Solana:高吞吐量的区块链,适合需要低延迟和高交易量的DApp。
  • 所需E币: 5
    时间: 2025-2-18 15:11
    大小: 671B
    上传者: 二月半
    25年DeepSeek本地部署视频教程和全套安装包
  • 所需E币: 0
    时间: 2024-11-20 17:21
    大小: 10.11MB
    上传者: 明星
    《高等代数自学教程》(上册,贺昌亭主编,1983年)★经典教材
  • 所需E币: 1
    时间: 2024-8-19 16:10
    大小: 14.14MB
    上传者: milktea88
    第1章物联网与RFID技术第2章RFID系统的基本构成第3章物联网RFID系统架构第4章RFID使用的频率及电磁波的工作特点第5章天线基础第6章RFID中的天线技术第7章RFID电感耦合方式的射频前端第8章RFID电磁反向散射方式的射频前端 第9章编码与调制第10章数据的完整性与数据的安全性第11章电子标签的体系结构第12章读写器的体系结构第13章物联网RFID中间件第14章物联网RFID标准体系第15章物联网RFID在交通运输领域的应用第16章物联网RFID在制造与物流领域的应用第17章物联网RFID在防伪和公共安全领域的应用
  • 所需E币: 1
    时间: 2024-8-20 18:12
    大小: 14.84MB
  • 所需E币: 1
    时间: 2024-6-20 15:07
    大小: 6.32MB
    xilinx的zynq教程入门级,很实用
  • 所需E币: 5
    时间: 2024-6-20 15:17
    大小: 43.91MB
    zynq的sdk教程,很实用
  • 所需E币: 0
    时间: 2024-5-24 17:08
    大小: 2.93KB
    一、PyQT的概念PyQt是一个创建PythonGUI应用程序的工具包,是Qt和Python结合的一个产物,可以说是为了将Qt的功能用于Python开发的一个Qt的Python包装器。它是Python编程语言和Qt库的成功融合。PyQt的整个程序开发框架,主要包括如下部分:图形界面编辑的工具:QtDesigner不同部分信息交换机制:信号和槽界面操作的事件及捕获机制一套控制界面显示和数据存储分离以及映射的机制:Model/View架构通过这些重要的工具和框架机制,开发人员可以设计对应的GUI图形化界面、定义不同部件的操作及响应、捕获部件或应用的消息以及实现界面显示组件和数据存储组件的联动,从而构造完整的应用程序框架。PyQt实现了一个Python模块集。它有超过300类,将近6000个函数和方法。它是一个多平台的工具包,可以运行在所有主要操作系统上,包括UNIX,Windows和Mac。PyQt采用双许可证,开发人员可以选择GPL和商业许可。在此之前,GPL的版本只能用在Unix上,从PyQt的版本4开始,GPL许可证可用于所有支持的平台。二、OpenCVOpenCV项目最初由Intel于1999年启动,当时的目标是提供一个免费的计算机视觉库,并开放其源代码,以促进计算机视觉研究的发展。随后,OpenCV在2000年发布了第一个公开版本,从那时起,OpenCV迅速成为了计算机视觉领域最受欢迎的库之一。后来,OpenCV的开发由WillowGarage公司继续,随后由Itseez公司接管,直到今天,OpenCV的开发由OpenCV开发团队维护。核心功能和模块:OpenCV库包含了众多的模块,每个模块都提供了不同的功能,以下是一些核心的模块:2.1核心功能模块(CoreModule)这个模块提供了基本的数据结构和功能,包括图像数据类型、矩阵操作、文件IO等。图像操作:读取和保存图像:可以使用imread()函数读取图像文件,使用imwrite()函数保存图像到文件。图像属性访问:可以通过Mat对象的属性访问功能获取图像的尺寸、通道数、数据类型等信息。像素操作:可以直接访问和修改图像的像素值,或者使用像素迭代器遍历图像。图像通道操作:可以将多通道图像拆分成单通道图像,或者将单通道图像合并成多通道图像。创建矩阵:可以使用Mat类的构造函数或create()函数创建矩阵。矩阵运算:支持常见的矩阵运算,如加法、减法、乘法等。矩阵转换:可以对矩阵进行转置、仿射变换、透视变换等操作。2.2图像处理模块(ImageProcessingModule)OpenCV的图像处理模块提供了各种图像处理算法,包括图像滤波、边缘检测、图像变换等。这些算法可以帮助用户对图像进行预处理、增强、分析和特征提取等操作。下面是图像处理模块中常用的功能和算法:图像滤波(ImageFiltering):平滑滤波(SmoothingFilters):如均值滤波、高斯滤波、中值滤波等,用于去除图像中的噪声。锐化滤波(SharpeningFilters):如拉普拉斯滤波器、Sobel滤波器等,用于增强图像的边缘和细节。图像变换(ImageTransformations):几何变换(GeometricTransformations):如平移、旋转、缩放、仿射变换等,用于调整图像的尺寸和位置。透视变换(PerspectiveTransformation):用于校正图像中的透视失真。边缘检测(EdgeDetection):Sobel算子:Sobel算子通常用于灰度图像的边缘检测,其基本思想是利用图像中像素灰度值的变化情况来识别边缘。Sobel算子在水平和垂直方向上分别定义了两个卷积核(通常为3x3的矩阵),用于计算图像中每个像素点的水平和垂直方向的梯度值。Canny边缘检测:首先,对输入图像进行高斯滤波,以减少图像中的噪声。高斯滤波可以平滑图像,并模糊图像中的细节,从而有助于检测到真实的边缘。在经过高斯滤波的图像上,利用Sobel算子或其他梯度算子计算图像的梯度幅值和梯度方向。梯度方向可以帮助确定边缘的方向。对图像中的梯度幅值进行非极大值抑制,保留局部梯度幅值最大的像素点,以使得边缘变得更细化。利用双阈值检测策略对梯度幅值进行阈值处理,将图像中的像素点分为强边缘、弱边缘和非边缘三类。通常设置两个阈值,一个是高阈值(highthreshold),用于确定强边缘像素;另一个是低阈值(lowthreshold),用于确定弱边缘像素。通过连接强边缘像素,利用弱边缘像素进行边缘跟踪,得到完整的边缘。三、人工智能应用人工智能在生活中的应用有:1、虚拟个人助理,使用者可通过声控、文字输入的方式,来完成一些日常生活的小事;2、语音评测,利用云计算技术,将自动口语评测服务放在云端,并开放api接口供客户远程使用;3、无人汽车,主要依靠车内的以计算机系统为主的智能驾驶仪来实现无人驾驶的目标;4、天气预测,通过手机gprs系统,定位到用户所处的位置,在利用算法,对覆盖全国的雷达图进行数据分析并预测。
  • 所需E币: 4
    时间: 2024-6-16 06:55
    大小: 30.57MB
    上传者: HanSom
    软考高级职称系统架构设计师教材,2023最新改版。
  • 所需E币: 0
    时间: 2024-6-5 15:12
    大小: 2.76KB
    一、前言在Kubernetes(K8s)中,Pod是最小的可调度单元。当Spark任务运行在K8s上时,无论是Driver还是Executor都由一个单独的Pod来表示。每个Pod都被分配了一个唯一的IP地址,并且可以包含一个或多个容器(Container)。Driver和Executor的JVM进程都是在这些Container中启动、运行和销毁的。当一个Spark作业被提交到K8s集群后,首先会被启动的是DriverPod。然后,Driver负责按需向Apiserver请求创建ExecutorPods。Executor负责执行具体的Task。一旦作业完成,Driver将负责清理所有已创建的ExecutorPods。二、在将Spark任务提交到K8s集群上时,不同的公司可能会采取不同的方法。以下是目前常见的几种做法以及我们在线上所采用的任务提交和管理方式。1、使用原生spark-submit原生的spark-submit命令可以直接提交作业,集成起来简单且符合用户习惯。然而,这种方法不便于作业状态跟踪和管理,无法自动配置SparkUI的Service和Ingress,并且在任务结束后不能自动清理资源。因此,在生产环境中并不适合使用这种方式。2、使用spark-on-k8s-operator这是目前较常用的一种提交作业方式,需要先在K8s集群中安装spark-operator。客户端通过kubectl提交yaml文件来运行Spark作业。本质上,这是对原生方式的扩展,提供了作业管理、Service/Ingress创建与清理、任务监控、Pod增强等功能。尽管此方法可在生产环境中使用,但它与大数据调度平台的集成性较差,对于不熟悉K8s的用户来说,学习曲线较为陡峭。3、使用spark-k8s-cli在我们的生产环境中,我们使用spark-k8s-cli来提交任务。spark-k8s-cli是一个可执行文件,基于阿里云emr-spark-ack提交工具进行了重构、功能增强和深度定制。它融合了spark-submit和spark-operator两种作业提交方式的优点,所有作业都能通过spark-operator管理,并支持交互式spark-shell和本地依赖的提交。同时,它的使用方式与原生spark-submit完全一致。三、sparkonk8s的优点和缺点优点:1.资源隔离:SparkonKubernetes可以更好地管理资源,实现资源隔离,避免不同应用之间的资源竞争。2.灵活性:Kubernetes支持弹性伸缩,可以根据应用的需求自动扩容或缩容。3.易于部署:使用Kubernetes集群部署Spark应用更加简单方便,不需要手动管理集群资源。缺点:1.性能开销:在Kubernetes上运行Spark会带来一定的性能开销,相比传统的YARN或Mesos部署方式可能会有性能损失。2.学习成本:需要对Kubernetes和Spark有一定的了解,对于初学者来说可能需要花费一定时间学习。3.依赖外部组件:可能需要额外的监控和调优工具来对Spark应用进行管理,增加了系统的复杂度。四、Spark的集群部署模式Spark官方提供了四种集群部署的模式:Standalone、YARN、Mesos、Kubernetes。Standalone需要常驻Master服务和Worker服务。它作为资源调度,只能去调度Spark做作业。同时它需要每个节点预先准备好Spark运行时环境,所以不太适合生产环境使用。YARN在传统的大数据体系下是一个比较好的调度器。它不需要常驻Spark相关的服务,YARN的容器内其实也是可以进行任何作业的,但是需要每个节点去事先准备好运行时环境,YARN其实是更贴近于我们的传统Hadoop生态,它也有一些调度上的优化,比如计算时会尽可能地去找数据所在的HDFS节点,不过在我们云原生的场景下就不太适用了。Mesos在Spark3.2版本后已经被标记为弃用了,所以我们就不过多谈它。Kubernetes也是无需常驻Spark相关服务,支持容器化运行任何作业,也不需要依赖节点运行时环境,它是更贴近于云原生生态的。五、Sparkonk8s如何运行首先Spark有一个客户端,客户端会构建好driverpod对象,向K8s的apiserver发送请求,去创建driverpod,Spark的driver进程运行在driverpod当中。Sparkdriver启动之后,会在driver内构建executorpod的对象,创建executorpod,并持续watchandlist去监听每一个executorpod的状态。当任务运行结束的时候,executorpod会被清理,driverpod会继续以completed的状态存在。这就是SparkonK8s的运行过程。六、关于spark配置使用spark难免会需要一些hdfs、hive-metastore等配置、xml等,把这些配置打到镜像里显然可以,但很不灵活。本地spark-submit进程创建pod时会将本地的spark配置作为configMap挂在到pod中,所以只要维护好本地提交的spark环境即可,可以先通过kubectldescribe pod**来找到对相应的configMap,然后通过kubectldescribe configmap来确认配置
  • 所需E币: 0
    时间: 2024-6-3 14:35
    大小: 2.51KB
    Qt对OpenGL的支持是内建的,也就是说,只要你的Qt版本支持OpenGL,你就可以在你的Qt应用程序中使用OpenGL,无需额外安装OpenGL。然而,要在你的Qt应用程序中使用OpenGL,你的系统需要有一个支持OpenGL的图形驱动。这通常意味着你需要在你的系统上安装一个支持OpenGL的图形卡驱动。大多数现代的桌面系统(包括Windows、macOS和大多数Linux发行版)都自带了支持OpenGL的图形驱动,所以你通常不需要手动安装。如果你的系统没有支持OpenGL的图形驱动,或者你的图形驱动不支持你需要的OpenGL版本,你可能需要手动安装一个新的图形驱动。这通常涉及到从你的图形卡制造商的网站下载驱动程序,并按照他们的指示进行安装。请注意,虽然Qt支持OpenGL,但并不是所有的Qt功能都需要OpenGL。大多数Qt功能(包括QtWidgets和QtQuick2D)都可以在没有OpenGL的系统上运行。只有一些特定的功能(如QtQuick3D和一些Qt3D功能)需要OpenGL。一、Vulkan和OpenGL区别Vulkan和OpenGL区别,Vulkan与OpenGL相比,可以更详细的向显卡描述你的应用程序打算做什么,从而可以获得更好的性能和更小的驱动开销。Vulkan的设计理念与Direct3D12和Metal基本类似,但Vulkan作为OpenGL的替代者,它设计之初就是为了跨平台实现的,可以同时在Windows、Linux和Android开发。甚至在MacOS系统上,Khronos也提供了Vulkan的SDK,虽然这个SDK底层其实是使用MoltenVK实现的。Vulkan的最大任务不是竞争DirectX,而是取代OpenGL,所以重点要看和后者的对比。在高分辨率、高画质、需要GPU发挥的时候,Vulkan、OpenGL的速度基本差不多,但是随着分辨率的降低,CPU越来越重要,Vulkan逐渐体现了出来,尤其是看看GTX980Ti,最多可以领先OpenGL33%之多!二、OpenGL对象我们可以把OpenGL对象理解成一个状态的集合,它负责管理它下属的所有状态。当然,除了状态,OpenGL对象还会存储其他数据。注意。这些状态和上述context中的状态并不重合,只有在把一个OpenGL对象绑定到context上时,OpenGL对象的各种状态才会映射到context的状态。因此,这时如果我们改变了context的状态,那么也会影响这个对象,而相反地,依赖这些context状态的函数也会使用存储在这个对象上的数据。因此,OpenGL对象的绑定既可能是为了修改该对象的状态(大多数对象需要绑定到context上才可以改变它的状态),也可能是为了让context渲染时使用它的状态。三、OpenGL的工作方式首先,OpenGL一开始最难理解的部分我觉得在于创建整个程序上。虽然我已经有一些图形学基础,但是拿到OpenGL的时候完全是懵逼的,因为完全不知道其程序的运作方式。所以在这里,我觉得最先需要解释的就是OpenGL的整体工作方式:OpenGL是一个状态机,因此,其工作方式来自于上下文环境的切换,或者说是设定当前上下文环境(Context)。因此,不论是创建的shader,还是VAO,VBO,都是需要创建之后绑定进入当前上下文的。四、学习OpenGL常见难点: 难点1:不知道如何将单个例子,结合成一个完整的渲染引擎  难点2:不能把Shader和CPU的流程联立在一起,不知道某个资源/数据,是从哪里来的。就算知道他是什么时候送到GPU的,也不知道GPU如何定位某个资源/数据。  难点3:难以建立起并行计算的思维方式  难点4:难以理解各种模板如何在多个批次之间发生作用。不能具象的去理解混合,测试的过程。不能够理解,FrameBuffer的真正含义。  难点5:难以建立起空间想象,不知道矩阵变换,如何将顶点,或其他数据,变换到不同的空间进行统一计算。  难点6:难以理解从Vertex到Fragment是如何过度的。 五、构建OpenGL程序1、在项目的根目录下创建buildmkdirbuildcdbuild2、执行cmake指令,指定要构建的文件系统和使用的编译器cmake..-GNinja-DCMAKE_C_COMPILER=clang-DCMAKE_CXX_COMPILER=clang++3、执行ninjaninja编译完成之后就可以在build目录下找到可执行程序了,能够正常运行就说明OpenGL的开发环境搭建完成。
  • 所需E币: 0
    时间: 2024-5-20 14:19
    大小: 2.41KB
    上传者: 开心就很好了
    一、Playwright简介微软开源自动化测试工具Playwright,支持主流浏览器,包括:Chrome、Firefox、Safari等,同时支持以无头模式、有头模式运行,并提供了同步、异步的API,可以结合主流测试框架使用,并且支持浏览器端的自动化脚本录制等功能。二、playwright特性1、支持所有主流浏览器支持所有主流浏览器:基于Chromium内核的GoogleChrome和MicrosoftEdge浏览器),WebKit内核的AppleSafari和MozillaFirefox浏览器,不支持IE11。跨平台:Windows、Linux和macOS可用于模拟移动端WEB应用的测试,不支持在真机上测试。支持无头模式(默认)和有头模式 2、快速可靠的执行自动等待元素Playwright基于Websocket协议,可以接受浏览器(服务端)的信号。selenium采用的是HTTP协议,只能客户端发起请求。浏览器上下文并行:单个浏览器实例下创建多个浏览器上下文,每个浏览器上下文可以处理多个页面。有弹性的元素选择:可以使用文本、可访问标签选择元素。3、强大的自动化能力playwright是一个进程外自动化驱动程序,它不受页面内JavaScript执行范围的限制,可以自动化控制多个页面。强大的网络控制:Playwright引入了上下文范围的网络拦截来存根和模拟网络请求。现代web特性:支持ShadowDOM选择,元素位置定位,页面提示处理,WebWorker等WebAPI。覆盖所有场景:支持文件下载、上传、OOPIF(out-of-processiframes),输入、点击,暗黑模式等。三、同步和异步APIPlaywright支持同步和异步两种API,使用异步API需要导入asyncio库,它是一个可以用来实现Python协程的库,更详细介绍可参考Python协程。下面介绍如何使用python语言编写简单的playwright自动化脚本。一共有2条测试用例,用例1步骤如下:chrome浏览器打开百度搜索框输入“test”点击百度一下搜索点击搜索结果的第2页用例2步骤:chrome浏览器打开搜狗搜索搜索框输入“test”点击搜狗搜索点击搜索结果的第2页四、连接现有浏览器除了创建新的浏览器实例,Playwright还支持连接到一个已经存在的浏览器实例,这在许多浏览器自动化应用场景中非常有用。例如,可以在已经登录到需要双因素身份验证的帐户或者已经完成了一些手动操作的浏览器中继续自动化程序,或者将控制权交还给手动操作。让我们来看一下如何连接已经存在的Chrome浏览器。首先,我们需要打开Chrome浏览器的调试开关,这可以通过传递--remote-debugging-port参数来实现。在Windows上,你可以在命令提示符下运行以下命令:"C:\ProgramFiles\Google\Chrome\Application\chrome.exe"--remote-debugging-port=9222接着,在打开的浏览器的地址栏中输入:127.0.0.1:9222/json/version五、安装有两种方法来安装该软件。第一种方法是使用Node.js包管理器,如npm。如果选择这种方法,需要在电脑上安装Node.js。对于其他语言,Python使用pypi,Java使用Maven,C#可以使用"dotnetaddpackage"等.NETCLI命令来安装playwright的依赖项。第二种方法是安装VSCode的playwright扩展,它带有方便的安装命令。这种方法能够让整个过程更顺畅、更容易。Playwright的第一个特点(跨浏览器、跨平台和跨语言支持),我们可以说,它支持所有现代浏览器,在任何平台上都没有真正的限制。虽然它也支持流行的语言和技术,但支持的最好的语言是Typescript/Javascript。例如,如果你想在Java中使用Playwright,你需要选择你喜欢的测试运行器,如JUnit,并管理Playwright对象,如BrowserContext和Page。此外,你还需要为HTML报告找到一个解决方案。