当前位置: 首页 > news >正文

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

一、navigation 概述

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

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

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

<buildtool_depend>catkin</buildtool_depend>

  <exec_depend>rospy</exec_depend> 
  <exec_depend>tf</exec_depend> 
  <exec_depend>geometry_msgs</exec_depend> 
  <exec_depend>nav_msgs</exec_depend> 
  <exec_depend>sensor_msgs</exec_depend> 

  <exec_depend>slam_gmapping</exec_depend>
  <exec_depend>cartographer</exec_depend>
  <exec_depend>cartographer_ros</exec_depend>
  <exec_depend>slam_karto</exec_depend>
  <exec_depend>hector_slam</exec_depend>

  <exec_depend>amcl</exec_depend>
  <exec_depend>move_base</exec_depend>
  <exec_depend>map_server</exec_depend>
  <exec_depend>dwa_local_planner</exec_depend>
  <exec_depend>teb_local_planner</exec_depend>
  <exec_depend>global_planner</exec_depend>
  <exec_depend>navfn</exec_depend>

  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->
  </export>

其中,<export> ... </export> 代表这个功能包是元功能包。

二、环境配置
系统: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-<ROS_DISTRO>-navigation
sudo apt install ros-<ROS_DISTRO>-gmapping
sudo apt install ros-<ROS_DISTRO>-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文件:

<launch>
    <!-- Arguments -->
    <arg name="map_file" default="$(find robot_navigation)/maps/map0818.yaml"/>
    <arg name="simulation" default= "false"/> 
    <arg name="planner"  default="dwa" doc="opt: dwa, teb"/> 
    <arg name="open_rviz" default="false"/>
    
    <!-- Map server -->
    <node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)">
      <param name="frame_id" value="map"/>
    </node>

    <!-- AMCL -->
    <node pkg="amcl" type="amcl" name="amcl" output="screen">
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/amcl_params.yaml" command="load" />
      <param name="initial_pose_x"            value="0.0"/>
      <param name="initial_pose_y"            value="0.0"/>
      <param name="initial_pose_a"            value="0.0"/>
    </node>

    <!-- move_base -->
    <include file="$(find robot_navigation)/launch/move_base.launch" >
      <arg name="planner"            value="$(arg planner)"/>
      <arg name="simulation"            value="$(arg simulation)"/>
    </include>

    <!-- rviz -->
    <group if="$(arg open_rviz)"> 
        <node pkg="rviz" type="rviz" name="rviz" required="true"
          args="-d $(find robot_navigation)/rviz/navigation.rviz"/>
     </group>

</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与自主导航

相关文章:

  • 数学建模神经网络应用,构建神经网络模型方法
  • 小程序模板报价_小程序模板价格_小程序模板使用多少钱
  • 校园跑腿小程序市场需要和功能分析!
  • 上半年业绩韧性增强,两大核心业务成第二增长点,商汤用硬科技冲刺AI长跑
  • MySQL 数据库(DBMS)安装教程图文详解
  • UTONMOS:元宇宙链游之风、燎原之势
  • 测试面试 | 一道大厂算法面试真题,你能答上来吗?(附答案)
  • 哺乳动物组织和培养细胞提取蛋白—Abbkine ExKine总蛋白提取试剂盒
  • springboot项目打包部署到阿里云windows服务器全过程记录
  • 网络编程与HTTP协议
  • 概率论的学习和整理13--方差和协方差(未完成)
  • 人工神经网络的算法原理,最简单的神经网络算法
  • 为什么大数据为NFT创造了一个巨大的市场
  • PDF转JPG免费软件有什么?这三个软件值得收藏
  • 零售行业新渠道,效率居然这么高?
  • Android Studio:GIT提交项目到远程仓库
  • Angular 4.x 动态创建组件
  • httpie使用详解
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Linux gpio口使用方法
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Nodejs和JavaWeb协助开发
  • PAT A1050
  • php中curl和soap方式请求服务超时问题
  • Unix命令
  • 阿里云前端周刊 - 第 26 期
  • 闭包--闭包作用之保存(一)
  • 创建一种深思熟虑的文化
  • 聊聊hikari连接池的leakDetectionThreshold
  • 入门级的git使用指北
  • 网络应用优化——时延与带宽
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 阿里云API、SDK和CLI应用实践方案
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # include “ “ 和 # include < >两者的区别
  • #LLM入门|Prompt#3.3_存储_Memory
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (4)事件处理——(7)简单事件(Simple events)
  • (附源码)计算机毕业设计ssm电影分享网站
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (五)MySQL的备份及恢复
  • ./configure,make,make install的作用
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET是什么
  • .Net小白的大学四年,内含面经
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell