手把手教用matlab做无人驾驶(二)-路径规划A*算法

本文介绍了如何在Matlab环境中实现A*路径规划算法。包括构建地图、设置起点与终点及障碍物,并提供了完整的Matlab代码示例。下一步将在该地图上实现A*算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整个程序下载地址如下:https://download.youkuaiyun.com/download/caokaifa/10641075

对于路径规划算法-A*算法在matlab中仿真,首先我们在matlab中构建地图:

先给出matlab主函数程序:

%   editor:  Robert.Cao
%   2018.9.1
clc
clear all
close all
disp('A Star Path Planing start!!')
p.start=[1,1];  %起始点
p.goal=[10,3];  %目标点
p.XYMAX=11; 
obstacle=GetBoundary(p);%得到边界数据
nObstacle=20;
obstacle=GetObstacle(nObstacle,obstacle,p);
figure(1)
if length(obstacle)>=1
    plot(obstacle(:,1),obstacle(:,2),'om');hold on;
end
plot(p.start(1),p.start(2),'*r');hold on;
plot(p.goal(1),p.goal(2),'*b');hold on;

 注释:代码可能直接复制放到matlab中运行可能会出错,代码本身是没错的,可能复制上去格式不对,我运行了一下因为空格的原因,所有你一条一条复制到matlab中肯定不会出错。

现在解释一下上面代码:

p.start=[1,1];  %起始点就是代表机器人的起始点坐标

p.goal=[10,3];  %机器人目标点坐标

p.XYMAX=11; %代表我们要画一个地图的长和宽

obstacle=GetBoundary(p);%这里调用了function 函数GetBoundary,这个函数就是通过我们设置 p.XYMAX=11函数来取得地图的边界

nObstacle=20;%这个函数就是我们在地图中随机加入二十个障碍物

obstacle=GetObstacle(nObstacle,obstacle,p);%这个obstacle包含了障碍物和地图边界数据
if length(obstacle)>=1
    plot(obstacle(:,1),obstacle(:,2),'om');hold on;
end
plot(p.start(1),p.start(2),'*r');hold on;
plot(p.goal(1),p.goal(2),'*b');hold on; %这段程序没什么解释的,就是画图,包含了机器人坐标的起始和终点位置。

下面,我们给出GetBoundary 函数与GetObstacle函数:

function :GetBoundary

function boundary=GetBoundary(p)
boundary=[];

for i1=0:(p.XYMAX+1)
    boundary=[boundary;[0 i1]];
end
for i2=0:(p.XYMAX+1)
    boundary=[boundary;[i2 0]];
end
for i3=0:(p.XYMAX+1)
    boundary=[boundary;[p.XYMAX+1 i3]];
end
for i4=0:(p.XYMAX+1)
    boundary=[boundary;[i4 p.XYMAX+1]];
end
boundary=[boundary;[11 11]];
boundary=[boundary;[9 1]];
boundary=[boundary;[10 2]];
boundary=[boundary;[11 3]];
boundary=[boundary;[10 1]];
boundary=[boundary;[11 2]];
boundary=[boundary;[11 1]];

end

function :GetObstacle

function obstacle=GetObstacle(nob,obstacle,p)

ob=round(rand([nob,2])*p.XYMAX);

removeInd=[];
for io=1:length(ob(:,1))
   if(isSamePosi(ob(io,:),p.start) || isSamePosi(ob(io,:),p.goal))
        removeInd=[removeInd;io];
    end  
end
ob(removeInd,:)=[];

obstacle=[obstacle;ob];

现在看看matlab中的效果:

 

图中可以看出边界点,障碍物点,机器人起始坐标,终点坐标,下一篇将在这个地图中做A*算法。

 

 

### 使用MATLAB实现强化学习路径规划 #### 一、简介 在路径规划领域,Q-learning作为一种经典的强化学习方法被广泛应用。该技术通过迭代过程让智能体学会如何行动以最大化累积奖励,从而找到从起始位置到达目标的最佳路线。 #### 、准备工作 为了开始这个项目,在启动任何编程之前,需要先安装必要的工具箱——Reinforcement Learning Toolbox™ 和 Robotics System Toolbox™。这两个工具包提供了创建自定义环境以及训练代理所需的功能[^1]。 #### 三、构建仿真环境 接下来要的就是建立一个简单的维网格世界作为模拟平台。在这个环境中设置障碍物和其他特征来增加复杂度;同时指定起点和终点的位置。这一步骤可以通过编写脚本来完成: ```matlab % 创建地图对象并初始化参数 mapSize = [8, 8]; % 地图大小 startPos = [1, 1]; % 起点坐标 goalPos = [7, 7]; % 终点坐标 obstaclePositions = [...]; % 障碍物列表 env = robotics.MapEnvironment(mapSize); addObstacles(env, obstaclePositions); % 添加障碍物至地图 setStartGoal(env, startPos, goalPos); % 设置起点与终点 show(env); % 显示当前的地图布局 ``` #### 四、定义状态空间和动作集 对于每一个可能的状态(即格子),都有四个可行的动作可以选择:向上移动、向下移动、向左移动或向右移动。因此,整个系统的状态空间由所有可达节点组成,而动作集合则包含了上述四种操作方式之一。 #### 五、配置Q-Learning Agent 利用`rlQAgentOptions()` 函数来自定义一些重要的超参数选项,比如折扣因子γ (gamma),用于平衡即时回报的重要性相对于未来预期收益的影响程度;还有α(alpha), 它决定了新获得的信息应该占多少比重去更新旧的知识库。另外还需设定ε-greedy策略下的初始探索概率ε(epsilon)及其衰减率decayRate[]^2: ```matlab agentOpts = rlQAgentOptions(); agentOpts.Gamma = 0.9; % 折扣因子 gamma=0.9 agentOpts.Alpha = 0.1; % 学习速率 alpha=0.1 agentOpts.EpsilonGreedyExploration.Epsilon = 1; agentOpts.EpsilonGreedyExploration.Decay = 0.99; observationInfo = rlFiniteSetSpec({... 'PositionX', linspace(-width/2,width/2,mapSize(1)); ... 'PositionY', linspace(-height/2,height/2,mapSize(2))}); actionInfo = rlFiniteSetSpec({'Up','Down','Left','Right'}); qTable = table('Size',[numel(observationInfo.Elements{1}), numel(actionInfo.Elements)],... 'VariableTypes',{'double'},'VariableNames',{'QValues'}); agent = rlQAgent(qTable, agentOpts); agent = setActionSelectionFunction(agent,@chooseEpsilonGreedyAction,... observationInfo, actionInfo); ``` #### 六、训练模型 一旦完成了前面几步的工作之后就可以正式进入最核心的部分—训练环节了。这里采用循环结构来进行多次试验直到满足特定条件为止,期间不断地调整权重矩阵W直至收敛于稳定解。每次尝试结束后都会记录下所经历过的轨迹以便后续分析性能指标变化趋势。 ```matlab trainOpts = rlTrainingOptions('MaxEpisodes',maxEpisodes,'StopOnError',false,... for episodeIdx = 1:maxEpisodes reset(env); while ~isDone(env) actn = selectAction(agent,getObservation(env)); stepResult = step(env,actn); experience = struct('Observation',{getObservation(env)},... 'Reward',stepResult.Reward,... 'IsDone',stepResult.IsDone,... 'NextObservation',{getObservation(env)}); trainOneStep(agent,experience,trainOpts); end end ``` #### 七、测试效果 当经过充分练习后,便可以用一组新的随机实例再次运行程序来看看最终成果究竟怎样。此时应关闭所有的探索机制只保留贪婪选择法即可得到一条较为理想的行走线路[^3].
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值