基于RRT算法的路径规划实现(matlab)

基于RRT算法的路径规划实现(matlab)

快速随机扩展树算法(Rapidly-exploring Random Tree, RRT)

RRT算法基于采样的方式在配置空间中搜索,它的搜索过程类似于一棵树不断生长、向四周扩散的过程,它以起点作为搜索树T根节点。

伪代码

在这里插入图片描述
详细步骤

1.起点为X_init,目标地点为X_goal;
2.在空间中随机采样,得到随机点X_rand;
3.然后计算随机点X_rand与随机树T中所有节点的距离,找出离随机点X_rand最近的节点作为邻近点X_near;
4.随机树T从邻近点X_near向随机点X_rand方向移动给定步长,扩展生成一 个新的节点X_new;
5.如果在邻近点X_near向新节点X_new方向扩展的过程中不与障碍物发生碰撞,则将新节点X_new加入到随机树T中,若发生碰撞,重新采样随机点X_rand。
6.最后判断新节点X_new是否在目标点X_goal的区域内,若不在目标点区域内,重复上过程;若在目标点区域内,将新节点X_new作为目标点的父节点,并将目标点X_goal加入到随机树T中.

新节点生长过程

在这里插入图片描述
部分代码

function My_RRT
clc
clear
close all
%%  color map
load maze.mat map
[map_height,map_width]=size(map); %行是高y,列是宽x
q_start = [206, 198]; %q s t a r t ( 1 ) : x宽 , q s t a r t ( 2 ) : y高
q_goal = [416, 612];
colormap=[1 1 1
          0 0 0
          1 0 0 
          0 1 0
          0 0 1];
imshow(uint8(map),colormap)
hold on
%% rrt tree %行是y坐标,列是x坐标
%initial
vertices=q_start;
edges = [];
K=10000;
delta_q=50;
p=0.3;
q_rand=[];
q_near=[];
q_new=[];
%main loop
plot(q_start(2),q_start(1),'*b')
plot(q_goal(2),q_goal(1),'*y')
for k = 1:K
    arrived=is_goal_arrived(vertices,q_goal,delta_q);
    if arrived
        vertices=[vertices;q_goal];
        edges = [edges;[size(vertices,1),size(vertices,1)-1]];
        break;
    end
    if rand <= p
        q_rand = q_goal;%q(1)宽x,q(2)高y
    else
        q_rand = [randi(map_height),randi(map_width)];
    end
    if map( q_rand(1,1),q_rand(1,2) ) == 1 %map(1)height,map(2)width
        continue;
    end
    [q_new,q_near,q_near_ind,vector_dir] = get_qnew_qnear(delta_q,q_rand,vertices);
    add_qnew = is_add_in_veritces(map,q_new,q_near,vector_dir,10);
    if add_qnew
        vertices=[vertices;q_new];
        r_v = size(vertices,1);
        edges = [edges;[r_v,q_near_ind]];
    else
        continue;
    end
%     plot(q_near(1,1),q_near(2,1),'*b');
   plot([q_near(1,2),q_new(1,2)],[q_near(1,1),q_new(1,1)],'-b')
   drawnow
end
path =find_path_node(edges);
%plot base path
plot(vertices(path,2),vertices(path,1),'-r')
%smooth
path_smooth = smooth(path,vertices,map);
%plot smooth path
plot(vertices(path_smooth,2),vertices(path_smooth,1),'-g');
end

RRT算法实现结果
在这里插入图片描述
下载链接

https://download.csdn.net/download/iii66yy/80675832

参考文献
[1] 阮晓钢,周静,张晶晶,朱晓庆.基于子目标搜索的机器人目标导向RRT路径规划算法[J].控制与决策,2020,35(10):2543-2548.DOI:10.13195/j.kzyjc.2019.0043.

RRT (Rapidly-exploring Random Tree) 是一种常用的随机搜索算法,用于求解高维空间中的路径规划问题,尤其是在复杂的、不确定环境中。在MATLAB中,你可以使用`rrt`函数或者自定义RRT算法来寻找从起点到目标点的最短或近似路径。 RRT算法步骤大致如下: 1. **初始化**:创建一个空树,包含起始节点。 2. **随机生成**:生成一个随机的候选节点,通常在这个搜索空间内的任意位置。 3. **扩展树**:从当前树节点出发,沿着随机方向向新节点生长,如果这个新节点不在树中或者到达目标,则将其添加到树中。 4. **邻接节点查找**:检查新节点是否与已知节点相连,如果相连则可能会产生一个新的路径。 5. **回溯**:沿着最近连接的路径回溯,更新路径,并尝试连接新的节点。 6. **重复**:重复上述步骤直到达到目标节点或者达到预定的迭代次数。 在MATLAB中,你可以使用`rrt`函数调用RRT库提供的功能,或者自己编写循环实现这些步骤。以下是一个简单的示例代码片段: ```matlab % 定义环境和参数 env = robotics.RigidBodyEnvironment('yourEnvironment.xml'); options = rrtOptions('MaxIterations', 1000, 'GoalTolerance', 0.1); % 创建RRT规划器 planner = robotics.RRT(env, options); % 设置起始和目标点 start = [0 0]; goal = [1 1]; % 执行规划 [tree, path] = planner.plan(start, goal); % 可视化结果 plot(planner.env, tree); hold on; plot(path(:, 1), path(:, 2), 'r-'); ``` 执行此代码后,你会看到RRT搜索生成的树以及从起点到目标点的路径。请注意,实际使用时可能需要根据你的具体需求调整参数,并且RRT算法并非总是能找到全局最优解,但它通常能提供较好的近似解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只佳佳怪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值