自动驾驶中的多传感器时间同步
目录
前言
1.多传感器时间特点
2.统一时钟源
2.1 时钟源
2.2 PPS+GPRMC
2.3 PTP
2.4 全域架构时间同步方案
3.时间戳误差
3.1 硬件同步
3.2 软件同步
3.2.3 其他方式
① ROS 中的 message_filters 包
② 双端队列 std::deque
参考:
前言
对多传感器数据(Lidar,Camera,GPS/IMU)进行高精度的时间同步的原因:
- 1.每个传感器拥有自己的内部时钟,时钟之间存在“钟漂”,导致各传感器的时间基准不一致;
- 2.不同的传感器采样频率不一样;
- 3.数据传输、Camera 曝光等会产生不可控的延迟。
1.多传感器时间特点
传感器 | 时间特点 |
GNSS | GNSS 接收机在接收到卫星信号后,通过解算即可获得接收机系统时间与卫星原子钟之间钟差,并通过钟差来校准自己的系统时间,完成授时功能。 |
Camera | 自动驾驶上使用的相机(Rolling Shutter)一般是支持外部触发曝光的。 Camera 帧周期包括曝光时间(exposure time)和读出时间(readout time,cmos 相同时固定)。 |
Lidar | 自动驾驶中所使用的 Lidar,例如 Mid-360,从硬件层面上支持PPS+NMEA协议(PPS硬件触发,GPRMC授时)。LiDAR 通常支持两种时间同步接口:基于以太网的PTP/gPTP时间同步和基于GPS的PPS+NMEA协议。 |
Rader | 主流的车载毫米波雷达采用 FMCW 调制方式,上电后开始进行信号的发送和接收,内部有专门的时间机制,无法接收外部的时间。但毫米波雷达周期性发送 CAN 信号,所以可以从 CAN 信号中获取时间信息。 |
IMU | 一般和 Lidar/GNSS 集成,不需要额外考虑。 |
2.统一时钟源
为了解决“钟漂”问题,提供一个所有传感器都遵循的共同时间基准,我们引入了统一时钟源的概念,如下图所示:
统一时钟源有两种常见方式:一种是基于 GPS 的 “PPS+NMEA” (秒脉冲+GPRMC),另一种是基于以太网的 PTP(IEEE 1588)、gPTP(IEEE 802.1AS)时钟同步协议。 自驾领域主流的方案是结合上述两种方案,以 GNSS 时钟时间为基准时间,采用 PTP/gPTP 时钟同步协议统一各 传感器/域 之间的时钟源,完成时间基准的统一。
2.1 时钟源
自动驾驶系统目前绝大多数标配高精度 GNSS 接收机,而 GNSS 中导航卫星内置高精度原子钟,GNSS接收机通过解算导航卫星信号(大于等于 4 颗卫星的信号),可以获得接收机系统时间与卫星原子钟之间钟差,并通过钟差来校准自己的系统时间,得到超高精度的时钟信号,这就是GNSS 的授时功能。
原子钟是人类目前最精确的时间测量仪器,原子在不同能级之间的移动称为“跃迁”,且由高能级跃迁到低能级时,会释放电磁波。而对同一种原子来说,这种频率是固定的,且不受温度和压力影响,只与自身能量有关,物理学上称之为“共振频率”。物理学家通过一些物理手段,获得共振频率的准确物理值。并以此值作为产生时间信号的基本节拍,即丈量时间的基本单位。据相关报道,北斗三号卫星上的原子钟300年才会有1s累积误差。
2.2 PPS+GPRMC
GNSS 接收机获取时钟信号后,会输出两类同步信号:①同步脉冲信号 PPS。其时间周期为 1s ,脉冲宽度5ms~100ms;②GPRMC 时间同步报文。通过标准串口输出,符合 GPRMC 格式,用于提供精确的时间同步信息。
GPRMC 是一种包含UTC时间(精确到秒),经纬度定位数据的标准格式报文。其格式如下:
# 示例数据
$GPRMC,001155.00,A,2237.496474,N,11356.089515,E,0.0,225.5,230520,2.3,W,A*28# 数据说明
field 0:$GPRMC, 格式ID,表示该格式为建议的最低特定GPS / TRANSIT数据(RMC)推荐最低定位信息
field 1: UTC时间, 格式hhmmss.ssss,代表时分秒.毫秒
field 2: 状态 A:代表定位成功 V:代表定位失败
field 3: 纬度 ddmm.mmmmmm 度格式(如果前导位数不足,则用0填充)
field 4: 纬度 N(北纬) S(南纬)
field 5: 经度 dddmm.mmmmmm 度格式(如果前导位数不足,则用0填充)
field 6: 经度 E(东经) W(西经)
field 7: 速度(也为1.852 km / h)
field 8: 方位角,度(二维方向,等效于二维罗盘)
field 9: UTC日期 DDMMYY 天月年
field 10: 磁偏角(000-180)度,如果前导位数不足,则用0填充)
field 11: 磁偏角方向E =东W =西
field 12: 模式,A =自动,D =差分,E =估计,AND =无效数据(3.0协议内容)
field 13: 校验和
其中 PPS 前沿时刻与 GPRMC报文 的发送在同一时刻,误差为 ns 级别,可以忽略。PPS 秒脉冲(通常为1PPS,即1次每秒)为物理电平输出,接收及处理 PPS 信号的时间在 ns 级别,依旧可以忽略。但 GPRMC数据一般通过波特率 9600 的串口发送,其发送、接收、处理时间 tx 在 ms 级别,是时间同步的关键。以下是使用 PPS+GPRMC 进行时间同步的原理。
- (1)设备收到 PPS 秒脉冲信号后,将内部以晶振为时钟源的系统时间里的毫秒及以下时间清零,并由此开始计算毫秒时间。
- (2)当收到 GPRMC 数据后,提取报文里的年、月、日、时、分、秒的 UTC 时间。
- (3)将收到秒脉冲到解析出 GPRMC 中 UTC 时间所用的时间 tx,与 UTC 整秒时间相加,同步给系统时间,至此已完成一次时间同步。下一秒再进行相同的过程,每秒准确校准一次。
基于单纯的 PPS 和 GPRMC 实现整个自动驾驶系统的时间同步的局限:
- PPS信号驱动能力不足:PPS 是一种低功率脉冲信号,驱动电流范围通常为 0.5mA 至 20mA,难以触发多个传感器的稳定工作。
- PPS 信号抗干扰能力较弱:PPS 信号为无屏蔽的单线脉冲信号,在车辆复杂的电磁环境中容易受到干扰。当多条 PPS 线同时布置在车内时,可能难以区分干扰脉冲和有效同步脉冲,导致信号准确性下降。
- GPRMC 报文的传输限制:GPRMC 通过 RS232 串口传输同步报文,RS232 为 1 对 1 的全双工通信形式,可通过主从方式实现有限的 1 对 N 数据传输。然而,若需支持十几台设备的同步传输,实际应用中可能面临困难,需通过实验验证可行性。此外,线束的复杂性会对工程设计造成较大挑战。导远 INS570D 车载组合导航定位系统的 PPS+GPRMC 信息如下:
若将其接入 Mid-360,则参考:Mid-360 时间同步说明
- 时钟源失效的严重后果:当时钟源丢失时,所有依赖同步的设备将失去统一基准,各设备时钟将自主运行,失去全局协调。这种情况在对功能安全要求极高的自动驾驶系统中是不可接受的,需要设计冗余机制以确保在主时钟故障时由备用时钟迅速接替,维持全系统的正常运行。
2.3 PTP
PTP(Precision Time Protocol,IEEE 1588 V2)是基于以太网的高精度时钟同步协议,是一种主从式的时间同步系统,能够实现主节点(Master Node)和从节点(Slave Node)之间的亚微秒级时钟同步,前提是所有节点之间都通过以太网互联,交换机支持 PTP 协议,并且每个节点都支持 PTP 协议。
设备中运行 PTP 协议的网络端口称为 PTP 端口,PTP主端口用来发布时间,PTP从端口用来接收时间。同时定义了三种时钟节点,边界时钟节点(BC,Boundary Clock)、普通时钟节点(OC,Ordinary Clock)和透明时钟节点(TC,Transparent clock)。
- (1)边界时钟节点拥有多个PTP端口,其中一个用来同步上游设备时间,其余端口用来向下游设备发送时间。当边界时钟节点的上游时间同步设备是GNSS接收机时,此时的边界时钟节点就是一个主时钟节点(最优时钟)
- (2)普通时钟节点只有一个PTP端口,用来同步上游时钟节点的时间。
- (3)透明时钟节点具有多个PTP端口,收到什么时间,转发什么时间,不进行协议解析,内部不参与时间同步。
PTP通过在主从设备之间交互同步报文,并记录下报文发送时间,从而计算网络传输延迟和主从设备间时钟的偏差。PTP定义了四条同步报文:Sync、Follow_Up、Delay_Req、Delay_Resp,精确同步过程如下:
- (1)PTP 主端口向从端口发送 Sync 报文,同步记录下 Sync 发送的时间 t1。从端口收到 Sync 报文后,记录下收到的时间 t2。
- (2)紧接着主端口将 t1 时间放到 Follow_Up 报文发送给从端口,从端口收到此报文后就可以解析出 t1,并由此得到第一个方程式:t1 + T_delay(网络延时)+ T_offset(时钟偏差)= t2。
- (3)从端口向主端口发送 Delay_Req 报文,同步记录下 Delay_Req 发送的时间 t3。主端口收到报文后,记录下收到的时间 t4。
- (4)紧接着主端口将 t4 时间放到 Delay_Resp 报文发送给从端口,从端口收到此报文后就可以解析出 t4,并由此得到第二个方程式:t3 + T_delay(网络延时)- T_offset(时钟偏差)= t4。
这里假设网络延迟是对称的,即上下行的延迟相等。解方程组得:
2.4 全域架构时间同步方案
全域架构下,智驾域控制器因为直接连接GNSS接收机(或内置),而GNSS又是绝佳的时钟源,因此智驾域控制器自然而然成为主时钟节点,中央网关域控制器通过车载以太网主干网串联起其它域控制器,自然而然成为边界时钟的最佳选择,这样在时钟源丢失的时候,边界时钟节点同步主时钟节点的系统时间,仍然可以保持整个全域架构内相对时间一致。
其它域内传感器、执行器的时间同步需求,若没有,此域控制器设计成普通时钟节点即可。如有,可以设计成边界时钟,以保证无时钟源时的相对时间统一。
基于以太网设备的时间同步方案已经完善,而对于非车载以太网设备但有非常强烈同步需求的相机,我们还得特殊处理一下。将相机设置为外触发模式,通过主控给相机外触发脉冲信号, 即 PPS。相机拍照时,曝光时刻也会产生脉冲信号发送给主控,主控记录此时系统时间,并将时间戳数据放到相机的图像数据里。
3.时间戳误差
完成时钟源的统一后,每个传感器数据都有了全局一致的时间参考。但会面临一个新问题,不同的传感器采样频率不一样,比如激光雷达(通常为 10Hz)和相机(通常为 30Hz)。导致在特定时间获取同步数据可能会有延迟,在动态环境中可能造成较大的误差。
如下图所示,三个传感器具有不同的采样频率。在 T1 时刻,传感器2 有一个数据,此时,我们需要对应传感器1 和 3的数据是多少,就会进行查找。查找的方式就是找对应的传感器数据和传感器2时间差最近的数据包。如果查找的数据包时间和 T1 时刻传感器2 数据包的差距较大,在加上车身和障碍物都在移动,这样误差会比较大。为了缓解查找时间戳造成的误差现象,主要采用的方式有硬件同步和软件同步。
3.1 硬件同步
硬件同步是一种通过物理信号来确保不同传感器数据采集时间一致性的方法。一种常见的硬件同步方法是使用 PPS 信号作为触发器。PPS 信号是一个精确的时钟信号,可以触发传感器在特定的时间点采集数据,以此来改变传感器的数据采集频率。GNSS系统除了可以作为统一的时钟源外,还可以利用其 PPS 脉冲来触发传感器在特定的时间点采集数据,当使用 GNSS 的 PPS 脉冲时,传感器给出的数据包中的时间戳即为对齐到绝对时间的上的全局时间戳(GPS时间戳)而非传感器时间戳。由于 GNSS 的 PPS 的频率通常只有 1Hz,所以通常需要一个设备把 PPS 信号转发为任意频率(分频,1Hz -> 10Hz)、但是跟原始 PPS 信号同相位的方波,这样就可以控制各传感器的采集频率了。
例如,激光雷达和相机可以配置为在 PPS 信号的上升沿采集数据,从而确保两者的数据采集是同步的。具体来说,激光雷达可以利用其相位锁定功能来实现与 PPS 信号的同步,如下图所示。通过设置激光雷达的相位锁定角度与相机视野的中心对齐,可以在激光雷达的激光束旋转到相机视野中心线时触发相机,实现两者的同步采集。
当然,由于激光雷达是连续旋转采集数据,而相机则是瞬间曝光,因此硬件同步只能近似实现。例如,激光雷达的帧率若是 10Hz,那么一帧点云中最早和最晚采集的点之间的时间差可能达到 100ms。相机由于曝光是瞬时的,其所有像素点的采集时刻是一致的。因此,对于相机视野中心的点云,采集时间与图像采集时间一致,但对于视野边缘的点云,存在一定的时间偏差,这个偏差可能在 5ms 到 20ms 之间。
3.2 软件同步
软件同步是一种在数据处理阶段对传感器数据进行时间校正的方法。当硬件同步无法实现或不足以满足系统要求时,软件同步提供了一种解决方案,利用已知的时间标签和传感器的运动信息来推算传感器数据的准确时间点。
内插外推法是软件同步中常用的一种算法。通过以下步骤实现同步:
- 时间差计算:首先,计算两个传感器数据帧之间的时间差。例如,如果有一个激光雷达(Lidar)数据帧和一个相机数据帧,它们的时间标签可能不同,我们需要找出这两个时间标签之间的差异。
- 运动信息获取:收集传感器在两个时间标签期间的运动信息,这通常包括速度、加速度和旋转等。
- 位置推算:利用传感器的运动信息和时间差,通过物理模型或机器学习模型推算目标在两个时间点之间的位置变化。
- 建立新帧:根据推算出的目标位置,创建一个新的数据帧,这个新帧代表了两个原始数据帧之间的某个时间点的状态。
软件同步通过智能的数据处理技术弥补了硬件同步的不足,提高了传感器数据的同步精度,当然,它也需要额外的计算和实时性要求,需要精心设计和优化算法来实现高效准确的同步。
3.2.3 其他方式
① ROS 中的 message_filters 包
ROS 提供了message_filters 包来进行时间软同步,message_filters 类似一个消息缓存,分别订阅不同传感器的 Topic,当消息到达消息过滤器时,并不会立即输出,而是在满足一定条件下输出,产生一个同步结果并给到回调函数,在回调函数里处理时间同步后的数据。
message_filters 只是输出时间轴上相近的不同传感器的数据,不能做到主动去同步!详情参考 ROS时间同步----使用message_filters进行时间软同步。
② 双端队列 std::deque
使用双端队列 std::deque 存储不同传感器的数据,根据不同传感器数据的时间戳进行判断,对满足时间同步要求的数据进行处理。类似 message_filters 包,只是输出时间轴上相近的不同传感器的数据。
详情可参考:从零开始做自动驾驶定位(六): 传感器时间同步
std::queue buf1;
std::queue buf2;
std::thread process;
//typedef M 传感器数据类型,比如sensor_msg::PointCloud2、sensor_msg::Image等等
void callback1(M& msg){//数据入队buf1.push(msg);//其他代码...
}
void callback2(M& msg){//数据入队buf2.push(msg);//其他代码...
}
void process_comparation(){while(ros::ok()){M data1=buf1.front();M data2=buf2.front();if(data1.header.timestamp.toSec()>data2.header.timestamp.toSec()){buf2.pop();}else buf1.pop();//其他操作data1和data2的代码}
}
int main(int argc,char** argv){//initialization}
参考:
多传感器时间同步----概述
多传感器融合之时间同步----具体
时间同步,自动驾驶里的花好月圆----PPS+GPRMC原理
PTP(IEEE 1588)和 gPTP(802.1AS)时间同步方法
智能驾驶数据融合中的精确时间同步:PTP/gPTP
时间同步协议:gPTP(802.1AS)和 PTP(IEEE 1588)
相关文章:
自动驾驶中的多传感器时间同步
目录 前言 1.多传感器时间特点 2.统一时钟源 2.1 时钟源 2.2 PPSGPRMC 2.3 PTP 2.4 全域架构时间同步方案 3.时间戳误差 3.1 硬件同步 3.2 软件同步 3.2.3 其他方式 ① ROS 中的 message_filters 包 ② 双端队列 std::deque 参考: 前言 对多传感器数据…...
三元组抽取在实际应用中如何处理语义模糊性?
在实际应用中,三元组抽取面临语义模糊性的问题,这主要体现在输入文本的非规范描述、复杂句式以及多义性等方面。为了有效处理这种模糊性,研究者们提出了多种方法和技术,以下是一些关键策略: 基于深度学习的方法 深度学…...
代码随想录刷题day16|(哈希表篇)349.两个数组的交集
目录 一、哈希表理论基础 二、集合set在哈希法中的应用 三、相关算法题目 四、相关知识点 1.set集合特点和常用方法 1.1 set集合概述 1.2 set集合特点 1.3 常用方法 2.set集合转换成数组 法1:另新建一个数组 法2:将结果集合转为数组 ▲ 3.数组…...
浅谈Redis
2007 年,一位程序员和朋友一起创建了一个网站。为了解决这个网站的负载问题,他自己定制了一个数据库。于2009 年开发,称之为Redis。这位意大利程序员是萨尔瓦托勒桑菲利波(Salvatore Sanfilippo),他被称为Redis之父,更…...
整数的个数(信息学奥赛一本通-1067)
【题目描述】 给定k(1<k<100)个正整数,其中每个数都是大于等于1,小于等于10的数。写程序计算给定的k个正整数中,1,5和10出现的次数。 【输入】 输入有两行:第一行包含一个正整数k,第二行包含k个正整数…...
macos的图标过大,这是因为有自己的设计规范
苹果官方链接:App 图标 | Apple Developer Documentation 这个在官方文档里有说明,并且提供了sketch 和 ps 的模板。 figma还提供了模板: Figma...
C++17 命名空间的新特性:简化与优化的典范
文章目录 1. 简化的嵌套命名空间1.1 背景与问题1.2 C17的解决方案1.3 实际应用场景1.4 注意事项 2. 声明多个名称的using声明2.1 背景与问题2.2 C17的解决方案2.3 实际应用场景2.4 注意事项 3. 属性命名空间的简化3.1 背景与问题3.2 C17的解决方案3.3 实际应用场景3.4 注意事项…...
使用python-docx包进行多文件word文字、字符批量替换
1、首先下载pycharm。 2、改为中文。 3、安装python-docx包。 搜索包名字,安装。 4、新建py文件,写程序。 from docx import Documentdef replace1(array1):# 替换词典(标签值按实际情况修改)dic {替换词1: array1[0], 替换…...
模块初阶学习
当我们在过去想要实现一个功能时,例如Swap交换函数时,我们需要不断考虑参数的正确与否。如果是在c语言,我们还需要不断更改函数名字,以防止函数名重复。在c我们可以通过函数名重载解决这个问题,但还是有一些小问题&…...
华为 Ascend 平台 YOLOv5 目标检测推理教程
1. 背景介绍 随着人工智能技术的快速发展,目标检测在智能安防、自动驾驶、工业检测等领域中扮演了重要角色。YOLOv5 是一种高效的目标检测模型,凭借其速度和精度的平衡广受欢迎。 华为 Ascend 推理框架(ACL)是 Ascend CANN 软件…...
16.好数python解法——2024年省赛蓝桥杯真题
问题描述 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位…)上的数字是奇数,偶数位(十位、千位、十万位…)上的数字是偶数,我们就称之为“好数”。 给定一个正整数N,请计算从1到N一共有多少个好数。 输入格式 一个整数N。 输出格式 一个整数代表答案。 样例输入 1 …...
在WSL使用gnome终端
默认在windows11环境下使用WSL会打开windows终端,如果想要使用gnome终端可以进行如下操作 确保 WSLg 已启用: WSLg 默认在 Windows 11 和最新版本的 WSL 2 中启用。 检查 WSL 版本: wsl --list --verbose 如果未启用 WSLg,请更…...
评估篇| 大模型评测综述
在传统的自然语言任务下,如分类等,经常会用精确率、F1等指标,来评测模型的好坏。随着大模型技术研究的快速发展,以往的指标,对于大模型评估显得过于单薄。如何准确地评估大语言模型在不同维度的能力水平,已经成为当前研究的热点问题。为了全面考察大语言模型的有效性,研…...
Ubuntu下载zenodo文件Ubuntu download zenodo
一般数据集文件会比较大,直接下载单个压缩包很慢。可以使用代码多线程下载小文件。 环境 Ubuntu22.04 示例代码 pip3 install zenodo_get zenodo_get https://zenodo.org/records/13715870参考 https://github.com/dvolgyes/zenodo_get...
OpenHarmony 5.0.2 Release来了!
版本概述 OpenHarmony 5.0.2 Release版本对标准系统的能力进行持续完善,以快速迭代的方式推出API 14,相比5.0.1 Release版本,重点做出了如下特性新增或增强: 进一步增强ArkUI、图形图像的能力,提供更多组件的高级属性…...
蓝桥杯3519 填充 | 分类讨论
题目传送门 很简单,遍历一次字符串,将‘?’作为0或1处理,发现00和11统计次数即可。 s str(input()) cnt 0 arr [00, 11, 0?, ?0, 1?, ?1, ??] i0 while i < len(s)-1:if s[i:(i2)] in arr:i 2cnt 1else:i 1 print(cnt)END✨...
均值(信息学奥赛一本通-1060)
【题目描述】 给出一组样本数据,包含n个浮点数,计算其均值,精确到小数点后4位。 【输入】 输入有两行,第一行包含一个整数n(n小于100),代表样本容量;第二行包含n个绝对值不超过1000的…...
Windows Docker Desktop安装及使用 Docker 运行 MySQL
Docker Desktop是Docker的官方桌面版,专为Mac和Windows用户设计,提供了一个简单易用的界面来管理和运行Docker容器。它集成了Docker引擎,为开发人员提供了一个快速、可靠、可扩展的方式来构建、运行和管理应用。DockerDesktop的优势在于&…...
关于使用微服务的注意要点总结
一、防止过度设计 微服务的拆分一定要结合团队人员规模来考虑,笔者就曾遇到过一个公司的项目,是从外部采购回来的,微服务划分为十几个应用,我们在此项目基础上进行自行维护和扩展。由于公司业务规模不大,而且二次开发的…...
对于RocksDB和LSM Tree的一些理解
LSM Tree的读写过程 HBase、LevelDB,rocksDB(是一个引擎)底层的数据结构是LSM Tree适合写多读少的场景,都是追加写入内存中的MemTable,写入一条删除(或修改)标记,而不用去访问实际的…...
Pyecharts之特殊图表的独特展示
在数据可视化的世界里,除了常见的柱状图、折线图、饼图等,还有一些特殊的图表可以为我们带来独特的展示效果,帮助我们以更有趣、更直观的方式呈现数据。Pyecharts 为我们提供了多种特殊图表的绘制功能,本文将介绍象形图、水球图和…...
【Uniapp-Vue3】动态设置页面导航条的样式
1. 动态修改导航条标题 uni.setNavigationBarTitle({ title:"标题名称" }) 点击修改以后顶部导航栏的标题会从“主页”变为“动态标题” 2. 动态修改导航条颜色 uni.setNavigationBarColor({ backgroundColor:"颜色" }) 3. 动态添加导航加载动画 // 添加加…...
图像处理算法研究的程序框架
目录 1 程序框架简介 2 C#图像读取、显示、保存模块 3 C动态库图像算法模块 4 C#调用C动态库 5 演示Demo 5.1 开发环境 5.2 功能介绍 5.3 下载地址 参考 1 程序框架简介 一个图像处理算法研究的常用程序逻辑框架,如下图所示 在该框架中,将图像处…...
c语言操作符(详细讲解)
目录 前言 一、算术操作符 一元操作符: 二元操作符: 二、赋值操作符 代码例子: 三、比较操作符 相等与不相等比较操作符: 大于和小于比较操作符: 大于等于和小于等于比较操作符: 四、逻辑操作符 逻辑与&…...
神经网络|(四)概率论基础知识-古典概型
【1】引言 前序学习了线性回归的基础知识,了解到最小二乘法可以做线性回归分析,但为何最小二乘法如此准确,这需要从概率论的角度给出依据。 因此从本文起,需要花一段时间来回顾概率论的基础知识。 【2】古典概型 古典概型是我…...
省市区三级联动
引言 在网页中,经常会遇到需要用户选择地区的场景,如注册表单、地址填写等。为了提供更好的用户体验,我们可以实现一个三级联动的地区选择器,让用户依次选择省份、城市和地区。 效果展示: 只有先选择省份后才可以选择…...
阿里云服务器部署windows随手笔记(Vue+SpringBoot)
服务器管理 创建管理实例 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 注意:需要开放端口: 点击实例ID/名称——安全组——安全组列表——管理规则—— 安全组详情——入方向——手动添加端口号(例如目的8080&…...
79,【3】BUUCTF WEB [GXYCTF2019]BabysqliV3.0
进入靶场 现在做多了其他类型,老喜欢这个页面了,老朋友admin password 老规矩,桌面有啥就传啥 第一次点击上传什么都不显示 点了两次就有下面开头的那段话了 他在最后还偷偷骂了一句 确实连不上 再回顾一下题目 buuctf打不开了 只能看别人…...
【问题】Chrome安装不受支持的扩展 解决方案
此扩展程序已停用,因为它已不再受支持 Chromium 建议您移除它。详细了解受支持的扩展程序 此扩展程序已停用,因为它已不再受支持 详情移除 解决 1. 解压扩展 2.打开manifest.json 3.修改版本 将 manifest_version 改为3及以上 {"manifest_ver…...
【AI日记】25.01.25
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛:Forecasting Sticker Sales 读书 书名:法治的细节 律己 AI:8 小时,良作息:00:30-8:30, 良短视频&…...
C语言程序设计:算法程序的灵魂
文章目录 C语言程序设计:算法程序的灵魂算法数据结构程序数据结构算法数值运算算法非数值运算算法 简单的算法举例【例2.1】求12345【例2.2】有50个学生,要求输出成绩在80分以上的学生的学号和成绩 简单的算法举例【例2.3】判定2000—2500年中的每一年是…...
jupyter配置说明
使用以下命令修改jupyter的配置文件参数: vim /root/.jupyter/jupyter_lab_config.py #这里填写远程访问的IP名,填*则默认是主机IP名 c.ServerApp.ip * # 这里的密码填写上面生成的密钥 c.ServerApp.password ************************************…...
医学图像分割 sliver07_肝脏数据集处理
医学图像分割 sliver07_肝脏数据集处理 先简单介绍一下sliver07 数据集 Sliver07 数据集 Sliver07 (Segmentation of the Liver Competition 2007) 是由 MICCAI(医学图像计算与计算机辅助干预学会)组织的经典医学图像分割数据集,主要用于肝…...
1.25寒假作业
web:[UUCTF 2022 新生赛]ez_rce 打开环境,先理解代码,注重代码审计的能力 定义以get传参的方式传参code函数,所以后面我们肯定要以’code...‘的方式去实现操作,后面禁用了一系列的字符,包括执行函数和一些…...
gorm中关于事务的一些东西
对于赶时间friends,可以只看每个问题的前几点,不用看后面的代码示例!!! 一. tx : db.Begin()开启事务后,怎么结束或者是关闭事务,是通过tx.Rollback()还是tx.Commit()? 在 GORM 中,…...
【Flask】在Flask应用中使用Flask-Limiter进行简单CC攻击防御
前提条件 已经有一个Flask应用。已经安装了Flask和redis服务。 步骤1:安装Redis和Flask-Limiter 首先,需要安装redis和Flask-Limiter库。推荐在生产环境中使用Redis存储限流信息。 pip install redis Flask-Limiter Flask-Limiter会通过redis存储限…...
竞赛算法总结
滑动窗口 1. 数据规模通常是10的5次方 2. 通常用于与字串相关的问题 3. 通常与哈希表配合 查看当前元素的状态 蓝桥_15. 挑选子串-CSDN博客 蓝桥_全部都有的子序列-CSDN博客 ai总结: 滑动窗口算法虽然很强大,但它的解题思路和实现上也有一些关键点可以注意。以下是一…...
记交叉编译asio_dtls过程
虽然编译成功了,但是还是有一些不妥的地方,参考一下就行了。 比如库的版本选择就有待商榷,我这里不是按照项目作者的要求严格用对应的版本编译的,这里也可以注意一下。 编译依赖库asio 下载地址, 更正一下,我其实用…...
【PyCharm】将包含多个参数的 shell 脚本配置到执行文件来调试 Python 程序
要配置 PyCharm 以使用包含多个参数的 shell 脚本(如 run.sh)来调试 Python 程序,您可以按照以下步骤操作: 创建一个新的运行/调试配置: 在 PyCharm 中,点击“运行”菜单旁边的齿轮图标,选择“…...
PID如何调试,如何配置P,I,D值,如何适配pwm的定时器配置,如何给小车配电源
首先你要搞清楚PID公式原理 PID算法解析PID算法解析_pid滤波算法-CSDN博客 然后你要明白调试原理 首先要确定一个电源 电源决定了你后面调试时电机转动速度大小和pwm占空比的关系,电源电压越大那要转到同一速度所需的占空比越小,反之电源电压越小那要…...
微服务学习-Nacos 注册中心实战
1. 注册中心的设计思路 1.1. 微服务为什么会用到注册中心? 服务与服务之间调用需要有服务发现功能;例如订单服务调用库存服务,库存服务如果有多个,订单服务到底调用那个库存服务呢(负载均衡器)࿰…...
音频 PCM 格式 - raw data
文章目录 raw 音频格式:PCM其他音频格式:mp31. 无损压缩音频(类比 PNG 图像)2. 有损压缩音频(类比 JPEG 图像) 试了一下科大讯飞的音频识别云 api,踩了点坑 与本文无关:讯飞的 api 使…...
什么是波士顿矩阵,怎么制作?AI工具一键生成战略分析图!
当今商业环境瞬息万变,每个企业都面临着越来越多的挑战与机遇。如何科学合理地进行战略管理,成为了每个企业决策者必须直面的重要课题。 在众多战略管理框架中,波士顿矩阵作为一种经典的战略管理工具,因其简洁明了的分析方式而广…...
基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
Maui学习笔记-SignalR简单介绍
SignalR是ASP.NET Core中的一个库,支持服务器与其连接的客服端之间的双象通信,它允许服务器立即将更新的消息推送到客服端,而不是要求客户端轮询服务器来获取更新 创建项目 使用SignalR在服务器实时发送消息给客服端,客服端拿到消息后在UI页面更新 首先创建一个Web API项目 …...
【学习笔记】深度学习网络-深度前馈网络(MLP)
作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…...
C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示
上一篇: C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码&#…...
每日进步一点点(网安)
1.1 level5 查看源码关键部分 $str strtolower($_GET["keyword"]); $str2str_replace("<script","<scr_ipt",$str); $str3str_replace("on","o_n",$str2);<input namekeyword value".$str3.">关键…...
代理模式 - 代理模式的应用
引言 代理模式(Proxy Pattern)是一种结构型设计模式,它允许你提供一个代理对象来控制对另一个对象的访问。代理对象通常会在客户端和目标对象之间起到中介的作用,从而可以在不改变目标对象的情况下,增加额外的功能或控…...
机器学习-线性回归(对于f(x;w)=w^Tx+b理解)
一、𝑓(𝒙;𝒘) 𝒘T𝒙的推导 学习线性回归,我们那先要对于线性回归的表达公示,有所认识。 我们先假设空间是一组参数化的线性函数: 其中权重向量𝒘 ∈ R𝐷 …...