先分析下OpenTCS的一些策略方面的东西,这是OpenTCS的基础。

首先需要先明确下OpenTCS内核中的三个概念:

路由(Route) : 决定了车辆通过什么样的方式和算法来获得一段路径,未来车辆将沿着此路径运行。

派遣(Dispacher): 决定了一个订单应该关联哪一辆小车,即为订单分配车辆和为车辆分配订单。

调度(schedule):狭义上的调度,交通管制的核心,决定了何时分配共享资源,何时释放拥有的资源。

以上是来自内核的约定,即如果二次开发,必须要按照这样的概念进行设计,当然OpenTCS提供了默认的算法实现(可修改和替换)。这些默认实现包含在openTCS-Strategies-Default子项目中。

本节先来分析下OpenTCS提供的默认Route策略,按照我的理解记录如下:

1、路由算法。

主要是实现了最短路径算法,OpenTCS提供了三种路由算法供选择,分别是:

迪杰斯特拉算法

贝尔曼-福特算法

弗洛伊德算法。

一般来说我们直接使用迪杰斯特拉算法就行了,因为我们的移动机器人一般只需要计算单源最短路径(机器人到目标点),也不需要处理负权边。

这里有意思的是,OpenTCS支持为每一台机器人设置不同的路由计算器,存在类似这样的结构:

//只做示意,OpenTCS中并未存在这样的代码
Map<Vehicle,Router> vehicleToRouter;

这样当我们在项目中由不同类型的机器人时,可以更加灵活的选择路由。

2、静态规划。

遗憾的是,OpenTCS不支持动态路由,只支持静态计算路由。这样发生死锁的概率其实高很多,特别是当任务存在关联性时,如果不对任务的下发加以处理,死锁就经常性的发生了。

另外当所有车的路由算法都一致时,车辆占道的情况不能处理,具体体现如下:

当有两辆车分别位于7和8点,其中7点的车发往13号点(7-9-10-11-13),假设其在11号点发生了故障或者遇到了障碍物需要静止运行。

此时第二辆车若需要去14点,默认的算法就会蒙圈,他依然是傻傻的选择路由(8-10-11-12-14),可想而知,如果前面的车一直占用11点,两辆车就会死锁。

关于此问题的改进,需要进行动态规划,后面有机会再说......

3、自定义路由算法。

如果需要自定义路由算法,则只需要通过实现以下PointRouter接口(此接口只有两个成员函数)即可。

//路由的算法接口
public interface PointRouter {//此函数必须返回点到点的StepsList<Route.Step> getRouteSteps(Point srcPoint, Point destPoint);//此函数必须返回点到点所需要的代价(在派遣阶段可以此决策是否关联订单)public long getCosts(TCSObjectReference<Point> srcPointRef,TCSObjectReference<Point> destPointRef);
}

因此,我们在二次开发的过程中,如果某辆车的路由是特殊的算法(即不能使用上面所说的三种路由算法)时,即可通过实现上述接口自己开发对应的算法来处理啦。

OpenTCS打造移动机器人交通管制系统(四)相关推荐

  1. python写一个crm系统_用Python打造一个CRM系统(四)

    在上一篇中在本地进行初始化,并让项目顺利运行.在本篇中将实现一个线索管理模块,支持线索的增删改查. 新建线索应用模块 进入项目目录,使用django命令创建线索应用模块,命令如下: $ python ...

  2. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(四)

    (5)数据库服务器(以甘肃数据库为例,脚本解释参照甘肃web) #!/bin/bash #ip db_ip=$(/sbin/ifconfig eth0|grep "inet addr&quo ...

  3. linux修改权限后不能开机,打造完美Linux系统:疑难杂症的解决(转)

    打造完美Linux系统:疑难杂症的解决(转)[@more@] 如果谁说他的Linux从来没有遇到"疑难杂症",我觉得是不可信的,就算是操作界面最友好的Window XP也时常遇到各 ...

  4. 用python设计一个管理系统思路_Python大佬一个月打造的Python系统学习流程图!

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...

  5. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(一)

    前言 记得刚来这家公司的时候,我部门就我一个运维工程师,然后就是经理,刚开始公司平台什么监控都没有,在我与经理的努力下,先搭建nagios+cacti监控平台,后来随着公司业务的增加,平台的功能与服务 ...

  6. python逻辑运算的一些流程图_Python大牛历时一个月打造的Python系统学习流程图,超详细!...

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...

  7. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统

    转载来自:http://dl528888.blog.51cto.com/2382721/1034992 前言 记得刚来这家公司的时候,我部门就我一个运维工程师,然后就是经理,刚开始公司平台什么监控都没 ...

  8. 基于android的pc系统,Phoneix OS 系统一款基于安卓打造的个人电脑系统

    原标题:Phoneix OS 系统一款基于安卓打造的个人电脑系统 凤凰系统x86版是运行在英特尔(Intel) x86 CPU设备上的个人电脑系统,支持上百万主流安卓应用.相比于传统的Android, ...

  9. 【干货】SSM,Jquery, Bootstrap从零打造一个论坛系统

    前言 分享一个SSM的实战项目,一个使用springmvc,mybatis,jequery,bootstrap,ueditor打造的论坛系统,主要包含论坛主体,后台管理两个部分. git地址如下:gi ...

  10. 打造高效团队的四个着力点

    转自:https://www.fx361.com/page/2021/0630/8521470.shtml 精准目标.精湛专业.精化机制.精铸共识是打造高效团队的四个着力点. 高质量发展必然对企业提出 ...

最新文章

  1. 使用Repeater的Template
  2. 不是微型计算机主板上的部件,微型计算机主板上安装的主要部件
  3. 项目管理一般知识:项目生命周期
  4. c++ 时间序列工具包_我的时间序列工具包
  5. 研究称语言能力比数学能力更重
  6. 华为云UGO正式公测:4大核心优势破解异构数据库迁移难题
  7. Python组合数据类型:容器类型转换,list←→tuple←→set
  8. 简析银行业数据中心的特点
  9. Java他们其中一个IO(一)
  10. 调和分析笔记1|极大函数法及简单应用
  11. highcharts 使用实例
  12. Jan 11 - Contains Duplicate II; Array; Traverse; HashMap; HashSet;
  13. WebLogic的下载和安装
  14. 用强化学习制作游戏AI
  15. 【包邮送书活动】20210928期-开奖通知
  16. Golang go-huge-util 工具库介绍
  17. 【基础知识】~ 半加器 全加器
  18. 如何解决android studio找不到手机!
  19. 平台经济中国案例研究——网易云平台
  20. 西门子Wincc/Step7/pcs7

热门文章

  1. 淘宝天猫评论爬取,简单的办法完成滑动验证
  2. 【家庭网络】申请安装移动宽带过程及简单建议
  3. Android页面跳转(Intent)
  4. 一加8 pro 刷入 kali Hunter
  5. 虫虫 HTML5::初学者使用 Application Cache 指南
  6. 春节假期 最强抢票攻略
  7. Windows 8/8.1/10 删除微软拼音、微软五笔输入法的方法
  8. google浏览器安装vuejs-devtools插件2022-4-25记录
  9. 兰大《银行会计学》命题作业离线作业
  10. Foxmail登陆gmail设置