用octomap生成的二维栅格地图进行move_base路径规划仿真

1.map_server保存二维栅格地图

octomap生成的二维栅格地图可以用map_server保存

map_server是个功能包,这个功能包可以单独下载,也可以直接下载navigation包,navigation包里包括了map_server,建议直接下载navigation,因为后续路径规划仿真也要用到这个功能包.地址如下

https://github.com/ros-planning/navigation

我的是kenetic版本,注意别下载错了版本.

下载编译好之后,用命令

rosrun map_server map_saver map:=/projected_map -f xxx

因为octomap生成的二维栅格地图的话题是/projected_map

后边的xxx是文件名,可以自己随便改.

保存好之后会生成两个文件,一个xxx.pgm,一个xxx.yaml

要进行后续的路径规划仿真需要对yaml文件修改一下,点开xxx.yaml,具体内容如下:

image: xxx.pgm
resolution: 0.100000
origin: [-141.900006, -183.199994, -nan]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

把origin的z轴坐标-nan改成0.000000,不然之后用rbx1打不开地图,改好如下所示.

image: xxx.pgm
resolution: 0.100000
origin: [-141.900006, -183.199994, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

如果是Gmapping这种二维slam算法,应该是没有z轴坐标的,可能因为我建图用的是LIO-SAM,所以要把这个-nan改成0.000000.

2.move_base路径规划仿真

需要用到的包:
1.rbx1
2.arbotix
3.navigation(上一步装过就不用装了)

全部下载好并编译好了之后运行仿真

首先启动仿真节点:

 roslaunch rbx1_bringup fake_turtlebot.launch

然后启动定位节点

roslaunch rbx1_nav fake_amcl.launch map:=xxx.yaml

这里的xxx就是你之前的地图名字xxx.

最后启动rviz可视化节点:

rosrun rviz rviz -d `rospack find rbx1_nav`/nav.rviz

move_base全局路径规划默认是用Dijkstra,但是可以改成A*.

3更改move_base全局路径规划为A*

(1)修改rbx1中的fake_move_base_amcl.launch,将其改为

<launch>
  <node pkg="move_base" type="move_base" respawn="true" name="move_base" output="screen" clear_params="true">
    <rosparam file="$(find rbx1_nav)/config/fake/costmap_common_params.yaml" command="load" ns=
  • 8
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是基于二维栅格地图的模拟退火算法的路径规划算法的完整MATLAB代码: ```matlab % 参数设置 T0 = 1000; % 初始温度 Tf = 0.01; % 终止温度 alpha = 0.99; % 降温系数 max_iter = 2000; % 最大迭代次数 % 二维栅格地图 grid_map = [1, 2, 0, 0, 0; 1, 2, 1, 1, 1; 1, 1, 1, 0, 0; 0, 0, 1, 1, 1; 0, 0, 0, 2, 1]; % 起点和终点坐标 start = [1, 1]; goal = [5, 5]; % 初始化当前位置 current_pos = start; % 初始化路径 path = current_pos; % 初始化最短路径 min_path = path; % 初始化最短距离 min_dist = Inf; % 初始化温度 T = T0; % 迭代搜索 for iter = 1:max_iter % 随机生成邻域节点 neighbors = []; for i = -1:1 for j = -1:1 if i ~= 0 || j ~= 0 new_pos = current_pos + [i, j]; if new_pos(1) >= 1 && new_pos(1) <= 5 && new_pos(2) >= 1 && new_pos(2) <= 5 neighbors = [neighbors; new_pos]; end end end end % 随机选择邻域节点 new_pos = neighbors(randi(size(neighbors, 1)), :); % 计算对应位置上的权重 weight = abs(grid_map(new_pos(1), new_pos(2)) - grid_map(current_pos(1), current_pos(2))); % 接受新位置 current_pos = new_pos; % 更新路径 path = [path; current_pos]; % 计算路径长度 dist = norm(current_pos - goal); % 判断是否找到更短路径 if dist < min_dist min_path = path; min_dist = dist; end % 以一定概率接受较长的路径 if rand() < exp(-(dist - min_dist) / T) current_pos = path(end-1,:); end % 降温 T = alpha * T; % 判断是否达到终止温度 if T < Tf break; end end % 输出最短路径 disp(min_path); ``` 这段代码实现了基于二维栅格地图的模拟退火算法的路径规划。算法根据指定的起点和终点,在二维栅格地图上搜索最短路径。在搜索过程中,每一步会生成相邻的节点,并计算节点间的权重。根据一定的概率选择接受新的节点,或者以较短的路径继续搜索。算法根据初始温度和降温系数一步步降低温度,直到达到终止温度或达到最大迭代次数为止。最后,输出最短路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值