当前位置: 首页 > news >正文

达妙电机CAN通信及实验

项目进一步往下做的时候,要上实物了,需要用到达妙电机,虽然有说明书和例程,但是STM32控制电机的具体时间还是花了些时间,我的板子和例程的有些区别,中间很多地方都需要进行修改完善,而且还补充了串口通信和lcd反馈等功能,以便于实现后期的上位机控制。现在下层的控制代码基本实现,很开心,特此记录下:)

一、达妙电机CAN通信报文格式汇总

达妙电机CAN通信采用的是标准帧格式,波特率是1Mbps,以下是根据达妙电机说明书及例程代码总结的CAN通信报文格式汇总表。

二、CAN接收与CAN发送的实现

所有的CAN通信无非就是实现两个操作,一个是发送报文,一个是接收报文。达妙电机也不例外。

1.发送报文

对于发送帧,我们有了上面的报文格式后,就可以结合报文格式,组成形成需要发送的报文,再调用CAN发送函数,就可以实现报文发送。我以电机使能和MIT控制函数为例,对相应的报文发送进行介绍,其余的方法类似。

1.1 CAN报文发送函数:

从以下函数可以看出,我们发送报文的时候需要获取3个内容,第一个是发送报文的ID,第二个是发送报文的数据msg,第三个是发送报文的数据长度len。

实际调用的流程就是2步:1. 获取对应参数(ID和Data),2. 调用can_send_msg函数发送报文

uint8_t can_send_msg(uint32_t id, uint8_t *msg, uint8_t len)
{uint16_t t = 0; //用于计时,放置发送超时uint32_t TxMailbox = CAN_TX_MAILBOX0;       //指定发送邮箱号// 安全断言if(len > 8 || msg == NULL) return 1;// 分别处理标准帧和扩展帧if(id <= 0x7FF){g_canx_txheader.StdId = id & 0x7FF;         /* 标准标识符,确保11位ID */g_canx_txheader.ExtId = 0; g_canx_txheader.IDE = CAN_ID_STD;}else{g_canx_txheader.ExtId = id & 0x1FFFFFFF;    /* 扩展标识符(29位) */g_canx_txheader.StdId = 0; g_canx_txheader.IDE = CAN_ID_EXT;}g_canx_txheader.RTR = CAN_RTR_DATA; /* 数据帧 */g_canx_txheader.DLC = len;//尝试发送if (HAL_CAN_AddTxMessage(&g_canx_handler, &g_canx_txheader, msg, &TxMailbox) != HAL_OK) /* 发送消息 */{return 1;}//等待发送完成(优化版)while (HAL_CAN_GetTxMailboxesFreeLevel(&g_canx_handler) != 3)   /* 等待发送完成,所有邮箱为空 */{t++;if (t > 0xFFF){HAL_CAN_AbortTxRequest(&g_canx_handler, TxMailbox);     /* 超时,直接中止邮箱的发送请求 */return 1; //发送超时}}return 0;  //发送成功且未超时
}

1.2 MIT控制模式报文发送

这个是MIT控制模式,首先它的ID组成就是我们设置的电机ID(motor_id)加上一个模式ID,模式ID有固定的宏定义,具体如下。

#define MIT_MODE            0x000    //对应MIT模式

#define POS_MODE            0x100    //对应位置速度模式

#define SPD_MODE            0x200    //对应速度模式

#define PSI_MODE            0x300

1.2.1 获取报文ID

我们首先需要得到报文的ID:就是motor_id 和mode_id的组合

uint16_t id = motor_id + MIT_MODE;
1.2.2 获取数据Data

获得报文ID后,我们进一步需要获取数据位,其中数据位格式就是在这个图里面,对应数据位进行赋值就可以得到data。

但需要注意,数据位里面的pos_tmp,vel_tmp,kp_tmp,kd_tmp,tor_tmp不是浮点数,需要进行数据转换,数据转化的时候需要提前给定各个参数的范围。 例程代码里面有提前进行设定,但具体值是否与电机内部的设定一致,可以利用调试助手读一下相关的参数。

    //浮点数转化为整型pos_tmp = float_to_uint(pos, -motor->tmp.PMAX, motor->tmp.PMAX, 16);vel_tmp = float_to_uint(vel, -motor->tmp.VMAX, motor->tmp.VMAX, 12);tor_tmp = float_to_uint(tor, -motor->tmp.TMAX, motor->tmp.TMAX, 12);kp_tmp  = float_to_uint(kp,  KP_MIN, KP_MAX, 12);kd_tmp  = float_to_uint(kd,  KD_MIN, KD_MAX, 12);//已经修改,确保数据不出错data[0] = (pos_tmp >> 8) & 0xFF;  //pos高8位data[1] = pos_tmp & 0xFF;  //pos低8位data[2] = (vel_tmp >> 4) & 0xFF;  //vel 高8位data[3] = ((vel_tmp & 0xF) << 4) | ((kp_tmp >> 8) & 0xF);  //vel 低4位与 kp 高4位组合data[4] = kp_tmp & 0xFF;  //kp低8位data[5] = (kd_tmp >> 4) & 0xFF;  //kd高8位data[6] = ((kd_tmp & 0xF) << 4) | ((tor_tmp >> 8) & 0xF);  //kd低4位 与 tor 高4位组合data[7] = tor_tmp & 0xFF; //tor 低8位

这个图片里面是我的电机的范围限定值,需要根据自己的电机确定哦: 

1.2.3 发送报文

直接调用can_send_msg就可以了

can_send_msg( id, data, 8);

整体mit控制函数如下:

需注意由于对应的参数给定时可能会超出范围,所以调用前需要进行范围监测,以使得程序更加安全。 

void mit_ctrl( motor_t *motor, uint16_t motor_id, float pos, float vel,float kp, float kd, float tor)
{uint8_t data[8];uint16_t pos_tmp,vel_tmp,kp_tmp,kd_tmp,tor_tmp; //转换成0-65535,或者0-4095uint16_t id = motor_id + MIT_MODE;//浮点数转化为整型pos_tmp = float_to_uint(pos, -motor->tmp.PMAX, motor->tmp.PMAX, 16);vel_tmp = float_to_uint(vel, -motor->tmp.VMAX, motor->tmp.VMAX, 12);tor_tmp = float_to_uint(tor, -motor->tmp.TMAX, motor->tmp.TMAX, 12);kp_tmp  = float_to_uint(kp,  KP_MIN, KP_MAX, 12);kd_tmp  = float_to_uint(kd,  KD_MIN, KD_MAX, 12);//已经修改,确保数据不出错data[0] = (pos_tmp >> 8) & 0xFF;  //pos高8位data[1] = pos_tmp & 0xFF;  //pos低8位data[2] = (vel_tmp >> 4) & 0xFF;  //vel 高8位data[3] = ((vel_tmp & 0xF) << 4) | ((kp_tmp >> 8) & 0xF);  //vel 低4位与 kp 高4位组合data[4] = kp_tmp & 0xFF;  //kp低8位data[5] = (kd_tmp >> 4) & 0xFF;  //kd高8位data[6] = ((kd_tmp & 0xF) << 4) | ((tor_tmp >> 8) & 0xF);  //kd低4位 与 tor 高4位组合data[7] = tor_tmp & 0xFF; //tor 低8位//发送报文can_send_msg( id, data, 8);
}

1.3 电机使能 

电机使能,相比上面这个MIT控制的报文发送就更加简单,因为它的数据位是固定的,那我们直接给定就可以了,具体如下:

void enable_motor_mode( uint16_t motor_id, uint16_t mode_id)
{uint16_t id = motor_id + mode_id; //id帧格式= 电机ID+ 模式编号uint8_t data[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}; can_send_msg( id, data, 8);
}

2.接收反馈报文

对于反馈帧,我们只需要进行对应接收即可。反馈帧反馈回来的ID是总线的ID,所以接收反馈帧的时候,我们只需要选择接收主CAN的数据即可,具体接收函数如下:其中,id = mst_id。

CAN接收函数:

uint8_t can_receive_msg(uint32_t id, uint8_t *buf)
{//参数检查if(buf == NULL) return 0;//检查FIFO0是否接收数据,如果没有数据,返回0if (HAL_CAN_GetRxFifoFillLevel(&g_canx_handler, CAN_RX_FIFO0) == 0)     /* 没有接收到数据 */{return 0;//报错}if (HAL_CAN_GetRxMessage(&g_canx_handler, CAN_RX_FIFO0, &g_canx_rxheader, buf) != HAL_OK)  /* 读取数据 */{return 0;//报错}//帧类型自动识别验证, 必须位数据帧if(g_canx_rxheader.RTR != CAN_RTR_DATA){return 0;//报错}//根据实际接收的帧类型进行ID验证if(g_canx_rxheader.IDE == CAN_ID_STD){if((g_canx_rxheader.StdId & 0x7FF) != (id & 0x7FF)){return 0;//报错}}else{if((g_canx_rxheader.ExtId & 0x1FFFFFFF) != (id & 0x1FFFFFFF)){return 0;//报错}}//消息验证通过,返回接收的数据长度return g_canx_rxheader.DLC ;
}

三、实验

达妙电机控制实验_哔哩哔哩_bilibili

相关文章:

达妙电机CAN通信及实验

项目进一步往下做的时候&#xff0c;要上实物了&#xff0c;需要用到达妙电机&#xff0c;虽然有说明书和例程&#xff0c;但是STM32控制电机的具体时间还是花了些时间&#xff0c;我的板子和例程的有些区别&#xff0c;中间很多地方都需要进行修改完善&#xff0c;而且还补充了…...

语音合成之四基于LLM的语音合成

基于LLM的语音合成 1.技术架构1.1 LlaSA1.2 CosyVoice (和 CosyVoice2)1.3 SparkTTS 2 特性对比2.1 零样本语音克隆2.2 多语种支持2.3 可控语音生成2.4 计算效率和模型大小 总结 当前&#xff0c;在大型语言模型&#xff08;Large Language Models&#xff0c;LLMs&#xff09;…...

Docker Python 官方镜像使用说明(TAG说明)

Docker Python 官方镜像使用说明&#xff08;TAG说明&#xff09; 本文将以python的3.12版本&#xff0c;详细讲解官方 Python 镜像 的TAGS含义 官方文档&#xff1a;https://github.com/tuonioooo/docker &#x1f9ed; 一张图先看懂&#xff08;最常见 Tag&#xff09; py…...

Node.js 开发用户登录功能(使用mysql实现)

在 Web 开发中&#xff0c;用户登录功能是一个基础且重要的部分。、 一、环境搭建 在开始开发之前&#xff0c;我们需要搭建好相应的开发环境。以下是所需的工具和库&#xff1a; Node.js&#xff1a;作为 JavaScript 的运行环境&#xff0c;为我们的项目提供支持。mysql2&am…...

程序员学英文之Shipment Claim 运输和索赔

Time is precious , don’t waste your time, you should spend your time on something valuable . 时间很宝贵&#xff0c;不要浪费时间&#xff0c;你应该把时间用在有 价值的事情上。 Dia-1: Shipment by Voyage Charter 租船装运 1. May I know when your bo…...

python实战项目64:selenium采集软科中国大学排名数据

python实战项目64:selenium采集软科中国大学排名数据 一、项目需求二、流程分析三、完整代码一、项目需求 本项目的需求是使用selenium采集软科中国大学排名的数据。网站首页如下: 抓取此网页数据一般有两种方式,一种是直接发requests请求,我们这里采用的是使用selenium控…...

Linux服务器:在ufw防火墙设置这套规则sudo ufw allow from 172.0.0.0/8,为什么容器就可以访问宿主机的服务了?

在 Docker 环境中,容器默认使用 桥接网络(bridge),宿主机和容器之间的通信会受到防火墙(如 ufw)的限制。当你执行 sudo ufw allow from 172.0.0.0/8 后,容器可以访问宿主机上的服务,原因如下: 1. Docker 默认使用 172.x.x.x 网段 Docker 默认会创建一个 docker0 网桥…...

Google搜索技巧

谷歌搜索 1. 使用双引号 (" ") 精确匹配短语 ● 例子&#xff1a;"人工智能的定义" ● 作用&#xff1a;确保搜索结果中包含完全匹配的短语&#xff0c;而不是单独的单词。 2. 使用减号 (-) 排除特定词语 ● 例子&#xff1a;苹果 -水果 ● 作用&…...

Reactor编程模型介绍

Reactor 模型是一种基于事件驱动的编程模型,广泛应用于高并发网络服务器的设计中。它通过事件循环和回调机制,将事件的处理逻辑从主线程中解耦出来,从而实现高效的异步 I/O 操作。Reactor 模型的核心思想是利用一个或多个事件分发器(Reactor)来监听各种事件(如 I/O 事件、…...

C++笔记-stack_queue(含deque,priority_queue,仿函数的讲解)

一.stack和queue的基本使用 stack和queue就是我们之前所学的栈和队列&#xff0c;这两个和之前学的vector&#xff0c;list不太一样&#xff1a; 这是vector和list的&#xff0c;注意第一行中写的containers&#xff0c;代表这两个都是容器&#xff0c;但是&#xff1a; stac…...

意见反馈留言二维码制作

意见反馈对于工作整改具有重要作用&#xff0c;在工作中一味埋头苦干不如抬头多听听反馈声音。而传统的反馈内容投递后&#xff0c;因为繁琐性和时效性的枷锁&#xff0c;往往石沉大海&#xff0c;不知何时才能得到回应&#xff0c;这就导致反馈信息的延迟&#xff0c;一些时效…...

扣子智能体平台深度解读:功能剖析与全流程工作流详解

在上一篇文章中&#xff0c;我们已经带大家了解了“智能体”这一概念的内涵&#xff0c;并通过扣子智能体平台的各大模块做了初步介绍&#xff0c;同时用一个简单的示例演示了如何构建和部署第一个智能体。那篇文章打好了基础&#xff0c;让大家对智能体的基本组成与工作方式有…...

C语言五子棋项目

头文件与宏定义 #include <graphics.h> #include <conio.h> graphics.h&#xff1a;EasyX 图形库&#xff0c;提供图形绘制功能&#xff08;画线、画圆、显示文字等&#xff09;。 conio.h&#xff1a;提供控制台输入输出函数&#xff08;这里只是为了兼容性&…...

建筑安全员 A 证与 C 证:差异决定职业方向

在建筑行业的职业发展道路上&#xff0c;安全员 A 证和 C 证就像两条不同的岔路&#xff0c;它们之间的差异&#xff0c;在很大程度上决定了从业者的职业方向。 从证书性质和用途来看&#xff0c;A 证是从业资格证书&#xff0c;更像是一把开启安全管理高层岗位的 “金钥匙”。…...

长连接、短连接与WebSocket的基本知识

目录 前言正文 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器&#xff0c;无代码爬取&#xff0c;就来&#xff1a;bright.cn Java基本知识&#xff1a; java框架 零基础从入门到精通的学习路线 附…...

MySQL常见问题解答

一、安装与配置问题 1. 安装失败(权限 / 依赖 / 端口冲突) 权限问题:以管理员身份运行安装程序(Windows)或使用sudo(Linux)。依赖缺失: Windows 需安装 Visual C++ Redistributable(如 2013 版)。Linux 通过包管理器安装依赖(如libaio、perl)。端口冲突: 检查 33…...

Codeforces Round 1019 (Div. 2)(ABCD)

A. Common Multiple 翻译&#xff1a; 给你一个整数数组 a1,a2,...,an。如果存在一个数组 y1,y2,...,ym&#xff0c;且 y 的元素是不同的&#xff08;换句话说&#xff0c;对于所有 1≤i<j≤m 的数组&#xff0c;yi≠yj&#xff09;&#xff0c;并且对于所有 1≤i≤m 的数组…...

爬虫学习总结

通过前几次课&#xff0c;我们学习了爬虫的相关基础知识。 以下是我对爬虫学习做的一些总结&#xff1a; 一、认识爬虫&#xff1a;开启数据抓取之旅 1.1 什么是网络爬虫​ 网络爬虫就像是一个不知疲倦的 “数据搬运工”&#xff0c;它能按照预先设定的规则&#xff0c;自动…...

UE5的 Modify Curve 蓝图节点

In Unreal Engine’s Animation Blueprints, the Modify Curve node lets you drive and alter any named Animation Curve on your character at runtime. The Apply Mode setting on that node controls how the “new” value you feed in (via the added curve‐input pin)…...

鸿蒙中的并发线程间通信、线程间通信对象

目录 并发线程间通信1. 线程间通信对象1.1 普通对象1.2 ArrayBuufer对象1.3 SharedArrayBuffer对象1.4 Transferable对象&#xff08;NativeBinding对象&#xff09;1.5 Sendable对象简介异步锁ASON解析与生成共享容器共享模块Sendable对象冻结 2 线程间通信场景2.1 使用TaskPo…...

Elasticsearch内核探秘:从Shard分配到网络通信的深度实践指南

#作者&#xff1a;孙德新 文章目录 一、底层模块深入解析之shard allocation1、shard allocation的介绍2、cluster level shard allocation介绍3、disk-based shard allocation介绍4、shard allocation awareness5、shard allocation filtering6、node下线时的shard延迟分配7、…...

Vue3 模板语法

目录 一、插值语法 {{ }} 二、核心指令 三、动态属性绑定 四、事件修饰符 五、条件渲染 vs 列表渲染总结 六、最佳实践 示例 1&#xff1a;插值语法 & 基础绑定 示例 2&#xff1a;条件渲染 示例 3&#xff1a;列表渲染 示例 4&#xff1a;事件处理 示例 5&…...

第1节:Backtrader到底是个啥?能干嘛?

——“框架在手&#xff0c;天下我有&#xff1b;不是吹&#xff0c;Backtrader真香警告&#xff01;” &#x1f423; 一句话简介 Backtrader 是一个 专门为量化交易打造的 Python 回测框架&#xff0c;说白了&#xff0c;它就是一个量化策略“模拟器控制台评审团”&#xff…...

Java基础第21天-正则表达式

正则表达式是对字符串执行模式匹配的技术 如果想灵活的运用正则表达式&#xff0c;必须了解其中各种元字符的功能&#xff0c;元字符从功能上大致分为&#xff1a; 限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 转义号\\:在我们使用正则表达式去检索某些特…...

【Pandas】pandas DataFrame mod

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象&#xff08;如 DataFrame、Series 或标量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...

【哈希表】1399. 统计最大组的数目

1399. 统计最大组的数目 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数 n 。请你先求出从 1 到 n 的每个整数 10 进制表示下的数位和&#xff08;每一位上的数字相加&#xff09;&#xff0c;然后把数位和相等的数字放到同一个组中。 请你统计每个组中的数字数目&…...

57、Spring Boot 最佳实践

Spring Boot 最佳实践 一. 开发规范与代码风格 编写高质量的代码不仅需要功能的实现,还需要遵循一定的规范和代码风格,以提高代码的可读性、可维护性和协作效率。以下是 Spring Boot 开发中的一些关键规范和代码风格建议。 1. 代码命名规范 在编写代码时,命名是非常重要的…...

Java高级:数据库访问优化

系列文章目录 Java高级部分 JDBC编程 文章目录 系列文章目录前言一、编写属性文件&#xff1a;二、编写DBUtil工具类&#xff1a;三、使用DBUtil工具类&#xff1a;总结 前言 通过我之前发的数据库连接&#xff0c;数据库连接https://blog.csdn.net/2301_81776550/article/det…...

升级xcode16之后react-native-zip-archive不兼容,unsupported option ‘-G‘

问题 升级xcode到16之后,xcode build报错:unsupported option -G for target x86_64-apple-ios13.4-simulator (in target RNZipArchive from project Pods) 出现原因 在 React Native 项目中,当你将 Xcode 升级到 16 后,可能会遇到 RNZipArchive 相关的编译错误,特别是…...

基于MTF的1D-2D-CNN-LSTM-Attention时序图像多模态融合的故障识别,适合研究学习(Matlab完整源码和数据),附模型研究报告

基于MTF的1D-2D-CNN-LSTM-Attention时序图像多模态融合的故障识别&#xff0c;适合研究学习&#xff08;Matlab完整源码和数据&#xff09;&#xff0c;附模型研究报告 目录 基于MTF的1D-2D-CNN-LSTM-Attention时序图像多模态融合的故障识别&#xff0c;适合研究学习&#xff0…...

逻辑漏洞安全

逻辑漏洞是指由于程序逻辑不严导致一些逻辑分支处理错误造成的漏洞。 在实际开发中&#xff0c;因为开发者水平不一没有安全意识&#xff0c;而且业务发展迅速内部测试没有及时到位&#xff0c;所以常常会出现类似的漏洞。 由于开发者/设计者在开发过程中&#xff0c;由于代码…...

基于PaddleOCR对图片中的excel进行识别并转换成word优化(二)

0、原图 一、优化地方 计算行的时候&#xff0c;采用概率分布去统计差值概率比较大的即为所要的值。 def find_common_difference(array):"""判断数组中每个元素的差值是否相等&#xff0c;并返回该差值:param array: 二维数组&#xff0c;其中每个元素是一个…...

5.2.3 WPF 中 XAML 文件 Converter 使用介绍

Converter&#xff08;转换器&#xff09;在 WPF 数据绑定中扮演着重要角色&#xff0c;用于在源数据和目标属性之间进行值转换 举例来说&#xff1a;我想用一个bool量来控制一个背景&#xff0c;为true时&#xff0c;显示红色&#xff1b;为false时背景用默认颜色。因此 Backg…...

基于STM32_HAL库的HC-08蓝牙插座项目

基于STM32_HAL库的HC-08蓝牙插座 文章目录 基于STM32_HAL库的HC-08蓝牙插座一、项目需求二、硬件连接三、项目实现3.1 CubeMX配置3.2 以阻塞的方式实现3.3 以中断的方式实现 一、项目需求 通过手机可以控制开发板上的LED或者继电器 二、硬件连接 首先将HC-08蓝牙模块连接到我们…...

SwiftUI 3.Button介绍和使用

SwiftUI 的 Button 是用于触发用户操作的核心交互组件。以下是 Button 的详细介绍和使用示例&#xff1a; 一、基础用法 1. 创建简单按钮 Button("点击我") {print("按钮被点击了") }2. 自定义按钮内容 Button {// 点击动作 } label: {Text("保存&…...

Linux 管道理解

一、什么是管道 1.1 unix中最古老的进程间通信 1.2 一个进程链接到另一个进程的数据流称为“管道”&#xff1a; 图解&#xff1a; 二、管道通信的原理 2.1当我们创建一个进程然后打开一个文件的时候 会经过以下步骤&#xff1a; ①首先要描述这个进程&#xff0c;为这个…...

从并发问题衍生出的Spring的七种事务传播行为

最近在处理一个BPM流程时&#xff0c;遇到了并发问题&#xff0c;原因是事务粒度太大了&#xff0c;导致等待lock超时。今天刚好借此机会分享下Spring框架中提供的7种事务传播行为。 在 Spring中&#xff0c;Transactional 注解支持配置事务的传播行为&#xff0c;用于指定当一…...

第十五届蓝桥杯 2024 C/C++组 艺术与篮球

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷 艺术…...

Python内置函数---bin()

用于将整数转换为二进制字符串 1. 基本语法与参数 bin(x) 参数&#xff1a; x 必须为整数&#xff08; int 类型&#xff09;&#xff0c;或实现了 __index__() 方法的自定义对象&#xff08;该方法需返回整数&#xff09; 。 返回值&#xff1a;以 0b 开头的二进制字符串。…...

网络socks 代理

在系统/终端中设了这样的环境变量&#xff0c;而没有在代码中覆盖&#xff0c;HTTPX 就会启用该 socks 代理。 env | grep proxy https_proxyhttps://proxyhk.zte.com.cn:80 http_proxyhttp://proxyhk.zte.com.cn:80 no_proxylocalhost,127.0.0.0/8,::1,zte.com.cn,zte.intra,…...

【正则表达式】核心知识点全景解析

目录 一、基础语法架构二、核心元字符详解三、高级匹配技巧1. 字符集合2. 分组与引用3. 断言机制 四、Python re模块核心方法五、性能优化策略1. 编译重用2. 避免回溯陷阱3. 选择高效量词 六、典型应用场景1. 数据验证2. 数据提取3. 文本清洗 七、调试技巧宝典1. 可视化调试工具…...

深度学习--ResNet残差神经网络解析

文章目录 前言一、什么是ResNet网络二、传统卷积神经网络存在的问题1、梯度消失和梯度爆炸2、退化问题 三、如何解决问题四、残差结构五、18层残差网络1、解释2、隔层相加优点3、隔层相加数值增大问题 六、18层残差网络以外的表格示例七、BN层&#xff08;Batch Normalization&…...

数据结构线性表的顺序存储结构

线性表是由零个或多个数据元素组成的有序序列。 特点&#xff1a; 数据元素间是有顺序的&#xff1b; 数据元素的个数是有限的&#xff1b; 一般来说&#xff0c;数据元素的类型是相同的&#xff08;强类型语言&#xff09;。c/c是强类型语言&#xff0c;必须指定数据类型。…...

深入解析C++ STL Queue:先进先出的数据结构

一、引言 在计算机科学中&#xff0c;队列&#xff08;Queue&#xff09;作为一种遵循先进先出&#xff08;FIFO&#xff09;​原则的数据结构&#xff0c;是算法设计和系统开发的基础组件。C STL中的queue容器适配器以简洁的接口封装了底层容器的操作&#xff0c;为开发者提供…...

永磁同步电机控制算法-反馈线性化控制

一、原理介绍 基于非线性系统的精确线性化控制方法&#xff0c;采用精确反馈线性化原理对永磁同步电机进行输入-输出线性化&#xff0c;该方法通过坐标变换和状态反馈将系统的数学模型转变为两个线性子系统&#xff0c;在实现线性化的同时也对系统中电流和转速存在的耦合现象进…...

开源 RAG 引擎:文档理解精准、检索高效、可视化干预灵活,一站式搞定

引言&#xff1a; RAGFlow 是一款基于深度文档理解的开源 RAG 引擎&#xff0c;与 LLM 结合后可实现精准引用问答。它支持 20 多种文档格式解析&#xff0c;配备智能分块策略及混合检索方案&#xff0c;还有可视化干预界面&#xff0c;且支持 Docker 快速部署&#xff0c;堪称…...

URP-UGUI相关知识

一、UGUI的基本组成部分 Canvas &#xff08;画布&#xff09;所有UI都需要放在Canvas画布下面&#xff0c;不然无法显示EventSystem 所有的事件响应系统都需要依赖于EventSystem,若删除该组件&#xff0c;交互效果就 不会显示 1.Canvas(画…...

COMSOL多孔结构传热模拟

多孔结构传热模拟涉及对多孔介质内部复杂的热量传递过程进行建模和分析&#xff0c;这类模拟对于优化材料设计、提高能源效率以及解决环境问题等方面具有重要意义。本案例介绍在COMSOL内建立全连通多孔结构几何模型&#xff0c;并将孔隙及基体划分两相材料&#xff0c;进行多孔…...

【CSS】层叠,优先级与继承(四):层叠,优先级与继承的关系

层叠&#xff0c;优先级与继承的关系 前文概括 【CSS】层叠&#xff0c;优先级与继承&#xff08;一&#xff09;&#xff1a;超详细层叠知识点 【CSS】层叠、优先级与继承&#xff08;二&#xff09;&#xff1a;超详细优先级知识点 【CSS】层叠&#xff0c;优先级与继承&am…...

CDN加速http请求

一、CDN加速定义 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;是通过全球分布式节点服务器缓存网站内容&#xff0c;使用户就近获取数据的技术。其核心目标是缩短用户与内容之间的物理距离&#xff0c;解决网络拥塞、带宽不足等问题&#xff…...