AGV机器人的调度开发分析(2)- 内核中的调度

我们开发AGV的调度系统,最重要的是要实现调度的运行,那么调度要执行哪些任务呢?

先来看看德国开发的开源openTCS中的功能定义:

openTCS的控制核心是kernel,目的是提供运输系统/工厂的抽象驾驶模型,管理运输订单并计算车辆路线,其内部有三种算法策略模块,分别为Dispater、Router、Scheduler:

派发员(Dispatcher):决定哪个运输订单应该由哪辆车处理。此外,它需要决定车辆在某些情况下应该做什么,例如,当没有任何运输订单或车辆电量不足时。

路由(Router):为车辆找到到达目的地的最佳路线的路由器。

调度员(Scheduler):管理交通管理资源分配的调度程序,即避免车辆相互碰撞。

重点来了,我们的实现定义需要做到下面几个方法和接口:

1. 定时拉取执行任务并规划相应路线

TimerFreshTask_Elapsed(object sender, System.Timers.ElapsedEventArgs e)

一个定时器,可以将需要完成的AGV任务完成; 需要分发的任务分发;

需要充电的机器人去充电;需要去待命点的机器人去待命点

2. 发送AGV路线指令(上面的任务需要发送路线,调用这个方法)

SendCarRoute(CarInfo car, SendRouteType RouteType, DispatchTaskDetail TaskDetail)

3. 接受处理AGV回馈信息,每秒可能被执行5-10次

HandleCarFeedBack(CarStateInfo agvcar)

   agvcar含有该有的机器人最新信息,这样机器人当前的状态,所达到的地标,电量等信息都能及时返回

4.发送指令给机器人的方法

 Add_AGVCommand(string id, LatRcs.DispatchModel.CommandToValue ctov)

    发送原理:接收命令的是通讯基类,命令先放到队列中。每个通讯设备都有自己一直开着的线程,对应的线程会自动从队列中获取指令,然后按协议发送给相关的机器人或设备。

这几个方法是调度中最重要的方法,当然还有很多线程锁和辅助方法,已经发送指令的方法,功能都比较简单,就没有列出。当代码看过3-5个不同的实现后,我们会觉得方案思想会更加重要。所以互动和讨论的内容,也许会优于于普通的代码,会更加有价值!当然初始做项目的人员还是解决方法的基本实现更有用。

 如果需要讨论其他执行方法或者调度中控制细节的的可以评论,或者发邮件给我 448283544@qq.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SVG 模糊效果

SVG 模糊效果 SVG(Scalable Vector Graphics,可缩放矢量图形)是一种基于XML的图像格式,用于描述二维图形。它是一种矢量图形格式,因此可以无限放大而不失真。SVG广泛应用于网页设计、动画制作和图形编辑等领域。本文将…

screenshot-to-code之安装、测试

准备 GPT收费账号 screenshot-to-code Supported AI models: GPT-4O - Best model!GPT-4 Turbo (Apr 2024)GPT-4 Vision (Nov 2023)Claude 3 SonnetDALL-E 3 for image generation git或者手动 下载源代码 https://github.com/abi/screenshot-to-code pip install poetry (…

Gradle代理设置

修改 ~/.gradle/gradle.properties 文件&#xff0c;添加代理配置。 对于http和https代理&#xff0c;添加如下内容&#xff1a; systemProp.http.proxyHost<host> systemProp.http.proxyPort<port> # systemProp.http.proxyUser<user> # systemProp.http.…

AI 大模型企业应用实战(10)-LLMs和Chat Models

1 模型 来看两种不同类型的模型--LLM 和聊天模型。然后&#xff0c;它将介绍如何使用提示模板来格式化这些模型的输入&#xff0c;以及如何使用输出解析器来处理输出。 LangChain 中的语言模型有两种类型&#xff1a; 1.1 Chat Models 聊天模型通常由 LLM 支持&#xff0c;…

正确实现 QThread 的方法(附示例)

这篇技术博客探讨了在 Qt 框架中正确实现 QThread 类的方法。传统 Qt 文档建议继承 QThread 类并重写其 run 方法,这虽然在某些情况下可行,但并不是推荐的最佳实践。以下内容将探讨这种方法的利弊,并提供一个更好的实现 QThread 的示例。 原始示例:继承 QThread 并重写 ru…

FFmpeg源码:ff_ctz / ff_ctz_c函数分析

一、ff_ctz函数的作用 ff_ctz定义在FFmpeg源码目录的libavutil/intmath.h 下&#xff1a; #ifndef ff_ctz #define ff_ctz ff_ctz_c /*** Trailing zero bit count.** param v input value. If v is 0, the result is undefined.* return the number of trailing 0-bits*/…

从零开始搭建一个酷炫的个人博客

效果图 一、搭建网站 git和hexo准备 注册GitHub本地安装Git绑定GitHub并提交文件安装npm和hexo&#xff0c;并绑定github上的仓库注意&#xff1a;上述教程都是Windows系统&#xff0c;Mac系统会更简单&#xff01; 域名准备 购买域名&#xff0c;买的是腾讯云域名&#xf…

OpenCV 棋盘格角点探测

文章目录 一、简介二、代码实现三、实现效果参考文献一、简介 这篇文章中(https://mp.weixin.qq.com/s?__biz=Mzg5MzE2NzgwOA==&mid=2247483686)探讨了关于OpenCV中棋盘格角点探测算法的整个过程,以及所存在的缺点限制。总的来说,(1)在opencv中为了兼顾计算速度,因…

@PostConstruct 注解的方法用于资源的初始化

PostConstruct 是 Java EE 5 引入的一个注解&#xff0c;主要用于依赖注入完成之后&#xff0c;需要执行的方法上。这个注解的方法会在依赖注入完成后自动被容器&#xff08;如 EJB 容器或 Spring 容器&#xff09;调用&#xff0c;并且只会被调用一次。 PostConstruct 注解的…

Kubernetes排错(十)-处理容器数据磁盘被写满

容器数据磁盘被写满造成的危害: 不能创建 Pod (一直 ContainerCreating)不能删除 Pod (一直 Terminating)无法 exec 到容器 如何判断是否被写满&#xff1f; 容器数据目录大多会单独挂数据盘&#xff0c;路径一般是 /var/lib/docker&#xff0c;也可能是 /data/docker 或 /o…

工程师 - status和state的区别

"Status"和 "state"是相关的概念&#xff0c;但有不同的含义&#xff0c;尤其是在计算、系统和编程方面&#xff1a; 1. Status&#xff1a; * 定义&#xff1a; 状态是指系统、进程或实体在某一特定时间点的当前状态或情况。 * 使用方法&#xff1a; 它通…

档案数字化建设花费主要在哪里

在档案数字化建设中&#xff0c;主要花费包括以下几个方面&#xff1a; 1. 技术设备和软件&#xff1a;包括购买和维护服务器、计算机、扫描仪、存储设备等硬件设备&#xff0c;以及购买和使用专久智能档案数字化软件和系统。 2. 人力资源&#xff1a;数字化建设需要专业的技术…

虚拟现实环境下的远程教育和智能评估系统(十二)

接下来&#xff0c;把实时注视点位置、语音文本知识点、帧知识点区域进行匹配&#xff1b; 首先&#xff0c;第一步是匹配语音文本知识点和帧知识点区域&#xff0c;我们知道教师所说的每句话对应的知识点&#xff0c;然后寻找当前时间段内&#xff0c;知识点对应的ppt中的区域…

数据仓库之雪花模型

雪花模型是数据仓库设计中使用的一种规范化模式。它是星型模型的一种扩展&#xff0c;通过进一步规范化维度表来减少冗余和节省存储空间。下面详细介绍雪花模型的各个方面&#xff1a; 雪花模型概述 雪花模型的名称源于其复杂的结构图形&#xff0c;类似于雪花的形状。在这种…

推荐3款自动爬虫神器,再也不用手撸代码了

网络爬虫是一种常见的数据采集技术&#xff0c;你可以从网页、 APP上抓取任何想要的公开数据&#xff0c;当然需要在合法前提下。 爬虫使用场景也很多&#xff0c;比如&#xff1a; 搜索引擎机器人爬行网站&#xff0c;分析其内容&#xff0c;然后对其进行排名&#xff0c;比…

java:spring-security的简单例子

【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>org.springf…

嘉楠勘智CanMV-K230的大小核如何操作

摘要&#xff1a;嘉楠勘智CanMV-K230的帮助文档、例子模型说明中&#xff0c;一直在提“大核&#xff0c;小核”&#xff0c;还提到将文件复制到小核并解压&#xff0c;然后在大核中操作&#xff0c;本文介绍一下这两个“核”如何操作。 所需的硬件&#xff1a;CanMV-K230-V1.1…

大数据复习练习

大数据复习练习题 填空题简答题简单分析题程序设计题程序设计题 填空题 (数据)过观察、实验或计算得出的结果。&#xff08;消息&#xff09;是较为宏观的概念&#xff0c;它是由数据的有序排列组合而成。大数据的数据类型包括&#xff08;结构化数据&#xff09;和&#xff0…

<router-view />标签的理解

< router-view />标签的理解 < router-view />用来承载当前级别下的子集路由的一个视图标签。显示当前路由级别下一级的页面。 App.vue是根组件&#xff0c;在它的标签里使用&#xff0c;而且配置好路由的情况下&#xff0c;就能在浏览器上显示子组件的效果。 如…

Python题目

实例 3.1 兔子繁殖问题&#xff08;斐波那契数列&#xff09; 兔子从出生后的第三个月开始&#xff0c;每月都会生一对兔子&#xff0c;小兔子成长到第三个月后也会生一对独自。初始有一对兔子&#xff0c;假如兔子都不死&#xff0c;那么计算并输出1-n个月兔子的数量 n int…