【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划

文章目录

    • 0. 前言
    • 1. 基于搜索的路径规划
      • 1.1 A* 算法
      • 1.2 Hybrid A* 算法
    • 2. 基于采样的路径规划
    • 3. 基于优化的路径规划
      • 3.1 以百度Apollo EM planner为例
      • 3.2 M-Step DP Path
      • 3.3 M-Step DP Speed Optimizerp

0. 前言

本文主要记录课程《自动驾驶预测与决策技术》的学习过程,难免会有很多纰漏,感谢指正。
课程链接:https://www.shenlanxueyuan.com/my/course/700

  • 基于搜索的路径规划

  • 基于采样的路径规划

  • 基于优化的路径规划

1. 基于搜索的路径规划

1.1 A* 算法

A*算法是一种用于路径规划和搜索的启发式算法,基于图搜索的思想,结合了深度优先搜索(DFS)和广度优先搜索(BFS)的优点,可以找到从起点到终点的最优路径。

基本原理

A*算法通过维护一个优先队列来存储当前待探索的节点,每次从中选择一个估计总代价最小的节点进行扩展。每个节点的总代价由两个部分组成:

  • g(n): 从起点到当前节点n的实际代价。这是路径上已经发生的开销,也就是从起点出发,经过一系列已探索的节点,到达当前节点n所花费的总代价。g(n)通常根据具体问题中的距离、时间、能量消耗等进行计算。
  • h(n): 从节点n到终点的估计代价(通常使用启发式函数计算)

A*算法的核心思想是通过选择最小的f(n)来扩展节点,其中:

f ( n ) = g ( n ) + h ( n ) f(n) = g(n) + h(n) f(n)=g(n)+h(n)
启发式函数

启发式函数h(n)是关键所在,它估计从当前节点到目标节点的代价。常用的启发式函数包括:

  • 曼哈顿距离: h ( n ) = ∣ x n − x g o a l ∣ + ∣ y n − y g o a l ∣ h(n) = |x_{n} - x_{goal}| + |y_{n} - y_{goal}| h(n)=xnxgoal+ynygoal 适用于网格状地图。
  • 欧几里得距离: h ( n ) = ( x n − x g o a l ) 2 + ( y n − y g o a l ) 2 h(n) = \sqrt{(x_{n} - x_{goal})^2 + (y_{n} - y_{goal})^2} h(n)=(xnxgoal)2+(ynygoal)2

启发式函数需要满足一致性可接受性,即h(n)不会高估实际代价。

A*算法的优点在于通过启发式函数指导搜索,能够高效地找到最优路径。它在自动驾驶中的应用包括动态路径规划,避免障碍物,并实时更新路径以应对道路上的变化。

image.png

image.png

二维格点上进行 A* 算法 缺点:不满足车辆的运动学约束

image.png

1.2 Hybrid A* 算法

Hybrid含义:

  • 节点的拓展基于车辆运动学模型;
  • 代价的计算基于栅格化地图;

image.png

image.png

Hybrid A*算法的关键特性

  1. 连续空间搜索:
    • 传统A算法通常用于离散网格的搜索,例如二维网格上的路径规划。Hybrid A则在连续空间中进行搜索,允许路径规划的结果在更高的精度上表示车辆的位姿(位置和方向)。
    • 车辆的状态不仅仅包括其在网格上的位置,还包括其方向和速度等动态信息。
  2. 车辆动力学约束:
    • Hybrid A*考虑车辆的运动学和动力学约束,例如最小转弯半径、最大转向角等。这些约束使得路径规划的结果不仅是可达的,还必须是车辆能够实际执行的。
    • 在搜索过程中,Hybrid A*会基于这些约束来生成平滑的轨迹,而不仅仅是直线或折线段。

Dubins 曲线: 经典的圆弧直线法

image.png

Reeds Shepp 曲线:可以倒车 泊车主流算法。随着无图的自动驾驶,需要基于搜索,Hybrid A* 可以适用该场景。

image.png

代价计算:

g(n): 路径长度、运动学约束、道路切合程度、方向突变、压实线、逆行等(过程代价,描述已知的代价);

最短路径:

h1(n): 只考虑运动学约束,不考虑障碍物。

h2(n): 只考虑障碍物信息,通过格子去拓展,计算到终点的距离。基于经验,或者存图。

或者 leaning based huritical 。

image.png

伪代码流程:

image.png

2. 基于采样的路径规划

要求路径的一致性

2.1 Frenét Frame方法

image.png

缺点:很难约束极限道路场景下的曲率。(被参考线的曲率所欺骗)

Frenet坐标系是基于车辆的运动路径(通常称为参考路径)建立:

  1. 切向坐标 s s s: 这是沿着参考路径的距离坐标。它表示在路径上某一点距离起点的弧长,也就是路径上的累计距离。
  2. 横向坐标 l l l: 这是垂直于参考路径的距离坐标。它表示车辆当前位置偏离参考路径的横向距离,即从路径到车辆的最短距离。

2.2 Cartesian →Frenét 1D ( x , y ) (x, y) (x,y) —> ( s , l ) (s, l) (s,l)

要将笛卡尔坐标系中的位置 ( x , y ) (x, y) (x,y) 转换为 Frenet 坐标系中的 ( s , l ) (s, l) (s,l),需要将车辆在参考路径上的位置进行投影,计算出对应的弧长 ( s ) ( s ) (s) 和横向偏移 ( l ) ( l ) (l)。这个过程可以通过以下几个步骤来实现。

1. 计算 ( s ) (s) (s):找到参考线上距离 ( x , y ) (x, y) (x,y) 最近的投影点

方法 1:暴力遍历或二分查找(用于离散点形式的参考线)

  • 暴力遍历:对参考线上的每个点计算到 (x, y) 的距离,选择距离最小的点作为投影点。

    d i = ( x − x i ) 2 + ( y − y i ) 2 d_i = \sqrt{(x - x_i)^2 + (y - y_i)^2} di=(xxi)2+(yyi)2

    其中, ( ( x i , y i ) ) ( (x_i, y_i) ) ((xi,yi)) 是参考线上的一个离散点。找到最小距离 ( d i ) ( d_i ) (di) 所对应的点 ( x i , y i ) (x_i, y_i) (xi,yi),然后计算出该点对应的弧长 ( s ) (s) (s)

  • 二分查找:如果参考线是有序的,可以利用二分查找来加速寻找最近的点。

方法 2:梯度优化(用于多项式形式的参考线)

  • 如果参考线由一个多项式表示,可以使用梯度下降法来找到 ( x , y ) (x, y) (x,y) 到参考线的最短距离。设参考线方程为 ( y = f ( x ) ) ( y = f(x) ) (y=f(x)),则需要找到一个 ( x ∗ ) ( x^* ) (x),使得

d ( x ∗ ) = ( x − x ∗ ) 2 + ( y − f ( x ∗ ) ) 2 d(x^*) = \sqrt{(x - x^*)^2 + (y - f(x^*))^2} d(x)=(xx)2+(yf(x))2

使 ( d ( x ∗ ) ( d(x^*) (d(x) 最小化。可以通过迭代的方法来求解这个优化问题,最终得到对应的 ( x ∗ ) ( x^*) (x) ( y ∗ = f ( x ∗ ) ( y^* = f(x^*) (y=f(x)

  • 一旦找到最近点 ( x ∗ , y ∗ ) (x^*, y^*) (x,y),可以计算出对应的弧长 ( s ) ( s ) (s),这通常可以通过数值积分计算,也可以根据预先计算的参考路径上的弧长来直接查表得到。

2. 计算 ( l ) ( l ) (l):使用三角形向量关系

找到最近的投影点后,计算横向偏移 ( l ) ( l ) (l)

  • 向量定义

    • r ( s ) \mathbf{r}(s) r(s) 是参考线上点 ( s ) (s) (s) 处的坐标向量。
    • p ( x , y ) \mathbf{p}(x, y) p(x,y) 是车辆当前位置的坐标向量。
    • n ( s ) \mathbf{n}(s) n(s) 是参考线上 ( s ) (s) (s) 处的法向量。
  • 横向位移 ( l ) ( l ) (l) 的计算:

    通过向量的点积可以计算出横向位移 ( l ) ( l ) (l)

l = ( p − r ( s ) ) ⋅ n ( s ) l = (\mathbf{p} - \mathbf{r}(s)) \cdot \mathbf{n}(s) l=(pr(s))n(s)

其中, n ( s ) \mathbf{n}(s) n(s) 是垂直于参考线在 ( s ) ( s) (s) 处的法向量。如果法向量朝向参考线左侧,那么 ( l ) ( l ) (l) 为正,反之为负。

核心步骤总结

  1. ( s ) ( s ) (s):找到离车辆位置 ( x , y ) (x, y) (x,y)最近的参考线点,这可以通过暴力搜索或优化方法实现。
  2. ( l ) ( l ) (l):通过计算车辆位置和参考线投影点的法向量点积,求得横向偏移 ( l ) ( l ) (l)

实际应用中的注意事项

  • 参考线左侧、右侧方向不一致:需要注意法向量的方向。一般通过约定参考线法向量方向或使用方向向量进行修正,确保在 Frenet 坐标系中,左侧偏移为正,右侧偏移为负。
  • 参考线的光滑性:如果参考线不是光滑的,则可能需要对参考线进行平滑处理,以确保计算结果的精度和稳定性。

image.png

求解S 代码:EPSILON/core/common/src/common/lane/lane.cc

ErrorType Lane::GetArcLengthByVecPosition(const Vecf<LaneDim>& vec_position,decimal_t* arc_length) // 寻找距离自车最近的点
ErrorType Lane::GetArcLengthByVecPositionWithInitialGuess( const Vecf<LaneDim>& vec_position, const decimal_t& initial_guess, decimal_t* arc_length) //牛顿法来近似计算曲线长度

image.png

2.3 Cartesian →Frenét 3D

image.png

Frenét → Cartesian 3D

image.png

参考链接:
https://blog.csdn.net/qq_23981335/article/details/102832823
https://blog.csdn.net/AdamShan/article/details/80779615

2.4 贝尔曼Bellman最优性原理

贝尔曼最优原理(Bellman’s Principle of Optimality)是动态规划(Dynamic Programming)中的核心思想之一。它是由美国数学家理查德·贝尔曼(Richard Bellman)提出的,用于解决多阶段决策问题。它的核心思想是,无论过程过去的状态和决策如何,对前面的决策所形成的状态而言,余下的决策必须构成最优策略。这个原理可以将一个复杂的问题分解为子问题,通过递归地解决这些子问题来找到最优解。

贝尔曼最优原理的定义

贝尔曼最优原理可以表述为:

一个问题的最优策略具备这样的性质:无论初始状态及初始决策如何,余下的决策必须构成最优策略,即从当前状态开始的决策序列是问题的最优解。

换句话说,假设一个问题可以分解为多个阶段,每个阶段的决策都会影响后续阶段的状态。贝尔曼最优原理指出,如果我们已经知道某个阶段之后的决策序列是最优的,那么在之前阶段的决策也必须是最优的,以确保整个决策序列是最优的。

形式化描述

假设我们有一个决策问题,它可以分为若干阶段。每个阶段的状态可以表示为 ( s ) ( s ) (s),在每个状态 ( s ) ( s ) (s) 下,可以选择一个决策 ( a ) ( a ) (a),该决策会带来一个即时奖励 ( r ( s , a ) ( r(s, a) (r(s,a)),并将系统转移到下一个状态 ( s ′ ) ( s' ) (s)

( V ( s ) ) (V(s)) (V(s)) 表示从状态 ( s ) ( s) (s)开始并且遵循最优策略所能获得的最大期望收益。那么贝尔曼最优原理的递推公式(贝尔曼方程)可以表示为:

V ( s ) = max ⁡ a [ r ( s , a ) + γ V ( s ′ ) ] V(s) = \max_a \left[ r(s, a) + \gamma V(s') \right] V(s)=amax[r(s,a)+γV(s)]

其中:

  • ( max ⁡ a ) (\max_a ) (maxa) 表示在所有可能的行动 ( a ) ( a) (a) 中选择使得收益最大的那个行动。
  • ( r ( s , a ) ) ( r(s, a) ) (r(s,a)) 是在状态 ( s ) (s) (s) 采取行动 ( a ) (a) (a) 所获得的即时奖励。
  • ( γ ) ( \gamma) (γ) 是折扣因子,用于表示未来收益的重要性。
  • ( s ′ ) ( s' ) (s) 是在状态 ( s ) ( s ) (s) 采取行动 ( a ) ( a ) (a) 后到达的下一个状态。

这个公式表示,从状态 ( s ) (s) (s) 开始的最优价值 ( V ( s ) ) (V(s)) (V(s)) 是选择一个最优行动 ( a ) ( a ) (a) ,使得当前的即时奖励和未来各阶段的最优价值(考虑到折扣因子)之和最大。

贝尔曼最优原理的优势

  • 递归结构:贝尔曼方程提供了一个递归结构,允许我们通过逐步求解子问题来解决复杂的决策问题。
  • 最优性保证:遵循贝尔曼最优原理的策略确保了最终解是全局最优的,而不是局部最优。

贝尔曼方程 时间一致性
V ( t , k t ) = max ⁡ c t [ f ( t , k t , c t ) + V ( t + 1 , g ( t , k t , c t ) ) ] V(t, k_t) = \max_{c_t} \left[ f(t, k_t, c_t) + V(t + 1, g(t, k_t, c_t)) \right] V(t,kt)=ctmax[f(t,kt,ct)+V(t+1,g(t,kt,ct))]
这里的 ( V ( t , k t ) ) ( V(t, k_t)) (V(t,kt)) 是在时间 ( t ) ( t ) (t) 和状态 ( k t ) ( k_t) (kt) 下的最优价值函数。方程表明,最优决策是在当前时间 ( t ) ( t ) (t) 选择一个最优的控制 KaTeX parse error: Can't use function '\)' in math mode at position 7: ( c_t \̲)̲ ,使得当前的收益和下一步的最优价值之和最大。

  • 轨迹的时间一致性
    在轨迹规划中,为了确保每一步规划的轨迹是连续且光滑的,需要遵循之前计算出的轨迹的剩余部分,确保时间一致性。

  • 路径对比
    图中展示了两条不同时间步长下的轨迹规划( ( Δ T a ) ( \Delta T_a ) (ΔTa) 和 ( Δ T b ) \Delta T_b ) ΔTb) )。这反映了在不同的时间尺度上,基于贝尔曼最优原理规划出的路径,如何在每个阶段选择最优的路径。
    image.png

符合Bellman最优性 --> 解决最优控制问题

image.png

2.5 高速轨迹采样——横向

高速——横向运动相比于纵向运动相对幅度非常小,近似横纵向解耦,横纵向可独立计算。

image.png
image.png

2.6 高速轨迹采样——纵向

image.png
image.png
image.png

2.7 低速轨迹规划——横向

低速——横向运动和纵向运动可比,而车辆有运动学约束,横纵向解耦会忽略运动学约束。

沿 S 采样。

image.png

横纵向采样轨迹结合以及代价评估

高速:横纵向解耦 s ( t ) / d ( t ) s(t)/d(t) s(t)/d(t)

低速:耦合 s ( t ) d ( s ) s(t)d(s) s(t)d(s)

如何确保曲率符合要求: 大曲率要额外反投。 高低速、大小曲率。

image.png

2.8 总结

整体流程:

image.png

简单示例:

image.png

相关参考材料:

  • https://zhuanlan.zhihu.com/p/514864431

  • https://xueshu.baidu.com/usercenter/paper/show?paperid=14ec16ebb0e97cb89598c0aaef9f76d4&site=xueshu_se&hitarticle=1

  • https://blog.csdn.net/sinat_52032317/article/details/132924715?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-132924715-blog-118462640.235%5Ev43%5Epc_blog_bottom_relevance_base6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-132924715-blog-118462640.235%5Ev43%5Epc_blog_bottom_relevance_base6&utm_relevant_index=2

3. 基于优化的路径规划

3.1 以百度Apollo EM planner为例

image.png
整体框架:

image.png

3.2 M-Step DP Path

路径:如何在 S L 坐标系下生成一条path,且满足一定的约束。

image.png

以向下绕行为例:

image.png

如果决策可以判断需要向下绕行 --> 可得到避障的上下界, Lower bound ≤ L(s) ≤ Upper bound --> Cost(f)

按照其他cost function 优化求解轨迹。

避障问题 --> 导致非凸 --> DP --> 初始解 --> QP 求解

避障问题 --> 如果可得到避障的上下界 --> 改为 cost function --> QP 求解

image.png

image.png

M-Step QP Path ——修正DP的path

image.png
image.png

对自车碰撞处理,自车前角点做映射。当 θ \theta θ 很小时,近似等于 s i n ( θ ) sin(\theta) sin(θ) , 再近似角度的抬高距离,f’(s)。

image.png
纵向 非凸,可加速、减速。一般需要用DP搜索,克服非凸性。
image.png

3.3 M-Step DP Speed Optimizerp

image.png
image.png

M-Step QP Speed Optimizer ——使得DP生成的分段线性速度初值满足动态要求

image.png
image.png
image.png

总结
DP+QP

  • DP:生成粗解和凸空间
  • QP:在凸空间求解
  • 缺点:窄道会车场景

EM planner 参考:
https://arxiv.org/pdf/1807.08048.pdf
https://gitcode.com/ApolloAuto/apollo/tree/master/modules/planning?utm_source=csdn_github_accelerator&isLogin=1
https://blog.csdn.net/qq_39805362/article/details/128850317
https://blog.csdn.net/qq_41667348/article/details/125708616

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ETHERCAT转PROFIENT网关—迅捷伺服驱动器数据交互

在当前的生产现场中&#xff0c;PLC 控制器与迅捷伺服驱动器之间通过通讯方式进行连接的情况愈发频繁。有些现场中&#xff0c;控制器和伺服驱动器采用统一的通讯协议&#xff0c;然而在另一些现场&#xff0c;会出现伺服驱动器 站使用不同协议的情况&#xff0c;这主要是由于不…

小阿轩yx-通过state模块定义主机状态

小阿轩yx-通过state模块定义主机状态 前言 前面学习了远程执行模块&#xff0c;这些模块的执行类似语段 shell 脚本&#xff0c;每次执行都会触发一次相同的功能&#xff0c;在大量的 minion 上运行远程命令当然是重要的&#xff0c;但是对于 minion 的环境控制&#xff0c;使…

利用 ARMxy边缘计算网关和 BLiotlink 软网关,实现工业智能化升级

在当今数字化、智能化的时代浪潮中&#xff0c;工业领域也在不断寻求创新与突破&#xff0c;以提高生产效率、降低成本并提升竞争力。ARM 工业计算机与 BLiotlink 协议转换软件的结合&#xff0c;为工业智能化带来了新的机遇和解决方案。 一、ARM 工业计算机的优势 ARM 工业计…

怎么找到抖音爆款内容,进行扩散传播?

企业如果想做好抖音平台的品牌营销&#xff0c;需要时刻监测抖音爆款内容并进行加热放大&#xff0c;据此快速创新和改进内容&#xff0c;才能短期提高品牌相关内容的曝光量&#xff0c;快速拉升品牌声量。怎么去找到抖音的爆款内容或者是值得品牌关注的优质内容&#xff0c;主…

Active Directory 实验室设置第一部分- AD林安装

在之前的文章中&#xff0c;已经讨论了活动目录的基本知识。在这篇文章中&#xff0c;我们将讨论如何设置和配置环境&#xff0c;以便我们可以使用它来执行各种攻击方案和检测。我们将讨论如何通过GUI和CLI方式完成。 # 1、Active Directory 设置 让我们从活动目录实验室设置…

统计项目代码行数工具—cloc

目录 引言一、cloc简介二、cloc安装三、cloc使用四、参考博客 引言 项目开发完成&#xff0c;想要查看自己项目的代码行数&#xff0c;强烈推荐一款非常好用的命令行工具-cloc。 一、cloc简介 只需要通过命令行的方式运行cloc&#xff0c;就可以得知指定文件代码行数、注释函…

AI大模型之旅-langchain结合glm4,faiss构建本地知识库

所需依赖如下&#xff1a; _libgcc_mutex0.1main _openmp_mutex5.11_gnu accelerate0.34.2pypi_0 aiofiles23.2.1pypi_0 aiohappyeyeballs2.4.0pypi_0 aiohttp3.10.5pypi_0 aiosignal1.3.1pypi_0 annotated-types0.7.0pypi_0 anyio4.4.0pypi_0 attrs24.2.0pypi_0 bitsandbytes…

Leetcode面试经典150题-172.阶乘后的零

给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;0 解释&#xff1a;3! 6 &#xff0c;不含尾随 0示例 2&#xff1a; 输入&#xff1a;n 5 输出&a…

线程池总结

线程池的执行流程总结&#xff1a; 从创建线程池的参数分析&#xff1a; 1.提交新线程&#xff0c;线程池会在线程池中分配一个空闲线程&#xff0c;用于执行线程任务。 2.参数(int corePoolSize)&#xff1a;核心线程数 如果线程池中不存在空闲线程&#xff0c;则线程池会判…

ADB 安装教程:如何在 Windows、macOS 和 Linux 上安装 Android Debug Bridge

目录 一、ADB 介绍 二、Windows 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 验证 ADB 安装 4. 配置环境变量 5. 验证全局 ADB 使用 三、macOS 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 配置环境变量 4. 验证 ADB 安装 四、Linux 系统安装 ADB 1. 使用包管理器安装…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第二篇-着色器制作】

在上一篇文章中&#xff0c;我们已经理顺了实现流程。 接下来&#xff0c;我们将在UE5中&#xff0c;从头开始一步一步地构建一次流程。 通过这种方法&#xff0c;我们可以借助一个熟悉的开发环境&#xff0c;使那些对着色器不太熟悉的朋友们更好地理解着色器的工作原理。 这篇…

MySQL 主从复制部署与优化

文章目录 前言 在现代数据库管理中&#xff0c;MySQL 主从复制是一种关键技术&#xff0c;用于提高数据的可用性和性能。随着 Docker 容器技术的普及&#xff0c;利用 Docker 搭建 MySQL 主从复制环境已成为一种趋势&#xff0c;它提供了一种简便、高效且可扩展的解决方案。本…

LED 生产电子看板实现工厂精准管理

在当今竞争激烈的制造业领域&#xff0c;工厂的管理效率和精度直接关系到企业的生存与发展。而 LED 生产电子看板的出现&#xff0c;为工厂实现精准管理带来了全新的解决方案。 一、电子看板能够实现对生产进度的精准把控 在传统的工厂管理中&#xff0c;生产进度的了解往往依…

协同编程的艺术:SIDE 让团队协作更上一层楼

一、协同编程的现状 在当前软件开发中&#xff0c;团队协作面临着诸多挑战。沟通不畅常常导致项目进度延迟&#xff0c;版本控制复杂使得代码合并困难重重。传统 IDE 在协同工作方面存在明显的局限性&#xff0c;缺乏实时协作功能&#xff0c;团队成员之间的沟通工具也不够完善…

个人小结(2.0)

离谱&#xff0c;困扰着几周的问题今天偶然发现了解决方法。 问题如下&#xff1a;就是对应的模块引入爆红&#xff0c;但是单击进入引入的文件没有问题 然后它的提示是&#xff1a; 无法找到模块“../views/screen/index.vue”的声明文件。“c:/Users/10834/Desktop/0716_pro…

班主任群发成绩教程,宝藏工具来减负

今天想和大家聊聊班主任的那些事儿。当班主任可真不是一件轻松的工作啊。要备课吧&#xff0c;得精心设计每一个教学环节&#xff0c;从教学目标到教学方法&#xff0c;从课程导入到课后作业&#xff0c;每个细节都得考虑周全。 还要管理班级纪律&#xff0c;处理同学之间的小摩…

2024年NAS个人存储完美方案(最牛方案不服来战)

成果展示 背面展示 正面展示 为什么需要nas 速度优势:使用公共云盘,速度完全依赖公网传输速度。比如家庭300Mbps宽带,使用百度网盘SVip,上传2.5MB/s,下载30MB/s。而使用家用nas,速度完全取决路由器内网性能,基本上达到千兆或2.5GE。内容优势:向公共云盘上传的文件全…

miniQMT量化软件好用吗?miniQMT策略编辑流程步骤详细解答!

miniQMT的策略编辑流程步骤主要包括以下几个方面&#xff1a; 一、准备工作 配置Python环境&#xff1a; 下载并安装Python环境&#xff0c;确保版本兼容。 下载迅投官方提供的xtquant包&#xff0c;并配置到Python的site-packages路径下&#xff0c;以便在Python环境中引入…

如何在Spring Boot中无缝集成LangChain4j,玩转AI大模型!

0 前言 LangChain4j 提供了用于以下功能的 Spring Boot 启动器&#xff1a; 常用集成声明式 AI 服务 1 常用集成的 Spring Boot starters Spring Boot 启动器帮助通过属性创建和配置 语言模型、嵌入模型、嵌入存储 和其他核心 LangChain4j 组件。 要使用 Spring Boot 启动…

mybatisplus中id生成策略

使用Tableld(value,type) 1.typeIdType.AUTO自增主键 2.typeIdType.ASSIGN,雪花算法生成 mybatisplus id生成策略全局配置 配置表前缀以及id生成策略 mybatis-plus:global-config:db-config:id-type: autotable-prefix: :t_