控制障碍函数(Control Barrier Function,CBF) 三、代码

三、代码实现

3.1、模型

这是一个QP问题,所以我们直接建模

请添加图片描述

这其实还是之前的那张图,我们把这个大的框架带入到之前的那个小车追击的问题中去,得到以下的一些具体的约束条件

  • CLF约束

L g V ( x ) u − δ ≤ − L f V ( x ) − λ V ( x ) L_g V(x) u - \delta \le - L_fV(x) - \lambda V(x) LgV(x)uδLfV(x)λV(x)

  • CBF约束

− L g B ( x ) u ≤ L f B ( x ) + γ B ( x ) -L_g B(x) u \le L_fB(x) + \gamma B(x) LgB(x)uLfB(x)+γB(x)

  • 输入约束

u ≤ u m a x − u ≤ − u m i n \begin{aligned} u &\le u_{max} \\ -u &\le - u_{min} \end{aligned} uuumaxumin

我们全部写成了这种小于等于的形式,便于下面的二次规划

3.2、实现
clc; clear; close all;

dt = 0.02;                                                                 
T = 30;
length = ceil(T ./ dt);

sys.p = zeros(length,1);                                                   % 位置
sys.v = zeros(length,1);                                                   % 速度
sys.z = zeros(length,1);                                                   % 与前车距离
sys.u = zeros(length,1);                                                   % 控制量
sys.m = 1650;                                                              % 与系统相关参数
sys.g = 9.81;
sys.v0 = 14;
sys.vd = 24;
sys.f0 = 0.1;
sys.f1 = 5;
sys.f2 = 0.25;
sys.ca = 0.3;
sys.cd = 0.3;
sys.T = 1.8;
sys.u_max = sys.ca .* sys.m .* sys.g;                                      % 控制量最大值
sys.u_min = - sys.cd .* sys.m .* sys.g;                                    % 控制量最小值
sys.clf.rate = 5;                                                          % lambda
sys.cbf.rate = 5;                                                          % gamma
sys.wight.input = 2 ./ sys.m .^ 2;                                         % 二次型矩阵H
sys.wight.slack = 2e-2;                                                    % 松弛变量系数 p

% 状态初始化
sys.p(1,1) = 0;
sys.v(1,1) = 10;
sys.z(1,1) = 100;


for i = 1:(length)
    t = i .* dt;

    p = sys.p(i,1);
    v = sys.v(i,1);
    z = sys.z(i,1);
    x = [p; v; z];
    
    F_r = sys.f0 + sys.f1.*v + sys.f2 .* v .* v;
    f = [v; - F_r ./ sys.m; sys.v0 - v];
    g = [0; 1./sys.m; 0];

    V = (v - sys.vd) .^ 2;                                                 % 李雅普诺夫函数
    dV = [0, 2 .* (v - sys.vd), 0];                                        % 李雅普诺夫函数的导
    LfV = dV * f;                                                          % 李导数
    LgV = dV * g;
    B = z - sys.T .* v - 0.5 .* (v - sys.v0) .^ 2 ./ (sys.cd .* sys.g);    % 障碍函数
    dB = [0, - sys.T - (v - sys.v0) ./ sys.cd ./ sys.g, 0];                % 障碍函数的导
    LfB = dB * f;                                                          % 李导数
    LgB = dB * g;
    

    % 解控制量u
    A_ = [LgV, -1; 
          -LgB, 0;
          1,0;
          -1,0];
    b_ = [-LfV - sys.clf.rate .* V; 
          LfB + sys.cbf.rate .* B;
          sys.u_max;
          -sys.u_min;];
    H_ = [sys.wight.input, 0;
          0,sys.wight.slack];
    f_ = [- sys.wight.input * F_r; 0];
    
    u = quadprog(H_,f_,A_,b_);
    u = u(1); % 第二项是松弛变量,松弛变量这里也是一个待优化的值

    dx = f + g .* u;
    x_n = x + dx .* dt;

    % 保存数据
    sys.u(i,1) = u;
    sys.p(i+1,1) = x_n(1);
    sys.v(i+1,1) = x_n(2);
    sys.z(i+1,1) = x_n(3);
end

% 绘图
figure(1);
subplot(4,1,1);
plot(dt:dt:T,sys.p(1:length,:));
ylabel('p')

subplot(4,1,2);
plot(dt:dt:T,sys.v(1:length,:));
ylabel('v')

subplot(4,1,3);
plot(dt:dt:T,sys.z(1:length,:));
ylabel('z')

subplot(4,1,4);
plot(dt:dt:T,sys.u);
ylabel('u')

这里我们的二次规划求解器用到了Matlab中的函数quadprog,其文档地址为 https://ww2.mathworks.cn/help/optim/ug/quadprog.html

本文的结果为

请添加图片描述

相较于作者给出的代码,本文的代码更加简单,适合初学者使用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

合宙海外模组硬核出击,Air780UAAir780UU全新上市

简介 随着国内市场竞争日趋激烈,企业产品出海已呈如火如荼之势,向外发展拼商机更需硬核优势。 合宙作为物联网行业的核心器件提供商,将逐步推出系列高性价比海外模组,全面助力行业客户出海。现针对亚太、欧洲地区,全…

【语义解析:连接自然语言与机器智能的桥梁】

语义解析:连接自然语言与机器智能的桥梁 语义解析技术可以提高人机交互的效率和准确性,在自然语言处理、数据分析、智能客服、智能家居等领域都有广泛的应用前景。特别是在大数据时代,语义解析能够帮助企业更快速地从大量的数据中获取有用的…

什么是HTTP协议以及对HTTP协议的见解

目录 HTTP协议 (1)什么是http协议 (2)http协议的特点: (3)http协议请求头 (4)http协议响应头 HTTP协议 (1)什么是http协议 http&#xff0…

PostgreSQL ZIP版安装完全手册

前言 ZIP免安装版下载地址:社区 DL 页面 (enterprisedb.com) 选择所需的版本下载即可。 安装 将下载的zip安装包(我这里下载的是postgresql-15.5-1-windows-x64-binaries.zip)解压至D盘根路径下,解压后路径:D:/pgsq…

苹果手机怎么设置提醒事项?详细方法在这,记得收藏!

无论是学生党还是上班族,大家每天都需要处理许多任务和事项。为了更好地管理这些事项,苹果手机为用户提供了提醒功能。 通过设置提醒事项,我们可以减少忘记重要任务的可能性。那么,苹果手机怎么设置提醒事项呢?在本文…

git秘钥过期 ERROR: Your SSH key has expired

文章目录 1、错误提示Your SSH key has expired2、登录Github确认3、重新设置秘钥 1、错误提示Your SSH key has expired 使用git命令时遇到Github 的 SSH Key秘钥过期,提示错误ERROR: Your SSH key has expired 2、登录Github确认 首先登录Github查看&#xff…

RK3566环境搭建

环境:vmware16,ubuntu 18.04 安装依赖库: sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool expect g patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakero…

NX二次开发 Block UI 指定方位控件的应用

一、概述 NX二次开发中一般都是多个控件的组合,这里我首先对指定方位控件进行说明并结合选择对象控件,具体如下图所示。 二、实现功能获取方位其在选择面上原点的目标 2.1 在initialize_cb()函数中进行初始化,实现对象选择过滤面 //过滤平…

系统性介绍MoE模型架构,以及在如今大模型方向的发展现状

知乎:Verlocksss编辑:马景锐链接:https://zhuanlan.zhihu.com/p/675216281 1 学习动机 第一次了解到MoE(Mixture of experts),是在GPT-4模型架构泄漏事件,听说GPT-4的架构是8个GPT-3级别大小的模…

运用tomcat在浏览器中对数据库信息进行查询

在idea中创建好项目后&#xff0c;添加web项目 然后打开idea的setting&#xff0c;跳转到下面的页面&#xff0c;下载maven插件。 出现下面的选项&#xff0c;才正确。 添加好web项目后&#xff0c;打开pom文件&#xff0c;添加相应的依赖&#xff1a; <?xml version"…

新世界葡萄酒黑马美国加州

新世界葡萄酒黑马美国加州 一、新旧葡萄酒国 在葡萄酒的世界里&#xff0c;除了传统老牌的葡萄酒国家比如法国&#xff0c;西班牙、葡萄牙和格鲁吉亚等外。进入二十世纪&#xff0c;一些新兴的葡萄酒酿造国家也在如耀眼的明星般升起&#xff0c;如美国&#xff0c;澳大利亚和…

高防服务器、高防 IP 和高防 CDN 之间有什么区别?

网络运营人员最头痛的是什么&#xff1f; 网络攻击无疑名列前茅。一旦企业遭受网络攻击&#xff0c;所面临的损失可能是无法估量的。那么&#xff0c;如何有效地抵御网络攻击呢&#xff1f; 高防 IP、高防 CDN 和高防服务器是当前主流的防御手段。那何为“高防”呢&#xff1…

小米机型解锁bl 绕过社区等级5才可以解锁的限制的教程

小米机型目前限制了解锁bl的机制。从以前单一的绑定解锁到目前绑定账号必须小米社区5级的条件限制。切必须要答题分数够才可以申请解锁。限制的根本原因也在为消费者提供更好的服务。避免刷机小白无基础常识解锁bl后第三方固件或者软件造成的故障。另外一方面也在于市场格机脚本…

Amazing OpenAI API:把非 OpenAI 模型都按 OpenAI API 调用

分享一个有趣的小工具&#xff0c;10MB 身材的小工具&#xff0c;能够将各种不同的模型 API 转换为开箱即用的 OpenAI API 格式。 让许多依赖 OpenAI API 的软件能够借助开发者能够接触到的&#xff0c;非 OpenAI 的 API 私有部署和使用起来。 写在前面 这个小工具软件写于两…

平板怎么录屏?轻松掌握录屏方法!

随着科技的发展&#xff0c;使用平板电脑进行学习、工作、娱乐的人越来越多。录制平板屏幕成为许多用户需要的功能&#xff0c;无论是用来制作教程、记录游戏过程还是保存重要信息。可是平板怎么录屏呢&#xff1f;在本文中&#xff0c;我们将为大家提供详细的步骤指导&#xf…

速学python·输入输出

和用户交互 程序与用户交互工程中 用户把信息传送给程序的过程是 输入 程序把结果展示给用户的过程是 输出 输入输出的最简单的方法是利用控制台 例如 和 都是控制台,进行输入和输出的作用 但是: 我们常见的交互界面,例如QQ,浏览器,Wegame等,都不需要输入命令,大大简化了操…

Windows环境下使用HTML5播放RTSP流

本文搭建环境选用Windows平台 一、使用笔记本摄像头推送RTSP视频流 参考文章:笔记本摄像头模拟监控推送RTSP流-CSDN博客 二、搭建Vue项目 参考项目&#xff1a; HTML5 播放 rtsp视频流 2.1 下载压缩包 2.2 解压文件&#xff0c;使用VSCode打开项目 2.3 启动项目 注&#…

Linux网络命令

文章目录 Linux网络网络配置命令1、ifconfig&#xff1a;查看网络接口信息&#xff08;显示所有活动网卡&#xff09;1.1 常用命令格式1.2 命令格式&#xff08;图文详解&#xff09;1.2.1 临时修改网卡名称1.2.2 永久修改网卡名称1.2.3 永久修改单个网卡 2、hostname&#xff…

Open CASCADE学习|模块组成

OpenCASCADE由七个模块组成&#xff0c;分别如下&#xff1a; Foundation Classes基础类 Modeling Data 建模数据 Modeling Algorithms 建模算法 Visualization 可视化 Data Exchange 数据交换 Application Framework 程序框架 Kernel Classes 核心类 2D Geometry 二维几…

巧用 G5g 畅游Android流媒体游戏

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 巧用 G5g 畅游Android流媒体游戏 概览 Amazon EC2 G5g 实例由 AWS Graviton2 处理器提供支持&#xff0c;并配备 NVIDIA T4G Tensor Core GPU&#xff0c;可为 Andro…