💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
基于Koopman算子合成的CBF进行碰撞避免研究是指利用学习的Koopman算子和控制边界函数(CBF)来实现无人机的碰撞避免。这种方法结合了动力学系统的模型和安全性约束,通过学习系统的动态特性和边界函数来设计出一个控制策略,使得无人机在避免碰撞的同时,能够实现其特定任务目标,比如着陆等。这项研究旨在提高无人机的飞行安全性和任务执行效率,为实际应用场景中无人机的自主飞行提供更多可靠的解决方案。
碰撞避免是机器人运动控制中的重要问题,通过合成控制边界函数(CBF)来实现碰撞避免是一种常见的方法。最近的研究表明,使用Koopman算子来合成CBF可以提高系统的性能和鲁棒性。
Koopman算子是一种线性动力学系统的无限维度表示方法,可以将非线性系统映射到高维空间中的线性系统。通过使用Koopman算子合成CBF,可以将非线性系统的动力学特性转化为线性系统的特性,从而更容易设计和分析控制器。
在碰撞避免问题中,Koopman算子可以用来建模系统的动力学,并通过合成CBF来设计碰撞避免控制器。通过将系统状态空间划分为安全和危险区域,并使用CBF来确保系统状态不会进入危险区域,可以实现有效的碰撞避免控制。
未来的研究可以进一步探索使用Koopman算子合成CBF进行碰撞避免的方法,以提高机器人系统的性能和鲁棒性。同时,还可以研究如何将Koopman算子与其他控制方法结合,以实现更复杂的碰撞避免任务。
本文包含7个主要脚本,运行不同部分的实验,展示了Koopman + CBF框架。前4个脚本涉及学习Dubin小车模型的近似Koopman算子,然后使用学习模型在乔治亚理工学院Robotarium进行实验。这些文件为(都可以通过利用存储在代码库中的学习模型分别运行):
- 'dubin_learning.m' 生成训练数据并学习模型
- 'robotarium_obstacle_avoidance.m' 在Robotarium上执行一个模拟实验,其中单个代理避开固定障碍物
- 'robotarium_collision_avoidance.m' 在Robotarium上执行一个模拟实验,其中5个代理避免彼此碰撞
- 'robotarium_collision_obstacle_avoidance.m' 在Robotarium上执行一个模拟实验,其中5个代理避免彼此碰撞和固定障碍物
剩下的3个脚本涉及学习无人机的近似Koopman算子,并利用学习模型模拟2个不同的实验。这些文件为(都可以通过利用存储在代码库中的学习模型分别运行):
- 'uav_learning.m' 生成训练数据并学习模型
- 'uav_collision_avoidance.m' 执行一个简单的实验,其中2个无人机避免相互碰撞
- 'uav_collision_ge_exp.m' 执行一个实验,在这个实验中,3个无人机试图降落在相同的着陆垫上,同时避免相互碰撞和与地面的强烈撞击。
📚2 运行结果
部分代码:
%% Define experiment parameters:
%State constraints and backup controller parameters:
global Ts T_max x_bdry
Ts = 0.01; % Sampling interval
T_max = 1;
N_max = ceil(T_max/Ts);
ts = 1e-3; % Simulator time interval
x_bdry = [-1 1; -1 1; 0.2 2; % Position limits (m)
-pi/6 pi/6; -pi/6 pi/6; -pi/12 pi/12; % Attitude limits (in euler angles XYZ) (rad)
-1 1; -1 1; -1 1; % Linear velocity limits (m/s)
-pi/12 pi/12; -pi/12 pi/12; -pi/12 pi/12; % Angular velocity limits (rad/s)
450 550; 450 550; 450 550; 450 550]; % Propeller angular velocity limits (rad/s)
% Define system and dynamics:
config = quad1_constants;
KpVxy = 0.7; %0.7
KpVz = 1; %1
KpAtt = 10; %10
KdAtt = 1; %1
KpOmegaz = 2; %2
V_max = 14.8;
V_min = 0.5;
hoverT = 0.5126*V_max; %0.52
Omega_hover = 497.61*ones(4,1);
M = [KpVxy; KpVz; KpAtt; KdAtt; KpOmegaz; hoverT]; % Backup controller parameters
z_land = 0.05;
affine_dynamics = @(x) UAVDynamics_eul(x); % System dynamics, returns [f,g] with x_dot = f(x) + g(x)u
backup_controller = @(x) backupU_eul(x,M); % Backup controller (go to hover)
controller_process = @(u) min(max(real(u),V_min*ones(4,1)),V_max*ones(4,1));
stop_crit1 = @(t,x)(norm(x(7:12))<=5e-2 || x(3) <= z_land); % Stop if velocity is zero
sim_dynamics = @(x,u) sim_uav_dynamics(x,u,config,false,false); % Closed loop dynamics under backup controller
sim_process = @(x,ts) x; % Processing of state data while simulating
initial_condition = @() generate_initial_state_uav(false);
fname = 'uav';
%Koopman learning parameters:
n = 16;
func_dict = @(x) uav_D_eul_ge(x(1),x(2),x(3),x(4),x(5),x(6),x(7),x(8),x(9),x(10),...
x(11),x(12),x(13),x(14),x(15),x(16)); % Function dictionary, returns [D,J] = [dictionary, jacobian of dictionary]
n_samples = 250; % Number of initial conditions to sample for training
gather_data = false;
tune_fit = true;
%% Learn approximated discrete-time Koopman operator:
if gather_data == true
[T_train, X_train] = collect_data(sim_dynamics, sim_process, backup_controller, controller_process, stop_crit1, initial_condition, n_samples, ts);
plot_training_data(X_train,n_samples)
% Process data so it only contains the states chosen for training:
for i = 1 : length(X_train)
X_train{i} = X_train{i}(:,1:n);
end
save(['data/' fname '_train_data.mat'], 'T_train','X_train');
else
load(['data/' fname '_train_data.mat']);
end
[Z, Z_p] = lift_data(X_train,func_dict,false);
Z_p = Z_p - Z;
Z_p = Z_p(5:end,:);
if tune_fit == true
[K, obj_vals, lambda_tuned] = edmd(Z, Z_p, 'lasso', true, [], [],true, tune_fit, 3);
save(['data/' fname '_lambda_tuned.mat'], 'lambda_tuned');
else
load(['data/' fname '_lambda_tuned.mat']);
[K, obj_vals, ~] = edmd(Z, Z_p, 'lasso', true, lambda_tuned, [],true, false, 0);
%[K, obj_vals, ~] = edmd(Z, Z_p, 'gurobi', true, lambda_tuned, false, 0);
end
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]彭柯瑞,陈天翼,唐梓轩,等.基于Koopman算子的软体机器人数据驱动建模方法研究[J].武汉理工大学学报, 2022.
[2]彭柯瑞,陈天翼,唐梓轩,等.基于Koopman算子的软体机器人数据驱动建模方法研究[J].武汉理工大学学报, 2022.
[3]陈提.基于Koopman算子理论的航天器姿态协同控制[J].[2024-02-27].
[4]丁承君,吴礼荣,朱雪宏,等.基于Koopman算子的差速驱动AGV数据驱动控制[J].组合机床与自动化加工技术, 2023(3):109-112.