ros入门(九)----ros navigation

一、navigation 概述

navigation 功能包属于元功能包,元功能包中由于没有src目录,因此无需添加任何依赖项,因为这个功能包没有自己的专属功能,它的功能是借助其他功能包的功能实现的。

元功能包中2个重要的文件:
(1) CMakelist.txt 文件
用于指定功能包之间的依赖关系

(2)package.xml文件
用于声明元功能包所依赖的其他功能包

catkin

  rospy 
  tf 
  geometry_msgs 
  nav_msgs 
  sensor_msgs 

  slam_gmapping
  cartographer
  cartographer_ros
  slam_karto
  hector_slam

  amcl
  move_base
  map_server
  dwa_local_planner
  teb_local_planner
  global_planner
  navfn

  
  
    
  

其中, ... 代表这个功能包是元功能包。

二、环境配置
系统:Ubuntu18.04
ros:melodic
三、源码安装
cd  ~/catkin_ws/src
git clone https://github.com/ros-planning/navigation/tree/melodic-devel
cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES='map_server'
catkin_make -DCATKIN_WHITELIST_PACKAGES='amcl'
catkin_make -DCATKIN_WHITELIST_PACKAGES='move_base'

编译过程中遇到的问题
(1) 编译报错“Could NOT find SDL(missing: SDL_LIBRARYSDL_INCLUDE_DIR)”,执行指令:

sudo apt-get install libsdl1.2-dev  

(2)编译报错“Could NOT find SDL_image(missing:SDL_IMAGE_LIBRARIES SDL_IMAGE_INCLUDE_DIRS)”,执行指令:

sudo apt-get install libsdl-image1.2-dev

(3)编译报错“Could not find a package configuration file provided by “base_local_planner” with any of the following names”,执行命令:

sudo apt-get install ros-melodic-base-local-planner 
四、二进制安装

navigation可以通过源码安装,也可以通过二进制安装:

sudo apt install ros--navigation
sudo apt install ros--gmapping
sudo apt install ros--map-server

注意:/opt/ros/melodic/share/opt/ros/melodic/lib 是ros中两个重要的路径,是二进制安装路径

五、导航的主要流程

(1)加载地图
navigation通过map_server加载现有地图,地图包含两部分,地图文件和地图描述yaml, YAML 格式:

image: testmap.pgm
resolution: 0.1
origin: [0.0, 0.0, 0.0]
occupied_thresh: 0.65
free_thresh: 0.196
negate: 0

image : 照片路径,绝对路径或者YAML文件所在的相对路径
resolution : 分辨率,米/像素
origin :图片最左下角像素在地图中的2d位置 (x,y,yaw),yaw为逆时针偏转,当yaw=0时没有偏转,许多系统会忽略yaw。
occupied_thresh:大于这个阀值的占用概率的像素被认为occupied
free_thresh:小于这个阀值的占用概率的像素被认为是free
negate :是否对white/black free/occupied定于的语义进行翻转,对occupied_thresh/free_thresh无影响

map_server加载地图:

rosrun map_server map_server  xxx/xx/mapName.yaml
rosrun map_server map_saver -f mapName   ## 保存地图

(2)AMCL定位
ros的定位是amcl包实现的,最为核心的是include目录和src目录,map自然是处理地图的了,pf就是算法的核心粒子滤波(particle filter),sensors就是处理雷达跟里程计传感器的,在这些之上还有一个amcl_node.cpp,用来实现功能的聚合,对外提供简洁的接口。

amcl定位:可以估算机器人在地图坐标系/map下的位姿信息,提供/base、/odom、/map之间的TF变换。
amcl包的输入输出:
输入:地图,雷达数据,里程计
输出:小车pose (x, y, w)

更多详情链接:WIKI

(3) move_base路径规划
move_base为导航的核心框架,主要的配置文件:local_costmap_params.yaml、global_costmap_params.yaml和costmap_common_params.yaml
全局路径规划(gloable_planner):使用 Dijkstra 或 A* 算法进行全局路径规划;局部路径规划(local_planner):DWA 或者 TEB

更多详情链接:WIKI

六、launch文件集成
cd ~catkin_ws/src
git clone https://github.com/LFZ1994/robot_navigation.git  
carkin_make

地图已经提前建好,新建导航launch文件:


    
    
     
     
    
    
    
    
      
    

    
    
      
      
      
      
    

    
    
      
      
    

    
     
        
     


更多详情参考ROS导航安装及实现

编译遇到的问题:

问题1: Couldn’t transform from base_laser_link to base_footprint, even though the message notifier is in use

解决:amcl_params.yaml 中base_frame_id 和车体保持一致base_link

问题2: Timed out waiting for transform from base_footprint to map to become available before running costmap, tf error: canTransform: source_frame base_footprint does not exist… canTransform returned after 0.100814 timeout was 0.1.

解决:costmap_param.yaml中:robot_base_frame: base_link (原因同上)

问题3: global_costmap: Pre-Hydro parameter “static_map” unused since “plugins” is provided

解决:local_costmap_param.yaml global_costmap_param.yaml  删除掉或者注释:static_map   因为ROS中已经提供了这两个的插件,我们又在move_base的参数文件中设置了但没用到,只需要删除掉即可

问题4:Failed to create the dwa_local_planner/DWAPlannerROS planner, are you sure it is properly registered and that the containing library is built? Exception: Could not find library corresponding to plugin dwa_local_planner/DWAPlannerROS. Make sure the plugin description XML file has the correct name of the library and that the library actually exists.

解决:sudo apt-get install ros-melodic-dwa-local-planner

参考资料:
Wiki
机器人SLAM与自主导航

你可能感兴趣的:(ROS入门学习,自动驾驶,ubuntu,机器学习)