栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > 架构设计

【机器人载体系统设计】导航业务系统架构(统筹业务与各个机器人模块功能交互)

架构设计 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【机器人载体系统设计】导航业务系统架构(统筹业务与各个机器人模块功能交互)

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理

文章目录
  • 系列文章目录
  • 前言
  • 一、导航业务系统架构设计的出发点
  • 二、系统架构思想分类(系统设计思想)
    • 1.单功能包应用的系统特点
    • 2.多功能包应用的系统
  • 三、机器人模块的六个层次划分(自己的看法)
    • 1.对模块进行划分的原因
    • 2.模块层次划分标准
    • 3.单个机器人模块层次划分类型
      • 1、业务需求层(模块功能)
      • 2、模块被调API及服务接口层(对外服务)
      • 3、私有数据结构接口层(私有内部数据)
      • 4、私有算法层(移植相关)
      • 5、模块逻辑层(模块内部处理流程)
      • 6、支持模块层(其他模块支持)
  • 四、导航业务架构案例
    • 1.navos
    • 2.navigation(move_base)
    • 3.Autoware
    • 4.Apollo
    • 等等


前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!

本文先对导航业务系统架构做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章


提示:以下是本篇文章正文内容

一、导航业务系统架构设计的出发点

第一步:定义市场场景与业务需求【方向–表层】

第二步:通过技术模块的组合成系统来解决场景需求【实现–重心】

第三步:考虑具体部署条件,具体问题具体分析,如系统架构设计也要有软件系统支持等等
.
.
.

二、系统架构思想分类(系统设计思想) 1.单功能包应用的系统特点

move base和navos2.0仅仅只有一个功能包应用处理整个导航,包括裸奔一个main的单片机(上了实时系统的单片机可以虚拟出多任务线程,允许其他架构),一个应用处理整个导航更具有稳定性,不会出现偶尔挂一个功能包的情况导致系统崩溃(ros经常这样),但是兼容性不好,中心化的系统很多东西移植进去要考虑其他模块是否兼容,系统也更难维护,维护的时候不仅仅要考虑各个模块的接口,更要考虑各个模块的配合逻辑【防盗标记–盒子君hzj】
.
.

2.多功能包应用的系统

autoware实现导航的功能是通过多个功能包协助完成导航,每个功能包只负责自己的功能,系统子功能很分散,用通用统一数据的数据接口去统筹所有的功能包(navos1.0的思想)【防盗标记–盒子君hzj】,弊端就是有一个功能包挂了整体就挂了,这也是ros分布式的思想,功能分布式所以通讯和设备都是分布式的,部署比较容易,兼容性也较好,只要数据接口满足,可以插入各种平台和插件rqt,rviz【防盗标记–盒子君hzj】
.
.

三、机器人模块的六个层次划分(自己的看法) 1.对模块进行划分的原因

因为机器人感知(传感器研发+理解+定位+地图)、路径规划、执行控制与业务决策(导航)的关系是非常紧密的,【防盗标记–盒子君hzj】进行每个模块的层次划分才能更好的把模块独立出来分工合作,更好的交互
.
.

2.模块层次划分标准

模块按照自身标准划分,因为每个模块都有自身模块的特殊性,同时也具有共性
.
.

3.单个机器人模块层次划分类型

当然这五个层次相对比较抽象,而每个机器人模块的原理和实现方式都不太一样,但是我觉得总是可以按照下面五个层次对机器人单个模块进行划分,使得机器人单个模块内的逻辑更加清晰,什么原理功能能更好的定位是干什么的,重要型到哪里

一个好的导航系统,不仅仅是模块之间定义清晰不耦合,单一模块内的逻辑特使条条有理的,一个好的架构师很重要的,不然后面系统代码上来后,增加功能很难,系统耦合厉害,【防盗标记–盒子君hzj】加一个需求代码要修其他原有需求代码的好几个bug,然后程序员效率很低挂掉了~~

1、业务需求层(模块功能)

状态机mission,业务执行secton(前端适合用工厂的设计方法)(连接业务需求和任务实现逻辑)
.

2、模块被调API及服务接口层(对外服务)

把本模块看成一个小黑盒子,通过提供SDK和API的形式,或者通过服务启动本模块,实现本模块输入输出的数据接口
.

3、私有数据结构接口层(私有内部数据)

1、各种驱动,传感器,各模块数据代理收发、日志备份、数据+代理中心【防盗标记–盒子君hzj】

代理一方向,把读取的数据都放在数据中心,
这样模块读取的接口不用重复写这么多订阅函数(交集的地方,避免冗余程序和订阅算力)
(算法数据流更直观统一去查)

2、数据接口文件中心

模块交互的数据接口用protobuf写在protobuf的文件管理,【防盗标记–盒子君hzj】
模块内部自己用的数据结构.h也行)放在一个目录更直观(把握住不要随便合并和新建接口文件)

.

4、私有算法层(移植相关)

每个模块的理论算法
.
.

5、模块逻辑层(模块内部处理流程)

.
.

6、支持模块层(其他模块支持)

包括自己自己写的库、系统内的通用的共用模块【防盗标记–盒子君hzj】,这个可以转战我那篇《机器人常用的库使用》的博客
还有支持导航的各个模块API,如地图、定位、控制、规划等等
.
.
.

四、导航业务架构案例 1.navos

公司内部导航业务系统,不能公开

2.navigation(move_base)

转战navigation(move_base)导航架构的博客【防盗标记–盒子君hzj】
.

3.Autoware

转战Autoware导航架构的博客
.

4.Apollo

转战Apollo导航架构的博客
.

等等
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907986.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号