【论文笔记】Baidu Apollo EM Motion Planner

在这里插入图片描述

文章目录

  • Abstract
  • I. INTRODUCTION
    • A. Multilane Strategy
    • B. Path-Speed Iterative Algorithm
    • C. Decisions and Traffic Regulations
  • II. EM PLANNER FRAMEWORK WITH MULTILANE STRATEGY
  • III. EM PLANNER AT LANE LEVEL
    • A. SL and ST Mapping (E-step)
    • B. M-Step DP Path
    • C. M-Step Spline QP Path
    • D. M-Step DP Speed Optimizer
    • E. M-Step QP Speed Optimizer
    • F. Notes on Solving Quadratic Programming Problems
    • G. Notes on Non-convex Optimization With DP and QP
  • CASE STUDY
  • Else

Abstract

EMplanner通过一个层级结构的方式去考虑多车道和单车道的情况:
(1)顶层策略通过比较不同车道级轨迹来处理变道场景;
(2)在Frenet坐标下不断迭代求解路径优化和速度优化问题来生成轨迹;
(3)为了使框架易于扩展和调整,可以同时处理交通规则、障碍物决策和平滑曲线,他们提出了一种融合DP和QP采样的优化算法。

I. INTRODUCTION

Motion Planning安全性考虑因素:

  1. 交通规则。
  2. 范围。目标轨迹需要至少8秒的视野和200米的轨迹长度。
  3. 工作周期。小于100ms。
  4. 紧急情况。

乘员体验也是是十分重要的,考虑以下几点:

  1. 场景。不仅仅是简单的超车、让行的场景,更要能适应多车道、复杂、动态的场景。
  2. 交通规则。
  3. 舒适度。轨迹平滑。
    在这里插入图片描述
    Apollo的Pipeline

EM思想的最早起源:《Maximum likelihood from incomplete data via the EM algorithm》

EM算法,全称期望最大化算法(Expectation-Maximization Algorithm),是一种迭代算法,用于含有缺失数据的概率模型参数估计。

EM算法分为两步,即“期望步骤”(E步)和“最大化步骤”(M步)。在E步中,求出在当前参数下缺失数据的概率分布,即求出缺失数据的期望。在M步中,利用E步中求出的缺失数据的期望,最大化似然函数(或极大化后验概率)来估计模型参数。这样,利用EM算法可以通过迭代更新参数估计值,逐渐逼近真实数据分布的参数值。

EM算法广泛应用于数据挖掘、图像处理、自然语言处理等领域中的模型参数学习,比如高斯混合模型、隐马尔可夫模型等

A. Multilane Strategy

采用对不同车道进行cost计算的方式可能存在的难点:

  1. 多车道带来的计算复杂度。
  2. 不容易结合交通规则。
  3. 需要考虑不同Planning Cycle之间的变化对轨迹产生的影响。

多车道的策略需要考虑主动换道(routing规划时产生)和被动换道的场景(受障碍物、环境变化影响)。

对于每一条候选车道,将障碍物以及环境信息投影到Frenet坐标系中;每一条车道加以相应的交规约束,并对每一条车道生成一条轨迹;利用cost function和规则决定选择哪一条车道。

B. Path-Speed Iterative Algorithm

在Frenet框架中寻找最优轨迹本质是一个三维约束的优化问题。主要有两种解决方式:

  1. 综合ST问题,直接求解:通常是采用采样+搜索的算法进行,得到一条符合kinodynamic的轨迹。计算复杂度高。若为了减小计算量,可能会采用减小resolutions的方式,但这样一来会导致生成的轨迹非最优。
  2. ST解耦。路径优化考虑静态障碍物,速度优化考虑动态障碍物。求解效率高,但有可能存在求解失败的问题。

【论文笔记】Perception, Planning, Control, and Coordination for Autonomous Vehicles这篇论文也涉及相关问题的讨论。

路径优化利用上一帧的speed profile来估计低速障碍物。对于高速障碍物,EM planner更倾向于采取变道而不是nudge操作。

C. Decisions and Traffic Regulations

不同于以往的一些方法直接利用数值优化的方法同时求解决策和轨迹规划,EM planner采取了先决策后轨迹规划的方式,去减少求解最优轨迹时的计算量。

决策方法可分为基于规则(手动操作)和基于模型的方法:

  1. 基于规则:容易手动调整,但是泛用性差。
  2. 基于模型:通常将车辆状态离散化为有限驾驶状态,再使用数据驱动的方式去调整。

多智能体的交互在预测和决策等方面很重要,这就需要POMDP、RL等方法了。

EM的决策流程

  • 首先,通过一条粗糙可通行的轨迹来表示自车的意图。同时也利用这个轨迹来测量障碍物之间的交互。
  • 接着,基于这个轨迹,生成凸空间。基于凸优化的问题,生成遵循决策的平滑路径和速度曲线。

II. EM PLANNER FRAMEWORK WITH MULTILANE STRATEGY

在这里插入图片描述

Data Center:用于收集和同步所有的信息。
Reference Line Generator:提供车道级的参考线,参考线包括交规、障碍物等信息。

基于Frenet坐标系估计自车和周围环境的相对关系,并将信息传递到车道级的优化器之中。

Optimizer

  • path optimization
    • (E-step):将周围环境信息投影到Frenet坐标系(SL)。
    • (M-step):生成光滑的轨迹。
  • speed optimization:
    • (E-step): 将障碍物投影到ST图。
    • (M-step):生成光滑的速度曲线。

最后合并路径和速度部分,并送入reference line trajectory decider基于车辆状态、规则、cost选出最优路径。

III. EM PLANNER AT LANE LEVEL

在这里插入图片描述
两步E-step和两步M-step;轨迹随着规划周期进行迭代。

在第一个E-step中,障碍物被投射到车道Frenet坐标系,包括静态障碍物和动态障碍物。在Apollo框架中,动态障碍物的意图是用障碍物的移动轨迹来描述的.处于安全的考虑,路径优化部分只考虑低速或相向的障碍物,高速情况利用变道进行解决。

在第二个E-step中,所有障碍物,包括高速、低速和迎面而来的障碍物都会投影到ST图中进行评估。

在M-step中,通过DP+QP的方式生成path profiles和speed profiles。利用DP给出一个粗糙的决策,将非凸的空间转化为凸空间。QP进行优化。

A. SL and ST Mapping (E-step)

SL部分

SL投影基于参考线二阶导连续。
状态向量:

  • 在笛卡尔坐标系中: ( x , y , θ , κ , κ ˙ ) (x,y,\theta,\kappa,\dot\kappa) (x,y,θ,κ,κ˙)
  • 在Frenet坐标系中: ( s , l , d l , d d l , d d d l ) (s,l,dl,ddl,dddl) (s,l,dl,ddl,dddl)

对于动态障碍物,利用上一帧自车的轨迹。给定一个时间,可以估计出相应的位置,再利用这个位置与障碍物的轨迹进行交互决策。

下面是一个例子。
在这里插入图片描述

蓝色:自车;
红色:迎面而来的障碍车以及其轨迹;
紫色:交互区域。


ST部分
路径优化之后,可能产生交互作用的静态障碍物和动态障碍物都被投影到路径上。ps:注意apollo在之后方案与此处的不同。

在这里插入图片描述

一个障碍物在 t = 2 s t=2s t=2s, s = 40 m s=40m s=40m处切入当前车道,其在ST图中的投影为红色。后方车辆在ST图中的投影为绿色。剩余的区域为可行区域。

B. M-Step DP Path

在这里插入图片描述

DP的结构:包括lattice采样、代价函数以及DP search。

动态规划用于先给出一个粗略的路径。下面是一个示例。

在这里插入图片描述

  • 在自车的前方撒点。不同行之间的点通过五次多项式进行连接。采样间隔依赖于速度、道路结构以及场景(比如说换道场景会增大采样间隔)。
  • 采样结束后,利用SL投影、交规以及车辆动力学去构造代价函数。
  • 最后DP找到最低cost的路径,同时给出相应的决策。

DP-path总的代价函数:
C t o t a l ( f ( s ) ) = C s m o o t h ( f ) + C o b s ( f ) + C g u i d a n c e ( f ) C_{total}(f(s))=C_{smooth}(f)+C_{obs}(f)+C_{guidance}(f) Ctotal(f(s))=Csmooth(f)+Cobs(f)+Cguidance(f)

路径平滑程度的代价
C s m o o t h ( f ) = w 1 ∫ ( f ′ ( s ) ) 2 d s + w 2 ∫ ( f ′ ′ ( s ) ) 2 d s + w 3 ∫ ( f ′ ′ ′ ( s ) ) 2 d s . \begin{aligned} C_{smooth}(f)& \begin{aligned}&=w_1\int(f'(s))^2ds+w_2\int(f''(s))^2ds\end{aligned} \\ &+w_3\int(f^{\prime\prime\prime}(s))^2ds. \end{aligned} Csmooth(f)=w1(f(s))2ds+w2(f′′(s))2ds+w3(f′′′(s))2ds.
f ′ ( s ) f'(s) f(s)代表车道和自车航向角之差;
f ′ ′ ( s ) f''(s) f′′(s)代表路径的曲率, κ = d θ d s \kappa = \frac {d\theta}{ds} κ=dsdθ;
f ′ ′ ′ ( s ) f'''(s) f′′′(s)代表路径曲率的二阶导。

障碍物的代价
C o b s ( d ) = { 0 , d > d n C n u d g e ( d − d c ) , d c ≤ d ≤ d n C c o l l i s i o n d < d c C_{obs}(d)=\begin{cases}0,&d>d_n\\C_{nudge}(d-d_c),&d_c\leq d\leq d_n\\C_{collision}&d<d_c&\end{cases} Cobs(d)= 0,Cnudge(ddc),Ccollisiond>dndcddnd<dc
遍历路径上的 s s s序列 s 0 , s 1 , . . . , s n {s_0,s_1,...,s_n} s0,s1,...,sn,比较和障碍物的距离 d d d C n u d g e C_{nudge} Cnudge是一个单调递减函数。 d c d_c dc是一个基于安全考虑的buffer。 d n d_n dn是一个阈值,超过它,cost为0,阈值可随场景变更; C c o l l i s i o n C_{collision} Ccollision是碰撞的cost,通常会设一个很大的值。

车道的代价由两部分组成:
一部分是参考线的代价,使得轨迹靠近参考线;另一部分是道路的代价,保证轨迹在道路边界之内(若不在,设置一个很高的惩罚)。
C g u i d a n c e ( f ) = ∫ ( f ( s ) − g ( s ) ) 2 d s C_{guidance}(f)=\int(f(s)-g(s))^2ds Cguidance(f)=(f(s)g(s))2ds
注意:这里的参考线指的是道路中心线

C. M-Step Spline QP Path

在这里插入图片描述
QP在DP的基础上平滑轨迹。

在这里插入图片描述

QP的流程,包含目标函数和线性化的约束。

QP的目标函数:
C s ( f ) = w 1 ∫ ( f ′ ( s ) ) 2 d s + w 2 ∫ ( f ′ ′ ( s ) ) 2 d s + w 3 ∫ ( f ′ ′ ′ ( s ) ) 2 + w 4 ∫ ( f ( s ) − g ( s ) ) 2 d s . \begin{aligned} C_{s}(f)& \begin{aligned}&=w_1\int(f'(s))^2ds+w_2\int(f''(s))^2ds\end{aligned} \\ &\begin{aligned}&+w_3\int(f'''(s))^2+w_4\int(f(s)-g(s))^2ds.\end{aligned} \end{aligned} Cs(f)=w1(f(s))2ds+w2(f′′(s))2ds+w3(f′′′(s))2+w4(f(s)g(s))2ds.

注意这里的 g ( s ) g(s) g(s)是DP规划出来的路径。因为DP规划出来的路径包含了对nudge障碍物的考虑,因此QP的目标函数则是对nudge以及路径平滑程度两者之间的权衡。

QP路径的约束考虑了边界约束以及动态可行性。边界约束包括 f ( s ) , f ′ ( s ) , f ′ ′ ( s ) f(s),f'(s),f''(s) f(s),f(s),f′′(s)

在这里插入图片描述

为了保证约束的凸性和线性,在自车bounding box前面和后面分别添加了一个半圆。
l left front corner = f ( s ) + s i n ( θ ) l f + w / 2 l_\text{left front corner}=f(s)+sin(\theta)l_f+w/2 lleft front corner=f(s)+sin(θ)lf+w/2
l f l_f lf后轴到车前部的距离;
w w w半车宽;
θ \theta θ车辆航向角和道路方位角之差。
f ( s ) + s i n ( θ ) l f + w / 2 ≤ f ( s ) + f ′ ( s ) l r + w / 2 ≤ l left corner bound \begin{aligned} \begin{aligned}f(s)+sin(\theta)l_f+w/2\end{aligned}& \begin{aligned}&\leq f(s)+f'(s)l_{\textcolor{purple}{r}}+w/2\end{aligned} \\ &\leq l_{\text{left corner bound}} \end{aligned} f(s)+sin(θ)lf+w/2f(s)+f(s)lr+w/2lleft corner bound
线性化近似之后得到下式。其余三个点也一样。

当然还有起点约束。

这部分还可参考二次规划(QP)样条路径优化

D. M-Step DP Speed Optimizer

在这里插入图片描述
还有剪枝的操作,可参考【Apollo学习笔记】——规划模块TASK之SPEED_HEURISTIC_OPTIMIZER

在这里插入图片描述
速度DP结果:分段线性化的speed profile(在QP中作为参考线)、可行区域(在QP中用以生成凸空间)以及对障碍物的决策。

代价函数:
C t o t a l ( S ) = w 1 ∫ t 0 t n g ( S ′ − V r e f ) d t + w 2 ∫ t 0 t n ( S ′ ′ ) 2 d t + w 3 ∫ t 0 t n ( S ′ ′ ′ ) 2 d t + w 4 C o b s ( S ) \begin{aligned} C_{total}(S)& \begin{aligned}=w_1\int_{t_0}^{t_n}g(S'-V_{ref})dt\end{aligned} \\ &\begin{aligned}&+w_2\int_{t_0}^{t_n}(S'')^2dt+w_3\int_{t_0}^{t_n}(S''')^2dt\end{aligned} \\ &+w_4C_{obs}(S) \end{aligned} Ctotal(S)=w1t0tng(SVref)dt+w2t0tn(S′′)2dt+w3t0tn(S′′′)2dt+w4Cobs(S)

考虑因素:

  • 速度接近于参考速度 V r e f V_{ref} Vref V r e f V_{ref} Vref取决于限速、交规、曲率。 g g g用以适应于不同场景调整相应的惩罚。
  • 平滑程度。 S ′ ′ , S ′ ′ ′ S'',S''' S′′,S′′′
  • 障碍物。

DP搜索空间考虑的约束有:加速度、加加速度以及单调递增(不考虑向后行车)。

E. M-Step QP Speed Optimizer

在这里插入图片描述QP的结构

C t o t a l ( S ) = w 1 ∫ t 0 t n ( S − S r e f ) 2 d t + w 2 ∫ t 0 t n ( S ′ ′ ) 2 d t + w 3 ∫ t 0 t n ( S ′ ′ ′ ) 2 d t . \begin{aligned} C_{total}(S)& \begin{aligned}&=w_1\int_{t_0}^{t_n}(S-S_{ref})^2dt+w_2\int_{t_0}^{t_n}(S'')^2dt\end{aligned} \\ &+w_3\int_{t_0}^{t_n}(S''')^2dt. \end{aligned} Ctotal(S)=w1t0tn(SSref)2dt+w2t0tn(S′′)2dt+w3t0tn(S′′′)2dt.
S r e f S_{ref} Sref为DP规划出的speed profile。

约束:
S ( t i ) ≤ S ( t i + 1 ) , i = 0 , 1 , 2 , . . . , n − 1 , S l , t i ≤ S ( t i ) ≤ S u , t i , S ′ ( t i ) ≤ V u p p e r , − D e c m a x ≤ S ′ ′ ( t i ) ≤ A c c m a x − J m a x ≤ S ′ ′ ′ ( t i ) ≤ J m a x \begin{gathered} \begin{aligned}S(t_i)\leq S(t_{i+1}),i=0,1,2,...,n-1,\end{aligned} \\ \begin{aligned}S_{l,t_{i}}\leq S(t_{i})\leq S_{u,t_{i}},\end{aligned} \\ S^{\prime}(t_{i})\leq V_{upper}, \\ \begin{aligned}-Dec_{max}\leq S''(t_{i})\leq Acc_{max}\end{aligned} \\ \begin{aligned}-J_{max}\leq S^{\prime\prime\prime}(t_i)\leq J_{max}\end{aligned} \end{gathered} S(ti)S(ti+1),i=0,1,2,...,n1,Sl,tiS(ti)Su,ti,S(ti)Vupper,DecmaxS′′(ti)AccmaxJmaxS′′′(ti)Jmax

在这里插入图片描述

F. Notes on Solving Quadratic Programming Problems

  • 采用五次多项式进行QP求解。参考:二次规划ST速度优化、二次规划(QP)样条路径优化
  • 利用上一次规划的结果作为热启动以提高求解效率。

G. Notes on Non-convex Optimization With DP and QP

  • DP采样的节点数受到采样间隔的影响,同时DP在复杂场景的计算量会很大,占据大量计算时间。一般的,DP只是提供一个粗解,并不会给出最优解。
  • QP需要依赖于DP获得凸空间,否则可能会陷入局部最小值或规划失败。(QP并非一定需要DP作为前置步骤,若能转换到凸问题进行求解也是可以的)

CASE STUDY

EM planner是一个基于轻决策的规划器,相比传统的重决策或者完全rule-based的方案,更具有泛化能力。

一个两轮迭代的例子。
在这里插入图片描述
(a) 驻车沿着历史轨迹行驶。
(b) 两车相遇点在s=40处,因此在s=40处采用nudge操作通过可以有效避开障碍物。
© 主车会在s=40处降低速度通过。
(d) 更新nudge距离到s=30。
(e) 在s=30处nudge通过,之后在s=40处加速。

Else

附录里提到了reproducing kernel Hilbert space (RKHS)的概念,有些不大理解,后续再看。

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

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

相关文章

01-Redis核心数据结构与高性能原理

上一篇&#xff1a; 1.Redis安装 下载地址&#xff1a;http://redis.io/download 安装步骤&#xff1a; # 安装gcc yum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下&#xff0c;并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz…

【ArcGIS Pro二次开发】(67):处理面要素空洞

这个一个简单的小功能。 有些面要素可能会存在空洞&#xff0c;这个工具的目的就是获取面要素的空洞&#xff0c;或者去除空洞获取要素的边界。 这个功能其实在之前做拓扑功能的时候就已经有了&#xff0c;这次只是单独把它提取出来。因为有时候会单独用到这个功能。 一、要实…

面试半个月后的一些想法

源于半个月面试经历后的一些想法&#xff0c;刚开始想的是随便写写&#xff0c;没想到居然写了这么多。 找不到目标找不到意义亦或是烦躁的时候&#xff0c;就写写文章吧&#xff0c;把那些困扰你很久的问题铺开来 花时间仔细想想&#xff0c;其实真正让我们生气懊恼&#xff0…

JS中应该注意的点

本帖子记录在使用前端时遇到的一些小点。 1.html()和text()和val()的使用及区别 1.1 val() val&#xff08;&#xff09;是对于单标签元素的值&#xff0c;其中一个很重要的特性是value"" Value:<input id"input" type"text" value"LO…

MySQL高可用搭建方案之(MMM)

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 注意&#xff1a;这篇转载文章&#xff0c;非原创 首发博客地址 原文地址 前言 MySQL的高可用有很多种&#xff0c;有我们经常说的MMM架构、MHA架构、…

TGA格式文件转材质

今天淘宝上买了一个美女的模型&#xff0c;是blender的源文件&#xff0c;上面说有fbx格式的。我用unity&#xff0c;所以觉得应该可以用。文件内容如下图&#xff1a; FBX文件夹打开后&#xff0c;内容如下图所示&#xff0c;当时就预感到可能没有色彩。 unity打开后果然发现只…

笔记本选购指南

大学生笔记本电脑选购指南 文章目录 笔记本分类指标排行 了解自身需求理工科文科艺术总结 参考指标品牌CPU显卡屏幕其他 购买渠道推荐游戏本Redmi G 锐龙版联想G5000惠普光影精灵9天选4锐龙版联想R7000P暗影精灵9联想拯救者R9000P 全能本华硕无畏PRO15联想小新Pro14 2023 轻薄本…

『SpringBoot 源码分析』run() 方法执行流程:(3)刷新应用上下文-处理 @ComponentScan 注解

『SpringBoot 源码分析』run() 方法执行流程&#xff1a;&#xff08;3&#xff09;刷新应用上下文-处理 ComponentScan 注解 基于 2.2.9.RELEASE问题&#xff1a;当方法进行了注释标记之后&#xff0c;springboot 又是怎么注入到容器中并创建类呢&#xff1f; 首先创建测试主…

论文笔记:Deep Representation Learning for Trajectory Similarity Computation

ICDE 2018 1 intro 1.1 背景 用于计算轨迹相似性的成对点匹配方法&#xff08;DTW&#xff0c;LCSS&#xff0c;EDR&#xff0c;ERP&#xff09;的问题&#xff1a; 轨迹的采样率不均匀 如果两个轨迹表示相同的基本路径&#xff0c;但是以不同的采样率生成&#xff0c;那么这…

如何用Jmeter编写脚本压测

随着商业业务不断扩张&#xff0c;调用adsearch服务频率越来越高&#xff0c;所以这次想做个压测&#xff0c;了解目前多少并发量可以到达adsearch服务的界值。 这次选用的jmeter压测工具&#xff0c;压测思路如图&#xff1a; 同时&#xff0c;我也准备了一份软件测试面试视频…

基于Dlib+PyQt5+TensorFlow智能口红色号检测推荐系统——深度学习算法应用(含Python全部工程源码及模型)+数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow环境安装face_ recognition安装colorsys模块安装PyQt 5安装QCandyUi库依赖关系 模块实现1. 数据预处理1&#xff09;源数据的存储2&#xff09;处理数据3&#xff09;合并得到json文件 2. 系统搭建1&am…

计算机竞赛 大数据商城人流数据分析与可视化 - python 大数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的基站数据分析与可视化 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度…

无涯教程-JavaScript - FVSCHEDULE函数

描述 FVSCHEDULE函数在应用一系列复合利率后返回初始本金的未来值。使用FVSCHEDULE以可变或可调汇率计算投资的未来价值。 语法 FVSCHEDULE (principal, schedule)争论 Argument描述Required/OptionalPrincipalThe present value.RequiredScheduleAn array of interest rat…

Android T 窗口层级其三 —— 层级结构树添加窗口

文章目录 序节点添加Task以DefaultTaskDisplayArea为父节点以Task为父节点 ActivityRecordWindowTokenWindowState以WindowToken为父节点以ActivityRecord为父节点 小结调用场景添加差异 流程分析添加log堆栈打印流程LauncherStatusBar 序 尚未添加窗口的层级结构树&#xff0…

关于ESP32S3无法识别到端口问题

前言 &#xff08;1&#xff09;因为实习问题&#xff0c;需要使用ESP32BOX进行二次开发。一般来说&#xff0c;接触一款MCU&#xff0c;3天上手是基本操作。但是对于乐鑫的芯片&#xff0c;环境搭建是真的折磨人&#xff08;苦笑&#xff09;&#xff0c;而且官方文档几乎没有…

安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR显示CPU过载,该如何解决?

视频云存储/安防监控/视频汇聚平台EasyCVR基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频监控系统EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云…

Tomcat配置ssl、jar包

Tomcat配置ssl 部署tomcat服务&#xff0c;项目做到用https访问&#xff0c;使用nginx去做&#xff0c;访问任意一个子网站&#xff0c;都是https 或者 医美项目需要 上传jdk 456 tomcat war包 [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/…

DataGrip实时模板的配置2.0

印象里一直记着配置过代码实时模板&#xff0c;但是忘了换了工作电脑&#xff0c;之前配置的模板在我另一台电脑上 需要重新配置一下&#xff0c;我是笨蛋orz 配置方法和之前的一致 DataGrip实时模板的配置_王小小鸭的博客-CSDN博客https://blog.csdn.net/clover_oreo/articl…

AHR亚马逊账户健康评级多久更新,如何查看解决

AHR&#xff08;Account Health Rating&#xff09;即亚马逊账户健康评级&#xff0c;是亚马逊为卖家提供的一种评估卖家账户健康状况的工具。通过AHR&#xff0c;亚马逊会对卖家的账户进行综合评估&#xff0c;并给出相应的评级&#xff0c;以反映账户的整体表现和信誉。 亚马…

C++中使用R“()“标记符书写多行字符串

在C#中使用表示的字符串能够跨越数行。用于在C#中写JS或SQL代码比较方便。 string sqlInsert "INSERT INTO tb_param(protocol, slave, number, ptype, pid, name, format) VALUES(2, 24, 0, 1, 1, a04005, .3);INSERT INTO tb_param(protocol, slave, number, ptype, …