控制障碍函数(Control Barrier Function,CBF) 二、示例

二、示例

2.1、系统模型

这里我们举一个CBF作者给出的经典示例

请添加图片描述

我们定义控制输入 u u u 为蓝色车的推力。 p p p 为蓝色车的位置, v v v 为蓝色车的速度, z z z 为蓝色车与黄色车之间的距离, v 0 v_0 v0 为黄色车的速度。我们定义系统的状态为
x = [ p v z ] ∈ R 3 x = \begin{bmatrix} p \\ v \\ z \end{bmatrix} \in \mathbb{R}^3 x= pvz R3
对其求导为
x ˙ = [ v − 1 m F r ( v ) v 0 − v ] + [ 0 1 m 0 ] u \dot x = \begin{bmatrix} v \\ -\frac{1}{m} F_r(v) \\ v_0 - v \end{bmatrix} + \begin{bmatrix} 0 \\ \frac{1}{m} \\ 0 \end{bmatrix} u x˙= vm1Fr(v)v0v + 0m10 u
其中 F r ( v ) = f 0 + f 1 v + f 2 v 2 F_r(v) = f_0 + f_1 v + f_2 v^2 Fr(v)=f0+f1v+f2v2 为滚动阻力

为了保证系统安全,对这个系统做出一些约束

输入约束
− m c d g ≤ u ≤ m c a g -m c_d g \le u \le m c_a g mcdgumcag
稳定性目标,其中 v d v_d vd 为期望速度
v → v d v \to v_d vvd
安全目标,其中 T h T_h Th 为时间前瞻量
z ≥ T h v z \ge T_h v zThv

2.2、设计CLF

系统的稳定目标为 v → v d v \to v_d vvd ,因此系统的原点 x e = [ ⋅ , v d , ⋅ ] T x_e = [\cdot,v_d,\cdot]^T xe=[,vd,]T 。设计李雅普诺夫函数为
V ( x ) = ( v − v d ) 2 V(x) = (v - v_d)^2 V(x)=(vvd)2
对其求梯度
∇ V ( x ) = [ 0 2 ( v − v d ) 0 ] \nabla V(x) = \begin{bmatrix} 0 \\ 2(v-v_d) \\ 0 \end{bmatrix} V(x)= 02(vvd)0
那么
L f V ( x ) = − 2 m F r ( v ) ( v − v d ) L g V ( x ) = − 2 m ( v − v d ) \begin{aligned} L_f V(x) &= -\frac{2}{m} F_r(v) (v-v_d) \\ L_g V(x) &= -\frac{2}{m} (v-v_d) \\ \end{aligned} LfV(x)LgV(x)=m2Fr(v)(vvd)=m2(vvd)
所以CLF约束可以表示为
V ˙ ( x , u ) + λ V ( x ) = L f V ( x ) + L g V ( x ) u + λ V ( x ) = ( v − v d ) { 2 m ( u − F r ) + λ ( v − v d ) } ≤ 0 \dot V(x,u) + \lambda V(x) = L_f V(x) + L_g V(x) u + \lambda V(x) = (v - v_d) \left\{ \frac{2}{m}(u - F_r) + \lambda(v-v_d) \right\} \le 0 V˙(x,u)+λV(x)=LfV(x)+LgV(x)u+λV(x)=(vvd){m2(uFr)+λ(vvd)}0

2.3、设计CBF

安全目标为 z ≥ T h v z \ge T_h v zThv ,即两车间距大于一定值

先以直观的方式定义CBF函数 B ( x ) = z − T h v B(x) = z - T_h v B(x)=zThv

对其求梯度 ∇ B ( x ) = [ 0 − T h 1 ] \nabla B(x) = \begin{bmatrix} 0 & -T_h & 1 \end{bmatrix} B(x)=[0Th1]

那么
L f V ( x ) = T h m F r ( v ) + ( v 0 − v ) L g V ( x ) = − T h m \begin{aligned} L_f V(x) &= \frac{T_h}{m} F_r(v) + (v_0 - v) \\ L_g V(x) &= -\frac{T_h}{m} \\ \end{aligned} LfV(x)LgV(x)=mThFr(v)+(v0v)=mTh
所以有CBF函数的导数
B ˙ ( x , u ) + γ B ( x ) = T h m ( F r ( v ) − u ) + ( v 0 − v ) − T h m + γ ( z − T h v ) ≥ 0 \dot B(x,u) + \gamma B(x) = \frac{T_h}{m} (F_r(v)-u) + (v_0 - v) - \frac{T_h}{m} + \gamma(z - T_h v) \ge 0 B˙(x,u)+γB(x)=mTh(Fr(v)u)+(v0v)mTh+γ(zThv)0
如果忽视滚动阻力的影响,并采用最大的控制量 u = − c d m g u = -c_d mg u=cdmg
B ˙ ( x , u ) + γ B ( x ) = T h c d g + v 0 + γ z − ( 1 + T h γ ) v \dot B(x,u) + \gamma B(x) =T_h c_d g + v_0 + \gamma z - (1+T_h \gamma) v B˙(x,u)+γB(x)=Thcdg+v0+γz(1+Thγ)v
v v v 相对于 T h c d g + v 0 T_h c_d g + v_0 Thcdg+v0 比较大时,那么约束可能不会被满足,即 B ˙ ( x , u ) ≤ 0 \dot B(x,u) \le 0 B˙(x,u)0 v v v 比较大时。

为了解决这个问题,我们多加一项,多加的这一项其实我们看等式的话,相当于将安全区域范围缩小了,但是能消除一部分 B ( x ) B(x) B(x) 中的多项式
B ( x ) = z − T h v − 1 2 ( v − v 0 ) 2 c d g B(x) = z - T_h v - \frac{1}{2} \frac{(v - v_0)^2}{c_d g} B(x)=zThv21cdg(vv0)2
对其求导
B ˙ ( x , u ) = 1 m ( T h + v − v 0 c d g ) ( F r ( v ) − u ) + ( v 0 − v ) \dot B(x,u) = \frac{1}{m} (T_h + \frac{v - v_0}{c_d g}) (F_r(v) - u) + (v_0 - v) B˙(x,u)=m1(Th+cdgvv0)(Fr(v)u)+(v0v)
当 $u = -c_d m g $ 时
B ˙ ( x , u ) = 1 m T h F r ( v ) + T h c d g > 0 \dot B(x,u) = \frac{1}{m} T_h F_r(v) + T_h c_d g > 0 B˙(x,u)=m1ThFr(v)+Thcdg>0
所以CBF可以表示为
B ˙ ( x , u ) + γ B ( x ) = 1 m ( T h + v − v 0 c d g ) ( F r ( v ) − u ) + ( v 0 − v ) + γ ( z − T h v ) ≥ 0 \dot B(x,u) + \gamma B(x) = \frac{1}{m} (T_h + \frac{v - v_0}{c_d g}) (F_r(v) - u) + (v_0 - v) + \gamma (z - T_h v) \ge 0 B˙(x,u)+γB(x)=m1(Th+cdgvv0)(Fr(v)u)+(v0v)+γ(zThv)0

2.4、规划目标

最终,我们得到的是这样一个规划问题
argmin   u T H u subject to   ( v − v d ) { 2 m ( u − F r ) + λ ( v − v d ) } ≤ 0 1 m ( T h + v − v 0 c d g ) ( F r ( v ) − u ) + ( v 0 − v ) + γ ( z − T h v ) ≥ 0 − m c d g ≤ u ≤ m c a g \begin{aligned} \text{argmin} \ \ &u^T H u \\ \text{subject to} \ \ & (v - v_d) \left\{ \frac{2}{m}(u - F_r) + \lambda(v-v_d) \right\} \le 0 \\ & \frac{1}{m} (T_h + \frac{v - v_0}{c_d g}) (F_r(v) - u) + (v_0 - v) + \gamma (z - T_h v) \ge 0 \\ & -m c_d g \le u \le m c_a g \\ \end{aligned} argmin  subject to  uTHu(vvd){m2(uFr)+λ(vvd)}0m1(Th+cdgvv0)(Fr(v)u)+(v0v)+γ(zThv)0mcdgumcag
从上到下分别为CLF约束,CBF约束,控制输入约束。

下一部分我们讲解这里推导的公式怎么用代码实现

### 控制屏障函数控制理论和机器人技术中的概念 控制屏障函数Control Barrier Function, CBF)是一种用于保障控制系统安全性的重要工具。CBF 的核心思想是在状态空间中定义一个安全集,使得系统轨迹始终保持在这个集合内[^1]。 #### 安全性的数学表示 假设存在一个连续时间非线性系统 \(\dot{x} = f(x,u)\),其中 \(x\) 表示系统的状态向量,\(u\) 是输入向量。对于给定的安全条件 \(h(x) ≥ 0\),如果可以找到合适的控制器使不等式: \[ L_f h(x)+ L_g h(x) u + \alpha(h(x))≥ 0 \] 始终成立,则称此系统满足 CB 函数的要求。这里 \(L_f\) 和 \(L_g\) 分别代表李导数算子,而 \(\alpha(·)\) 则是一个扩展类-\(\kappa\) 函数[^2]。 ```python import numpy as np def cbf_condition(f, g, alpha, h, x, u): """ Check the Control Barrier Function condition. Parameters: f : callable The drift vector field of the system dynamics. g : callable The input matrix of the system dynamics. alpha : callable A class-K function used in the CBF formulation. h : callable Safety constraint function such that h(x)>=0 defines a safe set. x : array_like Current state of the system. u : array_like Input to be checked against the CBF condition. Returns: bool True if the CBF condition is satisfied; False otherwise. """ lie_derivative_fh = np.dot(np.gradient(h(x)), f(x)) lie_derivative_gh = np.dot(np.gradient(h(x)).T, g(x)) return lie_derivative_fh + lie_derivative_gh @ u + alpha(h(x)) >= 0 ``` #### 应用实例 在一个典型的移动机器人导航场景下,可以通过设定适当的形式化表达式的障碍函数来防止机器人撞到静态或动态障碍物。例如,在自动手术辅助系统中,为了确保机械臂不会意外接触到患者身体其他部位或其他医疗设备,同样可采用类似的机制来进行实时监控并调整动作指令以维持操作过程中的绝对安全[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LyaJpunov

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值