ROS与navigation教程——概述

navigation是ROS的二维导航功能包,简单来说,就是根据输入的里程计等传感器的信息流和机器人的全局位置,通过导航算法,计算得出安全可靠的机器人速度控制指令。

代码库:https://github.com/ros-planning/navigation

代码里文件较多,进行梳理后如下图

  • map_server:地图服务器,主要功能是保存地图和导入地图。
  • costmap_2d:可以生产代价地图,以及提供各种相关的函数。
  • robot_pose_ekf:扩展卡尔曼滤波器,输入是里程计、IMU、VO中的任意两个或者三个,输出是一个融合之后的pose。
  • localization:这里是两个定位用的package。fake_localization一般是仿真用的,amcl才是实际定位用的package。
  • nav_core:这里面只有三个文件,对应的是全局路径规划、局部路径规划、recovery_action的通用接口定义,具体功能实现则是在各个对应的规划器package里。
  • move_base:这里实现的是整个导航的流程。什么时候调用全局路径规划、什么时候调用局部路径规划、什么时候调用recovery_action都是这个package管的。就是下图中间方框里做的事情,可以说是整个navigation stack的核心。
     


 

总体框架图中可以看到,

一、move_base

move_base提供了ROS导航的配置、运行、交互接口,它主要包括两个部分:

(1) 全局路径规划(global planner):根据给定的目标位置进行总体路径的规划.

在ROS的导航中,首先会通过全局路径规划,计算出机器人到目标位置的全局路线。这一功能是navfn这个包实现的。

navfn通过Dijkstra最优路径的算法,计算costmap上的最小花费路径,作为机器人的全局路线。将来在算法上应该还会加入A*算法。

(2) 本地实时规划(local planner):根据附近的障碍物进行躲避路线规划。

本地的实时规划是利用base_local_planner包实现的。该包使用Trajectory Rollout 和Dynamic Window approaches算法计算机器人每个周期内应该行驶的速度和角度(dx,dy,dtheta velocities)。

base_local_planner这个包通过地图数据,通过算法搜索到达目标的多条路经,利用一些评价标准(是否会撞击障碍物,所需要的时间等等)选取最优的路径,并且计算所需要的实时速度和角度。

二、map_server

 map_server提供map_server ROS节点,它提供地图数据作为一个ROS服务器。

也提供map_saver命令行功能,能动态生成保存到文件中的地图。 包中通过工具操作的地图是以成堆的文件存储的。YAML文件描述地图的元数据,并命名image文件。Image文件编码占用数据。

Image 以对应单元的颜色描述世界中每个单元的占用状态。白色单元格表示自由,黑色单元格表示占用,两种颜色之间的单元表示未知。接受彩色图像,但颜色值平均为灰度值。

三、costmap_2d

costmap_2d包提供了一种2D代价地图的实现方案,该方案从实际环境中获取传感器数据,构建数据的2D或3D占用栅格(取决于是否使用基于体素的实现),以及基于占用栅格和用户定义膨胀半径的2D代价地图的膨胀代价。

该包也支持基于map_server初始化代价地图,基于滚动窗口的代价地图,以及基于参数化订阅和配置传感器主题。

costmap_2d包提供了一种可配置框架来维护机器人在占用栅格应该如何导航的信息。代价地图使用传感器数据和来自静态地图的信息,通过costmap_2d :: Costmap2DROS对象来存储和更新实际环境中的障碍物信息。

初始化costmap_2d :: Costmap2DROS对象的方法主要有两种。

  • 第一种是使用用户生成的静态地图进行初始化(有关构建地图的文档,请参阅map_server包)。在这种情况下,代价地图被初始化来匹配与静态地图提供的宽度,高度和障碍物信息。这种方式通常与定位系统(如AMCL)结合使用,允许机器人在地图坐标系注册障碍物,并且当基座在环境中移动时可以根据传感器数据更新其代价地图。
  • 第二种是给出一个宽度和高度,并将rolling_window参数设置为true。当机器人在移动时,rolling_window参数将机器人保持在代价地图的中心。然而当机器人在给定区域移动得太远时,障碍物信息将会被从地图中丢弃。这种方式的配置最常用于里程计坐标系中,机器人只关注局部区域内的障碍物

四、robot_pose_ekf

Robot Pose EKF 包用于评估机器人的3D位姿,基于来自不同来源的位姿测量信息。

它使用带有6D(3D position and 3D orientation)模型信息的扩展卡尔曼滤波器来整合来自轮式里程计,IMU传感器和视觉里程计的数据信息。

基本思路就是用松耦合方式融合不同传感器信息实现位姿估计。

五、acml

amcl是一种机器人在2D中移动的概率定位系统。 它实现了自适应(或KLD采样)蒙特卡罗定位方法,该方法使用粒子滤波器来针对已知地图跟踪机器人的位姿。

 

参考资料:

https://blog.csdn.net/tansir94/article/details/83720740

http://wiki.ros.org/navigation

https://blog.csdn.net/bazinga_IIIIII/article/details/79369451

https://blog.csdn.net/jinking01/article/details/79455962

https://www.ncnynl.com/archives/201708/1911.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下c开发 之 线程通信与pthread_cond_wait()的使用

pthread_cond_wait() /************pthread_cond_wait()的使用方法**********/pthread_mutex_lock(&qlock); pthread_cond_wait(&qready, &qlock);pthread_mutex_unlock(&qlock);/*****************************************************/The mutex passed …

ROS与navigation教程——ACML参数配置

<launch> <!--//后为wiki官网的参数说明 &#xff08;&#xff09;中为粗读算法参数说明及理解 面临的问题常用地图有2种&#xff1a;1.基于特征&#xff0c;仅指明在指定位置&#xff08;地图中包含的对象的位置&#xff09;的环境的形状。特征表示使得调节对象的位置…

【设计模式】单例模式 Singleton Pattern

通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例&#xff08;Instance&#xff09; 的情况&#xff0c; 比如说我们想做一计数器&#xff0c;统计某些接口调用的次数&#xff0c;通常我们的数据库连接也是只期望有一个实例。Windows系统的系统任务管理器…

修改输入框placeholder的默认样式

一般网页中都用到input的placeholder属性&#xff0c;想让这个默认样式和网页保持一致&#xff0c;就需要重新设定样式&#xff0c;百度百度&#xff1a; :-moz-placeholder { / color: #000; opacity:1; }支持/* Mozilla Firefox 4 to 18 * ::-moz-placeholder { color: #000;…

进程及线程通信总结

上文我们介绍了如何建立一个简单的多线程程序&#xff0c;多线程之间不可避免的需要进行通信 。相比于进程间通信来说&#xff0c;线程间通信无疑是相对比较简单的。 首先我们来看看最简单的方法&#xff0c;那就是使用全局变量&#xff08;静态变量也可以&#xff09;来进行通…

ROS multi-master——multimaster_fkie配置

多主站ROS配置和mutimaster_fkie ROS版本&#xff1a;kinetic 操作系统&#xff1a;Ubuntu 16.04。 multimaster_fkie&#xff1a;github 1网络配置 1.1路由器 设置无线路由器并连接两台计算机/机器人。为这两台计算机设置静态IP地址。相互测试ping命令和ssh。 1.2主机 …

Docker入门

1. Docker简介: docker是一个基于LXC的高级容器引擎。简单地说&#xff0c;docker是一个轻量级的虚拟解决方案&#xff0c;或者说它是一个超轻量级的虚拟机&#xff08;容器&#xff09;。 Docker是一个开源的引擎&#xff0c;可以轻松的为任何应用创建一个轻量级的、可移植的、…

乐器库的混合

每台微机一个声卡&#xff0c;也就是一片D/A&#xff0c;驱动按波特率、采样位数、采样通道传输给D/A&#xff0c;输出模拟音频。播放时仅一种与硬件支持格式对应&#xff0c;其他需驱动&#xff08;有损&#xff09;变换到硬件支持格式。每个应用都可单独播放声音&#xff0c;…

kafka认知--(1)

文档参考&#xff1a;http://kafka.apache.org/documentation.html 下载代码&#xff1a; tar -xzf kafka_2.11-0.11.0.0.tgz cd kafka_2.11-0.11.0.0 启动 bin/zookeeper-server-start.sh config/zookeeper.properties 创建topic&#xff08;主题为test&#xff0c;只有一个分…

带头尾指针的list的C实现

一、缘起 很早写了一个带头尾指针的list&#xff0c;该list支持从尾部插入元素&#xff0c;在任意位置删除元素&#xff0c;最近用这个list时发现一个bug&#xff0c;修正了&#xff0c;并加了几个接口函数。贴出来&#xff0c;希望对C的初学者有用。 二、基本说明 2.1、数据结…

Gmapping——从原理到实践

概述 在SLAM中&#xff0c;机器人位姿和地图都是状态变量&#xff0c;我们需要同时对这两个状态变量进行估计&#xff0c;即机器人获得一张环境地图的同时确定自己相对于该地图的位置。我们用x表示机器人状态&#xff0c;m表示环境地图&#xff0c;z表示传感器观测情况&#xf…

关于git分支

1.关于git分支 git的“分支”乍一听是一个特别容易让人产生错觉的概念&#xff0c;以为它和树枝一样是分叉的枝节&#xff0c;其实Git中的分支本质上是个指向commit对象的指针,每次commit&#xff0c;git都把它们串成一条时间线&#xff0c;这条时间线就是一个分支。 2.直接切换…

【机器学习经典算法源码分析系列】-- 逻辑回归

1.逻辑回归&#xff08;Logistic Regression&#xff09;又常被成为“逻辑斯蒂回归”&#xff0c;实质上是一个二元分类问题。 逻辑回归代价函数&#xff1a; 代价函数导数&#xff1a; Matlab实现&#xff1a; 采用matlab中自带的无约束最小化函数fminunc来代替梯度下降法&…

求特殊自然数

总时间限制: 1000ms 内存限制: 65536kB 描述一个十进制自然数,它的七进制与九进制表示都是三位数&#xff0c;且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。 输入无。输出三行&#xff1a;第一行是此自然数的十进制表示&#xff1b;第一行是此自然…

ROS——不同版本间ROS进行通信

在相同版本间的ROS进行通信不在赘述了&#xff0c;修改/etc/hosts文件即可。 最近项目遇到在Ubuntu16.04 与Ubuntu18.04两个系统间进行ROS通信&#xff0c;ROS版本分别为Kinetic和Melodic。配置网络后&#xff0c;两边都能够ping通&#xff0c;但是在获取ros数据是&#xff0c…

大数据开发实战:数据流图及相关数据技术

1、大数据流程图 2、大数据各个环节主要技术 2.1、数据处理主要技术 Sqoop&#xff1a;&#xff08;发音&#xff1a;skup&#xff09;作为一款开源的离线数据传输工具&#xff0c;主要用于Hadoop(Hive) 与传统数据库&#xff08;MySql,PostgreSQL&#xff09;间的数据传递。它…

oracle 中时间类型 date 与 long 互转

我们在保存时间到数据库时&#xff0c;有时候会保存long型的数据&#xff0c;固定长度是13位&#xff0c;是用当前时间减去1970-01-01&#xff0c;再换算成毫秒得到的结果。 但是要考虑到时区问题中国的时区时8区所以时间要加上8小时 oracle中的实现方式&#xff1a; ---------…

Linux对包管理阐述

Centos/Redhat/Fedora的软件包&#xff0c;都是rpm后缀的文件。包管理器rpm(Redhat packages manager) linux的哲学思想是简单命令解决复杂任务&#xff0c;因此每个软件的功能较单一&#xff0c;所以各种包之间有着复杂的依赖关系&#xff0c;为了解决这种可以使用前端工具&am…

跨时钟域电路设计——亚稳态及双锁存器

一、同步电路 定义&#xff1a;电路中所有受时钟控制的单元&#xff0c;全部由一个统一的时钟控制。 优点&#xff1a;在同步设计中&#xff0c;EDA工具可以保证电路系统的时序收敛&#xff0c;避免电路设计中的竞争冒险。 缺点&#xff1a;时钟树综合需要加入大量延迟单元&…

linux setsockopt详解

1.closesocket&#xff08;一般不会立即关闭而经历TIME_WAIT的过程&#xff09;后想继续重用该socket&#xff1a; BOOL bReuseaddrTRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已经处于连接状态的soket在调用closes…