自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1387)
  • 问答 (2)
  • 收藏
  • 关注

转载 SGI STL二级空间配置器--内存池源码剖析

在上图,可以看到在一级空间配置器中,construct和destroy,对容器对象的构造和析构,其中构造使用了定位new的方式,在指定的内存上进行对象的构造,construct调用了p->~T(),这是由于析构函数名和类型是一样的。事实上,在我们使用STL容器时,有一点没有关心到的是我们默认使用了标准库里边的空间配置器,当然标准这样的做法是为了减少学习成本,但是当我们深入学习时,就一定要明白这些容器底层是如何工作,才能注重效率,才能用好STL容器。二、二级空间配置器(内存池的分析)

2024-04-19 18:01:17 2

转载 std源码剖析及C++内存管理(二)

为了管理的方便,实际分配的大小都被调整为 8 的倍数,所以有 16 个 free lists,分别为 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128 bytes。在allocate中我们知道一级分配器是malloc分配,二级分配器是free_list管理,所以释放内存的时候,需要做判断,根据不同分配器来做不同处理,大于128字节,直接free释放掉,小于128字节,回收到free_list中.对应到G4.9就是_ret.

2024-04-19 12:53:45 2

转载 基于运动合成分解的舵轮底盘运动模型(以正三角形三轮底盘为例)

此文档原本是对附录中代码的解释,也可单独作为舵轮底盘分析的参考,除第9节的弃用方案外都已经过实践验证,第9节内容及原代码虽最终未被采用但其思路方法或许仍有些许值得参考借鉴之处,故也保留未删,也欢迎批判指正。各小节排列顺序即程序中顺序,代码已有较详细的注释,不再逐一说明功能。以下所有出现的变量除有说明外,都是结构体Wheel3(三轮底盘)中的变量,所有角度变量若无说明都为弧度制。由于调试时有过多次修改,部分代码可能和说明不一致。程序代码可分为三部分,第一部分为转机器人坐标系,单独作为一个函数;

2024-04-19 12:50:15 2

转载 线性代数导学(六):点积与叉积的作用

通过点积与叉积运算,计算机可以根据其结果的正负,判断两个向量之间的相对方位(上,下,左,右)。同时点积可以用来做投影,叉积可以用来建立三维直角坐标系。

2024-04-18 15:39:09 6

转载 CAN总线错误帧详解

在这一状态下,节点Node_A检测到一个错误就会发送带有被动错误标志的错误帧,因为被动错误标志是连续六个隐性位,所以这个时候总线上正在传输的报文位流不会受到该被动错误帧的影响,其它的节点该发送的发送,该接收的接收,没人搭理这个发送被动错误帧的节点Node_A。Tips: 处于主动错误状态,说明这个节点目前是比较可靠的,出现错误的原因可能不是它本身的问题,即刚刚检测到的错误可能不仅仅只有它自己遇到,正是因为这一点,整个总线才相信它报告的错误,允许它破坏掉发送中的报文,也就是将这一次的发送作废。

2024-04-18 15:31:15 5

转载 一篇易懂的CAN错误帧指南

本文来自于本人公众号的几篇文章的合集,CAN帧类型中,错误帧可能会经常听到,但又非常陌生。就我做多年软件开发经历,看到过位填充错误,但也没有去分析或解决过错误帧的案例。如果提到Bus off,通讯丢失,E2E之类的,那大多数人都有所耳闻了,为什么会这样呢?这是因为错误帧属于很基础的知识点了,如果对这个基础知识有兴趣,继续下文。

2024-04-18 15:28:18 12

转载 [CAN] CAN BUS的错误检测和错误状态管理

控制器局域网络(Controller Area Network, CAN)是当今汽车和工业自动化系统的重要标准。可靠性是CAN总线协议的核心优势之一,这使其成为安全关键应用的理想选择。CAN总线错误的发生可能有多种原因,比如电缆故障、噪声、不匹配的终端电阻、CAN节点故障等。识别、分类和解决此类CAN错误是确保整个CAN系统持久性能的关键。错误处理可以识别和拒绝错误的信息,使发送者能够重新传输信息。此外,该过程有助于识别和断开持续传输错误信息的CAN节点。CAN 总线的错误管理主要需要从三个方便进行分析。

2024-04-18 15:21:12 5

转载 CAN总线技术 | 物理层04 - 终端电阻与双绞线(特性阻抗120欧)

广州虹科录制的CAN总线技术课程非常不错,建议同学们学习一下。B站的地址:https://www.bilibili.com/video/BV1gD4y1U7bJ?p=1新手最容易犯错的就是忘记在CAN总线上添加终端电阻,还有必须使用双绞线(特性阻抗约120欧)。CAN总线上的终端电阻一般使用120欧,CAN线缆一定要购买特性阻抗约120欧的电缆。

2024-04-18 15:20:00 9

转载 特征阻抗(特性阻抗):解析

如果传输线上传输的信号是低频信号,假设是1KHz,那么信号的波长就是300公里(假设信号速度为光速),即使传输线的长度有1米长,相对于信号来说还是很短的,对信号来说传输线可以看成短路,传输线对信号的影响是很小的。但是对于高速信号来说,假设信号频率提高到300MHz,信号波长就减小到1米,这时候1米的传输线和信号的波长已经完全可以比较,在。和电阻,电容,电感一样,传输线也是一种理想的电路元件,但是其特性却大不相同,用于仿真效果较好,但电路概念却比较复杂。3、传输线有两个很重要的特征:特征阻抗和时延。

2024-04-18 15:19:00 9

转载 射频同轴电缆特性阻抗测量方法的探讨

但被测电缆内部的阻抗不均匀性引起的反射不可忽视 ,测试时应把这部分影响消除掉,从而使得单个连接器中最主要的反射源来自电缆阻抗与标准阻抗的偏差, 最终可以通过测得单个连接器电压驻波比直接获得被测电缆的特性阻抗。当频率小于200 MHz 时, 单连接器法测量的电缆特性阻抗值在各频率下几乎相等, 且与传输相位法测量的结果十分接近 ,而当频率大于 200 MHz 时 ,其测得的特性阻抗测量值明显增大 , 这是由于连接器中的剩余电抗(不完全补偿)随着频率的增加而增大所致。式中 C 为单位长度的电缆电容。

2024-04-18 15:17:56 4

转载 用网线做RS485总线,需要注意这些!

专用通信电缆的“专用”主要是指,电缆的特性阻抗在120Ω,因为大多数RS485设备的内置阻抗匹配电路都是按照120Ω设计的,如果电缆的特性阻抗不是120Ω,就会阻抗不匹配,反射波会干扰原始信号导致失真。网线也是同样的,如果你用的网线特性阻抗刚好是120Ω,那么直接用RS485的120Ω终端电阻,就能很好阻抗匹配,很不幸的是,大多数网线的特性阻抗是100Ω。双绞线是抵抗差模干扰的好手,而屏蔽线则是抵抗共模干扰的利器,所以,尽量用带屏蔽层的网线,能有效改善共模干扰带来的影响,尤其是工作环境有大功率设备的时候。

2024-04-18 14:45:26 4

转载 RS-485 (TIA/EIA-485-A)网络连接指南

介绍RS-485网络的正确连接方法,包括双绞线布线及正确安装匹配电阻的建议。列出了正确端接和错误端接下的接收器波形。给出了从简单的单发送器/多接收器网络到多个收发器及多个分支电路的配置。本应用笔记提供连接RS-485网络的基本指南。RS-485规范(官方称为TIA/EIA-485-A)没有特别规定应该如何连接RS-485网络。尽管如此,规范还是给出了一些指南。这些指南和良好的工程实践是本应用笔记的基础。然而,本文提出的建议并不能涵盖设计网络的所有不同方式。RS-485在多个位置之间发送数字信息。

2024-04-18 14:18:00 5

转载 mahony 互补滤波器

陀螺仪,测量角速度,具有高动态特性,它是一个间接测量角度的器件。通过加速度计得到 Δ q a c c ^ \widehat{\Delta q_{acc}} Δqacc​​ ,然后校正四元数中的横滚(roll)和俯仰(pitch)分量。在 px4 中,磁力计使用 GPS 信息 [ 0 , 0 , m a g ] [0, 0, mag] [0,0,mag] 进行校准,故,公式与加速度计相同。在预测环节得到的四元数 q e b ( k ) q^b_e(k) qeb​(k) ,通过加速度计和磁力计的值进行校正。

2024-04-17 20:02:11 10

转载 MPU6050姿态解算——Mahony互补滤波

陀螺仪一般为六轴或者九轴构成,六轴就是三轴角速度计加上三轴加速度计,九轴就是在六轴的情况下再加上一个三轴的磁力计,而应用最广泛的MPU6050就是一个六轴陀螺仪。有一种现象很普遍也包括我自己,就是在没有用过陀螺仪之前,总以为陀螺仪可以直接得到角度数据,实际上并不然,陀螺仪(在下文中就代表MPU6050等六轴陀螺仪)只能得到角速度数据和角速度数据,从而间接得到角度。可能数理基础不错的小伙伴会想到,对角速度积分不就成了角度吗?

2024-04-17 19:46:09 17

转载 点的旋转(4):四元数的乘法

同样的,跟前面一眼四元数的乘法也代表了旋转,四元数的积有多种定义,这里我们只讲被用在旋转操作的上积 —— 矢量积。

2024-04-17 19:29:00 6

转载 STM32平台下官方DMP库6.12超详细移植教程

我们总结一下在库文件中都做了那些修改:把#include "stm32f4xx.h"修改为 #include "stm32f10x.h"1删除 #include "main.h" 和 #include "board-st_discovery.h" 头文件声明1修改 #include "uart.h" 为自己写的 #include "USART1.h"1修改 #include "i2c.h" 为 自己写的I2C头文件 #include "SI2C1.h"1。

2024-04-17 19:06:04 11

转载 点的旋转(2):四元数的推导

还记得上一节中我们怎么旋转一个二维向量的吗?我们将其放入一个复平面中,通过乘子来旋转其所在的坐标系来得到结果是的,跟2*3的例子一样,将该系下(1+0i)的位置变换至乘子r的位置,同时为了确保不会变形,我们限定乘子的模长为1(或者叫范数?随你啦),整个旋转看起来就像在圆的边上滑动。四元数,是如何推导的。

2024-04-17 19:04:52 4

转载 【51单片机快速入门指南】4.3.2: MPU6050:一阶互补滤波、二阶互补滤波和卡尔曼滤波获取欧拉角

由于每种滤波器的参数都会极大地影响该滤波器的性能(一阶滤波、二阶滤波各一个参数,卡尔曼滤波三个参数),因此难以互相比较,我建议根据单片机的资源、性能选择要用的滤波器,R参数:观测噪声协方差 R参数调整滤波后的曲线与实测曲线的相近程度,R越小越接近(收敛越快)我参考的大佬有取0.01,0.0003,0.01的,也有取0.001,0.005,0.5的。生成的程序较大,对于89C52,需要注释掉没用到的函数。(我参考的大佬有取0.8的,有取10的,我这里取5)。上位机:Vofa+ 1.3.10。

2024-04-17 18:30:32 10

转载 负数取模运算

可以看到,这个定义导致了有负数的求余并不是我们想象的那么简单,比如,-1 和 2 都是 (-7) mod 3 正确的结果,因为这两个数都符合定义。我们发现,假如我们按照正数求余的规则求 (-7) mod 3 的结果,就可以表示 -7 为 (-3)* 3 +2。看完了 (-7) mod 3,下面我们来看一看 7 mod (-3) 的情况(看清楚,前面是 7 带负号,现在是 3 带负号)。,7 = (-3) * (-2) + 1 或7 = (-3) * (-3) -2,所以余数为 1 或 -2。

2024-04-17 18:27:01 3

转载 MPU6050的原理讲解

这是由于每个芯片在制作时都不一样,数据手册上的都是理论的 值,真正的芯片在水平时Z轴可能并不是16384.我们需要找到当各个轴在0g重力时的计数, 1g时的读数,以及-1g时的读数,得到一个补偿值,在每次读取ADC结果后都进行补偿。接收时,Ry,R Z与上的X,Y,Z轴的R矢量投影。目前市面上的加速度计从输出上区分为两种,一种是数字的,另一种是模拟 的.miniAHRS 使用的是MPU6050三轴加速度计,是I2C接口的数字传感器.通过特定的命令 可以配置加速度的量程,并将内部ADC的转换结果读出来.

2024-04-17 11:19:34 12

转载 四维空间(十一):几何代数、四元数与空间旋转

四维空间(十一):几何代数、四元数与空间旋转 | Blog de Hqak (WXYHLY)

2024-04-16 20:05:35 5

转载 三维旋转:欧拉角、四元数、旋转矩阵、轴角之间的转换

早些年在鹅厂实习了一段时间,因为没有什么特别紧急的需求(hahahahaha),所以主要花在了学习和捣鼓一些小工具上。有一个小需求是要实现鼠标拖动球体的转动,然后发现我不再能只用欧拉角来糊弄过去了。然后又发现,网上大部分资料的采用的欧拉角顺规都是xyz,然后我基于D3D11的辣鸡框架用了zxy,公式不太能直接套用,于是摸了两三天鱼,整理了一下几种三维旋转表示(欧拉角,四元数,旋转矩阵,轴角)与他们之间的相互转换的资料,并且加入了自己的一些推导,

2024-04-16 20:02:17 10

转载 彻底搞懂“旋转矩阵/欧拉角/四元数”,让你体会三维旋转之美

与复数类似,因为四元数其实就是对于基 {1, 𝑖, 𝑗, 𝑘} 的线性组合,四元数也可以写成向量的形式:除此之外,我们经常将四元数的实部与虚部分开,并用一个三维的向量来表示虚部,将它表示为标量和向量的有序对形式:我们这里可能还感觉到迷茫,没关系,我们一步一步来!

2024-04-16 20:01:24 15

转载 四元数与欧拉角(Yaw、Pitch、Roll)的转换

四元数与欧拉角之间的转换百度百科四元素在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点。本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系:定义ψ�,θ�,ϕ�分别为绕Z轴、Y轴、X轴的旋转角度,如果用Tait-Bryan angle表示,分别为Yaw、Pitch、Roll。通过旋转轴和绕该轴旋转的角度可以构造一个四元数:其中α是一个简单的旋转角(旋转角的弧度值),而是定位旋转轴的“方向余弦”(欧拉旋转定理)。

2024-04-16 19:59:55 24

转载 知识分享 | 什么是CAN总线上的波特率

虽然单位“波特”本身就已经是代表每秒的调制数,以“波特每秒”为单位是一种常见的错误,但是在一般中文口语化的沟通上还是常以“波特率”来描述“波特”(Baud)。位时间=1/位速率=1/(500*1000)s=2µs因此,当使用500kbps时,1位在总线上的传输时间为2µs因此,传输1帧的大致时间是(2µs/bit * 125 bit)=250 µs。单位时间内传输的“码元数”称为“码元传输速率”,俗称波特率,也称为调制速率、波形速率或符号速率,它的单位是波特(Baud,symbol/s,码元数每秒)。

2024-04-16 17:40:01 11

转载 192.168.2.1如何访问192.168.1.1的服务器?

第一个可能的解决办法:添加三层转发设备你说第一种情况,192.168.2.1和192.168.1.1,它们的掩码都是24位,不在同一个网段,展开就是192.168.2.1/24,192.168.1.1/24。这也是说你不专业的原因,写IP地址时,一定要把掩码加上,不然相同的IP地址可能在不同的网段。如果是这种情况,你的问题就可以简化为两个不同网段的主机如何互访?

2024-04-13 10:39:56 265

转载 ioctl -- get/set网卡接口信息

【代码】ioctl -- get/set网卡接口信息。

2024-04-12 17:13:20 16

转载 Linux通过c语言函数管理网络(1)-----获取/修改IP和MAC地址

在Linux下编写程序经常遇到需要对网卡进行管理,但是在glic库中或者其他函数库中却发现没有境界能用的API。有的人在程序中通过system()执行ifconfig命令进行配置,但是获取参数却很麻烦,也有的人通过int getifaddrs(但是处理原始的netlink消息非常麻烦,且容易出错。但是netlink的功能相比于上面的方法要强大,比如现在ioctl()接口是不能处理ipv6的。netlink还可以轻松的获取路由信息。去获取ip地址等信息,但是只能获取,却不能配置。

2024-04-12 17:10:39 19

转载 详细的网络协议之ARP请求

对于 ARP 协议,你想知道的,可能包括以下几点:ARP 是啥为啥需要 ARPARP 是怎么工作的ARP 报文格式长啥样ARP 安全吗有哪些命令可以操作 ARPARP 有哪些内核配置参数带着这些问题,下面我们就来一一解答。

2024-04-12 17:08:58 47

转载 ARP协议报文格式及ARP表

不会被老化,也不会被动态ARP表项覆盖。如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的相应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接受ARP响应报文的接口加入该静态表项中,之后就可以用于IP数据包的转发了。ARP是一个独立的三层协议,所以ARP报文在向数据链路层传输时不需要经过IP协议的封装,而是直接生成自己的报文,其中包括ARP报头,到数据链路层后再由对应的数据链路层协议(如以太网协议)进行封装。

2024-04-12 17:07:48 11

转载 如何接好CAN的“地”?

CAN总线以其高可靠性、实时性、灵活性以及严谨的数据处理机制等特点,在工业现场和汽车行业得到广泛应用,但随着环境干扰以及节点数目的增加等对CAN总线的稳定性提出更高的要求,而面对电源地、信号地、屏蔽地、外壳地不同的接地方式又该如何处理呢?信号地也称为隔离地,为使电子设备工作时有一个统一的参考电位,避免有害电磁场的干扰,使设备稳定可靠的工作,设备中的信号电路统一参考地,即CAN-GND;许多实际应用中,设计者常直接将每个节点的参考地接于本地的大地,作为信号的返回地,看似正常可靠的做法,却存在极大的隐患!

2024-04-12 17:03:53 13

转载 【C++ STL容器set 】std::set 的全方位解析

在深入探索 C++ 的set容器之前,让我们先建立一个坚实的基础,理解其基本概念和构成。set是一种关联容器,以其独特的方式,维护了元素的唯一性和有序性,为编程提供了强大而灵活的工具。set容器是标准模板库(Standard Template Library, STL)的一部分,设计用来存储唯一的元素,这些元素按照特定顺序排列。

2024-04-10 20:19:14 16

转载 stm32 MPU6050 6轴姿态传感器的介绍与DMP的应用

InvenSense 提供了一个 MPU6050 的嵌入式运动驱动库,结合 MPU6050 的 DMP,可以将我们的原始数据,直接转换成四元数输出,而得到四元数之后,就可以很方便的计算出欧拉角,从而得到 yaw、roll 和 pitch(要得到欧拉角数据,就得利用我们的原始数据,进行姿态融合解算,这个比较复杂,知识点比较多,初学者 不易掌握。使用内置的 DMP,大大简化了四轴的代码设计,且 MCU 不用进行姿态解算过程,大大降低了 MCU 的负担,从而有更多的时间去处理其他事件,提高系统实时性。

2024-04-09 06:58:26 18

转载 stm32中的CAN通讯列表模式配置解析与源码

在讲到代码实例之前,首先大家都弄懂一件事,当给定一个CAN ID,如0x1800f001,当然这个是扩展ID,这里要问的是,这个CAN ID的值本身包含两部分,即基本ID与扩展ID,即么你知道这个扩展ID0x1800f001的哪些位是基本ID,哪些位又是扩展ID?总结可知,当过滤器为屏蔽模式时,标识符寄存器对应的ID内容可为任意一需求接收的ID值,当同时要接收标准帧和扩展帧时,标识符寄存器对应IDE位也随意设置,屏蔽寄存器的IDE位设置为0,表示不关心标准帧还是扩展帧。//给出过滤器位宽为32位。

2024-04-07 17:29:39 28

转载 C++ 的placement new和placement delete

2、

2024-04-06 21:26:20 10

转载 Effective C++ 读书笔记07

本文是阅读《Effective C++ 改善程序与设计的55个具体做法(第三版)》的心得笔记第七部分,文章也会按照原书的顺序依次记录各个条款。第一部分的阅读笔记参见。第二部分的阅读笔记参见。第三部分的阅读笔记参见。第四部分的阅读笔记参见。第五部分的阅读笔记参见。第六部分的阅读笔记参见。

2024-04-06 21:24:07 13

转载 定制new和delete

为了防止在一个类中自定义的placement new遮掩正常的operator new版本,可以采取将正常版本的operator new和operator new定义在基类的办法,由自定义placement new和placement delete的类来继承。这样的一句代码,引起的是在Widget类内定义的static void* operator new(size_t size,ostream& os) throw(bad_alloc)的调用来分配内存,继而调用构造函数,完成对象的构造。

2024-04-06 21:23:06 6

转载 定制自己的new和delete:operator new 和 operator delete

申请完内存之后,在调用类的构造函数,此时会抛出异常,这个时候,由于调用的 operator new(size_t size, int flag);函数来申请内存,但构造函数失败了,此时 new - operator (new 关键字,区分operator new)会调用和 operator new 相同参数的operator delete函数来释放已经申请的内存,因此operator delete(void *ptr, int flag) ,在调用operator delete(void * ptr);

2024-04-06 21:22:10 7

转载 《Effective C++》学习笔记(条款52:写了placement new 也要写 placement delete)

需要注意的是,因为成员函数的名称会掩盖其外围作用域中相同名称的函数(见条款33),所以要小心避免 class 专属的 new 掩盖用户希望调用的 new。如果使用正常的 operator new 和 operator delete,运行期系统可以找到如何释放 new 开辟内存的 delete 函数。所以上述做法行不通。没有 placement 版本的operator delete,所以运行期系统不知道如何释放 operator new 开辟的内存,于是什么都不做。的声明式,也就是之前我说设计有问题的那个。

2024-04-04 23:07:18 10

转载 C++ 的placement new和placement delete

2、

2024-04-04 23:04:36 8

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除