OpenTCS打造移动机器人交通管制系统(四)
先分析下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打造移动机器人交通管制系统(四)相关推荐
- python写一个crm系统_用Python打造一个CRM系统(四)
在上一篇中在本地进行初始化,并让项目顺利运行.在本篇中将实现一个线索管理模块,支持线索的增删改查. 新建线索应用模块 进入项目目录,使用django命令创建线索应用模块,命令如下: $ python ...
- 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(四)
(5)数据库服务器(以甘肃数据库为例,脚本解释参照甘肃web) #!/bin/bash #ip db_ip=$(/sbin/ifconfig eth0|grep "inet addr&quo ...
- linux修改权限后不能开机,打造完美Linux系统:疑难杂症的解决(转)
打造完美Linux系统:疑难杂症的解决(转)[@more@] 如果谁说他的Linux从来没有遇到"疑难杂症",我觉得是不可信的,就算是操作界面最友好的Window XP也时常遇到各 ...
- 用python设计一个管理系统思路_Python大佬一个月打造的Python系统学习流程图!
对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...
- 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(一)
前言 记得刚来这家公司的时候,我部门就我一个运维工程师,然后就是经理,刚开始公司平台什么监控都没有,在我与经理的努力下,先搭建nagios+cacti监控平台,后来随着公司业务的增加,平台的功能与服务 ...
- python逻辑运算的一些流程图_Python大牛历时一个月打造的Python系统学习流程图,超详细!...
对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...
- 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统
转载来自:http://dl528888.blog.51cto.com/2382721/1034992 前言 记得刚来这家公司的时候,我部门就我一个运维工程师,然后就是经理,刚开始公司平台什么监控都没 ...
- 基于android的pc系统,Phoneix OS 系统一款基于安卓打造的个人电脑系统
原标题:Phoneix OS 系统一款基于安卓打造的个人电脑系统 凤凰系统x86版是运行在英特尔(Intel) x86 CPU设备上的个人电脑系统,支持上百万主流安卓应用.相比于传统的Android, ...
- 【干货】SSM,Jquery, Bootstrap从零打造一个论坛系统
前言 分享一个SSM的实战项目,一个使用springmvc,mybatis,jequery,bootstrap,ueditor打造的论坛系统,主要包含论坛主体,后台管理两个部分. git地址如下:gi ...
- 打造高效团队的四个着力点
转自:https://www.fx361.com/page/2021/0630/8521470.shtml 精准目标.精湛专业.精化机制.精铸共识是打造高效团队的四个着力点. 高质量发展必然对企业提出 ...
最新文章
- 使用Repeater的Template
- 不是微型计算机主板上的部件,微型计算机主板上安装的主要部件
- 项目管理一般知识:项目生命周期
- c++ 时间序列工具包_我的时间序列工具包
- 研究称语言能力比数学能力更重
- 华为云UGO正式公测:4大核心优势破解异构数据库迁移难题
- Python组合数据类型:容器类型转换,list←→tuple←→set
- 简析银行业数据中心的特点
- Java他们其中一个IO(一)
- 调和分析笔记1|极大函数法及简单应用
- highcharts 使用实例
- Jan 11 - Contains Duplicate II; Array; Traverse; HashMap; HashSet;
- WebLogic的下载和安装
- 用强化学习制作游戏AI
- 【包邮送书活动】20210928期-开奖通知
- Golang go-huge-util 工具库介绍
- 【基础知识】~ 半加器 全加器
- 如何解决android studio找不到手机!
- 平台经济中国案例研究——网易云平台
- 西门子Wincc/Step7/pcs7