
我已经阅读了许多博客,介绍了ROS系统架构,基本上介绍了ROS系统架构,很少介绍特定机器人的系统架构. 我个人认为,要开始使用系统,您首先需要掌握整体,而不必关心细节. 整体把握得当,细节自然会出现. 因此,本文以当前的热门移动机器人为载体,介绍该移动机器人的上层ROS系统架构. 当然,该体系结构还引用了ROS中的Turtlebot示例. 这本书是非常合适的入门书.
图片最容易解释问题. 清晰的架构图将使您少走很多弯路. 查看下面的架构图,您可能知道激光SLAM移动机器人系统需要什么. 哪些模块,这些模块之间的关系是什么以及用于交互的主题. 以下架构图都是核心模块,每个模块都需要时间来熟悉和学习.


作为分布式体系结构,ROS具有低耦合的特点,您可以随意添加和删除模块,这对于开发特别方便,但是此体系结构的最大问题是什么?过程交互很慢并且有一定的延迟. 因此,这也是ROS被批评的问题.
移动机器人ROS架构的核心部分自然是映射,定位和路径规划,它们对应于图中的Gmapping,AMCL和Move_base. 建立图算法. 在室内移动机器人中,映射必须有一个名称. 您为什么在这里绘制虚线,因为不需要每次都制作图片就足够了. 无论使用哪种方法,只要环境变化不大,就可以在构建图片后始终使用它. 将来,仅需启动AMCL算法,并且根据此图,就可以实现移动机器人的定位. AMCL使用粒子滤波将激光雷达主题/扫描和下面提到的odom坐标系的变换融合到base_link坐标系,并主要发布base_link坐标系到地图坐标系到tf树的坐标.
这里,我们集中在robot_pose_ekf节点上,该节点扩展了Kalman滤波器并融合了/ odom,/ imu_data和/ vo主题,以实现更精确的里程表,并发布了odom坐标系到base_link坐标的转换. 系统. 在我们自己的实际机器人体系结构中,/ odom主题是指由四轮McNair轮计算出的里程表数据. 代替使用视觉里程表,使用由测量轮和惯性导航生成的里程表数据代替/ VO主题. 每个人都必须区分odom坐标系和/ odom主题. 这是两个概念. 前者是坐标系,后者是根据编码器(或视觉等)计算出的里程表.
下图清楚地显示了这种关系. 从/ map到/ odom的坐标转换为里程表漂移,这意味着刚启动系统时移动机器人系统,里程表漂移为0,/ map坐标系和/ dom坐标系重合,然后随着连续运动而漂移. 机器人变得越来越大,这是因为里程表相对放置,并且会累积误差.


Robot_state_publisher节点,分析URDF模型,并将机器人模块之间的坐标转换发布到tf坐标树移动机器人系统,例如激光雷达位置相对于base_link的坐标转换. 这种坐标转换一方面用于模块之间的坐标系转换,而且还用于在RVIZ中显示. URDF模型可以手动编写,使用solidworks建模后,将其导出更方便.
我们自己实现了一个Chassis_driver节点. 该节点需要自编程,并与下位计算机STM32建立通信协议. 底层通信节点接收下位计算机的里程表数据并将其发布到主题/ odom和/ vo,同时接收move_base生成的速度并将其发送到下位计算机的STM32.
底层STM32控制器实现什么功能?首先,它将上层传输的速度命令解析为四个轮子的转速,并将其发送给四个驱动器. 节点. 关于麦克纳姆轮的正解和反解,可以参考以下内容: 麦克纳姆轮及其速度分解计算.
以下是我们实验室制造的第一代机器人底盘及其耗尽的影响. 可以看出,机器人可以穿过房屋的门并在走廊中行驶.




这是我的第一个博客,旨在使新手入门ROS移动机器人,熟悉移动机器人的总体架构,模块如何协同工作,不涉及具体的实现细节以及每个模块的详细信息. 实施时,您可以参考官方的roswiki或Internet上的各种详细教程. 如果有不足之处,请多多包涵. 我想在几年前写一个博客. 一开始,我想成为一个旅行博客,为每个人提供旅行提示,但是我一直在拖拖拉拉. 我希望我将来有机会对此进行弥补. 另外,该建筑图是我毕业的谢弟兄绘制的,在这里我要感谢他.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-218568-1.html
继续努力
加油