MATLAB飞行机无人机程序, 核心功能是让飞行机器人从指定初始位置出发,跟踪半波sin曲线,采用深度确定性策略梯度(DDPG)算法训练智能体来控制飞行机器人的动作。
本文介绍了一个基于MATLAB的无人机轨迹跟踪控制系统,采用深度确定性策略梯度(DDPG)算法实现飞行机器人对半波正弦曲线的自主跟踪。系统包含三个核心模块:环境初始化模块可设置初始位置和角度;智能体构建模块通过Actor-Critic网络结构设计控制策略;训练仿真模块实现算法训练与性能验证。该系统适用于机器人控制领域的研究,可作为无人机路径规划和智能控制的参考案例。文中提供了关键代码框架和Simu
MATLAB飞行机无人机程序,
核心功能是让飞行机器人从指定初始位置出发,跟踪半波sin曲线,采用深度确定性策略梯度(DDPG)算法训练智能体来控制飞行机器人的动作。
功能模块
- 环境设置与初始化 定义了飞行机器人的环境模型和集成模型 可以设置飞行机器人的初始状态,包括初始角度
theta0、初始x坐标x0和初始y坐标y0,以及采样时间Ts和仿真总时间Tf。 - 通过flyingRobotResetFcn函数随机化飞行机器人的初始位置和方向,默认将机器人初始位置设置在x0 = -16,y0 = 0.5附近。 - 智能体网络构建观测与动作信息:获取观测信息和动作信息,包括观测数据的维度和动作数据的维度,同时设置动作的范围和变量名。 Critic网络:由观测路径和动作路径组成,观测路径包含多个全连接层和ReLU激活层,动作路径也有全连接层。通过
layerGraph构建图,并将动作路径的输出连接到观测路径中的additionLayer,最终构建rlQValueRepresentation作为Critic网络。 Actor网络:由多个全连接层和ReLU激活层组成,最后一层使用tanhLayer,构建rlDeterministicActorRepresentation作为Actor网络。 智能体构建:使用rlDDPGAgent函数结合Actor和Critic网络构建智能体,并设置智能体的参数,如采样时间、目标平滑因子、经验缓冲区长度等。 - 训练与仿真训练过程:设置训练参数,包括最大训练回合数
maxepisodes、每回合最大步数maxsteps、停止训练的条件等。通过train函数对智能体进行训练,训练过程中可以实时查看训练进度。 仿真过程:训练完成后,使用sim函数对训练好的智能体进行仿真,记录仿真过程中的经验数据。
适用场景:可作为强化学习在机器人控制领域的研究案例,帮助研究人员深入理解DDPG算法在连续动作空间中的应用。
工业应用:在无人机飞行控制、机器人路径规划等领域具有一定的参考价值,可用于开发更智能的机器人控制系统。
可以用于毕业设计
代码结构框架(伪代码 + 关键函数)
以下是实现该任务的核心步骤(基于 MATLAB R2022b+):
matlab
%% 1. 环境建模(自定义 RL 环境)
env = rlFunctionEnv(…
‘ObservationInfo’, rlNumericSpec([4 1], ‘LowerBound’, -inf, ‘UpperBound’, inf), … % [x, y, vx, vy] 或含角度
‘ActionInfo’, rlNumericSpec([2 1], ‘LowerBound’, -1, ‘UpperBound’, 1), … % 如 [thrust_x, thrust_y]
‘ResetFcn’, @flyingRobotResetFcn, …
‘StepFcn’, @flyingRobotStepFcn);
% Reset 函数示例
function in = flyingRobotResetFcn()
x0 = -16 + randn;
y0 = 0.5 + 0.1randn;
theta0 = 0;
in = [x0; y0; 0; 0]; % 可扩展为 [x; y; theta; vx; vy; omega]
end
% Step 函数需包含:
% - 状态更新(动力学模型,如简化的二阶系统)
% - 计算 reward(如 - pos - ref_pos ^2 - 0.1action_norm)
% - 判断是否终止(到达终点 or 超出边界)
%% 2. 构建 DDPG 智能体
obsDim = 4; actDim = 2;
% Actor 网络
actorLayers = [
featureInputLayer(obsDim)
fullyConnectedLayer(256); reluLayer
fullyConnectedLayer(256); reluLayer
fullyConnectedLayer(actDim); tanhLayer];
actorNet = dlnetwork(actorLayers);
actorOpts = rlRepresentationOptions(‘LearnRate’, 1e-4);
actor = rlDeterministicActorRepresentation(actorNet, …
env.getObservationInfo, env.getActionInfo, actorOpts);
% Critic 网络(双输入:obs + action)
criticObsPath = [
featureInputLayer(obsDim, ‘Name’, ‘obs’)
fullyConnectedLayer(256, ‘Name’, ‘obsFC1’); reluLayer(‘Name’, ‘obsRelu1’)];
criticActPath = [
featureInputLayer(actDim, ‘Name’, ‘act’)
fullyConnectedLayer(256, ‘Name’, ‘actFC1’)];
criticCommonPath = [
additionLayer(2, ‘Name’, ‘add’)
reluLayer(‘Name’, ‘reluCommon’)
fullyConnectedLayer(1, ‘Name’, ‘value’)];
criticNet = layerGraph(criticObsPath);
criticNet = addLayers(criticNet, criticActPath);
criticNet = addLayers(criticNet, criticCommonPath);
criticNet = connectLayers(criticNet, ‘obsFC1’, ‘add/in1’);
criticNet = connectLayers(criticNet, ‘actFC1’, ‘add/in2’);
criticDlnet = dlnetwork(criticNet);
criticOpts = rlRepresentationOptions(‘LearnRate’, 1e-3);
critic = rlQValueRepresentation(criticDlnet, …
env.getObservationInfo, env.getActionInfo, criticOpts);
% 创建 DDPG 智能体
agentOpts = rlDDPGAgentOptions(…
‘SampleTime’, Ts, …
‘TargetSmoothFactor’, 1e-3, …
‘ExperienceBufferLength’, 1e6, …
‘DiscountFactor’, 0.99);
agent = rlDDPGAgent(actor, critic, agentOpts);
%% 3. 训练与仿真
trainOpts = rlTrainingOptions(…
‘MaxEpisodes’, 2000, …
‘MaxStepsPerEpisode’, 500, …
‘StopTrainingCriteria’, ‘EpisodeReward’, …
‘StopTrainingValue’, -10, … % 根据 reward 设计调整
‘Plots’, ‘training-progress’);
trainingStats = train(agent, env, trainOpts);
% 仿真
simData = sim(env, agent, ‘MaxSteps’, 500);
2. 关键细节说明
参考轨迹:半波正弦曲线可定义为
y_ref = A sin(pi (x - x_start) / (x_end - x_start)),其中 x ∈ [x_start, x_end]
状态设计建议:[x, y, vx, vy] 或 [x, y, theta, v]
动作设计:可输出加速度 (ax, ay) 或直接力 (Fx, Fy)
Reward 函数:
matlab
distanceError = norm([x, y] - [x_ref, y_ref]);
actionPenalty = 0.01 * sum(action.^2);
reward = -distanceError - actionPenalty;
终止条件:到达终点(x > x_end)或偏离太远( y - y_ref > threshold)

这是一个典型的飞行器姿态控制系统或旋翼机动力学闭环控制模型,
-
输入信号:
x, y, z —— 可能是位置或状态变量
theta, phi, psi —— 角度(俯仰、滚转、偏航)
rate_request —— 转速请求(如主旋翼桨距) -
核心部分:
多个积分器(Integrator)构成状态方程
增益块(Gain)、求和节点(Sum)表示动力学关系
黑色竖条可能是 S-Function 或子系统封装
RewardCost 和 PenaltyOfWeightedNorm 表明这是强化学习中的奖励函数计算模块 -
输出端口:
reward:用于 RL 训练的即时奖励
cost:代价项(如控制能量、偏差惩罚)
action:智能体输出的动作(如油门、桨距) -
整体推测:
这很可能是某个直升机/无人机的强化学习训练环境接口,其中:
左侧为物理动力学模型(6自由度运动方程)
右侧为奖励函数设计
中间黑色模块可能是 flyingRobotStepFcn 的 Simulink 实现 -
搭建一个类似的直升机非线性动力学模型(基于牛顿-欧拉方程)
-
实现 DDPG 算法训练智能体跟踪半波正弦轨迹
-
将模型导出为 .slx 文件并生成可运行代码
-
编写报告文档、算法流程图、实验结果分析
✔️ 示例:如何在 Simulink 中构建此模型
matlab
% 创建新模型
new_system(‘HelicopterDDPGEnv’);
open_system(‘HelicopterDDPGEnv’);
% 添加基本组件
add_block(‘simulink/Sources/Constant’, ‘HelicopterDDPGEnv/InitialPosition’);
add_block(‘simulink/Continuous/Integrator’, ‘HelicopterDDPGEnv/Integrator_x’);
add_block(‘simulink/Math Operations/Sum’, ‘HelicopterDDPGEnv/Sum_x’);
add_block(‘simulink/Math Operations/Gain’, ‘HelicopterDDPGEnv/Gain_x’);
% 设置参数
set_param(‘HelicopterDDPGEnv/Integrator_x’, ‘InitialCondition’, ‘0’);
set_param(‘HelicopterDDPGEnv/Gain_x’, ‘Gain’, ‘1’);
更多推荐



所有评论(0)