ros中move_base的使用

本文涉及的产品
资源编排,不限时长
简介: ros中move_base的使用

move_base概述

move_base 包提供了一个动作的实现(参见actionlib包),给定世界上的目标,它将尝试使用移动基地来实现它。move_base 节点将全局和本地规划器链接在一起以完成其全局导航任务。它支持任何遵循在nav_core包中指定的 nav_core::BaseGlobalPlanner 接口的全局规划器和任何遵循在nav_core包中指定的 nav_core::BaseLocalPlanner 接口的本地规划器。move_base 节点还维护两个成本地图,一个用于全局规划器,另一个用于本地规划器(参见costmap_2d包),用于完成导航任务。


关于actionlib

在任何基于 ROS 的大型系统中,都会有这样的情况:有人想向节点发送请求以执行某些任务,同时也会收到对请求的回复。这目前可以通过 ROS服务来实现。如果服务需要很长时间来执行,用户可能希望能够在执行期间取消请求或获得有关请求进展情况的定期反馈。该actionlib包提供的工具来创建执行长期运行的目标是可以被抢占的服务器。它还提供了一个客户端接口,以便向服务器发送请求。


关于目标的的设定

除了使用在rviz界面中设定的方法外。Move_base源码中有为rviz等提供调用借口,将geometry_msgs::PoseStamped形式的goal转换成move_base_msgs::MoveBaseActionGoal,再发布到对应类型的goal话题中所以可以通过命令行发送对应的导航目标点。

 

如果起始点为空,设置global_pose为起始点

利用局部路径规划器直接输出轮子速度,控制机器人按照路径走到目标点

地图数据超时,即观测传感器数据不够新,停止机器人,返回false

 

move_base 状态机

move_base 状态机是处理导航的控制逻辑;movebase状态机分为planning,controlling,clearing 和default。planning是指接受新目标与进行全局规划的整个过程,cotrolling是指调用局部规划器计算机器人速度的过程,clearing是指利用用户定义的行为进行recovery的过程。


一般默认状态或者接收到一个有效goal时是PLANNING,在规划出全局路径后state_会由PLANNING->CONTROLLING如果规划失败则由PLANNING->CLEARING。

//recovery是指恢复的规划器,其跟全局规划器和局部规划器是同一个等级的。


//不同的是,它是在机器人在局部代价地图或者全局代价地图中找不到路时才会被调用,比如rotate_recovery让机器人原地360°旋转,clear_costmap_recovery将代价地图恢复到静态地图的样子。

 

Move_base的使用

启动move_base用的是launch文件,主要内容包括解析map文件,move_base和amcl定位三个部分,构成一个完整的框架,

 

global_planner这个包,它默认使用的是dijkstra,也可以使用A*全局路径规划,局部路径规划包括dwa和teb

dwa参数简单,阿克曼底盘使用teb算法,teb算法更先进些;但是dwa对于除了阿克曼以外的其他底盘,都完全满足要求了;

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
2月前
|
NoSQL Redis Docker
5-11write /var/lib/docker/tmp/GetImageBlob2366037717: no space left on device
5-11write /var/lib/docker/tmp/GetImageBlob2366037717: no space left on device
|
5月前
No rule to make target ‘.xxxxxxxx‘, needed by ‘debug/xxxx.cpp‘. Stop.
No rule to make target ‘.xxxxxxxx‘, needed by ‘debug/xxxx.cpp‘. Stop.
|
Ubuntu Linux Python
Failed to process package ‘cartographer_ros‘ :
Failed to process package ‘cartographer_ros‘ :
Failed to process package ‘cartographer_ros‘ :
|
6月前
|
机器人
[ROS2] --- action
[ROS2] --- action
158 0
ubuntu16.04中ROS-Kinetic报错: not find a package configuration file provided by “gazebo_ros_control“
ubuntu16.04中ROS-Kinetic报错: not find a package configuration file provided by “gazebo_ros_control“
193 0
|
Ubuntu
问题解决:Ubuntu安装ROS依赖出现ERROR: the following packages/stacks could not have their rosdep keys resolvedt
问题解决:Ubuntu安装ROS依赖出现ERROR: the following packages/stacks could not have their rosdep keys resolvedt
1556 0
|
Linux 网络虚拟化
ROS安装遇到 sudo rosdep init 与rosdep update出现error loading sources list
ROS安装遇到 sudo rosdep init 与rosdep update出现error loading sources list
350 0
ROS安装遇到 sudo rosdep init 与rosdep update出现error loading sources list
|
Linux
编译OpenJDK8:error: control reaches end of non-void function [-Werror=return-type]
编译OpenJDK8:error: control reaches end of non-void function [-Werror=return-type]
187 0
add file in debian/source/include-binaries if you want to store the modified binary in the debian
add file in debian/source/include-binaries if you want to store the modified binary in the debian
393 0
|
文件存储 C++ Python
ROS学习-创建一个ROS msg和一个srv
ROS学习-创建一个ROS msg和一个srv
282 0