TOPP问题(Time-Optimal Path Parameterization)详细解析(附代码)

2023-10-27

题目来源

深蓝学院课程《机器人中的数值优化》(主讲:汪哲培博士)最后大作业。

参考资料

  • 课程ppt与视频
  • 助教和大佬的提示和讨论
  • Verscheure D et al. Time-optimal path tracking for robots: A convex optimization approach. IEEE Transactions on Automatic Control. 2009 Sep 22;54(10):2318-27.

任务描述

已知一个空间的路径,需要控制机械臂、无人机等去沿着它运动(如下图所示),但如何才能在满足运动约束的条件下最快地完成它呢?这就是我们要研究的问题。

在这里插入图片描述

该问题的整体求解思路为:
在这里插入图片描述

非线性控制问题建模为凸优化问题

设路径的表达方式为:随长度s变化的位置向量 q ( s ) q(s) q(s)。随路径变化的速率的平方为 b ( s ) b(s) b(s),随路径参数变化的加速度大小为 a ( s ) a(s) a(s)。即:

a ( s ) = d 2 s d t 2 a(s)=\frac{\text{d}^2s}{\text{d}t^2} a(s)=dt2d2s b ( s ) = ( d s d t ) 2 b(s)=(\frac{\text{d}s}{\text{d}t})^2 b(s)=(dtds)2

二者的关系为: b ′ ( s ) = 2 a ( s ) b'(s)=2a(s) b(s)=2a(s),这是因为中学物理讲过的 v s 2 − v 0 2 = 2 a s v_s^2 - v_0^2=2as vs2v02=2as
我们最终的目标是得到时间最优的行进速率,即 b ( s ) \sqrt{b(s)} b(s)

优化目标最短时间可写作:

T = ∫ 0 T 1 d t = ∫ 0 L 1 d s / d t d s = ∫ 0 L 1 b ( s ) d s T=\int_{0}^{T}1dt= \int_{0}^{L}\frac{1}{ds/dt} ds = \int_{0}^{L}\frac{1}{\sqrt{b(s)}} ds T=0T1dt=0Lds/dt1ds=0Lb(s) 1ds

实际速度(随时间变化)为:

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

实际加速度(随时间变化)为:

d 2 q d t 2 = d ( q ′ ( s ) b ( s ) ) d s d s d t = q ′ ′ ( s ) b ( s ) + q ′ ( s ) a ( s ) \frac{\mathrm{d}^2 q}{\mathrm{d} t^2}=\frac{\mathrm{d} ({q}' (s)\sqrt{b(s)})}{\mathrm{d} s} \frac{\mathrm{d} s}{\mathrm{d} t} =q''(s)b(s)+q'(s)a(s) dt2d2q=dsd(q(s)b(s) )dtds=q′′(s)b(s)+q(s)a(s)

然后可以得到关于以函数 b ( s ) , a ( s ) b(s),a(s) b(s),a(s) 为优化变量的优化问题模型:
在这里插入图片描述

蓝色为已知量。这个优化问题是凸的。

【为什么式凸的?:凸优化问题即目标函数和约束条件都是凸的。首先说明优化目标函数是凸的:本问题自变量为函数,则优化目标函数是凸的就是在说,任意函数 b 1 ( s ) b_1(s) b1(s) b 2 ( s ) b_2(s) b2(s)以及 0 ≤ θ ≤ 1 0 \le \theta \le 1 0θ1满足:

∫ 0 L 1 θ b 1 ( s ) + ( 1 − θ ) b 2 ( s ) d s ≤ θ ∫ 0 L 1 b 1 ( s ) d s + ( 1 − θ ) ∫ 0 L 1 b 2 ( s ) d s \int_{0}^{L}\frac{1}{\sqrt{\theta b_1(s)+(1-\theta)b_2(s)}}\mathrm{d}s \le \theta \int_{0}^{L}\frac{1}{\sqrt{b_1(s)}}\mathrm{d}s +(1-\theta) \int_{0}^{L}\frac{1}{\sqrt{b_2(s)}}\mathrm{d}s 0Lθb1(s)+(1θ)b2(s) 1dsθ0Lb1(s) 1ds+(1θ)0Lb2(s) 1ds

由于被积函数大于0,积分可以看作加法,为凸函数,故可把积分去掉,得到其充分条件为:

1 θ x + ( 1 − θ ) y ≤ θ 1 x + ( 1 − θ ) 1 y \frac{1}{\sqrt{\theta x+(1-\theta)y}} \le \theta \frac{1}{\sqrt{x}}+(1-\theta) \frac{1}{\sqrt{y}} θx+(1θ)y 1θx 1+(1θ)y 1

亦即 1 x \frac{1}{\sqrt{x}} x 1为凸函数。该充分条件显然成立,所以目标函数为凸函数。

约束方面,导数是个线性操作,所以第二个约束是凸的。第四个约束不等号左边是无穷范数和放射变换,它们都是凸的,所以该约束是凸的。对于速度约束,该不等式等价于 ∣ ∣ ( q ′ ( s ) ) 2 b ( s ) ∣ ∣ ∞ ≤ v m a x 2 ||(q'(s))^2b(s)||_\infty \le v_{max}^2 ∣∣(q(s))2b(s)vmax2,是线性的,所以是凸的。注:开根号是个非凸函数,与该约束是凸的并不矛盾,因为“约束是凸的”不是指左边函数是凸的,而是指解集是凸集,“左边函数是凸的”是“解集是凸的”的充分非必要条件。】

转化成离散的大规模凸优化问题

我们无法直接处理以连续函数为自变量的优化问题,所以对其进行离散:

在这里插入图片描述在这里插入图片描述

进行如上图的离散,对于目标函数和约束分别进行离散可以得到:

在这里插入图片描述

【补充解释第一项:上图中离散后的线段 b k b k + 1 b^kb^{k+1} bkbk+1表达式设为: b ( s ) = α s + β , α = b k + 1 − b k s k + 1 − s k b(s) = \alpha s+\beta, \alpha = \frac{b^{k+1}-b^k}{s^{k+1}-s^k} b(s)=αs+β,α=sk+1skbk+1bk

s k s k + 1 s^ks^{k+1} sksk+1段的积分为:

∫ s k s k + 1 1 b ( s ) d s = 2 α b ( s ) 1 / 2 ∣ s k s k + 1 = 2 α ( b k + 1 − b k ) = 2 s k + 1 − s k b k + 1 − b k ( b k + 1 − b k ) = 2 s k + 1 − s k b k + 1 + b k \begin{aligned} \int_{s^k}^{s^{k+1}} \frac{1}{\sqrt{b(s)}} \mathrm{d}s &= \frac{2}{\alpha} b(s)^{1/2}|_{s^k}^{s^{k+1}} \\ &=\frac{2}{\alpha} \left ( \sqrt{b^{k+1}}-\sqrt{b^k} \right )\\ &= 2\frac{s^{k+1}-s^k}{b^{k+1}-b^k} \left ( \sqrt{b^{k+1}}-\sqrt{b^k} \right )\\ &=2\frac{s^{k+1}-s^k}{\sqrt{b^{k+1}}+\sqrt{b^k}} \end{aligned} sksk+1b(s) 1ds=α2b(s)1/2sksk+1=α2(bk+1 bk )=2bk+1bksk+1sk(bk+1 bk )=2bk+1 +bk sk+1sk
然后求和即可得到】

由此得到优化问题:
在这里插入图片描述

把离散问题转换成SOCP形式

思路大概是,通过引入一些变量进行一些紧的放缩,把表达形式凑成SOCP形式。

首先改造目标函数,增加隐变量 c k , d k c^k,d^k ck,dk,其满足:

c k ≤ b k c^k \le \sqrt{b^k} ckbk 1 c k + 1 + c k ≤ d k \frac{1}{c^{k+1}+c^k} \le d^k ck+1+ck1dk

则可以得到 1 b k + 1 + b k ≤ d k \frac{1}{\sqrt{b^{k+1}}+\sqrt{b^k}} \le d^k bk+1 +bk 1dk,以上每一步等号都可以取到,则 min ⁡ 1 b k + 1 + b k ⟺ min ⁡ d k \min \frac{1}{\sqrt{b^{k+1}}+\sqrt{b^k}} \Longleftrightarrow \min d^k minbk+1 +bk 1mindk,同时 b k , c k , d k b^k,c^k,d^k bk,ck,dk需要满足上面两个约束。该约束可写作锥的形式(乘开验证即可得到):
在这里插入图片描述

经过转换可以得到该优化问题的SOCP表达形式:

  • 优化目标:

min ⁡ a k , b k , c k , d k ∑ k = 0 K − 1 2 ( s k + 1 − s k ) d k \min_{a^k,b^k,c^k,d^k} \sum_{k=0}^{K-1}2(s^{k+1}-s^k)d^k minak,bk,ck,dkk=0K12(sk+1sk)dk ,

  • 锥约束:

∥ 2 c k + 1 + c k − d k ∥ 2 ≤ c k + 1 + c k + d k , ( 0 ≤ k ≤ K − 1 ) \left \| \begin{matrix} 2\\ c^{k+1}+c^k-d^k \end{matrix} \right \| _2 \le c^{k+1}+c^k+d^k, (0 \le k \le K-1) 2ck+1+ckdk 2ck+1+ck+dk,(0kK1)

∥ 2 c k b k − 1 ∥ 2 ≤ b k + 1 , ( 0 ≤ k ≤ K ) \left \| \begin{matrix} 2c^k\\ b^k-1 \end{matrix} \right \| _2 \le b^k+1, (0 \le k \le K) 2ckbk1 2bk+1,(0kK)

  • 等式约束:

2 ( s k + 1 − s k ) a k + b k − b k + 1 = 0 , ( 0 ≤ k ≤ K − 1 ) 2(s^{k+1}-s^k)a^k+b^k-b^{k+1}=0, (0 \le k \le K-1) 2(sk+1sk)ak+bkbk+1=0,(0kK1)

∥ q ′ ( s 0 ) ∥ 2 2 b 0 = v s t a r t 2 \left \| q'(s^0) \right \|_2^2 b^0 =v^2_{start} q(s0) 22b0=vstart2

∥ q ′ ( s k ) ∥ 2 2 b K = v e n d 2 \left \| q'(s^k) \right \|_2^2 b^K=v^2_{end} q(sk) 22bK=vend2

  • 不等式约束:

− b k ≤ 0 , ( 0 ≤ k ≤ K ) -b_k \le 0, (0 \le k \le K) bk0,(0kK)

( ( q y ′ ( s k ) ) 2 + ( q x ′ ( s k ) ) 2 ) b k − v m a x 2 ≤ 0 , ( 0 ≤ k ≤ K ) \left ( \left ( q'_y(s^k) \right )^2 +\left ( q'_x(s^k) \right )^2 \right ) b^k - v^2_{max} \le 0 , (0 \le k \le K) ((qy(sk))2+(qx(sk))2)bkvmax20,(0kK)

q x ′ ′ ( s k ) b k + q x ′ ( s k ) a k − a m a x ≤ 0 , ( 0 ≤ k ≤ K − 1 ) q''_x(s^k) b^k + q'_x(s^k) a^k - a_{max}\le 0, (0 \le k \le K-1) qx′′(sk)bk+qx(sk)akamax0,(0kK1)

q y ′ ′ ( s k ) b k + q y ′ ( s k ) a k − a m a x ≤ 0 , ( 0 ≤ k ≤ K − 1 ) q''_y(s^k) b^k + q'_y(s^k) a^k - a_{max} \le 0, (0 \le k \le K-1) qy′′(sk)bk+qy(sk)akamax0,(0kK1)

− q x ′ ′ ( s k ) b k − q x ′ ( s k ) a k − a m a x ≤ 0 , ( 0 ≤ k ≤ K − 1 ) -q''_x(s^k) b^k - q'_x(s^k) a^k -a_{max}\le 0, (0 \le k \le K-1) qx′′(sk)bkqx(sk)akamax0,(0kK1)

− q y ′ ′ ( s k ) b k − q y ′ ( s k ) a k − a m a x ≤ 0 , ( 0 ≤ k ≤ K − 1 ) -q''_y(s^k) b^k - q'_y(s^k) a^k -a_{max}\le 0, (0 \le k \le K-1) qy′′(sk)bkqy(sk)akamax0,(0kK1)

优化问题求解

使用锥增广拉格朗日方法求解。
增广拉格朗日函数为:

L ( a , b , c , d , λ , μ , σ ) = ∑ k = 0 K − 1 2 ( s k + 1 − s k ) d k + ρ 2 { ∑ i = 1 2 K + 1 ∥ P k i ( μ i ρ − u i ) ∥ 2 + ∑ i = 1 K + 1 ∥ h i ( x ) + λ i ρ ∥ 2 + ∑ i = 1 6 K + 2 ∥ g i ( x ) + σ i ρ ∥ 2 } \mathcal{L}(a,b,c,d,\lambda,\mu,\sigma) = \sum_{k=0}^{K-1}2(s^{k+1}-s^k) d^k + \frac{\rho}{2}\left \{ \sum_{i=1}^{2K+1} \left \| \mathcal{P_{k_i}}\left (\frac{\mu_i}{\rho} -u_i \right ) \right \|^2+ \sum_{i=1}^{K+1} \left \| h_i(x)+\frac{\lambda_i}{\rho} \right \|^2+ \sum_{i=1}^{6K+2} \left \| g_i(x)+\frac{\sigma_i}{\rho} \right \|^2 \right \} L(a,b,c,d,λ,μ,σ)=k=0K12(sk+1sk)dk+2ρ{i=12K+1 Pki(ρμiui) 2+i=1K+1 hi(x)+ρλi 2+i=16K+2 gi(x)+ρσi 2}

其中,第一类锥约束中 u k = [ c k + 1 + c k + d k 2 c k + 1 + c k − d k ] , ( 0 ≤ k ≤ K − 1 ) u_k=\begin{bmatrix} c^{k+1}+c^k+d^k \\ 2 \\ c^{k+1}+c^k-d^k \end{bmatrix} , (0 \le k \le K-1) uk= ck+1+ck+dk2ck+1+ckdk ,(0kK1) ;第二类锥约束中 u k = [ b k + 1 2 c k b k − 1 ] , ( 0 ≤ k ≤ K ) u_k=\begin{bmatrix} b^k+1 \\ 2c^k \\ b^k-1 \end{bmatrix} , (0 \le k \le K) uk= bk+12ckbk1 ,(0kK)

增广拉格朗日函数每项的导数分别为:

  • 目标函数: ∂ L ∂ d k = 2 ( s k + 1 − s k ) \frac{\partial \mathcal{L}}{\partial d^k} = 2(s^{k+1}-s^k) dkL=2(sk+1sk)
  • 第一类锥约束: ∂ L ∂ ( c k , c k + 1 , d k ) = ρ [ 1 1 1 0 0 0 1 1 − 1 ] P k i ( μ k ρ − u k ) \frac{\partial \mathcal{L}}{\partial (c^k,c^{k+1},d^k)} =\rho \begin{bmatrix} 1 & 1 & 1\\ 0& 0& 0\\ 1& 1 &-1 \end{bmatrix} \mathcal{P_{k_i}}\left (\frac{\mu_k}{\rho} -u_k\right ) (ck,ck+1,dk)L=ρ 101101101 Pki(ρμkuk), u k = [ c k + 1 + c k + d k 2 c k + 1 + c k − d k ] , ( 0 ≤ k ≤ K − 1 ) u_k=\begin{bmatrix} c^{k+1}+c^k+d^k \\ 2 \\ c^{k+1}+c^k-d^k \end{bmatrix} , (0 \le k \le K-1) uk= ck+1+ck+dk2ck+1+ckdk ,(0kK1)
  • 第二类锥约束: ∂ L ∂ ( b k , c k ) = ρ [ 1 0 1 0 2 0 ] P k i ( μ i ρ − u i ) \frac{\partial \mathcal{L}}{\partial (b^k,c^k)} =\rho \begin{bmatrix} 1 & 0 & 1\\ 0& 2& 0\\ \end{bmatrix} \mathcal{P_{k_i}}\left (\frac{\mu_i}{\rho} -u_i \right ) (bk,ck)L=ρ[100210]Pki(ρμiui), u k = [ b k + 1 2 c k b k − 1 ] , ( 0 ≤ k ≤ K ) u_k=\begin{bmatrix} b^k+1 \\ 2c^k \\ b^k-1 \end{bmatrix} , (0 \le k \le K) uk= bk+12ckbk1 ,(0kK)
  • 其余皆为线性约束,其形如: ∂ L ∂ ( b k ) = ρ ∂ h ∂ ( b k ) ( h i ( x ) + λ i ρ ) \frac{\partial \mathcal{L}}{\partial (b^k)} =\rho\frac{\partial h}{\partial (b^k)} \left ( h_i(x)+\frac{\lambda_i}{\rho} \right ) (bk)L=ρ(bk)h(hi(x)+ρλi)

参数更新和终止条件如ppt所示:
在这里插入图片描述在这里插入图片描述

代码实现

从公式到代码会有很多细节不同,以下仅个人实现过程~

1. 首先明确优化变量:

设待优化变量 x = ( b 0 , . . . , b K , a 0 , . . . , a K − 1 , c 1 , . . . , c K , d 0 , . . . , d K ) x=(b^0,...,b^K,a^0,...,a^{K-1}, c^1,...,c^K,d^0,...,d^K) x=(b0,...,bK,a0,...,aK1,c1,...,cK,d0,...,dK)

2. 明确已知条件

根据之前的作业,我们已经得到分段三次多项式轨迹 p ( t ) p(t) p(t),用它作为本次task的输入路径。在求解该分段轨迹的时候,我们把参数t解释为时间,把导数解释为速度,在求解过程中控制相邻多项式轨迹段端点导数们相等,即速度、加速度相等。而本问题中,要把它视作路径而不是轨迹,所以t不是时间。为减少误解,下文把自变量写作u,即路径 p ( u ) p(u) p(u)
除此之外参数还已知最大速度最大加速度,可以是随路径长度变化的曲线。本文为方便,取为恒值。

3. 重要参数 s k , q ′ ( s k ) , q ′ ′ ( s k ) s^k, q'(s^k), q''(s^k) sk,q(sk),q′′(sk)的求解

q ( s ) = p ( u ) q(s) = p(u) q(s)=p(u),二者函数值相同,自变量不同。为了得到离散的s,首先均匀地离散u,设每个轨迹段被分成r小段,每小段端点是 u k u^k uk对应的点,则整条分段多项式轨迹的小段数 K = r * 多项式个数。然后按照 离散的u => p(u) => q(s) => s 的顺序得到离散的s。需要明确的是这种离散方式得到的s不是等距分布的。具体表达式为:

  • 路径长度s:曲线路径被离散为分段“匀加速运动”,所以s的递推公式为 s k + 1 = s k + ∣ ∣ p ′ ( u k ) ∣ ∣ + ∣ ∣ p ′ ( u k + 1 ) ∣ ∣ 2 d u s^{k+1} = s^k + \frac{||p'(u^k)||+||p'(u^{k+1})||}{2} du sk+1=sk+2∣∣p(uk)∣∣+∣∣p(uk+1)∣∣du d u = 分段多项式轨迹中 u 的取值范围 K du=\frac{分段多项式轨迹中u的取值范围}{K} du=K分段多项式轨迹中u的取值范围
  • 位置对轨迹长度的导数 q ′ ( s ) q'(s) q(s):相当于路径切向单位向量,即 q ′ ( s ) = p ′ ( u ) ∣ ∣ p ′ ( u ) ∣ ∣ q'(s) = \frac{p'(u)}{||p'(u)||} q(s)=∣∣p(u)∣∣p(u)
  • 位置对轨迹长度的二次导数 q ′ ′ ( s ) q''(s) q′′(s):对 q ′ ( s ) q'(s) q(s)用链式法则求导,可以得到精确值的表达式: q x ′ ′ ( s ) = ( d 2 p x ( u ) d u 2 d p y ( u ) d u − d 2 p y ( u ) d u 2 d p x ( u ) d u ) d p y ( u ) d u ( d u d s ) 4 q_x''(s) = \left ( \frac{\mathrm{d^2} p_x(u)}{\mathrm{d} u^2} \frac{\mathrm{d} p_y(u)}{\mathrm{d} u} - \frac{\mathrm{d^2} p_y(u)}{\mathrm{d} u^2} \frac{\mathrm{d} p_x(u)}{\mathrm{d} u} \right ) \frac{\mathrm{d} p_y(u)}{\mathrm{d} u} \left ( \frac{\mathrm{d} u}{\mathrm{d} s} \right ) ^4 qx′′(s)=(du2d2px(u)dudpy(u)du2d2py(u)dudpx(u))dudpy(u)(dsdu)4
    q y ′ ′ ( s ) = ( d 2 p y ( u ) d u 2 d p x ( u ) d u − d 2 p x ( u ) d u 2 d p y ( u ) d u ) d p x ( u ) d u ( d u d s ) 4 q_y''(s) = \left ( \frac{\mathrm{d^2} p_y(u)}{\mathrm{d} u^2} \frac{\mathrm{d} p_x(u)}{\mathrm{d} u} - \frac{\mathrm{d^2} p_x(u)}{\mathrm{d} u^2} \frac{\mathrm{d} p_y(u)}{\mathrm{d} u} \right ) \frac{\mathrm{d} p_x(u)}{\mathrm{d} u} \left ( \frac{\mathrm{d} u}{\mathrm{d} s} \right ) ^4 qy′′(s)=(du2d2py(u)dudpx(u)du2d2px(u)dudpy(u))dudpx(u)(dsdu)4
    其中 d u d s = 1 ∣ ∣ p ′ ( u ) ∣ ∣ \frac{\mathrm{d} u}{\mathrm{d} s} = \frac{1}{||p'(u)||} dsdu=∣∣p(u)∣∣1。注意,这里有个小量的四次方倒数,实际操作中数值极不稳定。取而代之,采用精确度不高的数值微分法求解导数: q ′ ′ ( s k ) = q ′ ( s k + 1 ) − q ′ ( s k ) s k + 1 − s k q''(s^k) = \frac{q'(s^{k+1} )- q'(s^{k})}{s^{k+1} - s^{k}} q′′(sk)=sk+1skq(sk+1)q(sk),数值稳定性好很多,而且简单。

4. 代码

代码库地址:·gitee上的代码仓库
运行结果:
在这里插入图片描述在这里插入图片描述

代码中尚存在的问题:

  • 优化偶尔失败,推测原因为一些中间量求解的数值稳定性和准确度不够高。
  • 理论上应该先做搜索得到全局路径,再进行轨迹优化。没有写全局路径搜索,所以测试的时候,需要初始直线路径避开死胡同。

最后并同样重要

这项任务耗时远远超过预想,陷入一些思维误区,花了好长时间捋顺思路并调通代码,希望对大家有一些帮助。另外,本人代码水平有限,如果发现本文和代码中有错误,希望可以告知我~如果代码对你有帮助并且你有更好的实现,希望可以分享一下~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TOPP问题(Time-Optimal Path Parameterization)详细解析(附代码) 的相关文章

随机推荐

  • redis如何配置哨兵集群?

    前言 前面我们介绍了主从复制集群模式 但是存在一个问题 redis在主从集群中好像没有共识算法 比如raft 那么在master挂掉的情况下 就无法从几个slave节点中自主选举出一个新的 master 节点 redis提供了新的方案 哨兵
  • 外部中断和内部中断 硬中断 软中断 中断下半部

    重要声明 以下代码有粘贴 截取他人劳动成果的成分 如有雷同 不胜荣幸 如您不能容忍 请不要独自忍受 weChat iisssssssssii 联系小民 主动删除 中断含义 中断是CPU处理外部突发事件的一个重要技术 它能使CPU在运行过程中
  • QT不允许使用不完整的类型出现原因

    目前遇到的情况如下 1 没有引用头文件 2 没有设置头文件所在路径 或设置路径错误 3 头文件定义出错 此种情况比较常见于新建一个头文件时为了方便直接拷贝已有的头文件来修改 但是图中绿色框框部分没有修改 如下两张图所示 b h由a h复制而
  • 下载pip、安装pip

    下载pip 安装pip 码农家园 Installation pip documentation v23 2 1 如何在 Mac 上安装 PIP https m php cn faq 517564 html pip3 install pyot
  • 一.LLVM基础库初探

    LLVM和Clang被精心组织成如下库 1 libLLVMCore 它包含了与LLVM IR相关的逻辑 IR构造 数据布局 指令 基础块和函数 和IR验证器 它还提供了pass管理器 2 libLLVMAnalysis 将多个IR分析步骤进
  • Maven安装教程详解

    一 准备工作 1 确定电脑上已经成功安装jdk7 0以上版本 2 win10操作系统 3 maven安装包 下载地址 http maven apache org download cgi 二 解压Maven安装包 在上述地址中下载最新的Ma
  • DNS与CDN——前端重点

    DNS的基础知识 1 统一资源定位符 URL 也被称作 网址 用于定位互联网上的资源 2 DNS Domain Name System DNS具体Query过程 3 DNS记录 资源记录 Resource Record DNS的数据库条目
  • 2018-9-11-vue的日期输入 from 表单类型

    注意这个格式
  • mapper时间条件查询

    select
  • Logback configuration error detected: 怎么解决?(亲测有效)

    发生这个错误时首先确认你的xml文件内容是没有问题的 然后检查一下你的properties文件的classpath的配置有没有错 可能的错误如下 错误报没有找到那么就是classpath写错了 或者找到了报IlllegalException
  • C++ 内置类型和类类型的默认初始化和值初始化

    如果定义变量时候没有指定初值 则变量被默认初始化 但是默认初始化还有另外一个含义 在定义内置类型时由于定义变量的位置不同 有可能会不发生初始化操作 这种情况下称为默认初始化 也有可能会给定一个初值 称为值初始化 由上 个人琢磨其实默认初始化
  • 下载文件获取的contentLength 的值是-1的问题

    项目中加了个下载方法 获取的响应中的contentlength值总是 1 查看源码可以看到 用这个int类型的获取的当length大于Int的最大值 2147483647 就返回 1 我需要下载的文件确实大于这个值了 查看源码还有别的获取l
  • 数据库系统-第二章关系数据库 复习

    关系操作 关系数据库基础 关系代数 这个 的写法是错的 因为不存在一个元组的cno既等于c2又等于c4
  • UE4 性能优化方法(工具篇)

    官方文档链接 https docs unrealengine com latest CHN Engine Performance index html 本文依据UE4官方文档以及官方博客等总结而来 可能不全面 后面会陆续添加 内置工具的详细
  • 将Servlet中的ResultSet显示到Jsp页面

    Servlet从数据库中拿到结果以后 对用户来说 他们并不关心你怎么拿的 恰恰最重要的是 他们要看到信息展示在网页上 那这个该怎么实现 言归正传 拿到数据以后 想要把数据展示到Jsp页面上 这样办 跳转 转发和重定看大佬文章 清晰又明白 转
  • vscode连接服务器不用每次都输入密码

    1 首先在自己的本地生成公钥和密钥 git bash 输入以下命令 ssh keygen 然后一路回车 就会在自己用户 ssh文件夹下生成一对密钥 生成的公钥和密钥默认放在 ssh文件夹 我的是 2 修改本地的配置文件 添加下面这行属性到配
  • python学习笔记---IO编程【廖雪峰】

    IO编程 IO在计算机中指Input Output 也就是输入和输出 由于程序和运行时数据是在内存中驻留 由CPU这个超快的计算核心来执行 涉及到数据交换的地方 通常是磁盘 网络等 就需要IO接口 IO编程中 Stream 流 是一个很重要
  • linux中的阻塞机制及等待队列

    阻塞与非阻塞是设备访问的两种方式 驱动程序需要提供阻塞 等待队列 中断 和非阻塞方式 轮询 异步通知 访问设备 在写阻塞与非阻塞的驱动程序时 经常用到等待队列 一 阻塞与非阻塞 阻塞调用是没有获得资源则挂起进程 被挂起的进程进入休眠状态 调
  • 输出数组中最大和最小的元素值及其下标

    设计完整的程序实现以下功能 一个数组有10个元素 例如 1 8 10 2 5 0 7 15 4 5 利用指针作为函数参数 输出数组中最大和最小的元素值及其下标 include
  • TOPP问题(Time-Optimal Path Parameterization)详细解析(附代码)

    题目来源 深蓝学院课程 机器人中的数值优化 主讲 汪哲培博士 最后大作业 参考资料 课程ppt与视频 助教和大佬的提示和讨论 Verscheure D et al Time optimal path tracking for robots