
学习随笔
文章平均质量分 74
对个人学习过程中遇到的难点总结
我不买茶叶
机器人控制初探,永磁电机控制略懂,BLE协议栈入门,嵌入式开发深入中
展开
-
[BLE] Human Interface Device Protocol - Device
人机接口设备协议(Human Interface Device Protocol)是一个允许主机与外设设备(并非嵌入式设备常说的外设)之间进行通信,并使用外设设备对主机进行控制的协议,它最先被使用在通过USB设备通信的设备上。当出现了蓝牙协议后,HID又被移植到了蓝牙设备上,使得蓝牙设备间可以通过HID来相互通信,实现Device对Host的控制。本文所介绍的HID实际上是HID Over GATT Protocol(HOGP),即基于GATT的HID协议。原创 2024-05-21 21:22:28 · 1050 阅读 · 0 评论 -
[BLE] Heart Rate Protocol - Sensor
Heart Rate Protocol(心率协议)是一种基于GATT的标准协议,心率收集设备可以通过心率协议从心率传感器收集设备。在心率协议中,设备有两种角色:Collector和Sensor。Sensor可以测量心率并将数据发送给Collector;Collector可以从Sensor获取心率数据和其它数据。原创 2024-05-04 12:26:28 · 1690 阅读 · 0 评论 -
[嵌入式学习随笔] 嵌入式开发中的注册机制
在进行嵌入式开发时,常常会需要根据事件来调用对应的处理函数。例如发送照片时,可以选择微信发送、小红书发送、qq发送等。这个流程可以通过很多种方法实现,但它们各自的优缺点是什么呢?原创 2024-03-31 23:13:55 · 596 阅读 · 1 评论 -
学习随笔#15 MPC控制MATLAB代码详解
MPC控制的详细数学推导可以参照文章:一个MPC详细建模的例子。MATLAB/SIMULINK中自带有MPC相关的工具,但本文给出MPC控制的MATLAB程序。function [M, C, Q_bar, R_bar, G, E, H, U_k] = MPC_Zero_Ref(A, B, N, x_k, Q, R, F)n = size(A, 1);p = size(B, 2);M = [eye(n); zeros(N * n, n)];C = zeros((N + 1) * n, N *原创 2023-02-18 17:50:00 · 940 阅读 · 0 评论 -
MATLAB中伯德图的绘制方法
本文将介绍如何在MATLAB中绘制自己想要的格式的伯德图原创 2023-02-18 17:46:43 · 16935 阅读 · 2 评论 -
学习随笔#16 快速幂
快速幂(Exponentiation by squaring)是一种简单而有效的小算法,它可以以O(logn\mathrm{log}nlogn)的时间复杂度计算乘方。快速幂不仅本身非常常见,而且后续很多算法也都会用到快速幂。思考:7的10次方怎样算比较快?方法1:最简单的方法,将7自乘9次,很明显,这种方法的时间复杂度为O(n)O(n)O(n),是这道题能达到的最高的时间复杂度了。 那么有没有什么办法能够降低时间复杂度呢?方法2:710=75×757^{10}=7^5\times7^571原创 2022-03-26 22:08:47 · 205 阅读 · 0 评论 -
力扣做题记录——剑2 07.重建二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例1Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例2Input: preorder = [-1], inorder = [-1]Output: [-1]限制0 <= 节点个数 <= 5000思路 首先原创 2022-03-21 23:15:54 · 120 阅读 · 0 评论 -
学习随笔#14 一个MPC详细建模的例子
状态空间离散形态的一般表达形式为x(k+1)=Ax(k)+Bu(k)\boldsymbol{x}(k+1)=\boldsymbol{A}\boldsymbol{x}(k)+\boldsymbol{B}\boldsymbol{u}(k)x(k+1)=Ax(k)+Bu(k)公式中的矩阵大小及意义如下:变量名大小意义x(k+1)\boldsymbol{x}(k+1)x(k+1)n×1n\times1n×1k+1k+1k+1时刻系统的状态变量A\boldsymbol{A}A原创 2022-03-20 22:21:37 · 851 阅读 · 0 评论 -
学习随笔#13 模型预测控制(MPC)
MPC基本概念 模型预测控制(MPC)是指通过模型来预测系统在某一未来时间段内的表现来进行优化控制。MPC多用于数位控制,因此使用系统的离散型状态空间表达形式,即xk+1=Axk+Bukx_{k+1}=Ax_k+Bu_kxk+1=Axk+Buk。MPC一般分为3步:估计/测量读取当前的系统状态;基于uku_kuk、uk+1u_{k+1}uk+1、……、uk+nu_{k+n}uk+n来进行最优化;只取kkk时刻的系统输入uku_kuk,在k+1k+1k+1时刻,将控制区间(Cont原创 2022-03-20 00:41:23 · 6753 阅读 · 0 评论 -
学习随笔#12 最优化控制(Optimal Control)
最优化控制(Optimal Control) 在约束条件下达到最优的系统表现。下图是一个单输入单输出(SISO)系统的控制系统框图。 在这个系统中,我们定义误差e(t)e(t)e(t)为参考信号r(t)r(t)r(t)与输出信号y(t)y(t)y(t)的差,即e(t)=y(t)−r(t)e(t)=y(t)-r(t)e(t)=y(t)−r(t)。如果我们使得∫0te2dt\int^t_0e^2\mathrm{d}t∫0te2dt越小,则系统的跟踪性能越好;如果使得∫0tu2dt\int_0^tu^原创 2022-03-19 13:22:35 · 2315 阅读 · 0 评论 -
学习随笔#8 深度优先算法和广度优先算法
深度优先算法和广度优先算法深度优先算法广度优先算法 图的存储结构有两种,一种是基于二维数组的邻接矩阵表示法,另一种是基于链表的邻接法。 在邻接矩阵中,可以如下表示顶点和边连接关系: 将顶点对应为下标,矩阵中元素的1表示两结点相连,0表示不相连。如图G5中,结点0和1、2、3都相连,所以矩阵的第一列依次为0、1、1、1。而结点2只和0、1相连,所以矩阵的第三列依次为1、1、0、0。图的邻接矩阵都是对称矩阵。深度优先算法 深度优先算法是一种基于邻接矩阵的遍历算法。遍历是指从图的某个顶点出发,原创 2022-03-10 21:30:56 · 689 阅读 · 0 评论 -
学习随笔#7 机器人末端直线插补算法(基于IEC 61131-3)
插补是机器人最基础的功能,它分为直线插补和圆弧插补。插补中的位置由前三轴控制,姿态由后三轴控制。下面为直线插补的算法:IF GVL.yidong THEN GVL.L:=SQRT((GVL.XIn-GVL.X0)*(GVL.XIn-GVL.X0)+(GVL.YIn-GVL.Y0)*(GVL.YIn-GVL.Y0)+(GVL.ZIn-GVL.Z0)*(GVL.ZIn-GVL.Z0));//插补路...原创 2019-04-19 11:29:19 · 2255 阅读 · 0 评论 -
学习随笔#4 末端运动控制
在机器人插补运动过程中,必然要经历加速—匀速—减速三个阶段,在加速阶段,加速度为正值,速度逐渐增加;在匀速阶段,加速度为零,速度不变;在减速阶段,加速度为负值,速度逐渐减小。常识告诉我们,在加速度突变时,机器人会产生震颤,这些震颤可能会使电机发生移动,导致末端定位不准。所以我们需要想办法来消除加速度的突变,所以加速度的变化曲线应该是一条平滑的曲线,它从零开始又归于零,随之的速度曲线因形状类似于“S...原创 2019-04-04 13:48:03 · 447 阅读 · 0 评论 -
学习随笔#6 功能块MC_ExtSetPointGenFeed的用法
在之前的学习随笔中,我介绍了功能块FB_CTRL_SERVO_MOTOR_OUT的用法,但是很遗憾,我没有找到向电机输出脉冲信号bOutBitPos和bOutBitNeg的途径。因为在通过NC模块控制电机时需要使用轴变量Axis_Ref但我暂时没有找到上述功能块与电机输入之间的某个中继模块。在找到其他输出途径之前,这条路暂时走不通。注:在液压库中有一个功能块MC_AxUtiStandardIni...原创 2019-04-04 13:47:15 · 3683 阅读 · 1 评论 -
学习随笔#5 文献翻译
工业机器人和数控机床加减速的广义方法由于csdn输入公式很不方便,文中的公式可以直接对照原文看,每个空行都是公式,文中也有一些变量是用公式打的,虽然缺失,但并不影响阅读。原文:A Generalized Approach for the Acceleration and Deceleration of Industrial Robots and CNC Machine Tools摘要为了使...原创 2019-03-24 21:09:24 · 187 阅读 · 0 评论 -
学习随笔#3 机器人逆运动学
在机器人运动控制系统的搭建中,我并不是只需要写机器人末端执行器的运动轨迹算法,而是需要单独控制每一个伺服电机,再通过将它们的位移矩阵相乘得到末端的位移矩阵,但是在实际应用中,我们并不是有了各个电机角度才得到末端位置,而是让末端到达我们想去的位置。虽然在应用中是这样,但我们控制机器人运动还是要通过控制各个电机的角度来让末端到达目标位置。那么如何才能得到在某一末端位置下各关节的电机角度呢?这就需要用到...原创 2019-03-22 12:22:39 · 1613 阅读 · 0 评论 -
学习随笔#2 功能块FB_CTRL_SERVO_MOTOR_OUT的用法
在学习随笔#1中,我提到了一个需要解决的问题,即如何绕过NC模块,通过PLC直接控制电机?当时提出的解决方案是寻找NC中发送脉冲信号的功能块,经过寻找,找到了一个疑似功能块,这个块的名字是FB_CTRL_SERVO_MOTOR_OUT,它在倍福infosys中的描述为This function block generates pulses with which a servomotor ca...原创 2019-03-19 16:20:10 · 1923 阅读 · 0 评论 -
学习随笔#1
前言大学四年很快就要过去了,这个学期我要做毕业设计,题目是基于TwinCAT的机器人运动控制系统的设计。说实话,我校的机械设计制造及其自动化专业虽然在国内名列前茅,但对于本科阶段的教育过于注重设计与制造,而对于其自动化的部分则有明显轻视(也可能是因为我们没有立足自动化的课程设计吧,反正各种课设使我具备了扎实的机械设计制造基本功)。总之,对我来说基本是从零开始学习TwinCAT及其上位机的搭建,我...原创 2019-03-18 12:57:03 · 615 阅读 · 1 评论