[自动驾驶算法][从0开始轨迹预测]:二、自动驾驶系统中常用的坐标系及相应的转换关系

自动驾驶中常见的坐标系与坐标转换

    • 1. 传感器坐标系
      • 1.1 相机坐标系统
        • 1) 相机相关基础知识
        • 2) 相机各坐标系
          • 图像/像素坐标系
          • 相机坐标系
          • 像平面坐标系
        • 3) 相机各坐标系之间的转换
          • 像平面坐标系到像素坐标系的转换(平移缩放变换)
          • 相机坐标系转像平面坐标系(透视变换):
          • 相机坐标系到像素坐标系
          • 世界坐标系到像素坐标系(旋转平移变换)
      • 1.2 激光雷达坐标系
      • 1.3 IMU坐标系
      • 1.4 GPS
      • 1.5 轮速计
    • 2. 车体坐标系
    • 3. 导航坐标系
    • 4. 世界坐标系
      • 4.1 地理坐标系(GCS)
        • 1. 地心地固坐标系(ECEF)
        • 2. 大地坐标系(LLA)
      • 4.2 投影坐标系
        • 1. 通用横轴墨卡托投影 UTM
        • 2. 网络墨卡托投影 Web Mercator
        • 3. UTM和Web Mercator的对比

写在前面:上一篇文章中,我们介绍了坐标转换的基础知识,接下来,我们将介绍由汽车的传感器到全局定位会涉及到的若干个坐标系统。


下图是自动驾驶系统中常见的坐标系统:

image-20240115150341004

​ 一般来说,典型的定位和建图场景情况,不同坐标系之间的关系如下:

环境传感器数据(如激光雷达,相机等)都是在其自身坐标系下测量得到的数据,包括状态测量传感器(如 IMU,轮速计),其测量得到的也是基于本身状态(虽然一般来说考虑 IMU 和编码器固连,可以认为这些传感器的状态和汽车本身的状态一致),因此需要将这些测量数据通过外参转化到车体坐标系下。

​ 传感器数据统一到车体坐标系后,通过不同的感知融合方式全局测量数据相比(在导航坐标系下或世界坐标系下)可以获取车辆在参考坐标系下的状态(定位),并且将传感器测量到的环境数据更新至参考坐标系中(建图),完成整体过程。在有绝对位置测量的情况下(经纬度),为了方便计算,一般先将其转换到投影坐标系下,且同样通过外参传递到车体坐标系下,和其他传感器数据进行融合,对融合完成后的位置同样通过相反过程,最后获得地理坐标系下的经纬度数据。

​ 在没有绝对测量值时可以将导航坐标系作为参考坐标系。而在有绝对测量值时,导航坐标系一般用来作为一个工具来计算周围特征之间的距离、角度等,相比于投影坐标系更加方便计算。

1. 传感器坐标系

​ 车载传感器都有其自身的坐标系,按照其测量原理可以分为相对测量(测量环境信息)绝对测量(测量自身信息)。相对测量的传感器如相机、激光雷达,他们是通过测量环境信息来进行间接定位,而绝对测量如 IMU、轮速计、GPS 则是通过直接测量自身的运动状态(速度、位置、姿态等)来进行定位。对于相对测量的传感器而言,其测量值通常是基于其自身传感器;而绝对测量的测量结果一般则是自身坐标系相对于其他坐标系(局部坐标系或世界坐标系等)的结果。下面对常见的测量传感器进行归纳。

1.1 相机坐标系统

摄像机/摄像头以其低廉的价格、丰富的图像信息,成为自动驾驶中最受人们关注的传感器之一。摄像头的作用是把三维世界中的形状、颜色信息,压缩到一张二维图像上。

基于摄像头的感知算法则是从二维图像中提取并还原三维世界中的元素和信息,如车道线、车辆、行人、异性障碍物等,并计算他们与自己的相对位置。

1) 相机相关基础知识

单反相机参数之ISO/焦距篇

景深概念与计算

光轴:一条垂直穿过理想透镜中心的光线。

焦点:与光轴平行的光线射入凸透镜时,理想的凸镜应该是所有的光线会聚在透镜后面一点上,这个会聚所有光线的一点,就叫做焦点。

焦距:一般指镜片的中心到焦点为止的光轴上的距离,入射平行光线(或其延长线)与出射会聚光线(或其延长线)相交,就能确定折射主面,这个想象的平面与镜头光轴相交处就是主点。改变物体在相机中的成像大小。
在这里插入图片描述在这里插入图片描述

光圈:光圈对照片的影响主要有两大项,一是镜头的进光量,二是相片的景深。光圈越大(f 值越小),景深越浅(前景/背景看上去就像化掉一样);光圈越小(f 值越大),景深越深(前景/背景看上去比较清楚)。镜头焦距确定了画面的取景范围,而光圈主要影响画面虚实。

景深: 是指在一幅图像中清晰的范围,景深的深浅主要取决于以下元素:镜头的光圈大小、镜头的焦距长短、摄影主体的远近、感光元件的大小

在这里插入图片描述

2) 相机各坐标系
图像/像素坐标系

电脑上存储的照片或图像,一般以图像的左上角为原点,像素坐标系 O u v O_{uv} Ouv,以向右为 x − u x-u xu正方向,向下为 y − v y-v yv正方向,以“像素”为单位。 u , v u,v u,v代表像素的行数和列数,无实际的物理单位。

相机坐标系

由于图像坐标系向右为 x x x,向下为 y y y,所以相机坐标系以镜头主光轴中心为原点,向右为x正方向,向下为y正方向,向前(景深方向)为z正方向。这样,x,y方向与图像/像素坐标系的方向吻合,z方向即为景深。

在这里插入图片描述

像平面坐标系

为了能够定量描述三维空间到二维图像的映射关系,图形学里引入了像平面坐标系。它是相机坐标系的一个平移,中心仍在摄像机主光轴上,距离光轴中心的距离等于摄像机的焦距 f f f ,根据小孔成像原理,相机会在光轴中心后方的底片上成一个缩小的倒像,是真正的像平面 X f ′ O f ′ Y f ′ X'_fO'_fY'_f XfOfYf。但是为了分析和计算方便,我们会在光轴中心前方设立一个虚拟像平面。虚拟像平面上的成像为正像,大小与真实倒像相同 X f O f Y f X_fO_fY_f XfOfYf

3) 相机各坐标系之间的转换
像平面坐标系到像素坐标系的转换(平移缩放变换)

假设 ( u 0 , v 0 ) (u_0,v_0) (u0,v0)代表像平面原点(焦点)在u-v坐标系下的坐标,dx和dy分别表示每个像素在像平面系下横轴x和纵轴y的物理尺寸;已知p点在像平面系下的坐标为 ( x , y ) (x,y) (x,y),那么 x d x \frac{x}{dx} dxx单位就是像素了。

在这里插入图片描述

u = x d x + u 0 v = y d y + v 0 [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] u = \frac{x}{dx}+u_0 \\ v = \frac{y}{dy}+v_0 \\ \left [ \begin{array}{} u \\v\\1 \end{array} \right] = \left [ \begin{array}{} \frac{1}{dx} & 0& u_0 \\0 & \frac{1}{dy} & v_0 \\ 0&0&1\end{array} \right]\left [ \begin{array}{} x\\y\\1 \end{array} \right] u=dxx+u0v=dyy+v0 uv1 = dx1000dy10u0v01 xy1

相机坐标系转像平面坐标系(透视变换):

对于成像物体上的点 P ( X , Y ) P(X,Y) P(X,Y),其在像平面上对应点 p ( x , y ) p(x,y) p(x,y),根据相似三角形原理,它们之间的坐标对应关系有:

在这里插入图片描述

f Z = x X = y Y x = f X Z , y = f Y Z [ x y 1 ] = 1 Z [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X Y Z 1 ] \frac{f}{Z} = \frac{x}{X} =\frac{y}{Y} \\ x=f\frac{X}{Z},y=f\frac{Y}{Z} \\ \left [ \begin{array}{} x \\y\\1 \end{array} \right] = \frac{1}{Z}\left [ \begin{array}{} f & 0& 0&0 \\0 & f & 0&0 \\ 0&0&1&0\end{array} \right]\left [ \begin{array}{} X\\Y\\Z\\1 \end{array} \right] Zf=Xx=Yyx=fZX,y=fZY xy1 =Z1 f000f0001000 XYZ1

相机坐标系到像素坐标系

由前面两小节的推导,我们已经知道由相机坐标系到像平面坐标系,再由像平面坐标系到像素坐标系的转换,则相机坐标系到像素坐标系的转换为:
[ u v 1 ] = 1 Z [ 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 ] [ X Y Z 1 ] \left [ \begin{array}{} u \\v\\1 \end{array} \right] = \frac{1}{Z}\left [ \begin{array}{} \frac{1}{dx} & 0& u_0 \\0 & \frac{1}{dy} & v_0 \\ 0&0&1\end{array} \right]\left [ \begin{array}{} f & 0& 0&0 \\0 & f & 0&0 \\ 0&0&1&0\end{array} \right]\left [ \begin{array}{} X\\Y\\Z\\1 \end{array} \right] uv1 =Z1 dx1000dy10u0v01 f000f0001000 XYZ1

[ u v 1 ] = 1 Z [ f d x 0 u 0 0 0 f d y v 0 0 0 0 1 0 ] [ X Y Z 1 ] = 1 Z [ f x 0 c x 0 0 f y c y 0 0 0 1 0 ] [ X Y Z 1 ] = 1 Z K [ X Y Z 1 ] \left [ \begin{array}{} u \\v\\1 \end{array} \right] = \frac{1}{Z}\left [ \begin{array}{} \frac{f}{dx} & 0& u_0 &0 \\0 & \frac{f}{dy} & v_0 &0 \\ 0&0&1&0\end{array} \right]\left [ \begin{array}{} X\\Y\\Z\\1 \end{array} \right]=\frac{1}{Z}\left [ \begin{array}{} f_x & 0& c_x &0 \\0 & f_y & c_y &0 \\ 0&0&1&0\end{array} \right]\left [ \begin{array}{} X\\Y\\Z\\1 \end{array} \right] = \frac{1}{Z}\mathbf{K}\left [ \begin{array}{} X\\Y\\Z\\1 \end{array} \right] uv1 =Z1 dxf000dyf0u0v01000 XYZ1 =Z1 fx000fy0cxcy1000 XYZ1 =Z1K XYZ1

其中 K \mathbf{K} K​为相机的内参矩阵,由fx 和 fy:焦距,用像素表示。fx 是 x 轴方向的焦距,fy 是 y 轴方向的焦距。cx 和 cy:是图像的主点坐标,也就是图像中心的像素坐标。

世界坐标系到像素坐标系(旋转平移变换)

见上一篇坐标变换~

1.2 激光雷达坐标系

激光雷达可以分为 2D 和 3D,每一帧信息为一帧点云。点云中的每个点可以表示为极坐标(距离和角度)或者笛卡尔坐标(x, y, z)形式,该坐标系是在激光雷达坐标系下。激光雷达坐标系方向因具体型号而异,一般来说平放的情况下,Z 轴和激光雷达旋转轴重合指向上,XY 平面和地面平行,以下为 Ouster OS-1-64 的坐标系示意图:
在这里插入图片描述
在这里插入图片描述

1.3 IMU坐标系

和相机、激光雷达不同,IMU,GPS和轮速计等不采集环境信息,而是通过不同原理直接对传感器本身的状态进行测量。IMU 的测量原理可以参考我之前写的博客:IMU 测量模型。

IMU 加速度计和陀螺仪的测量值分别为 IMU 坐标系相对于惯性系的加速度和角速度。惯性系的选择随使用场景和精度要求不同可以有不同选择,对于小范围短时间内的定位可以近似认为局部坐标系为惯性系,这样解算载体状态较为简单,对于大范围长时间且要求精度高的场合可以选择世界坐标系(如下文提到的 ECEF 坐标系)为惯性系,此时解算载体状态需要考虑地球自转速度、载体所在高度等信息,计算相对较为复杂。

1.4 GPS

GPS 自身没有坐标系,它测量的是载体在世界坐标系(WGS84)下的坐标值。由经度和纬度组成。

1.5 轮速计

轮速计通常没有自身的坐标系,单个编码器的测量值为该轮的转速。通过两个轮子上编码器结合查分模型可以得到两轮连线中心的切向速度。如下图所示:

在这里插入图片描述

2. 车体坐标系

​ 车体坐标系用来描述车辆周围的物体和本车之间的相对位置关系。目前学术界和工业界有几种比较常用的车体坐标系定义方式。分别是ISO国际标准定义,SAE(Society of Automotive Engineers)汽车工程协会定义,和基于惯性测量单元IMU的坐标定义。

ISO定义SAE定义IMU定义
X正方向
Y正方向
Z正方向
横滚正方向向右向右向右
俯仰正方向向下向上向下
偏航正方向逆时针顺时针(-pi,pi)逆时针
中心/原点车辆重心/后轴中心车辆重心/后轴中心IMU位置
右手坐标系是(perception)是(OBF radar)

​ 在车辆动力学分析中,ISO定义的车体坐标系较为常见。SAE定义的车体坐标系与航空航天领域常用的集体坐标系相一致。基于IMU定义的车体坐标系,则在IMU的相关应用中较为常见。无论使用哪一种坐标系定义,都可以完成对车身位姿的描述,以及确定周围物体和本车间的相对位置关系。

3. 导航坐标系

自动驾驶中里程计会追踪汽车在连续时刻中的运动,从而引出导航坐标系的概念。导航坐标系一般固定在汽车起始时刻的位置。在能够对齐重力(有 IMU 等惯性传感器)的情况下,方向一般有两种,分别为 ENU(东-北-天)或者 NED (北-东-地),如果不能够对齐重力,则方向为汽车坐标系的初始姿态。里程计测量出来的汽车的位姿为在导航坐标系下的位姿。相对于世界坐标些而言,可以将其视为一个局部坐标系。

在小范围下,通过固定一个初始点 (tie point),通过计算经纬度之间的距离可以作为局部的笛卡尔坐标系使用。但是由于这种方式忽略了地球本身的曲率,因此只适用于较小范围,地球曲率可以忽略的区域的计算(通常小于 4km),但超过一定范围后变形会非常明显。此时如果想要控制物体结构的变形,可以考虑使用下面提到的针对地球球面提出的投影坐标系。

4. 世界坐标系

实际情况中,自动驾驶汽车可能会多次经过同一区域进行定位和建图。导航坐标系的原点每次都不一致,对于相同的场景,导航坐标系表现的结果也是不一致的。因此需要有全局测量获得汽车在地球上的绝对位置,从而引出世界坐标系的概念。世界坐标系通常囊括整个地球范围,且原点固定在地球某处(地心),按其形式有地心坐标系和笛卡尔坐标系。由于地球本身是一个(椭)球体,因此从地心坐标系转换到笛卡尔坐标系需要遵循某种投影方式,中间会涉及到失真和变形的问题。

4.1 地理坐标系(GCS)

1. 地心地固坐标系(ECEF)

地心地固坐标系(Earth-Centered,Earth-Fixed,ECEF)原点为地球质心,x 轴指向本初子午线与赤道的交点, y 轴垂直于xOz平面(即东经90度与赤道的交点), z 轴指向北极点,它和导航坐标系(以 ENU 为例)的关系如下图所示:

在这里插入图片描述

2. 大地坐标系(LLA)

由于地球表面本身是个椭球面,因此用 ECEF 来描述地理位置不太直观。因此除了用笛卡尔坐标系描述以外,还可以用大地坐标系来描述某个点在地球上的位置。从上图中可以看出,要定位一个点在地球上的位置,有两种参数化方法,一种是使用 ECEF 系下的 x , y , z x,y,z x,y,z 坐标来描述,另一种是使用大地坐标系下的 λ , ϕ , h \lambda,\phi,h λ,ϕ,h来描述,这种方法就是我们常用的经纬度(和高度)描述法。目前使用的标准为 WGS-84。

4.2 投影坐标系

由于地球表面是曲面,对于 ECEF 和 LLA 坐标系,都不方便计算两个点沿地球表面的距离,因此在可视化以及建图定位时,常需要将地球投影到一个 2D 平面上,因此引入投影坐标系的概念。这里介绍两种投影坐标系。

1. 通用横轴墨卡托投影 UTM

UTM 投影的原理可以参考:聊聊GIS中的坐标系|再版。UTM 坐标将地球分为 60 个经度区和 20 个纬度区。在 UTM 系下,地球上的每个点都可以通过四个参数确定位置:经度带号、维度带号、该点距该经度区中心子午线的投影距离以及该点距赤道的投影的距离。如下图所示:

在这里插入图片描述

2. 网络墨卡托投影 Web Mercator

Web Mercator 投影的原理可以参考:Web Mercator 公开的小秘密。Web Mercator 能够将经纬度投影为两个 X/Y 坐标。

3. UTM和Web Mercator的对比

UTM 投影的思路是按经度进行分带,以若干条经线为中心左右 3° 或 6°进行投影。由于是横轴投影,因此可以保证中央的经线不会发生变形,离中央经线越远的地方变形程度越高。且纬度越高,横向的变形程度越大。

Web Mercator 为纵向投影,在南极和北极等高纬度有一部分无法被投影。可以按不同缩放比例,将地图投影到若干个瓦片,相比于 UTM 投影,其坐标是连续的,原点为本初子午线和赤道的交点,向东向北为正,向西向南为负。投影过程中纵向和横向都会发生变形,在高纬度地区尤其明显(对比格林兰岛和非洲的面积),但由于变形比例类似,因此可以保持物体的形状的发生不变。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniCloud ---- uni-captch实现图形验证码

目录 用途说明 组成部分 目录结构 原理时序 云端一体组件介绍 验证码配置(可选): 普通验证码组件 公共模块 云函数公用模块 项目实战 创建云函数 创建注册页 创建云函数 关联公用模块 uni-captcha 刷新验证码 自定义实现 验…

【实战记录】 vagrant+virtualbox+docker 轻松用虚拟机集成组件

用途 最近要学一大堆组件,不想直接安装本机上,然后gpt说:你可以用vagrant起个虚拟机(然后docker拉取各种组件的镜像);或者k8s 实战的整体思路 首先安装virtualbox和vagrant。然后cmd依次键入三条命令 安…

Linux批量快速修改文件名的三种方法

在Linux中,批量重命名文件是一项常见且有用的操作。以下是三种常用的批量重命名文件的方法,每种方法都附有示例。这些方法既可以适用于新手,也适用于更有经验的用户。 话不多说,直接上干货! rename 命令 rename命令是…

ITE IT6801FNBX HDMI接收器 芯片

一、物料概述 IT6801FN是一款单端口HDMI接收器,可在HDMI1.4和MHL2.1双模式下工作,完全兼容MHL2.1、HDMI 1.4a、HDMI 1.4a3D和HDCP1.4,还可向后兼容DVI 1.0规格。IT6801FN具有深彩色功能(高达36位),可确保接…

Redis主从+哨兵集群(基于CentOS-8.0)高可用部署方案

目录 一、环境描述 二、Redis 主从集群部署 2.1 Redis下载 2.2 Redis解压 和移动文件 2.4 编译、安装Redis 2.6 新建 bin 和 etc 文件夹 2.7 分发Redis 2.8 配置 2.8.1 主节点配置 2.8.2 从节点配置 2.9 启动Redis服务 2.10 验证主从服务 2.11 查看节点角色信息 2…

k8s的存储卷、数据卷---动态PV创建

当发布PVC之后可以生成PV,还可以在动态服务器上直接生成挂载目录。PVC直接绑定和使用PV。 动态PV需要两个组件 存储卷插件:Provisioner(存储分配器)根据定义的属性创建PV StorageClass:定义属性 存储卷插件 存储卷插件:k8s本…

从“AI证件照”到“AI译制片”,爆款AIGC应用的商业化迷思

文 | 脑极体 让郭德纲飙英文、让霉霉说中文的翻译视频生成工具HeyGen和掀起AI证件照热潮的“妙鸭相机”一样,在一阵疯狂刷屏之后,又迅速在各大群里销声匿迹了。 十月份,由HeyGen制作的各种明星跨语言翻译视频,在全网疯传&#xf…

C#微信公众号HIS预约挂号系统源码

微信公众号预约挂号系统、支付宝小程序预约挂号系统主要是让自费、医保患者在手机上就能实现就医全过程,实时预约挂号、自费、医保结算,同时还可以查询检查检验报告等就诊信息,真正实现了让信息“多跑路”,让群众“少跑腿”。系统…

【C++】- 类和对象(运算符重载!!const!!详解!!)

类和对象③ 介绍运算符重载赋值运算符重载运算符重载const 在学习C语言时,我们首先接触的就是变量,再深入学习,我们可以利用运算符对变量进行操作,当我们使用C编写程序时,经常会遇到一些需要对特殊的例如自定义数据类型…

制造工厂ERP系统:从数字销售-生产到财务管理,掌握企业数字化十大核心!

在快速发展的数字化时代,企业(尤其是传统生产制造行业)面临着诸多挑战与机遇。无论是客户体验、供应链管理还是内部流程优化,数字化都在发挥着关键作用。为了更好地应对数字化带来的挑战和机遇为了更好地应对市场变化和提高竞争力…

定了!又一电商巨头拥抱鸿蒙生态

鸿蒙生态 未来可期 近日,鸿蒙生态圈又发布一个令人振奋的消息:京东正式适配原生鸿蒙操作系统!这是继支付宝、微信之后,又一家大厂拥抱鸿蒙的重要举措。可以说,拥抱鸿蒙已经成为了大势所趋! ​ 随着大厂纷…

本地静态资源打包出来,本地配置ng访问服务器(uniapp打包成h5后,使用打包资源连接测试环境测试)

1.下载ng https://nginx.org/en/download.html 2.解压下载的压缩包 3.打包h5静态资源 4.将打包出来的资源放入ng -》html文件夹下面 5.进入ng-》conf-》nginx.conf 进行转发配置 6.启动ng服务,点击nginx.exe 7.浏览器直接访问http://localhost:8081/#/&#x…

Linux------进程的fork()详解

目录 前言 一、fork()的使用 二、fork()的返回值 我们为什么要创建子进程? 父进程与子进程的分流 三、fork的一些难理解的问题 1.fork干了什么事情? 2.fork为什么会有两个返回值 3.fork的两个返回值,为什么会给父进程返回子进程pid…

05--多表操作

1、多表操作 现实生活中,(班级)实体与(学生)实体之间肯定是有关系的,那么我们在设计表的时候,就应该体现出(班级)表与(学生)表之间的这种关系&am…

学习视频一些杂乱的东西

文章目录 ref获取dom元素监听深层的某个属性? 可选链操作符 和 ?? 双问号表达式v-slot 语法糖作用域插槽动态插槽 初始化数组骚操作数字滚动 -> gsapstyle妙招新奇的原型链 object.createB站笔记链接JS相关设计模式ajaxsvgvue3scsswebpack内存泄漏 ref获取dom元素 直接给…

Angular系列教程之组件

文章目录 前言组件的基本概念组件与指令的关系在模板中使用组件总结 前言 在Angular中,组件是构建Web应用程序的核心单元。它们允许我们将UI划分为独立且可重用的部分,并通过数据绑定和事件处理等机制来实现交互性。本文将介绍Angular组件的基本概念&am…

如何公网远程访问Axure RP制作的本地web页面【内网穿透】

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…

❤ Uniapp使用三( 打包和发布上线)

❤ Uniapp使用三( 打包和发布上线) 一、介绍 什么是 uniapp? uniapp 是一种基于 Vue.js 的多平台开发框架,它可以同时用于开发安卓、iOS、H5 等多个平台。因此,只需要写一次代码就可以在多个平台上运行,提高了开发效率。 打包…

蓝桥杯 彩灯与任务

题目描述 输入样例 5 5 5 4 3 3 9 R 1 C 4 R 5 A 3 R 2 输出样例 5 3 3 思路 第一眼读不懂旋转是啥意思&#xff0c;根据样例连蒙带猜猜出来&#xff0c;其实就是把整个数组中的挪动几个位置。也很自然的按照题意写出来如下代码&#xff1a; #include <iostream> using…

如果你正在学自动化测试,那么请你仔细看完这篇文章

接触了不少同行&#xff0c;由于他们之前一直做手工测试&#xff0c;现在很迫切希望做自动化测试&#xff0c;其中不乏工作5年以上的人。 本人从事软件自动化测试已经近5年&#xff0c;从server端到web端&#xff0c;从API到mobile&#xff0c;切身体会到自动化带来的好处与痛楚…