智能车圆弧轨迹规划

圆弧轨迹速度梯形轨迹规划

1. 点到点轨迹规划简介

点到点轨迹规划是让机器人(如机械臂、智能车)在规定时间 T T T内完成一段轨迹(如直线、曲线)。轨迹规划跟路径规划概念不同,轨迹规划是对时间 T T T做规划,也映射到了速度、加速度、加加速度等。路径规划只是规划一条路径,起点到目标点,对时间不做要求,但是对路径的平滑度、距离最短、能量最少、甚至是时间最优(以某个速度完成这段路径)。他们最大的差异在于是否对时间 T T T做规划

PTP(Point to Point,点到点)轨迹规划是已知 起点 θ s t a r t 运动到终点 θ e n d 起点\theta_{start}运动到终点\theta_{end} 起点θstart运动到终点θend ,在时间 T T T内完成运动。 这里会引入中间变量 s ( t ) s(t) s(t),它是时间的函数,定义域为 [ 0 , T ] [0,T] [0,T],值域为 [ 0 , 1 ] [0,1] [0,1]。当 s = 0 , θ = θ s t a r t 。当 s = 1 , θ = θ e n d s = 0, \theta = \theta_{start}。当 s = 1, \theta = \theta_{end} s=0,θ=θstart。当s=1,θ=θend
因此角度值 θ 在规定时间 T 内从 θ s t a r t 到 θ e n d 完成运动, θ 关于 s 的函数如下 \theta 在规定时间T内从\theta_{start}到\theta_{end}完成运动,\theta关于s的函数如下 θ在规定时间T内从θstartθend完成运动,θ关于s的函数如下

θ ( s ) = θ s t a r t + ( θ e n d − θ s t a r t ) s , s ∈ [ 0 , 1 ] s = s ( t ) , t ∈ [ 0 , T ] (1) \begin{aligned} \theta(s) &= \theta_{start}+(\theta_{end} - \theta_{start})s, s\in\left[ 0,1\right] \\ s &= s(t), t\in\left[ 0,T\right] \tag{1} \end{aligned} θ(s)s=θstart+(θendθstart)s,s[0,1]=s(t),t[0,T](1)
将 θ 对 t 进行求偏导得到速度 将\theta 对 t 进行求偏导得到速度 θt进行求偏导得到速度
∂ θ ∂ t = ∂ θ ∂ s ∗ ∂ s ∂ t ∵ ∂ θ ∂ s = θ e n d − θ s t a r t ∴ ∂ θ ∂ t = ( θ e n d − θ s t a r t ) ∂ s ∂ t (2) \begin{aligned} \frac{\partial \theta}{\partial t} &= \frac{\partial \theta}{\partial s} * \frac{\partial s}{\partial t} \\ \because \frac{\partial \theta}{\partial s} & = \theta_{end} - \theta_{start} \tag{2} \\ \therefore \frac{\partial \theta}{\partial t} &= (\theta_{end} - \theta_{start}) \frac{\partial s}{\partial t} \end{aligned} tθsθtθ=sθts=θendθstart=(θendθstart)ts(2)

将 θ 对 t 进行求二阶偏导得到加速度 将\theta 对 t 进行求二阶偏导得到加速度 θt进行求二阶偏导得到加速度
∂ 2 θ ∂ t 2 = ( θ e n d − θ s t a r t ) ∂ 2 s ∂ t 2 (3) \begin{aligned} \frac{\partial ^{2} \theta}{\partial t^{2}} =(\theta_{end} - \theta_{start}) \frac{\partial^{2} s}{\partial t^{2}} \tag{3} \end{aligned} t22θ=(θendθstart)t22s(3)
因为 θ s t a r t 和 θ e n d \theta_{start}和\theta_{end} θstartθend是已知的,所以速度和加速度随时间的变化取决于 s = s ( t ) , t ∈ [ 0 , T ] s=s(t),t\in[0,T] s=s(t),t[0,T]。一般会有三次多项式、五次多项式、梯形曲线、S型曲线做规划。具体可以参考下面链接点到点轨迹规划

2. 圆弧轨迹梯形规划

2.1 速度梯形规划

梯形规划是指 s ˙ \dot s s˙的曲线是梯形。如图所示 在这里插入图片描述
s为分段函数,即:
s ( t ) = { 1 2 a t 2 0 ≤ t ≤ v a v t − v 2 2 a v a < t ≤ T − v a 2 a v T − 2 v 2 − a 2 ( t − T ) 2 2 a T − v a < t ≤ T (4.1) s(t)= \begin{cases} \frac{1}{2}at^2& 0\leq t \leq \frac{v}{a}\\ vt - \frac{v^2}{2a} & \frac{v}{a} <t \leq T - \frac{v}{a} \\ \frac{ 2avT - 2v^2-a^2(t-T)^2 }{2a}& T-\frac{v}{a}<t\leq T \tag{4.1} \end{cases} s(t)= 21at2vt2av22a2avT2v2a2(tT)20tavav<tTavTav<tT(4.1)
s ˙ \dot s s˙为:
s ˙ ( t ) = { a t 0 ≤ t ≤ v a v v a < t ≤ T − v a − a ( t − T ) T − v a < t ≤ T (5.1) \dot s(t)= \begin{cases} at& 0\leq t \leq \frac{v}{a}\\ v& \frac{v}{a} <t \leq T - \frac{v}{a} \\ -a(t - T)& T-\frac{v}{a}<t\leq T \tag{5.1} \end{cases} s˙(t)= atva(tT)0tavav<tTavTav<tT(5.1)
这里的 v , a , T v ,a, T v,a,T均有约束条件:
s ( T ) = a v T − v 2 a = 1 s(T) = \frac{avT-v^2}{a} = 1 s(T)=aavTv2=1,且加速段 t a = v a ≤ T 2 , a ≥ 0 t_a = \frac{v}{a} \leq \frac{T}{2}, a \geq0 ta=av2T,a0

  • 指定 v , a v,a v,a T = a + v 2 a v T = \frac{a+v^2}{av} T=ava+v2,且需要满足 v 2 a ≤ 1 \frac{v^2}{a}\leq1 av21
  • 指定 v , T v,T v,T a = v 2 v T − 1 a=\frac{v^2}{vT-1} a=vT1v2,且需要满足 1 < v T ≤ 2 1<vT\leq2 1<vT2
  • 指定 a , T a,T a,T v = 1 2 ( a T − a a T 2 − 4 ) v=\frac{1}{2}(aT-\sqrt a \sqrt{aT^2-4}) v=21(aTa aT24 ),且需要满足 a T 2 ≥ 4 aT^2\geq4 aT24

若起始速度 v 0 v_0 v0和终点速度 v e v_e ve不为0,则梯形规划分段函数为:
s ( t ) = { v 0 t + 1 2 a t 2 0 ≤ t ≤ v − v 0 a v t − ( v − v 0 ) 2 2 a v − v 0 a < t ≤ T − v − v e a 2 a v T − ( v − v 0 ) 2 − ( v − v e ) 2 − a 2 ( t − T ) 2 + 2 a v e ( t − T ) 2 a T − v − v e a < t ≤ T (4.2) s(t)= \begin{cases} v_0t+\frac{1}{2}at^2& 0\leq t \leq \frac{v-v_0}{a}\\ vt - \frac{(v-v_0)^2}{2a} & \frac{v-v_0}{a} <t \leq T - \frac{v-v_e}{a} \\ \frac{ 2avT - (v-v_0)^2-(v-v_e)^2-a^2(t-T)^2+2av_e(t-T) }{2a}& T-\frac{v-v_e}{a}<t\leq T \tag{4.2} \end{cases} s(t)= v0t+21at2vt2a(vv0)22a2avT(vv0)2(vve)2a2(tT)2+2ave(tT)0tavv0avv0<tTavveTavve<tT(4.2)
s ˙ \dot s s˙为:
s ˙ ( t ) = { v 0 + a t 0 ≤ t ≤ v − v 0 a v v − v 0 a < t ≤ T − v − v e a v e − a ( t − T ) T − v − v e a < t ≤ T (5.2) \dot s(t)= \begin{cases} v_0+at& 0\leq t \leq \frac{v-v_0}{a}\\ v& \frac{v-v_0}{a} <t \leq T - \frac{v-v_e}{a}\\ v_e-a(t - T)& T-\frac{v-v_e}{a}<t\leq T \tag{5.2} \end{cases} s˙(t)= v0+atvvea(tT)0tavv0avv0<tTavveTavve<tT(5.2)
这里的 v , a , T v ,a, T v,a,T均有约束条件:
s ( T ) = 2 a v T − ( v − v 0 ) 2 − ( v − v e ) 2 2 a = 1 s(T) = \frac{2avT-(v-v_0)^2-(v-v_e)^2}{2a} = 1 s(T)=2a2avT(vv0)2(vve)2=1,且加速段和减速度段 t a + t b = 2 v − v 0 − v e a ≤ T , a ≥ 0 t_a +t_b = \frac{2v-v_0-v_e}{a} \leq T, a \geq0 ta+tb=a2vv0veT,a0

  • 指定 v , a v,a v,a T = 2 a + ( v − v 0 ) 2 + ( v − v e ) 2 2 a v T = \frac{2a+(v-v_0)^2+(v-v_e)^2}{2av} T=2av2a+(vv0)2+(vve)2,且需要满足 2 v 2 − v 0 2 − v e 2 2 a ≤ 1 \frac{2v^2-v_0^2-v_e^2}{2a}\leq1 2a2v2v02ve21
  • 指定 v , T v,T v,T a = ( v − v 0 ) 2 + ( v − v e ) 2 2 ( v T − 1 ) a=\frac{(v-v_0)^2+(v-v_e)^2}{2(vT-1)} a=2(vT1)(vv0)2+(vve)2,且需要满足 1 < v T ≤ ( v 0 2 + v e 2 ) T − 2 ( v 0 + v e ) + 4 v 2 v 1<vT\leq \frac{(v_0^2+v_e^2)T-2(v_0+v_e)+4v}{2v} 1<vT2v(v02+ve2)T2(v0+ve)+4v
  • 指定 a , T a,T a,T v = 1 2 ( v 0 + v e + a T − ( a T + v 0 + v e ) 2 − 2 v 0 2 − 2 v e 2 − 4 a ) v=\frac{1}{2}(v_0+v_e+aT- \sqrt{(aT+v_0+v_e)^2-2v_0^2-2v_e^2-4a}) v=21(v0+ve+aT(aT+v0+ve)22v022ve24a ),且需要满足 ( a T + v 0 + v e ) 2 − 2 v 0 2 − 2 v e 2 − 4 a ) ≥ 0 (aT+v_0+v_e)^2-2v_0^2-2v_e^2-4a)\geq0 (aT+v0+ve)22v022ve24a)0
2.2 圆弧轨迹规划

以需要让小车转360°一个圈为例,让小车以特定的最大角速度 θ ˙ \dot \theta θ˙绕半径 R R R旋转360°,进行轨迹规划。
已知起始角度为 0 ° 0° ,目标角度为 360 ° 360° 360°
因此可以得到每个时刻转动角速度 θ ˙ \dot\theta θ˙的值为:
θ ˙ = 360 s ˙ s ˙ 是关于速度梯形规划 (6) \dot \theta = 360\dot s\\ \tag{6} \dot s是关于速度梯形规划 θ˙=360s˙s˙是关于速度梯形规划(6)
因为限制了最大角速度 θ ˙ \dot\theta θ˙,因此,在 s ˙ \dot s s˙梯形规划中, v = s ˙ m a x = θ ˙ 360 v = \dot s max = \frac{\dot \theta}{360} v=s˙max=360θ˙ (注意这里的 θ ˙ 单位为 d e g / s \dot \theta单位为deg/s θ˙单位为deg/s),设 a = v 2 + 1 a = v^2+1 a=v2+1, 在已知 a , v a,v a,v可以得到规划周期 T T T.
通过公式(5) s ˙ \dot s s˙进行梯形速度规划,相当于对 θ ˙ \dot \theta θ˙进行梯形速度规划,从公式(6)可以得出该结论。
跟随圆弧路径原理这一篇文章我们得知 θ ˙ 与 x ˙ , y ˙ \dot \theta与\dot x,\dot y θ˙x˙,y˙的关系如下:
x ˙ = − R s i n θ θ ˙ y ˙ = R c o s θ θ ˙ (7) \begin{aligned} \dot x &= -Rsin\theta\dot\theta \\ \dot y &= Rcos\theta\dot\theta \\ \tag{7} \end{aligned} x˙y˙=Rsinθθ˙=Rcosθθ˙(7)
最后通过公式(5)(6)(7),我们得到在时间 t t t下规划出来的瞬时速度并将速度下发给智能车让小车进行圆弧轨迹规划。

3. 圆弧轨迹规划进阶

如何让小车按着圆弧切线方向进行轨迹规划或者是朝着车头刷锅进行轨迹规划。甚至是让小车进行圆弧轨迹规划的同时,小车可以圆弧运动,也能到达期望的角度(车与世界坐标系的夹角 α \alpha α)小车可以边自旋,边绕圆,像陀螺运动。

3.1 车头绕圆弧切线和刷锅运动

圆弧切线运动
跟随圆弧路径原理这一篇文章我们得知:
x ˙ r = − R s i n ( θ − α ) θ ˙ y ˙ r = R c o s ( θ − α ) θ ˙ θ ˙ r = θ ˙ (8) \begin{aligned} \dot x_r &= -Rsin(\theta -\alpha)\dot \theta\\ \dot y_r &= Rcos(\theta-\alpha)\dot \theta\\ \dot \theta_r &= \dot\theta \tag{8} \end{aligned} x˙ry˙rθ˙r=Rsin(θα)θ˙=Rcos(θα)θ˙=θ˙(8)
θ 是圆弧角, α 是机器人坐标系与圆弧世界坐标系的夹角。 \theta是圆弧角,\alpha 是机器人坐标系与圆弧世界坐标系的夹角。 θ是圆弧角,α是机器人坐标系与圆弧世界坐标系的夹角。见下图:在这里插入图片描述
当智能车切线圆弧运动, θ = α \theta = \alpha θ=α,公式(8)变成:
y ˙ r = R θ ˙ θ ˙ r = θ ˙ (9) \begin{aligned} \dot y_r &= R\dot \theta\\ \dot \theta_r &= \dot\theta \tag{9} \end{aligned} y˙rθ˙r=Rθ˙=θ˙(9)
通过上述章节2.2,对 θ ˙ \dot\theta θ˙进行轨迹规划即可。 刷锅运动轨迹规划原理一样, α − θ = π 2 \alpha - \theta = \frac{\pi}{2} αθ=2π

3.2 小车圆弧运动且能达到期望角度

由于小车的角速度和线速度是非耦合的关系,当小车在圆弧运动时,期望绕一圈后,小车已经转了特定角度。 例如,小车圆弧运动360°的同时,小车的方向与原来的方向已经旋转了 β \beta β ,如90°。
因为对圆弧进行了轨迹规划,已知在 T T T时间内,小车会走完圆弧轨迹,因此小车旋转 β \beta β也对应在该规划的 T T T时间内。
∵ θ ˙ = ( θ e n d − θ s t a r t ) s ˙ ∴ β ˙ = β s ˙ (10) \begin{aligned} \because \dot \theta &= (\theta_{end} - \theta_{start})\dot s\\ \therefore \dot \beta &= \beta\dot s \tag{10} \end{aligned} θ˙β˙=(θendθstart)s˙=βs˙(10)
s ˙ \dot s s˙ 属于梯形规划,得到运动周期 T T T。通过公式(10),得到了关于自转角度 β \beta β的规划。因此关于 ( x ˙ r , y ˙ r , θ ˙ r ) (\dot x_r,\dot y_r, \dot \theta_r) (x˙r,y˙r,θ˙r)解算公式如下:
x ˙ r = − R s i n ( θ − α − γ ) θ ˙ y ˙ r = R c o s ( θ − α − γ ) θ ˙ θ ˙ r = θ ˙ + β ˙ γ = γ l a s t + θ ˙ r t (11) \begin{aligned} \dot x_r &= -Rsin(\theta -\alpha - \gamma)\dot \theta\\ \dot y_r &= Rcos(\theta-\alpha - \gamma)\dot \theta\\ \dot \theta_r &= \dot\theta + \dot \beta \tag{11} \\ \gamma &= \gamma_{last} + \dot \theta_rt \end{aligned} x˙ry˙rθ˙rγ=Rsin(θαγ)θ˙=Rcos(θαγ)θ˙=θ˙+β˙=γlast+θ˙rt(11)
通过下发 ( x ˙ r , y ˙ r , θ ˙ r ) (\dot x_r,\dot y_r, \dot \theta_r) (x˙r,y˙r,θ˙r)三组速度即可达到期望的运动状态。

3.3 小车圆弧运动且像陀螺旋转

跟上一个小节3.2一样,小车陀螺旋转就是多了一个固定自转角速度 β ˙ \dot \beta β˙,当规划开始与结束的时候 β ˙ = 0 \dot \beta = 0 β˙=0,期间速度恒定,就能让小车边走圆弧边陀螺运动,解算公式与公式(11)一样,但是 β ˙ \dot \beta β˙是没有经过轨迹规划的。而小车走圆弧是经过轨迹规划的。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能小车的速度规划可以通过PID控制器来实现。PID控制器是一种常用的控制器,可以通过调整参数来控制系统的响应速度、稳定性和精度。下面是一个简单的速度规划代码示例: ```c // 引入电机控制库和PID控制库 #include <motor.h> #include <PID.h> // 定义目标速度和PID参数 #define TARGET_SPEED 50 #define KP 1.0 #define KI 0.1 #define KD 0.01 // 初始化电机和PID控制器 Motor motor; PID speed_controller(KP, KI, KD); // 控制小车速度的函数 void set_speed(int speed) { // 如果速度超出范围,则将其修正到合法范围内 if (speed > motor.maxSpeed()) { speed = motor.maxSpeed(); } else if (speed < 0) { speed = 0; } // 控制电机转速 motor.setSpeed(speed); } int main() { // 初始化电机和PID控制器 motor.init(); speed_controller.init(); // 设置PID控制器的目标速度 speed_controller.setTarget(TARGET_SPEED); // 控制小车速度 while (true) { // 获取当前速度 int current_speed = motor.getSpeed(); // 计算PID控制器输出 double output = speed_controller.update(current_speed); // 将PID控制器输出作为目标速度,控制小车速度 set_speed((int)output); // 延时一段时间 delay(100); } return 0; } ``` 在这个程序中,我们首先定义了目标速度和PID参数,并初始化了电机和PID控制器。在main函数中,我们首先设置PID控制器的目标速度,然后进入一个循环中,在循环中获取当前速度,使用PID控制器计算输出,将输出作为目标速度,控制小车速度。在实际应用中,我们可以根据具体的需求来调整PID参数,以达到更好的速度规划效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值