看过网上不少博客,介绍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的移动机器人上层系统架构分析相关推荐

  1. 系统架构图怎么画_简历的项目经历应该怎么写得好看?

    最近很多同学都在准备面试,很多人都来问我关于简历里的项目经验应该这么去写?今天就来详细分享一下把简历里的项目经验写的好看的方法思路. 你负责的业务是什么?(学会发现问题) 我接触过不少同学,有说在小公 ...

  2. java架构图怎么画_架构模型图怎么画java

    逻辑视图 开发视图 过程视图 物理视图 场景视图 4+1视图提出后,业界也有其它的观点提出,诸如SEI(模块视图.组建和连接件视图.分配视图).西门子4种视图(概念.模块.代码.执行视图).以及RM- ...

  3. 成绩查询系统源java代码_基于jsp的成绩查询系统-JavaEE实现成绩查询系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的成绩查询系统, 该项目可用各类java课程设计大作业中, 成绩查询系统的系统架构分为前后台两部分, 最终实现在线上 ...

  4. Java EE 企业网站_基于jsp的企业网站系统-JavaEE实现企业网站系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的企业网站系统, 该项目可用各类java课程设计大作业中, 企业网站系统的系统架构分为前后台两部分, 最终实现在线上 ...

  5. java邮件群发代码_基于jsp的邮件群发系统-JavaEE实现邮件群发系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的邮件群发系统, 该项目可用各类java课程设计大作业中, 邮件群发系统的系统架构分为前后台两部分, 最终实现在线上 ...

  6. 基于java的家庭理财系统_基于jsp的家庭理财系统-JavaEE实现家庭理财系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的家庭理财系统, 该项目可用各类java课程设计大作业中, 家庭理财系统的系统架构分为前后台两部分, 最终实现在线上 ...

  7. java 汽车售票_基于jsp的长途汽车售票系统-JavaEE实现长途汽车售票系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的长途汽车售票系统, 该项目可用各类java课程设计大作业中, 长途汽车售票系统的系统架构分为前后台两部分, 最终实 ...

  8. java网上报名系统源码_基于jsp的网上报名系统-JavaEE实现网上报名系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的网上报名系统, 该项目可用各类java课程设计大作业中, 网上报名系统的系统架构分为前后台两部分, 最终实现在线上 ...

  9. java实现贴吧源码_基于jsp的贴吧系统-JavaEE实现贴吧系统 - java项目源码

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的贴吧系统, 该项目可用各类java课程设计大作业中, 贴吧系统的系统架构分为前后台两部分, 最终实现在线上进行贴吧 ...

最新文章

  1. get这款工具,不会机器学习也能轻松搞定深度分析
  2. 用BlockingQueue实现生产者与消费者问题
  3. PHP 获取JSON json_decode返回NULL解决办法
  4. 类与类关系的UML图与代码表现
  5. 文件系统读写Linux文件系统损坏的修复技术Strut2教程-java教程
  6. Python基础语法,基本数据类型及相关操作
  7. visio2003 反向工程链接 mssql2005
  8. ODBC驱动程序丢失解决方法
  9. MRP游戏软件常见问题解答以及破解方法!(新手必看)
  10. 数据挖掘RapidMiner工具使用----聚类K-Means案例分析
  11. android 6.0 oem分区,android系统的分区结构
  12. 2022国内十大工业级三维视觉引导企业一览
  13. 【最新】白piao迅雷的下载速度(迅雷11亲测好用)
  14. spring + springmvc +mybatis 搭建 maven 项目的核心配置文件
  15. Kettle 9.0 源码编译
  16. 【爬虫】scrapy下载股票列表(四)——对接mongodb保存数据
  17. Mint UI—loadmore—Pull down下拉刷新将下拉刷新的箭头标志更换成其他图片(图文)
  18. 赶紧收藏,影视剪辑月赚6000多,常用的素材和工具分享
  19. 汽车减速器设计及三维建模
  20. ScreenCapture:通过DirectX 库进行屏幕捕获

热门文章

  1. 同在服务器无响应,全部服务器无响应!!!
  2. AD数据采集的“数字滤波”:10个“软件滤波程序”
  3. 批量计算多个点到一个点的距离
  4. 企业级java b2bc商城系统开源源码二次开发(二十一)springboot集成JMS
  5. Python学习笔记之基础(二)变量和类型
  6. 一、Linux Shell基础
  7. keepalived高可用反向代理的nginx
  8. 隐藏讨厌的桌面挂载卷图标
  9. Delphi之对象库(Object Repository)
  10. Spark的Yarn模式及其案例