Dueling DQNDueling DQN是对DQN网络进行改进:将最优动作价值分解为最优价值加最优优势最优优势函数:对决网络:Q网络建模:其中:是状态价值函数;是该状态下采取不同动作的优势函数表征的是采取不同动作的差异性。:是状态价值函数和优势函数共享的网络参数,一般为神经网络用来提取特征的前几层;是各自的参数解决不唯一性对于同样的Q值:如果将V值加常数C,A值减去常数C,其结果不会发生变化为了解决这个问题:强制Dueling DQN的最优动作的优势函数的实际输出为0:实际操作中,使用平均代理最大化操作:为什么Duelinng DQN会比DQN好?原论文里写...
double DQN解决问题对Q值的过高估计double DQNTD target:TD target可以拆成两步:**选择:**基于状态选择一个动作使DQN最大化:**求值:**计算的价值,从而计算TD target:对于原始DQN,选择和求值使用同一Q网络:对于带目标网络的DQN:选择使用目标网络,求值使用目标网络。对于double DQN:选择使用Q网络,求值使用目标网络。总结:选择求值高估偏差原始Q学习DQNDQN严重Q学习+目标网络目标网络目标网络较严重double DQNDQN目标网络不严重实验环境本次采用的环境是Pendulum,该环境下有一个从随机位置开始的钟摆,钟摆向上保持直立时奖励为 0,钟摆...
TD算法-Q-LenrningQ-learning是对最优动作价值进行更新TD targetTD error更新$和sarsa算法不同的是,Q-learning是近似sarsa算法近似具体算法初始化不断进行N次如下循环(N代表episode的个数):用策略根据Q选择当前转态下s的动作a得到环境反馈的r,更新得到初始状态不断进行如下循环直到终止状态(每个循环是episode的每一步):在线策略和离线策略行为策略(behavior policy):采样数据的策略为行目标策略(target policy):用采样数据来更新的策略线策略(on-policy):行为策略和目标策略是同一个策略离线策略(off-policy):是行为策略和目标...
时序差分算法--Sarsa算法强化学习中两大经典算法:Sarsa 和 Q-learning,它们都是基于时序差分的强化学习算法。基于时序差分的算法不需要事先知道环境的状态转移函数和奖励函数,而直接使用和环境交互采样到的数据即可。时序差分(Temporal Difference)方法时序差分方法是一种用来估计一个策略的价值函数的方法。TD target :TD error:更新状态奖励其中:是学习率Sarsa算法Sarsa算法的目的:学习动作价值函数动作的选择:策略:有的概率采用动作价值最大的那个动作,另外会有的概率从动作空间中随机采取一个动作。公式表示为sarsa算法的来源:它的...
多臂老虎机:Multi-Armed Bandit来源动手学强化学习:http://hrl.boyuai.com/chapter/1/%E5%A4%9A%E8%87%82%E8%80%81%E8%99%8E%E6%9C%BA问题有一个拥有K根拉杆的老虎机,每一个拉杆都对应一个关于奖励的概率分布R。我们每次拉下其中一根拉杆,就可以获得一个从该拉杆对应的奖励概率分布中获得一个奖励r.目标:在各个拉杆奖励的概率分布未知的情况下,从头开始尝试,并在操作T次拉杆后,获得尽可能多的累积奖励。建立多臂老虎机实现一个多臂老虎机,拉杆数为10,奖励服从伯努利分布#导入库import numpy as npimport matplotlib.pyplot as pltcl...
最新版本发布时间:2016年5月4日发布VO2 Library v2.0.2,RVO2-3D Libraryv1.0.1介绍下载文档What Is New in RVO2 Library编译 RVO2 LibraryUsing RVO2 LibraryExample Programs介绍共享一个公共工作空间的多个agent的模拟最近越来越受到关注,用于各种环境,例如人群模拟、多移动机器人导航、视频游戏、研究自然群聚行为、交通工程、建筑和设计、应急训练模拟等。我们提出了一种算法,用于在二维(拥挤)环境中对大量agent进行交互式导航和规划。在运行时,每个代理独立感知环境并根据ORCA算法。我们的算法确保每个agent都不会表现出振荡行为。RVO2...
opencv 场景文字识别目标API场景文字检测:` cv::dnn::TextDetectionModel`场景文字识别:`cv::dnn::TextRecognitionModel `模型和数据准备TextDetectionModel:TextRecognitionModel:场景文字检测example场景文字识别example总结不足前言opencv4.5版本以上在CNN模块中加入场景文字识别的高级API目标利用opencv OCR的高级API实现对场景中所有中英文进行检测和识别API场景文字检测:cv::dnn::TextDetectionModelcv::dnn::TextDetectionModel支持以下算法:DB模型:cv::dnn::TextDetectionModel_DBEAST模型:cv::dnn::TextDetectionModel_EAST场景文字...
ROS机器人-为仿真模型添加控制器和传感器前言目标小车模型重建修复模型在gazebo中自我滑动的问题添加差速控制器1. 添加传动装置2. 添加gazebo控制器插件添加雷达传感器待解决的问题前言上次利用SolidWorks建立了小车的仿真模型,走了下从SolidWorks到ROS仿真模型的流程。到目前为止,该模型存在以下问题:模型在gazebo中存在自我滑动的现象该模型在gazebo为静态,无法接受速度指令该模型缺少传感器目标要想利用gazeb仿真环境完成地图构建和导航,需要gazebo中的仿真模型提供tf:坐标变换 , odom:里程计信息 , ladar:雷达信息 。本次将完善模型,为...
嵌入式AI实践--基于RT-PI识别“石头剪刀布”背景和实践目标结果展示软硬件介绍RT-PiAI转换工具:RT-AK模型搭建和训练数据集读取和处理神经网络搭建模型的训练和测试模型量化嵌入式端部署嵌入式端模型部署总结背景和实践目标 在人工智能迅猛发展的当下,AI部署也从PC端逐步下移到嵌入式端。所谓的嵌入式AI,则是一种让 AI 算法可以在终端设备上运行的技术概念。当然,嵌入式设备受算力的限制,不能像PC机一样同时完成AI模型的训练和推理。一般是利用PC机完成AI模型的训练、嵌入式端完成AI模型的推理。 本次嵌入式AI实践的目标则是利用RT-Thread出的RT...
视觉SLAM14讲-Eigen库使用Eigen是一个用于矩阵运算的跨平台C++库。Eigen库被分为一个Core模块和其他一些模块,每个模块有一些相应的头文件。为了便于引用,Dense模块整合了一系列模块;Eigen模块整合了所有模块。Eigen库中的常用函数 头文件包含#include<eigen3/Eigen/Core>#include<eigen3/Eigen/Dense>矩阵定义 Matrix<double,3,3> matrix_d_33; //定义3*3 doubble型矩阵 Matrix3d m_d_33 ; //定义3*3 doubble型矩阵 Vecto...
ROS shell 命令roscd:移动ROS目录rosls:ROS文件列表rosed:ROS编辑命令ROS执行命令roscore:运行roscorerosrun:运行ROS节点roslaunch:运行多个ROS节点rosclean:检查及删除ROS日志ROS信息命令rosnode:ROS节点rostopic: ROS话题rosservice:ROS服务rosparam:ROS参数rosmsg: ROS消息信息rossrv:ROS服务信息rosbag:ROS日志信息ROS catkin命令ROS功能包命令ROS shell 命令ROS shell命令又被称为rosbash,这使我们可以在ROS开发环境中使用Linux中常用的bash shell命令。roscd:移动ROS目录roscd [功能包名称]这是一个移动到保存有功能包的目录的命令rosls:ROS...
ros术语ROS主节点:master节点:node功能包:package元功能包:matepackage消息:message话题:topic发布和发布者:publisher订阅与订阅者:subscriber服务服务器:service server服务客户端:service client动作:action动作服务器:action server动作客户端:action client参数:parametercatkinroscorerosrunroslaunchbag状态图:graph客户端库:client libraryXMLCmakeList.txtpackage.xml消息通信话题:topic服务:service动作:action参数:parameter消息:messagemsg文件srv文件action文件坐标变换:TF文件系统用户工作目录修改功能包配置文件...
对于从事嵌入式开始的朋友来说,面对代码调试时往往都少不了要看很多的运行数据,从运行数据中分析系统故障或者查找代码Bug。特别是做下位机调试时往往都会通过多种手段将一些数据打印出来查看,分析问题。一般常用的手段是通过串口的方式将下位机的数据发出,然后通过数据分析定位问题。但是串口发出的数据一般也就是字节、字符之类的信息,对于数据量大的时候进行分析也是很麻烦的。如果说能有一种手段将串口发送出来的数据按照波形的方式进行显示,那不就可以很直观的看到数据的变化趋势了嘛,那调试岂不是事半功倍嘛!特别是在PID调参、ADC采样...
前言:本文为手把手教学ADC采样及各式滤波算法的教程,本教程的MCU采用STM32F103ZET6。以HAL库的ADC采样函数为基础进行教学,通过各式常见滤波的实验结果进行分析对比,搭配VOFA+工具直观的展示滤波效果。实验效果图:一、ADC采样1.1 ADC简介单片机是数字芯片,只认识由0和1组成的逻辑序列。但实际情况下,生活中还有许多非0和1的模拟物理量存在,例如温度,湿度等。这时候往往需要使用到AD转换,AD转换的英文就是Analog(模拟) to Digital(数字) ,由模拟量转化为数字量;同理DA,则为Digital to Analog,数字量转化为模拟量。ADC,Analog to Digita...
对于51单片机相信很多电子信息或者相关专业的朋友应该都不会感觉陌生,很多专业在大学课程中开设的单片机课程就是使用的51单片机进行授课和学习的。51单片机的内容相较于其他高性能复杂的单片机来说,架构相对简单一些,寄存器也少很多,作为新手入门学习是很有好处的,不用一上来就啃很复杂的东西,有助于培养学习的兴趣和达到快速入门的作用。以前学校学习常见的单片机:也许很多朋友都有接触过不少的单片机,甚至从事相关开发工作的朋友使用单片机的频率还是相当的高的。但是如果要问你一个问题:什么是单片机?你能回答的出来吗?这点我估计很多...
对于51单片机相信很多电子信息或者相关专业的朋友应该都不会感觉陌生,很多专业在大学课程中开设的单片机课程就是使用的51单片机进行授课和学习的。51单片机的内容相较于其他高性能复杂的单片机来说,架构相对简单一些,寄存器也少很多,作为新手入门学习是很有好处的,不用一上来就啃很复杂的东西,有助于培养学习的兴趣和达到快速入门的作用。以前学校学习常见的单片机:也许很多朋友都有接触过不少的单片机,甚至从事相关开发工作的朋友使用单片机的频率还是相当的高的。但是如果要问你一个问题:什么是单片机?你能回答的出来吗?这点我估计很多...
嵌入式开发中adc是很常用的一个外设了,它常常用于将模拟量的信号转化为数字量,再用于MCU中进行其他的逻辑处理,所以对于采集的信号就要求稳定和准确。 用过adc的朋友都知道,adc采集到数据不仅取决于adc本身,还跟输入的信号有关有关。输入的信号稳定与否、信号夹带的干扰、噪声等因素都会影响adc最终的转换结果。所以对于adc采集的数据往往要进行一些滤波处理,尽可能的消除信号中的一些误差。滤波算法在这个时候就派上很大的用场了,掌握一些常用的滤波算法是很有必要的。 下面分享一些adc中处理数据中常用的滤波...
不知道大家有没有这样一种感觉,就是感觉自己玩单片机还可以,各个功能模块也都会驱动,但是如果让你完整的写一套代码,却无逻辑与框架可言,上来就是开始写!东抄抄西抄抄。说明编程还处于比较低的水平,那么如何才能提高自己的编程水平呢?学会一种好的编程框架或者一种编程思想,可能会受用终生!比如模块化编程,框架式编程,状态机编程等等,都是一种好的框架。今天说的就是状态机编程,由于篇幅较长,大家慢慢欣赏。那么状态机是一个这样的东东?状态机(state machine)有5个要素,分别是1)状态(state)2)迁移(transition)3)事件(event)4)动...
Modbus是应用层上的协议,还是一种主从的通信协议,通信过程按照一定的协议规则进行,数据的交互也是有固定的格式的。总的来说,Modbus是有着明确且固定的数据模型的,并且通信过程中的数据交互识别是要按照功能码进行的。接下来会介绍Modbus的数据模型、寄存器和功能码。1. Modbus的数据模型数据模型简单而言就是数据在协议传输数据过程中的表达形式。数据模型还是协议中约定的对从站设备的可访问数据的一种抽象,Modbus中的数据模型有以下四种:从上图中可以看到,线圈和离散输入都是布尔型的量,所以对这个两个数据类型的访问只能以bit的方式进...
前面已经分析过RTU帧和ASCII帧的报文区别,细心的朋友应该会发现在两种不同的报文传输模式下都有一个共同的组成部分——差错校验。这个差错校验在RTU模式和ASCII模式下也不是不相同的。看下面的对比:RTU模式的差错校验:ASCII模式的差错校验:总而言之,RTU模式下用的是CRC校验,ASCII模式下用的是LRC校验。下面会说明这两者不同的校验方式是怎么实现的。1、RTU模式的CRC校验在 RTU 模式中基于循环冗余校验 ( CRC - - Cyclical RedundancyChecking) 算法的错误检验域。CRC 域检验整个报文的内容。不管报文有无奇偶校验,...
首先我们要清楚:Modbus是一种串行链路上的主从协议,在通信线路上只能有一个主机存在,不会有多主机存在的情况。虽然主机只有一个,但是从机是可以有多个的。Modbus的通信过程都是由主机发起的,从机在接收到主机的请求后再进行响应,从机不会主动进行数据的发送。并且从机之间也不会互相发送数据。1、Modbus的地址规则Modbus中的每个从机为了能在通信时被主机识别,都会有一个地址,也称为从节点地址。从节点地址对从设备而言必须是唯一的,在总线上也只能有唯一的一个设备地址,即从机设备的地址在总线上也不能冲突。从机是有唯一的设备地址的,...
Modbus协议是应用非常广泛的一种通信协议规约,也是最早应用在工业现场的协议。早在1979年出现工业串行链路以来,Modbus的应用就开始普遍起来,它使得各种自动化设备之间的互相通信得到实现,做嵌入式产品开发的朋友应该不会陌生,Modbus的身影是随处可见的。并且在中国Modbus都已经形成了规范的标准,都有相应的国标的文件可以查阅到的。有兴趣的朋友可以查阅标准文件:GBT 19582.1-2008 基于Modbus协议的工业自动化网络规范 第1部分:Modbus应用协议》《GBT 19582.2-2008 基于Modbus协议的工业自动化网络规范 第2部分:Modbus协议在串行链路上的...
前面的文章已经针对PID进行过分析:PID是比例、积分、微分的三种控制方式组合成的控制算法的称谓。在使用PID算法进行控制的时候,难点往往都不是怎么样去用代码实现,而是PID控制器的参数整定。PID参数整定是非常关键的,这些参数的设置影响了PID控制算法的快速性、稳定性。所以正确地理解PID各参数的实际物理意义,对PID控制来说是非常重要的。对PID的理解还是与锅炉加热系统的温度控制来加以说明。对锅炉而言,我们不考虑其他的控制功能和附加因素,就以控制温度稳定在我们期望值而言对PID控制算法进行剖析。1、 比例控制起什么作用?假设锅炉系...
最近在做项目,需要用到ubuntu进行代码编译生成可执行文件,但是我个人阅读和编写代码喜欢用source insight这个软件IDE。安利一下这个软件,阅读代码和编辑代码真的很棒啊,谁用谁知道吧!由于在ubuntu中安装source insight比较麻烦,这个软件本身也没有linux版本的,但是我又想ubuntu中的代码可以在windows中打开来阅读和编写,那怎么办呢?这种情况下需要建立ubuntu和windows之间的文件互相传输的方式。这个前面的文章其实也有讲过,现在重新整理一遍吧。我所知道的方式可以有以下几种:(1)ubuntu搭建ftp服务器,在windows上安装ftp客户端,可以...
使用串口进行数据的收发在嵌入式产品中是很常用的一种通信方式,因为串口的简单使用,很容易就被选为产品中数据交互的通信手段。基于串口进行开发的功能有很多,比如同类/不同类产品之间的通信,RS485通信,RS232通信方式,实现串口命令行终端用于调试等等的。虽然应用的场景有所不同,但是都会涉及到一个共同的问题:怎么确保收到一帧完整的数据?使用过串口的朋友都会知道,串口收发数据都是按照串行的方式进行的,数据是按照bit的方式一位一位进行发送的。而且发送数据方想要发送的数据长度不一定是固定的,有可能长有可能短,这就会涉及到怎么识...
PID算法广泛的被应用在很多的控制系统中,最终的目的都是希望通过pid控制器实现被控量能稳定在预期的目标值。使用pid控制器作用于系统的时候,正常情况下它应该是不断的发生作用的,从而让系统能够克服外部带来的干扰最终稳定在期望值。所以对于在一个系统中使用pid进行调节控制的时候,我们是很有必要了解一些有关控制系统的概念和指标的。同时既然选择了使用pid作用系统的控制器,那么有关pid的特性和指标也是有必要掌握的。(1)系统的状态:动态和静态一个控制系统的状态可以分为两种:静态和动态。静态:如果一个系统通过调节之后,各个环节都...
PID控制算法是自动控制中的一个非常典型且重要的算法,可以明确的说,对于学自动控制的朋友来说,不懂PID控制,那就等于没真正的学过自动控制。PID的应用其实在我们的生活中是很普遍的,它不止浮现于算法介绍的文献中,在生活中也是应用广泛的、比如我们日常使用的恒温热水器、液位稳定系统,以及平衡车,无人机的飞行姿态、飞行速度的控制等等。甚至更加高端的领域如自动驾驶等都会涉及到PID的使用。说到这里,那我们就得要思考几个问题:什么是PID?为什么需要使用 PID?什么情况下可以使...
最近发现了一个可以免费、轻松使用 ChatGpt 的方法,随即做个记录,留着备忘,以后想用也能随时找到方法。但是不保证该方法永远有效,仅当下有限,做个记录罢了。因为我使用的是 windows 自带的浏览器 Microsoft Edge ,所以以下的操作步骤都是按照 Microsoft Edge 进行演示的,其他的浏览器暂时没有试过。1. 打开浏览器,在输入框中搜 wetab网址如下:https://microsoftedge.microsoft.com/addons/detail/wetab%E5%85%8D%E8%B4%B9chatgpt%E6%96%B0%E6%A0%87%E7%AD%BE%E9%A1%B5/bpelnogcookhocnaokfpoeinibimbeff2. 点击“获取”,即可以下...
关于看门狗想必各位嵌入式软件开发的朋友应该都不会陌生的。在嵌入式软件开发中,看门狗常被用于监测cpu的程序是否正常在运行,如果cpu程序运行异常会由看门狗在达到设定的阈值时触发复位,从而让整个cpu复位重新开始运行。看门狗的本质是一个计数器,一开始的时候配置其为一个特定的值,然后这个计数器就会一直运行倒数自减,自减到0就会引发系统复位。所以为了避免被复位,就需要隔一定的时间复位看门狗的计数值,也就是我们常说的 “喂狗” 。这个 “喂狗” 的动作应当发生在看门狗引发复位的阈值的间隔中,否者超过或者达到这个阈值,会导致系统...