机器人中的数值优化(十九)—— SOCP锥规划应用:时间最优路径参数化(TOPP)

   本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例



  

   三十一、时间最优路径参数化(TOPP)

   如果我们有一条二阶连续可微的路径q,现在我们想要机器人去跟踪这个路径,需要给这条路径加入时间属性,同时使其满足机器人的动力学约束,路径可由弧长s变量参数化,将路径分割成若干段小路径,我们可以知道每段小路径对应的空间位置,但是缺乏时间属性,TOPP就是在给定的平滑路径 q ( s ) q(s) q(s)上生成时间信息,并使得在满足机器人动力学约束的前提下,路径花费的时间应该尽可能短。

在这里插入图片描述

   使用弧长参数s来对路径进行参数化,s的值表征的是距离路径起点所走过的路径距离,在下图的例子中,左下角路径的起点处s=0,右上角路径的终点处s=L,L即该路径的总长度,对于该路径,我们可以用 d s d t \frac{\mathrm{d}s}{\mathrm{d}t} dtds来表征路径上某个位置处的速度,它是连续的,如下图中右下角的曲线所示,同理,可以用 d 2 s d t 2 \frac{\mathrm{d}^2s}{\mathrm{d}t^2} dt2d2s来表征路径上某个位置处的加速度,它可以是不连续的,如下图中左上角的曲线所示。

在这里插入图片描述

   现在,我们假设把s拉成直线,对于匀加速运动,起点s=0处的速度为 v 0 v_0 v0,终点s=L处的速度为 v L v_L vL,由基础的物理学公式可知 v L 2 − v 0 2 = 2 a L v_L^2-v_0^2=2aL vL2v02=2aL,进一步可知:

   lim ⁡ L → 0 V L 2 − V 0 2 L = 2 a \operatorname*{lim}_{L\rightarrow0}\frac{V_{L}^{2}-V_{0}^{2}}{L}=2a L0limLVL2V02=2a

   也即 d v 2 d s = 2 a \frac{dv^{2}}{ds}=2a dsdv2=2a,我们得到了一个不依赖于时间属性的微分关系,我们以弧长s为参量的话, v 2 v^2 v2与2a是线性的微分关系, v 2 v^2 v2可以用 ( d s d t ) 2 \left(\frac{\mathrm{d}s}{\mathrm{d}t}\right)^2 (dtds)2表示

在这里插入图片描述

   通过类比以上速度和加速度的概念,我们可以得到

   a ( s ) = d 2 s d t 2 , b ( s ) = ( d s d t ) 2 v s 2 − v 0 2 = 2 a s b ′ ( s ) = 2 a ( s ) \begin{gathered}a(s)=\frac{\mathrm{d}^2s}{\mathrm{d}t^2},b(s)=(\frac{\mathrm{d}s}{\mathrm{d}t})^2\\\\v_s^2-v_0^2=2as\\\\b^{\prime}(s)=2a(s)\end{gathered} a(s)=dt2d2s,b(s)=(dtds)2vs2v02=2asb(s)=2a(s)

   其实,我们想要在一系列的约束下,找一个s与s’的时间最优的轨迹

在这里插入图片描述

   我们想要整个轨迹在动力学约束下时间最短,也就是最小化总的时间T,由于我们缺乏时间信息,所以,需要进行换元,将对时间的积分转换成对弧长s的积分,如下式所示:

   T = ∫ 0 T 1 d t = ∫ s ( 0 ) s ( T ) 1 d s / d t d s = ∫ 0 L 1 d s / d t d s = ∫ 0 L 1 b ( s ) d s T=\int_0^T1\mathrm{~d}t=\int_{s(0)}^{s(T)}\frac1{\mathrm{d}s/\mathrm{d}t}\mathrm{d}s=\int_0^L\frac1{\mathrm{d}s/\mathrm{d}t}\mathrm{d}s=\int_0^L\frac1{\sqrt{b(s)}}\mathrm{d}s T=0T1 dt=s(0)s(T)ds/dt1ds=0Lds/dt1ds=0Lb(s) 1ds

   利用链式求导法则可以得到真实的速度 d q d t \frac{\mathrm{d}q}{\mathrm{d}t} dtdq和加速度 d 2 q d t 2 \frac{\mathrm{d}^2q}{\mathrm{d}t^2} dt2d2q,分别与 d s d t \frac{\mathrm{d}s}{\mathrm{d}t} dtds d 2 s d t 2 \frac{\mathrm{d}^{2}s}{\mathrm{d}t^{2}} dt2d2s的关系,如下所示:

   d q d t = q ′ ( s ) d s d t = q ′ ( s ) b ( s ) \frac{\mathrm{d}q}{\mathrm{d}t}=q^{\prime}(s)\frac{\mathrm{d}s}{\mathrm{d}t}=q^{\prime}(s)\sqrt{b(s)} dtdq=q(s)dtds=q(s)b(s)

   d 2 q d t 2 = q ′ ′ ( s ) ( d s d t ) 2 + q ′ ( s ) d 2 s d t 2 = q ′ ′ ( s ) b ( s ) + q ′ ( s ) a ( s ) \frac{\mathrm{d}^2q}{\mathrm{d}t^2}=q^{\prime\prime}(s){\left(\frac{\mathrm{d}s}{\mathrm{d}t}\right)}^2+q^{\prime}(s)\frac{\mathrm{d}^2s}{\mathrm{d}t^2}=q^{\prime\prime}(s)b(s)+q^{\prime}(s)a(s) dt2d2q=q′′(s)(dtds)2+q(s)dt2d2s=q′′(s)b(s)+q(s)a(s)

   若我们只考虑向前运动的情况,则b(s)≥0应该严格成立,并仅在某个或某几个瞬间为0.

   因此,我们可以将这个简单的TOPP问题表述为:

   min ⁡ a ( s ) , b ( s ) ∫ 0 L 1 b ( s ) d s s . t . b ( s ) ≥ 0 , ∀ s ∈ [ 0 , L ] , b ′ ( s ) = 2 a ( s ) , ∀ s ∈ [ 0 , L ] , ∥ q ′ ( s ) b ( s ) ∥ ∞ ≤ v m a x , ∀ s ∈ [ 0 , L ] , ∥ q ′ ′ ( s ) b ( s ) + q ′ ( s ) a ( s ) ∥ ∞ ≤ a m a x , ∀ s ∈ [ 0 , L ] , b ( 0 ) = b 0 , b ( L ) = b L . \begin{aligned} \min_{a(s),b(s)}& \int_0^{\color{blue}{L}}\frac{1}{\sqrt{b(s)}}\mathrm{d}s \\ \mathrm{s.t.}& b(s)\geq0, \forall s\in[0,L], \\ &b^{\prime}(s)=2a(s), \forall s\in[0,L], \\ &\left\|\color{blue}{q^{\prime}(s)}\color{black}\sqrt{b(s)}\right\|_\infty\leq\color{blue}{v_{max}}, \color{black}\forall s\in[0,L], \\ &\left\|\color{blue}{q^{\prime\prime}(s)\color{black}b(s)+\color{blue}q^{\prime}(s)\color{black}a(s)}\right\|_\infty\leq\color{blue}{a_{max}},\color{black}\quad\forall s\in[0,L], \\ &b(0)=\color{blue}{b_0},\color{black}~b(L)=\color{blue}{b_L}. \end{aligned} a(s),b(s)mins.t.0Lb(s) 1dsb(s)0,s[0,L],b(s)=2a(s),s[0,L], q(s)b(s) vmax,s[0,L],q′′(s)b(s)+q(s)a(s)amax,s[0,L],b(0)=b0, b(L)=bL.

   其中 min ⁡ a ( s ) , b ( s ) ∫ 0 L 1 b ( s ) d s \min_{a(s),b(s)}\int_0^L\frac1{\sqrt{b(s)}}\mathrm{d}s mina(s),b(s)0Lb(s) 1ds是我们优化的目标函数,即时间最短, b ( s ) ≥ 0 b(s)\geq0 b(s)0用于确保s关于t的变化率的平方是非负的, b ′ ( s ) = 2 a ( s ) b^{\prime}(s)=2a(s) b(s)=2a(s)是前面推导出其满足的物理关系式, ∥ q ′ ( s ) b ( s ) ∥ ∞ ≤ v m a x \left\|\color{black}{q^{\prime}(s)}\sqrt{b(s)}\right\|_\infty\leq\color{black}{v_{max}} q(s)b(s) vmax即任意弧长在s处的速度要满足动力学约束,同理 ∥ q ′ ′ ( s ) b ( s ) + q ′ ( s ) a ( s ) ∥ ∞ ≤ a m a x \left\|q^{\prime\prime}(s)b(s)+q^{\prime}(s)a(s)\right\|_\infty\leq a_{max} q′′(s)b(s)+q(s)a(s)amax任意弧长在s处的加速度要满足动力学约束, b ( 0 ) = b 0 , b ( L ) = b L b(0)=\color{black}{b_0},b(L)=\color{black}{b_L} b(0)=b0,b(L)=bL是让s对t变化率的平方在开始和结束时的值是我们人为给定的。

   此外,上式中的蓝色部分都是已知的常数,我们要求的优化变量是a(s)和b(s)这两个凸函数,也即以函数为优化变量的凸问题。

在这里插入图片描述

   以函数为优化变量的凸问题,在计算机里面不能处理连续时间的问题,我们需要对其进行离散化,即把路径分割成若干段小路径,在每段小路径上, a i a^i ai是一个常数, b i b^i bi是一个线性的函数,如下图所示

在这里插入图片描述

   离散化后的数学表达式如下所示:

   ∫ 0 L 1 b ( s ) d s ⇔ ∑ k = 0 K − 1 2 ( s k + 1 − s k ) b k + 1 + b k b ( s ) ≥ 0 , ∀ s ∈ [ 0 , L ] ⇔ b k ≥ 0 , 0 ≤ k ≤ K b ′ ( s ) = 2 a ( s ) , ∀ s ∈ [ 0 , L ] ⇔ b k + 1 − b k s k + 1 − s k = 2 a k , 0 ≤ k ≤ K ∣ q ′ ( s ) b ( s ) ∥ ∞ ≤ v m a x , ∀ s ∈ [ 0 , L ] ⇔ ∥ q ′ ( s k ) b k ∥ ∞ ≤ v m a x , 0 ≤ k ≤ K ∥ q ′ ′ ( s ) b ( s ) + q ′ ( s ) a ( s ) ∥ ∞ ≤ a m a x , ∀ s ∈ [ 0 , L ] ⇔ ∥ q ′ ′ ( s k ) b k + q ′ ( s k ) a k ∥ ∞ ≤ a m a x , 0 ≤ k ≤ K \begin{aligned} \int_{0}^{L}\frac{1}{\sqrt{b(s)}}\mathrm{d}s& \Leftrightarrow\sum_{k=0}^{K-1}\frac{2(s^{k+1}-s^k)}{\sqrt{b^{k+1}}+\sqrt{b^k}} \\ b(s)\geq0,\forall s\in[0,L]& \Leftrightarrow b^k\geq0,0\leq k\leq K \\ b^{\prime}(s)=2a(s),\forall s\in[0,L]& \Leftrightarrow\frac{b^{k+1}-b^k}{s^{k+1}-s^k}=2a^k,0\leq k\leq K \\ \left|q^{\prime}(s)\sqrt{b(s)}\right\Vert_{\infty}\leq v_{max},\forall s\in[0,L]& \Leftrightarrow\left\|q^{\prime}(s^k)\sqrt{b^k}\right\|_\infty\leq v_{max},0\leq k\leq K \\ \left\|q^{\prime\prime}(s)b(s)+q^{\prime}(s)a(s)\right\|_{\infty}\leq a_{max},\forall s\in[0,L]& \Leftrightarrow\left\|q^{\prime\prime}(s^k)b^k+q^{\prime}(s^k)a^k\right\|_\infty\leq a_{max},0\leq k\leq K \end{aligned} 0Lb(s) 1dsb(s)0,s[0,L]b(s)=2a(s),s[0,L] q(s)b(s) vmax,s[0,L]q′′(s)b(s)+q(s)a(s)amax,s[0,L]k=0K1bk+1 +bk 2(sk+1sk)bk0,0kKsk+1skbk+1bk=2ak,0kK q(sk)bk vmax,0kK q′′(sk)bk+q(sk)ak amax,0kK

   我们现在已经把以函数为优化变量的凸优化转换成了以离散序列 a 0 a^0 a0 ~ a k − 1 a^{k-1} ak1 b 0 b^0 b0 ~ b k − 1 b^{k-1} bk1为优化变量的优化问题,其约束都是线性的等式或不等式。

   min ⁡ a k , b k ∑ k = 0 K − 1 2 ( s k + 1 − s k ) b k + 1 + b k \min_{a^k,b^k}\boxed{\sum_{k=0}^{K-1}\frac{2(s^{k+1}-s^k)}{\sqrt{b^{k+1}}+\sqrt{b^k}}} ak,bkmink=0K1bk+1 +bk 2(sk+1sk)

   b k ≥ 0 , 0 ≤ k ≤ K b k + 1 − b k = 2 ( s k + 1 − s k ) a k , 0 ≤ k ≤ K ∥ q ′ ( s k ) b k ∥ ∞ ≤ v m a x , 0 ≤ k ≤ K ∥ q ′ ′ ( s k ) b k + q ′ ( s k ) a k ∥ ∞ ≤ a m a x , 0 ≤ k ≤ K \begin{aligned}&b^k\geq0,\quad&0\leq k\leq K\\&b^{k+1}-b^k=2(s^{k+1}-s^k)a^k,\quad&0\leq k\leq K\\&\left\|q^{\prime}(s^k)\sqrt{b^k}\right\|_\infty\leq v_{max},\quad&0\leq k\leq K\\&\left\|q^{\prime\prime}(s^k)b^k+q^{\prime}(s^k)a^k\right\|_\infty\leq a_{max},\quad&0\leq k\leq K\end{aligned} bk0,bk+1bk=2(sk+1sk)ak, q(sk)bk vmax, q′′(sk)bk+q(sk)ak amax,0kK0kK0kK0kK

   b ( 0 ) = b 0 , b ( L ) = b L . b(0)=b_0,~b(L)=b_L. b(0)=b0, b(L)=bL.

   那么。我们如何将以上问题转化为锥规划问题呢?可以对优化的目标函数进行如下的转换:

在这里插入图片描述

在这里插入图片描述

   至此,我们得到了该问题的SOCP形式如下:

   min ⁡ a k , b k , c k , d k ∑ k = 0 K − 1 2 ( s k + 1 − s k ) d k ∥ 2 c k + 1 + c k − d k ∥ 2 ≤ c k + 1 + c k + d k , 0 ≤ k ≤ K − 1 ∥ 2 c k b k − 1 ∥ 2 ≤ b k + 1 , 0 ≤ k ≤ K . \begin{aligned}&\min_{a^k,b^k,c^k,d^k}\sum_{k=0}^{K-1}2(s^{k+1}-s^k)d^k\\&\begin{Vmatrix}2\\c^{k+1}+c^k-d^k\end{Vmatrix}_2\leq c^{k+1}+c^k+d^k,\quad0\leq k\leq K-1\\\\&\left\|\begin{array}{c}2c^k\\b^k-1\end{array}\right\|_2\leq b^k+1,\quad&0\leq k\leq K.\end{aligned} ak,bk,ck,dkmink=0K12(sk+1sk)dk 2ck+1+ckdk 2ck+1+ck+dk,0kK1 2ckbk1 2bk+1,0kK.

   b k ≥ 0 , 0 ≤ k ≤ K b k + 1 − b k = 2 ( s k + 1 − s k ) a k , 0 ≤ k ≤ K ∥ q ′ ( s k ) b k ∥ ∞ ≤ v m a x , 0 ≤ k ≤ K ∥ q ′ ′ ( s k ) b k + q ′ ( s k ) a k ∥ ∞ ≤ a m a x , 0 ≤ k ≤ K \begin{aligned}&b^k\geq0,\quad&0\leq k\leq K\\&b^{k+1}-b^k=2(s^{k+1}-s^k)a^k,\quad&0\leq k\leq K\\&\left\|q^{\prime}(s^k)\sqrt{b^k}\right\|_\infty\leq v_{max},\quad&0\leq k\leq K\\&\left\|q^{\prime\prime}(s^k)b^k+q^{\prime}(s^k)a^k\right\|_\infty\leq a_{max},\quad&0\leq k\leq K\end{aligned} bk0,bk+1bk=2(sk+1sk)ak, q(sk)bk vmax, q′′(sk)bk+q(sk)ak amax,0kK0kK0kK0kK

   b ( 0 ) = b 0 , b ( L ) = b L . b(0)=b_0,~b(L)=b_L. b(0)=b0, b(L)=bL.

在这里插入图片描述


   参考资料:

   1、数值最优化方法(高立 编著)

   2、机器人中的数值优化


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

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

相关文章

PyTorch - 模型训练损失 (Loss) NaN 问题的解决方案

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/133378367 在模型训练中,如果出现 NaN 的问题,严重影响 Loss 的反传过程,因此,需要加入一些微小值…

aarch64 平台 musl gcc 工具链手动编译方法

目标 手动编译一个 aarch64 平台的 musl gcc 工具链 musl libc 与 glibc、uclibc 等,都是 标准C 库, musl libc 是基于系统调用之上的 标准C 库,也就是用户态的 标准C 库。 musl libc 轻量、开源、免费,是一些 操作系统的选择,当前 Lite-OS 与 RT-Smart 等均采用自制的 mu…

Cannot download sources:IDEA源码无法下载

问题 Swagger的相关包,无法看到注释; 在class文件的页面,点击下载源码,源码下载不了,IDEA报下面的错误。 报错 Cannot download sources Sources not found for: io.swagger.core.v3:swagger-annotations:2.2.9 解决…

asp.net core automapper的使用

1.安装automapper的nuget包 AutoMapper.Extensions.Microsoft.DependencyInjection 2.创建需要映射的类和转换后的类 public class studto{public int sn { get; set; }public string name { get; set; }public string sex { get; set; }public int age { get; set; }public s…

c#设计模式-结构型模式 之装饰者模式

🚀介绍 在装饰者模式中,装饰者类通常对原始类的功能进行增强或减弱。这种模式是在不必改变原始类的情况下,动态地扩展一个对象的功能。这种类型的设计模式属于结构型模式,因为这种模式涉及到两个类型之间的关系,这两个…

幂级数和幂级数的和函数有什么关系?

幂级数和幂级数的和函数有什么关系? 本文例子引用自:80_1幂级数运算,逐项积分、求导【小元老师】高等数学,考研数学 求幂级数 ∑ n 1 ∞ 1 n x n \sum\limits_{n1}^{\infty}\frac{1}{n}x^n n1∑∞​n1​xn 的和函数 &#xff…

视频监控/视频汇聚/安防视频监控平台EasyCVR配置集群后有一台显示离线是什么原因?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…

【计算机网络】因特网中的电子邮件

文章目录 简单邮件传送协议SMTP邮件访问协议POP3IMAPHTTP 参考资料 电子邮件为异步通信媒介 因特网电子邮件系统 电子邮件系统的三个构件:用户代理、邮件服务器、邮件发送和读取协议 用户代理 User Agent 即UA 电子邮件客户端软件,用户与电子邮件系统的接…

面试记录_

1&#xff1a;面试杉岩数据&#xff08;python开发&#xff09; 1.1.1 选择题 for(int i0;i<n;i){for(int j0;j<n;jji) } }O(n) * (O(0) O(n/1) O(n/2) O(n/3) ... O(n/n)) 在最坏情况下&#xff0c;内部循环的迭代次数为 n/1 n/2 n/3 ... n/n&#xff0c;这是…

【QT开发(6)】0926-QT 中加入 fastDDS 通信库的程序使用说明

在智能驾驶中&#xff0c;DDS有可能被广泛使用&#xff0c;因此推出这篇说明教程。 1、基于【QT开发&#xff08;5&#xff09;】教程的项目文档进行开发 2、安装DDS 查看《【eProsima Fast DDS&#xff08;1&#xff09;】安装eProsima Fast DDS》 至少安装: foonathan_m…

论文笔记(整理):轨迹相似度顶会论文中使用的数据集

0 汇总 数据类型数据名称数据处理出租车数据波尔图 原始数据&#xff1a;2013年7月到2014年6月&#xff0c;170万条数据 ICDE 2023 Contrastive Trajectory Similarity Learning with Dual-Feature Attention 过滤位于城市&#xff08;或国家&#xff09;区域之外的轨迹 过…

AOP:分页参数统一校验

需求说明 为了保证系统的安全性&#xff0c;需要对所有的 查询列表 接口&#xff0c;添加分页参数&#xff0c;并对分页参数进行校验&#xff0c; &#xff0c;保证参数的合法性。 比如&#xff0c; pageSize&#xff08;每页显示条数&#xff09;&#xff0c;如果不做校验&a…

完整指南:如何使用 Node.js 复制文件

文件拷贝指的是将一个文件的数据复制到另一个文件中&#xff0c;使目标文件与源文件内容一致。Node.js 提供了文件系统模块 fs&#xff0c;通过该模块可以访问文件系统&#xff0c;实现文件操作&#xff0c;包括拷贝文件。 Node.js 中文件拷贝方法 在 Node.js 中&#xff0c;有…

Python3数据科学包系列(一):数据分析实战

一: 数据分析高级语法&#xff1a;序列(Series) # -*- coding:utf-8 -*-from pandas import Seriesprint(-------------------------------------序列Series定义与取值-------------------------------------------) print("""Series序列可以省略,此时索引号默…

What is an HTTP Flood DDoS attack?

HTTP 洪水攻击是一种针对 Web 和应用程序服务器的第 7 层分布式拒绝服务 &#xff08;DDoS&#xff09; 攻击。HTTP 洪水攻击通过使用 HTTP GET 或 HTTP POST 请求执行 DDoS 攻击。这些请求是有效的&#xff0c;并且针对可用资源&#xff0c;因此很难防范 HTTP 洪水攻击。 匿名…

【AI视野·今日Robot 机器人论文速览 第四十四期】Fri, 29 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 29 Sep 2023 Totally 38 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;NCF,基于Neural Contact Fields神经接触场的方法实现有效的外部接触估计和插入操作。 (from FAIR ) 操作插入处理结果&am…

Go_原子操作和锁

原子操作和锁 本文先探究并发问题&#xff0c;再探究锁和原子操作解决问题的方式&#xff0c;最后进行对比。 并发问题 首先&#xff0c;我们看一下程序 num该程序表面看上去一步就可以运行完成&#xff0c;但是实际上&#xff0c;在计算机中是分三步运行的&#xff0c;如下…

相机数据恢复!详细步骤解析(2023新版)

和朋友在外面旅游用相机拍了好多有意义的照片和视频&#xff0c;但是导入电脑后不知道是被我删除了还是什么原因&#xff0c;这些照片都不见了&#xff0c;请问有方法恢复吗&#xff1f;” 在数字摄影时代&#xff0c;我们依赖相机记录珍贵的瞬间。然而&#xff0c;相机数据丢失…

LeNet网络复现

文章目录 1. LeNet历史背景1.1 早期神经网络的挑战1.2 LeNet的诞生背景 2. LeNet详细结构2.1 总览2.2 卷积层与其特点2.3 子采样层&#xff08;池化层&#xff09;2.4 全连接层2.5 输出层及激活函数 3. LeNet实战复现3.1 模型搭建model.py3.2 训练模型train.py3.3 测试模型test…

MyBatisPlus(七)等值查询

等值查询 条件查询&#xff1a;使用 Wrapper 对象&#xff0c;传递查询条件。 QueryWrapper&#xff08;不要使用&#xff09; 代码 Testvoid eq() {QueryWrapper<User> wrapper new QueryWrapper<>();wrapper.eq("name", "张三");List<…