基于控制屏障函数的安全关键系统二次规划(适用于ACC)(Matlab代码实现)

     目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

基于控制屏障函数的安全关键系统二次规划(适用于ACC)是一种用于自适应巡航控制(ACC)系统中的安全性优化方法。ACC是一种汽车自动驾驶技术,它通过感知前方车辆的距离和速度来调整车辆的速度,以维持与前车的安全距离。

控制屏障函数(Control Barrier Function,CBF)是一种数学工具,用于描述系统状态的约束和安全边界。在ACC系统中,CBF可以用来定义车辆的安全区域,即车辆与前车之间的安全距离范围。

基于CBF的二次规划方法可以通过最小化代价函数来优化ACC系统的性能和安全性。这个代价函数可以包括车辆速度、加速度、与前车的距离等参数,同时考虑到安全约束和性能要求。

通过解决二次规划问题,ACC系统可以在满足安全约束的前提下,实现车辆的自适应巡航控制。这种方法可以提供更高的安全性和可靠性,减少与前车的碰撞风险,并提高驾驶员的驾驶舒适度和体验。

需要注意的是,基于控制屏障函数的安全关键系统二次规划方法是一种技术,具体的实现和应用需要根据具体的ACC系统和实际需求进行定制和开发。同时,系统的安全性还需要考虑其他因素,如传感器精度、系统故障处理等,以确保ACC系统的可靠性和安全性。

📚2 运行结果

主函数部分代码:

clear all
clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Objective: Adaptive Cruise Control (ACC) Simulation (A repeat of the result
%of the paper "Control Barrier Function Based Quadratic Programs for Safety
%Critical Systems (Page 3870)"
)%Author: Ming Li
%Date: March 2nd. 2022
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global u_save
%% Initial Setup
%
 Note that [x(
1
) x(
2
) x(
3
)]==[v_f v_l D]%Initial distance between two vehicles is 150
%Intial velocity of the leading vehicle is 18;
%Intial velocity of the leading vehicle is 10;
Initial_position=[18 10 150];
t_span=[0:0.1:100];                                                        % Running time and interval
​
[Init_Par]=Initial_Parameter();
% [x] = ode4(@odefcn,t_span,Initial_position);
[x] = ode4(@odefcn,t_span,Initial_position);
% %% Ode45 plot
%
 figure(
1
)% plot(x.y(1,:),'b--','linewidth',2)
% hold on
% plot(x.y(2,:),'r--','linewidth',2)
% set(gca,'FontSize',23)
% set(gcf,'Position',[200,200,1000,800], 'color','w')
% xlabel('x1')
% ylabel('x2')
% legend('$v_{f}$','$v_{l}$','Interpreter','latex')
% grid on
​
%% Ode4 plot
figure(1)
plot(t_span,x(:,1),'b--','linewidth',2)
hold on
plot(t_span,x(:,2),'r--','linewidth',2)
set(gca,'FontSize',23)
set(gcf,'Position',[200,200,1000,800], 'color','w')
xlabel('x1')
ylabel('x2')
legend('$v_{f}$','$v_{l}$','Interpreter','latex')
grid on
​
figure(2)
plot(x(:,3),'b--','linewidth',2)
set(gca,'FontSize',23)
set(gcf,'Position',[200,200,1000,800], 'color','w')
xlabel('x')
ylabel('D')
legend('$D$','Interpreter','latex')
grid on
​
%
% Compute the CBFh_safe=x(:,3)-Init_Par.tau_d*x(:,1);
figure(3)
plot(t_span,h_safe,'b--','linewidth',2)
set(gca,'FontSize',23)
set(gcf,'Position',[200,200,1000,800], 'color','w')
xlabel('x')
ylabel('$h_{S}$','Interpreter','latex')
legend('$h_{S}$','Interpreter','latex')
grid on
​
%% Compute the control input
%
 d_x=diff(x(
:
,
1
));d_x=(x(2:end,1)-x(1:end-1,1))*10;
for i_u=1:size(x,1)-1
F_r(i_u)=Init_Par.f_0+Init_Par.f_1*x(1)+Init_Par.f_2*(x(1))^2;% Rolling resistance (force)
u_nodevi(i_u)=(d_x(i_u)*Init_Par.M+F_r(i_u));
u(i_u)=(d_x(i_u)*Init_Par.M+F_r(i_u))/Init_Par.M/Init_Par.a_g;
end
figure(4)
plot(t_span(2:end),u,'b-','linewidth',2)
set(gca,'FontSize',23)
set(gcf,'Position',[200,200,1000,800], 'color','w')
xlabel('t')
ylabel('$u$','Interpreter','latex')
legend('$u$','Interpreter','latex')
grid on
​
figure(5)
for i_u=1:size(x,1)-1
F_r(i_u)=Init_Par.f_0+Init_Par.f_1*x(1)+Init_Par.f_2*(x(1))^2;% Rolling resistance (force)
u_origin(i_u)=(u_save(1+(i_u-1)*4))/Init_Par.M/Init_Par.a_g;
end
plot(t_span(2:end),u_origin,'b-','linewidth',2)
set(gca,'FontSize',23)
set(gcf,'Position',[200,200,1000,800], 'color','w')
xlabel('t')
ylabel('$u$','Interpreter','latex')
legend('$u$','Interpreter','latex')
grid on
​
​
​
​

🎉3 参考文献

​[1]赵向涛,阎妍,于双和等.基于屏障函数的船舶自适应控制[J].江苏大学学报(自然科学版),2021,42(06):715-720.

部分理论引用网络文献,若有侵权联系博主删除。

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

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

相关文章

SpringBoot集成jasypt,加密yml配置文件

SpringBoot集成jasypt,加密yml配置文件 一、pom配置二、生成密文代码三、配置3.1、yml加密配置3.2、密文配置3.3、启动配置3.4、部署配置 四、遇到的一些坑 最新项目安全检测,发现配置文件中数据库密码,redis密码仍处理明文状态 一、pom配置…

vscode 前端开发插件 2023

自己记录 安装vscode后必装插件 chinesegit 必装没啥可说 随时更新 1.CSS Navigation CTRL点击类名可跳转到对应样式位置。 如果是scss less的话。css peak插件无法生效 2.GitLens — Git supercharged 可以看到每一行的git提交记录。 3.Auto Rename Tag 可以同步更新…

SPDK的块设备抽象层,从一个简单的示例程序讲起

最早的SPDK仅仅是一个NVMe驱动,但现在的SPDK已经不是原来的SPDK了,其功能涵盖了整个存储栈。为了能够实现丰富的功能,SPDK实现了一个块设备抽象层,其功能与Linux内核的块设备层类似,这个块设备抽象层称为BDEV。 块设备抽象层BDEV在整个SPDK栈中的位置如图所示,它位于中间…

【JavaEE】深入了解Spring中Bean的可见范围(作用域)以及前世今生(生命周期)

【JavaEE】Spring的开发要点总结(4) 文章目录 【JavaEE】Spring的开发要点总结(4)1. Bean的作用域1.1 一个例子感受作用域的存在1.2 通过例子说明作用域的定义1.3 六种不同的作用域1.3.1 singleton单例模式(默认作用域…

hbase基础

hbase安装 tar -zxvf hbase-2.4.11-bin.tar.gz -C . ln -s f hbase-2.4.11-bin hbasemv /export/server/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar /export/server/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar.bakvim conf/regionser…

C++ __builtin_popcount函数作用

__builtin_popcount函数是系统自带的一个返回值是int/long/long long二进制1的个数的函数。 对于int,long, long long分别用一下三种函数: __builtin_popcount(unsigned int n)//返回值为int __builtin_popcountl(unsigned int n)//返回值为…

python与深度学习(九):CNN和cifar10

目录 1. 说明2. cifar10实战2.1 导入相关库2.2 加载数据2.3 数据预处理2.4 数据处理2.5 构建网络模型2.6 模型编译2.7 模型训练2.8 模型保存2.9 模型评价2.10 模型测试2.11 模型训练结果的可视化 3. cifar10的CNN模型可视化结果图4. 完整代码5. 改进后的代码和结果 1. 说明 本…

docker 安装 字体文件

先说一下我当前的 场景 及 环境,这样同学们可以先评估本篇文章是否有帮助。 环境: dockerphp8.1-fpmwindows 之所以有 php,是因为这个功能是使用 php 开发的,其他语言的同学,如果也有使用到 字体文件,那么…

封装动态SQL的插件

最近根据公司的业务需要封装了一个简单的动态SQL的插件,要求是允许用户在页面添加SQL的where条件,然后开发者只需要给某个接口写查询对应的表,参数全部由插件进行拼接完成。下面是最终实现: 开发人员只需要在接口写上下面的查询SQ…

java(Collection类)

文章目录 Collection接口继承树Collection接口及方法判断删除其它 Iterator(迭代器)接口迭代器的执行原理 foreach循环Collection子接口1:ListList接口特点List接口方法List接口主要实现类:ArrayListList的实现类之二:LinkedListList的实现类…

前沿分享-会发电的水凝胶敷料

四川大学的研究团队设计了一种新型的伤口敷料, 将电刺激治疗引入伤口敷料,达到营造湿润环境的同时利用电刺激来加速愈合的效果。 上半部分由树状纳米纤维构成,下半部分由双网络导电水凝胶构成,加入了铁离子和儿茶酚。该部分用于贴…

【IMX6ULL驱动开发学习】21.Linux驱动之PWM子系统(以SG90舵机为例)

1.设备树部分 首先在 imx6ull.dtsi 文件中已经帮我们定义好了一些pwm的设备树节点&#xff0c;这里以pwm2为例 pwm2: pwm02084000 {compatible "fsl,imx6ul-pwm", "fsl,imx27-pwm";reg <0x02084000 0x4000>;interrupts <GIC_SPI 84 IRQ_TYP…

抖音短视频seo源码矩阵系统开发

一、前言&#xff1a; 抖音SEO源码矩阵系统开发是一项专为抖音平台设计的SEO优化系统&#xff0c;能够帮助用户提升抖音视频的搜索排名和曝光度。为了确保系统运行正常&#xff0c;需要安装FFmpeg和FFprobe工具。FFmpeg是一个用于处理多媒体数据的开源工具集&#xff0c;而FFpr…

uni-app引用外部图标库(阿里矢量图)

uni-app引用外部图标库&#xff08;阿里矢量图&#xff09; 作为前端程序员&#xff0c;nui-app是必备的&#xff0c;但是有时候内置的图标&#xff0c;组件又不完全满足&#xff0c;这里就可以引进外部图标&#xff0c;这里引用的是阿里矢量图标 第一步&#xff0c;在项目目…

027 - avg()函数

定义&#xff1a; AVG 函数返回数值列的平均值。NULL 值不包括在计算中。 语法&#xff1a; SELECT AVG(column_name) FROM table_name -- 实际操作&#xff08;计算salary的平均值&#xff09;&#xff1a; SELECT avg(salary) AS "平均工资" FROM employee ; --…

JavaScript

目录 什么是JavaScript&#xff1f; 网页中引用 JavaScript 的方式 JavaScript 核心语法 变量 数据类型 运算符 string对象 数组 运算符号 控制语句 注释 输入/输出 语法约定 什么是函数&#xff1f; 常见的系统函数 自定义函数 变量的作用域 事件 什么是Jav…

2023年最适合您业务的免费CRM——SaleSmartl

使用免费的CRM软件&#xff0c;例如SaleSmartly&#xff0c;可以协助您更好地发展您的业务&#xff0c;是提高生产力、减少错误、自动化重复性任务和享受交易机会的宝贵工具。您可以将多个渠道的客户信息集中在一个平台上&#xff0c;并允许员工访问&#xff0c;以便给他们分配…

【Spring Boot】请求参数传json数组,后端采用(pojo)新增案例(103)

请求参数传json数组&#xff0c;后端采用&#xff08;pojo&#xff09;接收的前提条件&#xff1a; 1.pom.xml文件加入坐标依赖&#xff1a;jackson-databind 2.Spring Boot 的启动类加注解&#xff1a;EnableWebMvc 3.Spring Boot 的Controller接受参数采用&#xff1a;Reque…

牛客网Verilog刷题——VL52

牛客网Verilog刷题——VL52 题目答案 题目 请编写一个十进制计数器模块&#xff0c;当mode信号为1&#xff0c;计数器输出信号递增&#xff0c;当mode信号为0&#xff0c;计数器输出信号递减。每次到达0&#xff0c;给出指示信号zero。模块的接口信号图如下&#xff1a; 模块的…

【数据结构与算法——TypeScript】数组、栈、队列、链表

【数据结构与算法——TypeScript】 算法(Algorithm)的认识 解决问题的过程中&#xff0c;不仅仅 数据的存储方式会影响效率&#xff0c;算法的优劣也会影响效率 什么是算法&#xff1f; 定义&#xff1a; &#x1f7e2; 一个有限指令集&#xff0c;每条指令的描述不依赖于言语…
最新文章