- 博客(83)
- 资源 (11)
- 收藏
- 关注
原创 卡尔曼滤波器设计及实例
其发明者鲁道夫.E.卡尔曼在一次访问NASA的时候,发现阿波罗计划中一个难点是轨道预测问题,因而提出了一种滤波器,可以帮助高效预测轨迹,辅助导航。即便在有噪声干扰的情况下,也可以较好的预测下一状态的情况,并找出多变量间不易察觉的相关性。因而卡尔曼滤波器可以很好适应不断变化的系统,并且内存占用量低,推理速度快,比较适合资源受限制的场景。假设有一辆小车,装有加速度传感器,可以测量小车的加速度a。其中u(k)是系统控制输入,w(k)是系统随机噪声。其中P和Q是与转移矩阵A同秩的协方差方阵,R是1X1维的常量。
2023-10-07 10:56:27 1077
原创 一文理清最小二乘法估计
对于参数时变系统,RLS易出现数据饱和现象,就是随着时间的变化,矫正矩阵P(k)和K(k)越来越小,从而其矫正作用越来越弱,这将导致较大的估计误差。递推最小二乘法RLS是最小二乘法LS的改进版,它可以根据采样的实时数据来不断修正估计参数,从而做到参数的实时估计。参数估计的任务就是根据输入和输出,估计出a1,a2,----,ana,b1,b2,...,bnb这na+nb+1个参数。最小二乘法最早是高斯在预估星体轨道时提出来的,后来成为了估计理论的奠基石。当系统模型的干扰为有色噪声时,系统方程表示为。
2023-06-19 19:55:40 5004
原创 伺服系统使用S曲线
在之前文章介绍过贝塞尔曲线方式,并且在Marlin开源工程中也有贝塞尔曲线步进系统的实现方式。本篇介绍伺服系统中基于时间分割法实现的贝塞尔S曲线。
2023-05-29 19:45:21 2291
原创 HTA0视觉抓取机器人源码解读
本文是对HTA0开源视觉抓取机器人的源码进行了解读,主要分析了机械臂姿态解算、运动控制和机器人视觉等几个关键技术点。
2022-09-24 09:19:46 2261 1
原创 STM32实现霍夫圆检测
本文要讨论的问题来源于工程实际,摄像头去拍圆形标记点得到一张图像,已知标记圆的半径范围(rmin,rmax),需要识别出圆心坐标和半径。采用霍夫圆变换可以很好的实现这个功能,且具有广泛的适应性(就是指在大多数情况下都能识别出圆,成功率高)。基本思路是先对圆进行边缘检测,然后对于边缘检测图像进行霍夫圆检测。假设圆的坐标假设为:现在已知圆上的一系列点(xi,yi),则可知圆心(xc,yc)也位于以(xi,yi)为圆心,半径为r的圆上,以这一系列点为圆心画一系列半径为r的圆,则圆心(xc,yc)将位于这些圆的交点
2022-06-29 20:56:24 1138 2
原创 python opencv读取图像并生成plt文件
1 前言在数控系统中,plt文件是标准的数控加工文件格式。一般可由signMast、文泰等工控软件生成plt加工文件。现在假设电脑或手机上没有工控软件,只有一些描述加工路径的图片,比如这样的:https://img-blog.csdnimg.cn/20200915210819756.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdXpo
2020-09-16 09:25:56 4230 3
原创 开源cnc项目Marlin2.0运动控制部分代码理解
本文主要梳理Marlin2.0工程代码中关于运动控制部分的理解。Marlin1.0工程代码用C语言写的,阅读起来比较容易。Marlin1.0主要核心算法包括圆弧插补、速度前瞻、转角速度圆滑、梯形速度规划、Bresenham多轴插补。Marlin2.0工程相对于Marlin1.0工程程序用了更多C++的写法,程序写的相对专业(晦涩),许多人不太适应,其实2.0比1.0主要是增加了S形速度规划。1...
2020-02-25 15:25:35 15538 10
原创 S形曲线规划方式汇总
本文主要讲述S形速度规划方案,包括sigmoid函数、sin函数和bezier曲线速度方案。已知初速度Vs,末速度Ve,规划速度曲线分别是sigmoid函数曲线、sin函数曲线、bezier曲线。一 曲线速度规划方案1 sigmoid函数曲线速度规划这种方式在前面博文https://blog.csdn.net/liuzhijun301/article/details/103978087...
2020-02-24 09:16:36 9517
原创 STM32高速脉冲发波方案
对于步进电机,脉冲频率一般在几千Hz到几十千Hz左右,但是对于伺服电机,由于其转速高,分辨率高,其要求的脉冲频率可以高达几百千Hz甚至高到几兆Hz。此外对于多轴运动控制器,还需要同时发出多路高频率的脉冲波形。如何让单片机发出高频率的高速脉冲,有以下几种方法:使用定时器溢出中断,定时中断里翻转IO口电平来产生方波。优点:实现简单,对硬件要求不高。缺点:不适合高速脉冲波形,而且脉冲分辨率也不...
2020-02-20 16:25:14 7077
原创 分段式S形速度规划算法
1 典型七段式S形速度曲线典型7段式S形曲线位置q、速度v、加速度a、加加速度j的波形如图所示:位置q和时间t的关系式:2 分段式S形曲线速度规划已知初速度V0,末速度Ve,最大速度Vmax,路程距离s,最大加速度amax,最大jerk(加加速度)jmax,要规划位置、速度、加速度、加加速度随时间变化的曲线。具体步骤如下:1) 假设能够达到最大速度Vmax,...
2020-02-18 08:29:06 14238 12
原创 Bresenham直线插补算法及其Matlab实现
Bresenham算法用在直线插补上面。假设线段向量坐标a(x,y,z),选取x,y,z绝对值最大的作为累加溢出值c=|max(x,y,z)|,假定累加初值b=c/2,那么三个轴输出脉冲的算法如下:m=l=k=b;for(i=0;i<c;i++){m+=x; l+=y;k+=z;if(m>=c) {x轴输出一个...
2020-01-16 11:50:12 3701
原创 采用直线逼近方式的圆弧插补
对于圆弧插补的处理思想是将圆弧用直线段进行逼近。把圆弧拆分成多段直线段,然后对拆分成的多段直线执行速度插补功能。这样可以对圆弧插补也可以应用速度前瞻控制算法,是的圆弧加工速度更加平滑。圆弧拆分成多段直线示意图如图所示。向量OP0与向量OPn的夹角θ有关系式:对于圆弧容差h、弧长为k的小圆弧(圆弧容差是指圆弧上俩点连线到这段圆弧之间最长的距离),有关系式:P0Pn段圆弧的弧长...
2020-01-14 19:47:08 2616
原创 S形速度规划算法
S形速度规划相对于梯形速度规划其速度曲线会更加平滑,电机运行会更加平稳。常见的S曲线包括7段式加速度曲线,这种曲线计算量大,而且规划起来困难。一种简单的方法是采用Sigmoid对称函数加减速曲线规划法。典型的Sigmoid函数为:其值域为(0,1),函数关于横坐标左右对称,关于点(0,0.5)中心对称。其函数图形为:如要将此曲线应用在步进电机的加、减速过程中,需要将方程在XY坐标系...
2020-01-14 19:19:41 14153 6
原创 梯形速度规划算法
梯形速度是运动控制系统使用的最简单的一种速度规划方式,其速度曲线如下图所示:v0为初速度,vn为匀速运行速度,vt为末速度,加速和减速阶段加速度为a,总路程为S。则加速阶段走过的路程S1=(vn*vn-v0*v0)/2a,减速阶段走过的路程S3=(vn*vn-vt*vt)/2a,则匀速阶段走过的路程S2=S-S1-S2若S2<=0,代表此时没有匀速阶段,此时梯形速度退化成...
2020-01-14 18:40:39 11599 3
转载 【转载】标准DH和改进DH的区别
原文链接:https://blog.csdn.net/qq_27170195/article/details/79936518一:区别二、区别示意图三:MATLAB仿真对比1. 标准DH%标准DH%Link(DH,option):%DH = [THETA D A ALPHA SIGMA]//我的代码中此处定义theta的初始值无效L1 = Link([0 0.2...
2019-11-18 14:37:43 9581
原创 基于迭代控制的逆变器控制模型仿真
迭代学习控制的原理和简单实例已经在上一篇文章中讲过了。这篇文章将要研究在用迭代学习控制来无静差跟踪逆变器输出电压。1 逆变器ILC控制建模逆变器的模型采用半桥模型,话不多少直接贴图:Control控制器子系统内部结构如图:这里将传统的逆变器电压电流双闭环控制中的电压环改造成了迭代学习控制器ILC Controller。控制器输出作为电流环参考。接着看ILC Contro...
2019-08-15 22:02:16 1585 8
原创 迭代学习控制方式Simulink建模与仿真
1 什么是迭代学习控制 迭代学习控制(iterative learning control,简称ILC)由Uchiyama于1978年首先提出,不过因为论文由日文撰写,影响不是很大。1984年,Arimoto等人用英文介绍了该方法。它是指不断重复一个同样轨迹的控制尝试,并以此修正控制律,以得到非常好的控制效果的控制方法。 迭代学习控制的特点是“在重复中学习”,通...
2019-08-15 17:13:18 21531 19
原创 SVPWM实现概述
1 SVPWM基本原理1.1 SVPWM基本原理SVPWM 的理论基础是平均值等效原理,即在一个开关周期内通过对基本电压矢量加以组合,使其平均值与给定电压矢量相等。在上图的逆变电路中,设直流母线上的电压为Udc,逆变器输出的三相相电压为UA、UB、UC,其分别施加在空间上互差120度的平面坐标系上,定义这三个电压空间矢量为UA(t)、UB(t)、UC(t),他们方向...
2019-06-13 11:14:17 16184 1
原创 ubuntu16.04基于docker部署laravel项目
本文记录最近实际工作中部署laravel项目到服务器的全部流程。采用docker部署项目,docker镜像是同事上传到阿里云的一个镜像。1 首先安装docker~$ sudo apt-get install docker.io安装完成后查看版本~$ docker -vDocker version 18.06.1-ce, build e68fc7a2 安装docker-...
2019-02-22 19:15:35 1158 1
转载 sprintboot使用websocket
1 pom中引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>2 建立websocket控制类/**...
2018-12-22 17:26:55 396
转载 关于给springboot添加定时器的两种方式
首先,搭建好一个springboot项目,可使用maven或者gradle或者其他(MD不会啊。。。),这个因为本次的重点在于如何添加定时器,本人会在这几天有时间的时候来写一个如何搭建一个简单的springboot的项目的过程。现在时间有限,所以喽。还请各位多包涵。咳咳。好了 进入主题。方法一:通过springboot自带入口来开启定时器。首先我们都知道,springboot有一个自己...
2018-12-22 15:50:57 677
原创 SprintBoot执行异步多线程
1 介绍Spring是通过任务执行器(TaskExecutor)来实现多线程和并发编程,使用ThreadPoolTaskExecutor来创建一个基于线城池的TaskExecutor。在使用线程池的大多数情况下都是异步非阻塞的。我们配置注解@EnableAsync可以开启异步任务。然后在实际执行的方法上配置注解@Async上声明是异步任务。2 配置类package com.examp...
2018-12-22 15:41:51 565
原创 java访问eos
0 java库jeos目前EOS方面比较成熟的开源Java SDK非常少,个人推荐一个比较好用的java库jeos,地址https://github.com/adyliu/jeos。在gradle中添加这个库:compile group: 'io.jafka', name: 'jeos', version: '0.9.14'1 jeos使用最简单的用来访问EOS节点的代码:...
2018-12-14 17:25:31 1418 2
原创 eosjs的使用
1 安装eosjs首先建立一个文件夹,进入该文件夹下面执行下列命令安装eosjs库:~/eosjsPro$ sudo npm install eosjsnpm WARN saveError ENOENT: no such file or directory, open '/home/lzj/eosjsPro/package.json'npm notice created a lock...
2018-12-12 18:14:09 733 2
原创 10分钟学会创建账户、转账及买卖RAM等常用命令
搭建环境本文主要介绍EOS命令的使用,搭建环境只作简单介绍,更多信息请查阅 官方手册。1、获取EOS代码git clone https://github.com/EOSIO/eos --recursive2、使用脚本自动安装cd eos ./eosio_build.sh配置命令指向主网1、创建EOS操作命令cleos别名,便于后续命令均指向EOS主网进入cl...
2018-12-05 17:06:22 378
原创 EOS建立节点与主网进行同步
本文介绍在本地建立一个EOS节点并与EOS主网进行数据同步。首先新建一个文件夹,在里面新建一个genesis.json创世文件,文件内容:{ "initial_timestamp": "2018-06-08T08:08:08.888", "initial_key": "EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3",...
2018-12-05 15:34:35 1444 1
原创 EOS智能合约之多重签名
1 多签名操作的概念回想一下创建账户的命令:Usage: cleos create account [OPTIONS] creator name OwnerKey [ActiveKey]一个账户拥有Owner和Active权限。同时账户也能够自定义新的权限。所谓多签名,就是一个账户可以将它的权限指派给其它多个账户,一个操作只有得到这些授权用户签名而得到执行。多签名是加强账户安全性的一...
2018-12-05 13:59:28 1214
原创 EOS智能合约访问数据库
1 multi-index介绍EOS的智能合约可以将数据永久存储在区块链数据库中。智能合约通过multi-index接口来与数据库打交道。通过eosio::multi_index智能合约能够写入、读取和修改eosio数据库的数据。eosio::multi_index在概念上和传统数据库的“表(table)”类似,数据“行(rows)”是独立的对象(通常是class对象或struct对象),数据...
2018-12-04 16:15:38 863
原创 EOS智能合约入门
1 准备工作首先在本地将私有链运行起来:sudo nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin私有链默认存储的位置在~/.local/share/eosio/nodeos路径下面。然后新...
2018-12-04 11:56:26 379
原创 以太坊节点增加网络安全的一些方法
这里主要以以太坊平台来讲解。对于其它平台,基本原理是差不多的。以太坊对外暴露了RPC接口,外部应用一般是通过RPC对区块链发起访问。最普遍的是采用Http的方式来发起请求。所以许多通用的增进Http安全的方式都能在这里派上用场。1 Http鉴权通过安装nginx,然后再通过nginx配置Basic HTTP Authentication的方式,通过用户名和密码组合来对Http通信进行加密保...
2018-11-14 14:15:01 1293
原创 go-ethereum区块同步的流程
1 新区快的接收在eth/handler.go中的handleMsg函数中,包括所有通过p2p发送过来的事件的处理。包括新区快到达事件NewBlockMsg、新交易事件TxMsg、区块头事件BlockHeadersMsg等。我们看对NewBlockMsg的处理:case msg.Code == NewBlockMsg: // Retrieve and decode the propa...
2018-11-09 15:25:46 1158
原创 以太坊事件机制以及优化
1 以太坊的事件机制以太坊go-ethereum源码中发送事件除了用常规的通道以外,还用了封装的Feed结构来执行事件的订阅和发送。以太坊中使用了大量的Feed来处理事件。使用Feed订阅事件的步骤是:定义一个通道ch:ch=make(someType) 定义一个Feed对象feed Feed订阅通道ch:feed.Subscribe(ch) 使用feed发送数据给通道:feed.S...
2018-11-09 13:49:18 1014 1
原创 rsync打补丁以检测文件改名
1 rsync本来不能侦测文件改名ubuntu中默认安装的rsync是在同步文件的时候,当文件发生删除、修改、创建的时候,都可以侦测到。但是当同步源文件改名时,rsync同步到目标文件时不是简单的改名,而是会先删除原有文件然后再重新传输文件过去,当文件很大的时候,这种方案会比较耗时。如果rsync能够自动侦测到原文件改名并自动将目标文件改名,则这个过程就会是瞬间完成。2 给rsync打de...
2018-10-24 18:59:41 878 2
原创 clique共识机制流程及#17620 bug修复理解
1 clique共识机制的特性clique是基于授权的共识机制(POA)在以太坊中的实现。计划在Ropsten攻击以后,用来支持以太坊私测试链testnet(也可以自己搭建联盟链或者私有链)。clique机制的特性有:不需挖矿,由预先制定好的节点轮流出块 节点管理,可通过选举将新节点添加或剔除 出块周期固定2 clique核心源码解读使用的版本是最新的go-ethereumc 1...
2018-10-16 17:06:21 1582 1
原创 布隆过滤器go实现
1 布隆过滤器原理布隆过滤器一般用来判断一个数据是否在一个很大的数据集合里面。当然可以用数组,集合,树等数据结构和各种查找法都可以做同样的事情,但是布隆过滤器有更好的时间效率和空间效率。比特币实现SPV节点时使用了布隆过滤器来查询交易。布隆过滤器可以判断一个数在不在集合里,但存在一定的误判率。布隆过滤器的核心是一个超大的位数组和几个哈希函数。假设位数组的长度为m,哈希函数的个数为k。...
2018-10-13 17:27:40 4038 1
数控系统S型曲线加减速快速规划研究_田军锋.pdf
2020-02-18
notchFilter.slx
2019-08-06
VC串口通讯程序和以太网通讯程序
2013-01-03
linux下用freetype2显示汉字
2012-08-23
VC监控软件
2012-07-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人