(七)turtlebot3导航包解析
地图导航需要启动amcl节点和move_base节点,rviz节点。
1.amcl节点
(1)amcl接收从rviz中传送过来的初始化位置。
initial_pose_sub_ = nh_.subscribe("initialpose", 2, &AmclNode::initialPoseReceived, this);
订阅rviz 发布的initialpose话题。如果收到rviz中传送过来的初始化位置调用AmclNode::initialPoseReceived函数。
(2)amcl向map_server发送信息,获取地图
requestMap()
(3)如果获取地图和初始化位置成功,初始化粒子滤波
AmclNode::applyInitialPose()
(4)初始化激光,广播tf信息。
this->tfb_->sendTransform(tmp_tf_stamped);
2.move_base节点
(1)move_base节点从amcl接收tf消息,其中固定的frame为map,就是原点位置的名字叫做map,由于amcl中已经由粒子滤波计算出来了机器相对于地图的位置,用odom表示机器,那么amcl发送odom到map的tf在move_base节点中就可以接收到了。
tf::TransformListener tf(ros::Duration(10));
move_base::MoveBase move_base( tf );
(2)move_base节点新建局部地图和全局地图,并发送地图信息
controller_costmap_ros_ = new costmap_2d::Costmap2DROS("local_costmap", tf_);
其中Costmap2DROS类中发送地图信息
publisher_ = new Costmap2DPublisher(&private_nh, layered_costmap_->getCostmap(), global_frame_, "costmap",always_send_full_costmap);
(3)当move_base节点的局部地图和全局地图启动后,local_costmap从gazebo中接收里程计信息/odom和激光信息/scan并且更新局部地图。同时更新全局地图。
// Start actively updating costmaps based on sensor dataplanner_costmap_ros_->start();
查看start函数发现将所有的插件设置为activate
(*plugin)->activate();
发现加载的插件为costmap_2d::InflationLayer ,costmap_2d::ObstacleLayer ,
costmap_2d::StaticLayer,costmap_2d::VoxelLayer
在costmap_2d::ObstacleLayer 类中的可以发现此类订阅了sensor_msgs::LaserScan消息
boost::shared_ptr < message_filters::Subscriber<sensor_msgs::LaserScan>> sub(new message_filters::Subscriber<sensor_msgs::LaserScan>(g_nh, topic, 50));
(4)move_base节点在executeCb函数中的 bool done = executeCycle(goal, global_plan)中发送cmd_vel信息,gazebo接收此信息并控制机器人运动,
首先新建一个路径规划类
boost::shared_ptr<nav_core::BaseGlobalPlanner> planner_planner_ = bgp_loader_.createInstance(global_planner);planner_->initialize(bgp_loader_.getName(global_planner), planner_costmap_ros_);
以上是使用插件的方式新建一个nav_core::BaseGlobalPlanne类。相当于new 一个这样的类。初始化的时候要将costmap地图传给该类。
初始化好后就要根据起始点,终点和地图来找全局路径了
planner_->makePlan(start, req.goal, global_plan)
找到路径后将路径发给局部地图规划器
nav_core::BaseLocalPlanne tc_
首先设置路径,
tc_->setPlan(*controller_plan_)
然后将根据路径计算控制命令
tc_->computeVelocityCommands(cmd_vel)
完成路径规划。
如何生成导航路径主要由makePlan来实现,具体使用什么算法生成导航路径将在下篇博文中介绍
下图为节点关系图
(七)turtlebot3导航包解析相关推荐
- SSL加密包解析的几个概念梳理
1.DPI技术初识 DPI(Deep PacketInspection)深度包检测技术是在传统IP数据包检测技术(OSI L2-L4之间包含的数据包元素的检测分析)之上增加了对应用层数据的应用协议识别 ...
- 机器人学习--AMCL导航包自己修改源码编译和调用方法
说明 1: 使用的Ubuntu16.04 Linux系统: ROS kinetic版本: ROS及依赖库安装在 根目录下的 /opt/ros 官方的导航包已经被编译完成,源代码不在里面,源代码需要自己 ...
- vue-router进阶:路由使用归纳、路由导航守卫、导航守卫解析流程、
一.定义和理解 导航守卫的作用:vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航. >>项目中应用场景举例:路由页面跳转时候进行登陆验证:路由跳转判断: 有多种机会 ...
- GPS NMEA数据包解析
GPS NMEA数据包解析 NMEA-0183是美国国家海洋电子协会为海用电子设备制定的标准格式.它包含了定位时间,纬度,经度,高度,定位所用的卫星数,DOP值,差分状态和校正时段等很多信息 一 通用 ...
- wireshark官方文档第 9 章数据包解析
第 9 章数据包解析 9.1. 数据包解析的工作原理 对于一个已封装好的协议包,每个解析器(dissector)对其负责的一部分协议进行解码,然后将解码过程交给后续的解析器. 每个解析都从帧(Fram ...
- 关于vivo 8.0和miui新系统android studio调试出现“包解析错误”的bug的解决办法
最近在工作中遇到了调试的时候将app安装到vivo 手机上,出现了包解析错误的问题.一般来说这种问题只会出现在手机版本 小于 app所要求的最低版本的手机上.但是此vivo手机的版本是8.0,很显然不 ...
- 使用Golang flag包解析字符串
本篇文章主要介绍如何使用flag包解析字符串,没有介绍flag包的详细使用,需要学习flag包如何使用的同学可以参考如下这篇文章: Go语言中使用flag包对命令行进行参数解析的方法 https:// ...
- 蓝牙4.0BLE抓包(二) – 广播包解析
转自: http://www.cnblogs.com/aikm/p/5022502.html 版权声明:本文为博主原创文章,转载请注明作者和出处. 作者:强光手电[艾克姆科技-无线事业部] 在使 ...
- R学习_multitaper包解析2:子函数spec.mtm.dpss,dpssHelper
前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的R语言的实现,这个实现是提出人的学生写的,和matlab的实现进行对照分析,加深理解,提高大家对这门技术的掌握程度,解析的顺序依旧是 ...
最新文章
- 行情分析:下杀或不可持续,市场大概率继续震荡
- 深度分析蔡徐坤的百万流量数据,揭底哪些是假的!
- 基于supersocket、C#对JT808协议进行解析构建gps监控平台服务端
- JMeter 测试计划
- [YTU]_2390( 抽象一个形状类)
- 数据库三大范式(1NF,2NF,3NF)及ER图
- Spring 5 新特性:函数式Web框架
- 我犯的错误--struts标签s:radio
- 19级:班级日常分享 | 一天一瞬间
- sql server中存储过程提示错误
- linux mem设备是什么,linux下/dev/mem分析
- python series增加一行_关于python:将一个列表或系列作为一行添加到pandas DataFrame中?...
- paypal创建订单后怎么获得id_新支付无国界:PayPal注册教程
- JAVA 泛型 入门
- 影视APP直播盒子源码 第三方接口无需采集
- 怎么提供专利技术交底书
- Fall 2020 Berkeley cs61a Projects cats答案
- php开发微信小程序教程,从零开始开发微信小程序步骤(三)
- Java ques: Unknown initial character set index ‘255‘ received from server. Initial client character
- python中oserror_[python] 解决OSError:
热门文章
- 文本文档打开来是写字板怎么办
- Oracle获取指定月最后一天日期(last_day函数)
- R 一行代码出Cox回归模型的表格
- (javascript)(基础知识+实例) 15.JSON,对象克隆,正则表达式
- Python迭代器和生成器详解(包括yield详解)
- 【DockerCE】使用Portainer-ce管理监控docker容器实例
- 译:Dataiku 白皮书之《在银行和保险行业应用数据科学》
- MyBatisCodeHelper-Pro插件
- fatal The remote end hung up unexpectedly
- 安培龙IPO过会:年营收5亿 同创伟业与中移创新是股东