无人机避障——2D栅格地图pgm格式文件路径规划代码详解

代码和测试效果请看上一篇博客:

无人机避障——使用三维PCD点云生成的2D栅格地图PGM做路径规划-CSDN博客

 更换模型文件.dae:

部分模型文件可以从这里下载:

https://github.com/ethz-asl/rotors_simulator/wiki

将原先代码中的car.dae文件更换为无人机.dae文件

无人机避障——2D栅格地图pgm格式文件路径规划代码详解_第1张图片

然后对urdf文件进行修改:



  
    
      
      
        
      
    
  

测试结果: 

无人机避障——2D栅格地图pgm格式文件路径规划代码详解_第2张图片无人机避障——2D栅格地图pgm格式文件路径规划代码详解_第3张图片

代码分析: 

run_hybrid_a_star.launch文件:


    
    

    
    

    
    

    
    

    
    
    

    
    

    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

主要是map_server和hybrid_a_star节点对读取地图做路径规划起作用!! 

map_server节点会将加载并处理好的地图数据发布到 ROS 的话题(topic)上,通常发布的话题名称为/map。其他的 ROS 节点(比如路径规划节点、导航节点等)可以通过订阅这个话题来获取地图信息,从而在其自身的功能实现中利用这些地图数据。例如,路径规划节点在规划机器人从起点到终点的最优路径时,就需要知道地图的布局,包括哪里有障碍物、哪里是可通行区域等,通过订阅/map话题就可以从map_server节点获取到这些必要的地图信息。 

map_server处理过程

  • PGM 文件开头有特定的文件头格式,包含了关于这幅图像的一些基本信息,如文件格式标识(确认是 PGM 格式)、图像的宽度和高度(即地图的尺寸)、灰度值的最大范围等。map_server首先会读取这些文件头信息,以便后续正确解析图像数据。例如,知道了图像的宽度和高度,就可以确定要读取多少个像素的数据来完整获取地图信息。
  • 根据文件头获取到的图像尺寸信息,map_server会逐行逐列地读取 PGM 文件中的每个像素的灰度值。在读取过程中,依据事先约定好的灰度值与地图属性的对应关系(如上述白色表示可通行、黑色表示障碍物)来判断每个像素位置对应的地图区域是可通行还是存在障碍物。
  • 比如,如果读取到一个像素的灰度值接近 255(假设是 8 位灰度图像,最大灰度值为 255),那么根据约定,这个像素所对应的地图位置就会被判定为可通行区域;如果读取到的灰度值接近 0,就会被判定为障碍物所在位置。
  • 在解析完所有像素数据后,map_server会将判断好的地图通行和障碍信息以合适的方式存储在内存中。通常会采用二维数组等数据结构来存储,其中数组的每个元素对应着地图上的一个位置,元素的值则表示该位置是可通行、障碍物还是其他状态(如未知区域等)。例如,可能会用 0 表示障碍物,1 表示可通行区域等,这样其他需要使用地图的节点(如路径规划节点)就可以方便地从这个存储结构中获取到所需的地图信息。

你可能感兴趣的:(无人机规控算法,个人开发,Linux,无人机,linux,ubuntu,个人开发)