自动驾驶之—车道线感知

零、前言
最近在学习自动驾驶方向的东西,简单整理一些学习笔记,学习过程中发现宝藏up 手写AI
一、视觉系统坐标系
视觉系统一共有四个坐标系:像素平面坐标系(u,v)、图像坐标系(x,y)、相机坐标系 ( x c , y c , z c ) (x_c , y_c , z_c ) (xc,yc,zc)和世界坐标系 ( x ω , y ω , z ω ) (x_ω,y_ω,z_ω) (xω,yω,zω),每种坐标系之间均存在练习。通过图像像素坐标定位到世界坐标系的坐标,需要通过相机标定来解决,其中关键的算法部分在于坐标系转换,而变换需要通过齐次坐标的表示方式来完成。
二、各个坐标系介绍
1. 相机坐标系系统
摄像头的作用是把三维世界中的形状、颜色信息,压缩到一张二维图像上。基于摄像头的感知算法则是从二维图像中提取并还原三维世界中的元素和信息,如车道线、车辆、行人等,并且计算他们与车辆的相对位置;感知算法和相机相关的坐标系有图像坐标系(像素坐标系)、摄像机坐标系、像屏幕坐标系。
1.1 像素坐标系(图像坐标系)
电脑上存储的图像一般以左上角为原点,向右为x正方向,向下为y正方向,单位以’像素’最为常用。图像坐标系为二维坐标系,记为 ( X i , Y i ) (X_i, Y_i) (Xi,Yi)
1.2 摄像机坐标系
由于图像坐标系向右为x,向下为y,所以摄像机坐标系以镜头主光轴中心为原点,一般向右为x正方向,向下为y正方向,向前为z正方向,x, y方向与图像坐标系方向吻合,z方向即为景深,摄像机坐标系记为 ( X c , Y c ) (X_c, Y_c) (Xc,Yc)
1.3 像平面坐标系(成像坐标系)
为了能够定量描述三维空间到二维图像的映射关系,图形学里引入了像平面坐标系,是摄像机坐标系的一个平移,中心仍在摄像机主光轴上。距离光轴中心的距离等于摄像机的焦距,摄像机会在光轴中心后方的底片上成一个缩小的倒像,是真正的像平面 ( X f ′ , Y f ′ ) (X'_f, Y'_f) (Xf,Yf),但是为了分析和计算方便,我们会在光轴中心前方设立一个虚拟像平面上的成像 ( X f , Y f ) (X_f, Y_f) (Xf,Yf)为正像,大小与真实倒像相同。
在这里插入图片描述
1.4 世界坐标系:可以表示任何物体,此时是由相机引入的,单位是m,各个坐标系的关系如下:
在这里插入图片描述
其中 世界坐标系 O w X w Y w Z w O_wX_wY_wZ_w OwXwYwZw 、相机坐标系 O c X c Y c Z c O_cX_cY_cZ_c OcXcYcZc、成像坐标系 O I X I Y I Z I O_IX_IY_IZ_I OIXIYIZI 及像素坐标系 O p X p Y p Z p O_pX_pY_pZ_p OpXpYpZp
2. Lidar 坐标系
Lidar常被用作一个主要的传感器来获取周围环境的3D信息。在多数情况下,Lidar坐标系为右手坐标系,但具体定义可能会因Lidar制造商而异。
在这里插入图片描述
2.1 雷达参数的定义

  • X轴:通常指向Lidar前方,当激光束指向前发射时,与该放下的距离测量会在x轴上产生一个正值
  • Y轴:通常指向Lidar左侧,当激光束指向左侧发射时,与该放下的距离测量会在y轴上产生一个正值
  • Z轴:通常指向Lidar上方,与X和Y垂直,高度测量通常沿Z轴进行,正值代表物体高于Lidar设备,负值代表低于Lidar设备。
    车载Lidar系统的坐标系与车辆坐标系可能不完全对齐,需要一个转换矩阵来在两者之间进行坐标变换,当与摄像头、雷达或其他传感器进行数据融合时,通常需要知道Lidar与这些传感器之间的外部标定参数(如 旋转和平移矩阵),以便在他们之间进行坐标变换。
  1. 自车坐标系
    一般环境中选择一个参考坐标系来描述传感器和物体的位置,该坐标系称为世界坐标系;紫车坐标系指的是以车体后轴中心为原点(因为后轴中心不会随着车摆动而发生相对变化),左前上或右前上的空间坐标系,左(右)一般为横向,前一般为纵向,上指地面以上空间,坐标随车运动而运动,所有的下游需要感知输出的目标都要在自车坐标系下面,BEV视角目标也是指的在这个坐标下。
    在这里插入图片描述
    一般三维空间坐标系用三个正交轴X,Y,Z表示物体的位置,用绕这三个正交轴的旋转角度(roll 滚动角, pitch 俯仰角, yaw 偏航角)表示物体的姿态。时间坐标系只有一个维度。
  2. 相机的参数
  • 相机内参: 内参用来确定摄像机从三维空间到二维图像的投影关系,主要包含三个参数(相机主点、相机焦距、畸变系数),内参是由商家提供,自驾领域。摄像机的内参为常数,使用中不会发生变化,但需要再使用前做好标定工作,摄像机的拍摄过程可以抽象为是从三维摄像机坐标系映射到二维像平面坐标系,再映射到图像坐标系的过程。
  • 焦距(f): 描述了图像传感器与摄像机的透镜之间的距离。通常用两个参数 ( f x ) (f_x) (fx) ( f y ) (f_y) (fy)来表示,分别对应于图像的x轴和y轴,很多情况下,假定 ( f x = f y ) (f_x=f_y) (fx=fy),这意味着像素在两个方向上都是正方向的
  • 主点:是图像中的一个点,通常接近图像的中心,它是3D空间中的点投影到图像平面时所对应的2D点,通常用两个参数 ( c x , c y ) (c_x, c_y) (cx,cy)表示,对应于图像的x轴和y轴上的坐标
  • 畸变系数:真实的透镜可能会引入畸变,导致图像失真,场景的畸变有径向畸变和切向畸变,常见的径向畸变系数为 ( k 1 , k 2 , k 3 ) (k_1,k_2, k_3) (k1,k2,k3), 切向畸变系数为 ( p 1 , p 2 ) (p_1, p_2) (p1,p2)
  • 摄像机的内参可以表示为一个矩阵:
    $ K = [ f x 0 c x 0 f y c y 0 0 1 ] K=\left[ \begin{matrix} f_x & 0 & c_x \\ 0 &f_y & c_y \\ 0 & 0 & 1\\ \end{matrix} \right] K= fx000fy0cxcy1
    这个矩阵通常被称为内参矩阵或者相机矩阵
  • 相机外参:通过二维图像推断物体在三维摄像机坐标系中的位置,例如获得距离深度信息。从二维图像中获取三维距离信息,如果需要获取物体在世界坐标系中的位置,则还需要知道摄像机在世界坐标系中的位姿;这一位姿表示被称为摄像机的外部参数,简称外参,用来决定摄像机坐标与世界坐标之间相对位置关系,在自驾领域,得到这一位置关系还需要一系列的标定和定位工作;相机相对于其他坐标系,旋转+平移矩阵,其中旋转外参与上述欧拉角[yaw, patch,roll],旋转顺序一般为(z-y-x),单位为度,平移外参,相机到目标坐标系中的平移距离,单位米。
    三、坐标系之间的关系
  1. 世界坐标系到相机坐标系

物体之间的坐标系变换都可以表示坐标系的旋转变换加上平移变换,则世界坐标系到相机坐标系的转换关系也是如此。绕着不同的轴旋转不同的角度得到不同的旋转矩阵。如图,绕z轴旋转的示意图:
在这里插入图片描述
在这里插入图片描述
由图可得:
{ x = x ′ c o s θ − y ′ s i n θ y = x ′ s i n θ + y ′ c o s θ z = z ′ \begin{cases}x=x^′cosθ−y^′sinθ \\ y=x^′sinθ+y^′cosθ \\ z=z^′ \end{cases} x=xcosθysinθy=xsinθ+ycosθz=z 转换成矩阵形式就是: [ x y z ] = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ x ′ y ′ z ′ ] = R 1 [ x ′ y ′ z ′ ] \left[ \begin{matrix} x \\ y \\ z \\ \end{matrix} \right] = \left[ \begin{matrix} cosθ&-sinθ&0\\ sinθ&cosθ&0 \\ 0&0&1 \\ \end{matrix} \right] \left[ \begin{matrix} x^′ \\ y^′ \\ z^′ \\ \end{matrix} \right] = R_1\left[ \begin{matrix} x^′ \\ y^′ \\ z^′ \\ \end{matrix} \right] xyz = cosθsinθ0sinθcosθ0001 xyz =R1 xyz
同理,绕x,y轴旋转可得:
[ x y z ] = [ 1 0 0 0 c o s ϕ s i n ϕ 0 − s i n ϕ c o s ϕ ] [ x ′ y ′ z ′ ] = R 2 [ x ′ y ′ z ′ ] \left[ \begin{matrix} x \\ y \\ z \\ \end{matrix} \right] = \left[ \begin{matrix} 1&0&0\\ 0&cosϕ&sinϕ \\ 0&-sinϕ&cosϕ \\ \end{matrix} \right] \left[ \begin{matrix} x^′ \\ y^′ \\ z^′ \\ \end{matrix} \right] = R_2\left[ \begin{matrix} x^′ \\ y^′ \\ z^′ \\ \end{matrix} \right] xyz = 1000cosϕsinϕ0sinϕcosϕ xyz =R2 xyz
[ x y z ] = [ c o s w 0 − s i n w 0 1 0 s i n w 0 c o s w ] [ x ′ y ′ z ′ ] = R 3 [ x ′ y ′ z ′ ] \left[ \begin{matrix} x \\ y \\ z \\ \end{matrix} \right] = \left[ \begin{matrix} cosw&0&-sinw\\ 0&1&0 \\ sinw&0&cosw \\ \end{matrix} \right] \left[ \begin{matrix} x^′ \\ y^′ \\ z^′ \\ \end{matrix} \right] = R_3\left[ \begin{matrix} x^′ \\ y^′ \\ z^′ \\ \end{matrix} \right] xyz = cosw0sinw010sinw0cosw xyz =R3 xyz
最后可以简单总结为旋转矩阵为:
R = R 1 R 2 R 3 R = R_1R_2R_3 R=R1R2R3
平移世界坐标点 ( x w , y w , z w ) (x_w,y_w,z_w) (xw,yw,zw)距离为 ( t x , t y , t z ) (t_x,t_y,t_z) (tx,ty,tz)到相机坐标点 ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc),则有:
[ x c y c z c 1 ] = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ x w y w z w 1 ] \left[ \begin{matrix} x_c \\ y_c \\ z_c \\ 1 \\ \end{matrix} \right] = \left[ \begin{matrix} 1&0&0&t_x\\ 0&1&0&t_y \\ 0&0&1&t_z \\ 0&0&0& 1 \\ \end{matrix} \right] \left[ \begin{matrix} x_w \\ y_w \\ z_w \\ 1 \ \end{matrix} \right] xcyczc1 = 100001000010txtytz1 xwywzw1 
所以,世界坐标系中的点变换到相机坐标系后的坐标:
[ X c Y c Z c ] = R [ X w Y w Z w ] + T \left[ \begin{matrix} X_c \\ Y_c \\ Z_c \\ \end{matrix} \right]=R \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ \end{matrix} \right] + T XcYcZc =R XwYwZw +T ===> [ X c Y c Z c 1 ] = [ R T 0 ⇀ 1 ] [ X w Y w Z w 1 ] \left[ \begin{matrix} X_c \\ Y_c \\ Z_c \\ 1 \\ \end{matrix} \right]=\left[ \begin{matrix}R&T\\ \overset{\rightharpoonup}{0}&1 \end{matrix} \right] \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \\ \end{matrix} \right] XcYcZc1 =[R0T1] XwYwZw1 R: 3x3, T: 3x1
2. 相机坐标系到图像物理坐标系
从相机坐标系到图像坐标系,属于透视投影关系,从3D转换到2D,也可以看成是针孔模型的改变模型,满足三角形相似定理。
在这里插入图片描述
Δ A B O c \Delta ABO_c ΔABOc ~ Δ o C O c \Delta oCO_c ΔoCOc
Δ P B O c \Delta PBO_c ΔPBOc ~ Δ p C O c \Delta pCO_c ΔpCOc
则有:
A B o C = A O c o O c = P B p C = X c x = Z c f = Y c y \frac{AB}{oC} = \frac{AO_c}{oO_c}=\frac{PB}{pC} = \frac{X_c}{x} = \frac{Z_c}{f}=\frac{Y_c}{y} oCAB=oOcAOc=pCPB=xXc=fZc=yYc
则可得:
x = f X c Z c , y = f Y c Z c x=f\frac{X_c}{Z_c}, y=f\frac{Y_c}{Z_c} x=fZcXc,y=fZcYc
Z c [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] Z_c\left[ \begin{matrix} x \\ y \\ 1 \\ \end{matrix} \right] = \left[ \begin{matrix} f&0&0&0 \\ 0&f&0&0 \\ 0&0&1&0 \\ \end{matrix} \right]\left[ \begin{matrix} X_c \\ Y_c \\ Z_c \\ 1 \\ \end{matrix} \right] Zc xy1 = f000f0001000 XcYcZc1
3. 图像物理坐标系到像素坐标系
此时与前面的坐标系变换不同,没有旋转变换,但是坐标原点位置不一致,大小不一致,则设计伸缩变换及平移变换即可:
在这里插入图片描述
{ u = x d x + u 0 v = y d y + v 0 \begin{cases} u = \frac{x}{dx} + u_0 \\ v = \frac{y}{dy} + v_0 \end{cases} {u=dxx+u0v=dyy+v0
则可以得到:
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] \left[ \begin{matrix} u \\ v \\ 1 \\ \end{matrix} \right] = \left[ \begin{matrix} \frac{1}{dx} & 0 & u_0 \\ 0 & \frac{1}{dy} & v_0 \\ 0 & 0 & 1 \\ \end{matrix} \right] \left[ \begin{matrix} x \\ y \\ 1 \\ \end{matrix} \right] uv1 = dx1000dy10u0v01 xy1
总的关系变化为(矩阵依次左乘):
像素坐标 ( u , v ) (u,v) (u,v) <–(二次转换)-- 图像坐标 ( x , y ) (x,y) (x,y) <–(透视投影)-- 图像坐标 ( X c , Y c , Z c ) (X_c, Y_c, Z_c) (Xc,Yc,Zc) <–(刚体变换)-- 图像坐标 ( X w , Y w , Z w ) (X_w, Y_w, Z_w) (Xw,Yw,Zw)

Z c [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R T 0 ⇀ 1 ] [ X w Y w Z w 1 ] Z_c \left[ \begin{matrix} u \\ v \\ 1 \\ \end{matrix} \right] = \left[ \begin{matrix} \frac{1}{dx} & 0 & u_0 \\ 0 & \frac{1}{dy} & v_0 \\ 0 & 0 & 1 \\ \end{matrix} \right] \left[ \begin{matrix} f&0&0&0 \\ 0&f&0&0 \\ 0&0&1&0 \\ \end{matrix} \right] \left[ \begin{matrix}R&T\\ \overset{\rightharpoonup}{0}&1 \end{matrix} \right] \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \\ \end{matrix} \right] Zc uv1 = dx1000dy10u0v01 f000f0001000 [R0T1] XwYwZw1
= [ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] [ R T 0 ⇀ 1 ] [ X w Y w Z w 1 ] = \left[ \begin{matrix} f_x&0&u_0&0 \\ 0&f_y&v_0&0 \\ 0&0&1&0 \\ \end{matrix} \right] \left[ \begin{matrix}R&T\\ \overset{\rightharpoonup}{0}&1 \end{matrix} \right] \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \\ \end{matrix} \right] = fx000fy0u0v01000 [R0T1] XwYwZw1
其中 [ R T 0 ⇀ 1 ] \left[ \begin{matrix}R&T\\ \overset{\rightharpoonup}{0}&1 \end{matrix} \right] [R0T1]为相机外参,R和T分别为旋转和平移量 [ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] \left[ \begin{matrix} f_x&0&u_0&0 \\ 0&f_y&v_0&0 \\ 0&0&1&0 \\ \end{matrix} \right] fx000fy0u0v01000 为相机内参,内参是固有属性,实际上就是焦距f,像元尺寸dx, dy ,很明显 Z c Z_c Zc 表示的是点离光轴的距离。
同样的有:
[ X w Y w Z w 1 ] = [ R T 0 ⇀ 1 ] [ Z c f 0 0 0 Z c f 0 0 0 Z c 0 0 1 ] [ d x 0 − u 0 d x 0 d y − v 0 d y 0 0 1 ] [ u v 1 ] \left[ \begin{matrix} X_w \\ Y_w \\ Z_w \\ 1 \\ \end{matrix} \right] =\left[ \begin{matrix}R&T\\ \overset{\rightharpoonup}{0}&1 \end{matrix} \right] \left[ \begin{matrix} \frac{Z_c}{f}&0&0 \\ 0&\frac{Z_c}{f}&0 \\ 0&0&Z_c \\ 0&0&1 \\ \end{matrix} \right] \left[ \begin{matrix} dx & 0 & -u_0dx \\ 0 & dy & -v_0dy \\ 0 & 0 & 1 \\ \end{matrix} \right] \left[ \begin{matrix} u \\ v \\ 1 \\ \end{matrix} \right] XwYwZw1 =[R0T1] fZc0000fZc0000Zc1 dx000dy0u0dxv0dy1 uv1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/116258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源WAF--Safeline(雷池)测试手册

长亭科技—雷池(SafeLine)社区版 官方网站:长亭雷池 WAF 社区版 (chaitin.cn) WAF 工作在应用层&#xff0c;对基于 HTTP/HTTPS 协议的 Web 系统有着更好的防护效果&#xff0c;使其免于受到黑客的攻击 1.1 雷池的搭建 1.1.1 配置需求 操作系统&#xff1a;Linux 指令架构&am…

【数据结构与算法】二叉树的运用要点

目录 一&#xff0c;二叉树的结构深入认识 二&#xff0c;二叉树的遍历 三&#xff0c;二叉树的基本运算 3-1&#xff0c;计算二叉树的大小 3-2&#xff0c;统计二叉树叶子结点个数 3-3&#xff0c;计算第k层的节点个数 3-4&#xff0c;查找指定值的结点 一&#xff0c;二叉…

Spring底层原理(二)

Spring底层原理(二) BeanFactory的实现 //创建BeanFactory对象 DefaultListableBeanFactory factory new DefaultListableBeanFactory(); //注册Bean定义对象 AbstractBeanDefinition beanDefinition BeanDefinitionBuilder.genericBeanDefinition(SpringConfig.class).set…

node 第十天 原生node封装一个简易的服务器

原生node封装一个简易的服务器, 把前面几天的知识揉和起来做一个服务器基础实现, 首页访问, 静态资源服务器, 特定接口封装, 404app.js 服务器入口文件 app.js node app.js即可启动服务器 const { start } require(./modules/server); start();require_modules.js 整合模块导…

搭建Pytorch的GPU环境超详细

效果 1、下载和安装VS2019 https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ 登录需要用户名和密码 安装后需要联网下载组件的,安装的时候要勾选使用C++的桌面开发 2、下载和安装显卡驱动 查看自己的显卡型号 从英伟达下载和安装最新驱动

Python学习笔记——MYSQL,SQL核心

食用说明&#xff1a;本笔记适用于有一定编程基础的伙伴们。希望有助于各位&#xff01; SQL语言分类 SQL注释 库管理 表管理 数据操作 分组聚合 分页限制 需要注意的是关键字的顺序不可以错乱&#xff0c;否则会报错其中LIMIT关键字的n是指从第n个开始&#xff0c;m是指查…

【Zero to One系列】微服务Hystrix的熔断器集成

前期回顾&#xff1a; 【Zero to One系列】springcloud微服务集成nacos&#xff0c;形成分布式系统 【Zero to One系列】SpringCloud Gateway结合Nacos完成微服务的网关路由 1、hystrix依赖包 首先引入hystrix相关的依赖包&#xff0c;版本方面自己和项目内相对应即可&#…

LeetCode:1402. 做菜顺序(C++)

目录 1402. 做菜顺序 题目描述&#xff1a; 实现代码与解析&#xff1a; 暴力 原理思路&#xff1a; 动态规划 原理思路&#xff1a; 贪心 原理思路&#xff1a; 1402. 做菜顺序 题目描述&#xff1a; 一个厨师收集了他 n 道菜的满意程度 satisfaction &#xff0c;这…

Electron 学习

Electron基本简介 如果你可以建一个网站&#xff0c;你就可以建一个桌面应用程序。Eletron 是一个使用 JavaScript, HTML和 CSS等Web 技术创建原生程序的框架&#xff0c;它负责比较难搞的部分&#xff0c;你只需把精力放在你的应用的核心上即可。 Electron 可以让你使用纯 Jav…

kr第三阶段(二)32 位汇编

编译与链接 环境配置 masm32 masm32 是微软的 masm32 的民间工具集合。该工具集合除了 asm32 本身的汇编器 ml 外还提供了&#xff1a; SDK 对应的函数声明头文件和 lib 库。32 位版本的 link&#xff08;原版本是 16 位&#xff0c;这里的 32 位版本的 link 来自 VC 6.0&a…

OS 处理机调度

目录 处理机调度的层次 高级调度 作业 作业控制块 JCB 作业调度的主要任务 低级调度 中级调度 进程调度 进程调度时机 进程调度任务 进程调度机制 排队器 分派器 上下文切换器 进程调度方式 非抢占调度方式 抢占调度方式 调度算法 处理机调度算法的目标 处理…

嵌入式软件工程师——2025校招专题(一)

说明&#xff1a; 面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但在这里博主希望每一个题目&#xff0c;大家都要…

2023-10-24 小总结

起始 不知不觉&#xff0c;作为职业码农&#xff0c;已经过去了4年。第4个1024了。 期间和Java、C#、JavaScript都打过交道。他们都很优秀。自然&#xff0c;好刀要在强者手中才能熠熠生辉。 快30了&#xff0c;回首过去&#xff0c;很感慨。发生了很多事&#xff0c;很多我都…

Python桌面应用之XX学院水卡报表查询系统(Tkinter+cx_Oracle)

一、功能样式 Python桌面应用之XX学院水卡报表查询系统功能&#xff1a; 连接Oracle数据库&#xff0c;查询XX学院水卡操作总明细报表&#xff0c;汇总数据报表&#xff0c;个人明细报表&#xff0c;进行预览并且支持导出报表 1.总明细报表样式 2.汇总明细样式 3.个人明细…

安卓使用android studio跨进程通信之AIDL

我写这篇文章不想从最基础的介绍开始,我直接上步骤吧. 1.创建服务端 1.1:创建服务端项目:我的as版本比较高,页面就是这样的 1.2:创建AIDL文件,右键项目,选中aidl aidl名字可以自定义也可以默认 basicTypes是自带的,可以删掉,也可以不删,然后把你自己所需的接口写上去 1.3:创建…

微信小程序开发之后台数据交互及wxs应用

目录 一.后端准备 1.1. 应用配置 1.2. 数据源配置 二、数据库 2.1. 创建 2.2.数据表 2.3.数据测试 三、前端 3.1.请求方法整合 3.2.数据请求 3.3.WXS的使用 3.4.样式美化 3.5. 页面 今天就到这里了哦&#xff0c;希望能帮到你哦&#xff01;&#xff01;&#xf…

解密Java中神奇的Synchronized关键字

文章目录 &#x1f389; 定义&#x1f389; JDK6以前&#x1f389; 偏向锁和轻量级锁&#x1f4dd; 偏向锁&#x1f4dd; 轻量级锁&#x1f4dd; 自旋锁&#x1f4dd; 重量级锁&#x1f525; 1. 加锁&#x1f525; 2. 等待&#x1f525; 3. 撤销 &#x1f389; 锁优化&#x1f…

红队打靶:Misdirection打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现与端口扫描 第二步&#xff1a;Web渗透&#xff08;80端口&#xff0c;战术放弃&#xff09; 第三步&#xff1a;Web渗透&#xff08;8080端口&#xff09; 第四步&#xff1a;sudo bash提权 第五步&#xff1a;/etc/passwd利…

一文搞懂UART通信协议

目录 1、UART简介 2、UART特性 3、UART协议帧 3.1、起始位 3.2、数据位 3.3、奇偶校验位 3.4、停止位 4、UART通信步骤 1、UART简介 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发器&#xff09;是一种双向、串行、异步的通信…

【c++Leetcode】141. Linked List Cycle

问题入口 思想&#xff1a;Floyds Tortoise and Hare 这个算法简单来说就是设置一个慢指针&#xff08;一次移动一个位置&#xff09;和一个快指针&#xff08;一次移动两个位置&#xff09;。在遍历过程中&#xff0c;如果慢指针和快指针都指向同一个元素&#xff0c;证明环…