系统架构图怎么画_基于ROS的移动机器人上层系统架构分析
看过网上不少博客,介绍ROS系统架构的,基本上都是在介绍ROS自身系统架构,很少有介绍特定机器人的系统架构的。个人觉得,入门一个系统,首先需要从整体开始把握,而不必在意细节,整体把握好了,细节自然水到渠成。因此,本文以当下火热的移动机器人为载体,介绍移动机器人上层ROS系统架构,当然了,该架构也是参考了ROS BY EXAMPLE中Turtlebot,该书是个很适合入门的书,有空可以看看。
图是最容易说明问题的,一张清晰的架构图,能够让你少走很多弯路,看了下面这张架构图,你就大概能知道,一个激光SLAM的移动机器人系统,究竟需要哪些模块,而这些模块之间的关系又是什么,使用哪些Topic进行交互。下面的架构图中都是核心模块,有时间每一个模块都需要去熟悉和学习。
ROS作为一个分布式架构,特点是低耦合,你可以随意的添加和删除模块,特别方便开发,但这种架构最大的问题是什么呢,进程交互速度慢,具有一定的延时,因此,这也是ROS饱受诟病的问题。
移动机器人ROS架构里面最核心的部分,自然是建图、定位和路径规划,分别对应着图中的Gmapping、AMCL和Move_base。建图算法,在室内移动机器人中, gmapping必须拥有姓名。为什么这里画成虚线呢,因为建图不是每次都需要的,一次就可以了,无论你采用什么方法,只要环境变化不大,建出一张图,你就可以一直使用。以后,只需要启动AMCL算法,根据此地图,即可实现移动机器人的定位。AMCL采用粒子滤波,融合激光雷达话题/scan和下面提到的odom坐标系到base_link坐标系的变换,主要向tf树发布base_link坐标系到map坐标系的坐标变换。
这里重点说说robot_pose_ekf节点,该节点通过扩展卡尔曼滤波器,融合/odom、/imu_data和/vo话题,实现更为精确的里程计先验,发布odom坐标系到base_link坐标系的变换。在我们自身的实际机器人架构中,/odom话题指四轮麦克纳轮解算出的里程计数据,没有采用视觉里程计,而是采用了测量轮加惯导生成的里程计数据代替/VO话题。大家一定要区分odom坐标系和/odom话题,这是两个概念,前者是坐标系,后者是根据编码器(或者视觉等)计算的里程计。
下图清晰的表明了这一关系,/map到/odom的坐标变换为里程计的漂移,也就是说系统刚启动的时候里程计漂移为0,/map坐标系和/odom坐标系重合,而后来随着机器人的不断移动漂移越来越大,因为里程计是相对定位,具有累积误差。
Robot_state_publisher节点,解析URDF模型,向tf坐标树发布机器人各模块之间的坐标变换,如激光雷达位置相对于base_link的坐标变换。该坐标变换一方面是为了各模块之间的坐标系转换,同时也是为了在RVIZ中显示。该URDF模型可以手动编写,更方便的是用solidworks建模完成后进行导出。
我们自身实现了一个Chassis_driver节点,该节点是需要自行编程并建立与下位机STM32之间的通信协议。该底层通信节点接收下位机的里程计数据并发布到话题/odom和/vo,同时接收move_base生成的速度,发送给下位机的STM32。
而底层STM32控制器实现了怎样的功能呢?其一,将上层传递的速度指令解析成四个轮子的转速,下发给四个驱动器;其二,接收四个麦克纳姆轮的编码器数据,解析成轮式里程计数据,传给Chassis_driver节点。至于麦克纳姆轮的正逆解,可以参考下面:麦克纳姆轮及其速度分解计算。
下面为我们实验室第一代自主搭建的机器人底盘以及跑出来的效果,可以看出机器人可以穿过房门并在走廊行驶。
这是本人的第一篇博客,旨在让新手入门ROS移动机器人,熟悉移动机器人整体架构,各模块之间是如何协同工作的,未涉及到具体的实现细节,对应各个模块的具体实现,可以参考roswiki官方,或网上的各种比较细节的教程,如有不足,请多多包涵。本人几年前就想写博客,一开始是想着做旅游博主的,给大家提供旅游攻略,但是一直拖着未能实现,希望以后有机会能补上。另外,架构图是我已经毕业的谢师兄画的,在此表示对他的感谢。
系统架构图怎么画_基于ROS的移动机器人上层系统架构分析相关推荐
- 系统架构图怎么画_简历的项目经历应该怎么写得好看?
最近很多同学都在准备面试,很多人都来问我关于简历里的项目经验应该这么去写?今天就来详细分享一下把简历里的项目经验写的好看的方法思路. 你负责的业务是什么?(学会发现问题) 我接触过不少同学,有说在小公 ...
- java架构图怎么画_架构模型图怎么画java
逻辑视图 开发视图 过程视图 物理视图 场景视图 4+1视图提出后,业界也有其它的观点提出,诸如SEI(模块视图.组建和连接件视图.分配视图).西门子4种视图(概念.模块.代码.执行视图).以及RM- ...
- 成绩查询系统源java代码_基于jsp的成绩查询系统-JavaEE实现成绩查询系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的成绩查询系统, 该项目可用各类java课程设计大作业中, 成绩查询系统的系统架构分为前后台两部分, 最终实现在线上 ...
- Java EE 企业网站_基于jsp的企业网站系统-JavaEE实现企业网站系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的企业网站系统, 该项目可用各类java课程设计大作业中, 企业网站系统的系统架构分为前后台两部分, 最终实现在线上 ...
- java邮件群发代码_基于jsp的邮件群发系统-JavaEE实现邮件群发系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的邮件群发系统, 该项目可用各类java课程设计大作业中, 邮件群发系统的系统架构分为前后台两部分, 最终实现在线上 ...
- 基于java的家庭理财系统_基于jsp的家庭理财系统-JavaEE实现家庭理财系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的家庭理财系统, 该项目可用各类java课程设计大作业中, 家庭理财系统的系统架构分为前后台两部分, 最终实现在线上 ...
- java 汽车售票_基于jsp的长途汽车售票系统-JavaEE实现长途汽车售票系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的长途汽车售票系统, 该项目可用各类java课程设计大作业中, 长途汽车售票系统的系统架构分为前后台两部分, 最终实 ...
- java网上报名系统源码_基于jsp的网上报名系统-JavaEE实现网上报名系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的网上报名系统, 该项目可用各类java课程设计大作业中, 网上报名系统的系统架构分为前后台两部分, 最终实现在线上 ...
- java实现贴吧源码_基于jsp的贴吧系统-JavaEE实现贴吧系统 - java项目源码
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的贴吧系统, 该项目可用各类java课程设计大作业中, 贴吧系统的系统架构分为前后台两部分, 最终实现在线上进行贴吧 ...
最新文章
- get这款工具,不会机器学习也能轻松搞定深度分析
- 用BlockingQueue实现生产者与消费者问题
- PHP 获取JSON json_decode返回NULL解决办法
- 类与类关系的UML图与代码表现
- 文件系统读写Linux文件系统损坏的修复技术Strut2教程-java教程
- Python基础语法,基本数据类型及相关操作
- visio2003 反向工程链接 mssql2005
- ODBC驱动程序丢失解决方法
- MRP游戏软件常见问题解答以及破解方法!(新手必看)
- 数据挖掘RapidMiner工具使用----聚类K-Means案例分析
- android 6.0 oem分区,android系统的分区结构
- 2022国内十大工业级三维视觉引导企业一览
- 【最新】白piao迅雷的下载速度(迅雷11亲测好用)
- spring + springmvc +mybatis 搭建 maven 项目的核心配置文件
- Kettle 9.0 源码编译
- 【爬虫】scrapy下载股票列表(四)——对接mongodb保存数据
- Mint UI—loadmore—Pull down下拉刷新将下拉刷新的箭头标志更换成其他图片(图文)
- 赶紧收藏,影视剪辑月赚6000多,常用的素材和工具分享
- 汽车减速器设计及三维建模
- ScreenCapture:通过DirectX 库进行屏幕捕获