- 博客(54)
- 资源 (6)
- 收藏
- 关注
原创 OpenTCS客户端开发之Web客户端(一)
这些问题很多是关于算法方面的,也有一部分是关于UI方面的,毕竟OpenTCS本质上是一个算法项目,但是如果希望把它进行商业化,那免不了需要UI,然而OpenTCS的UI是使用Swing做的,比较古老的框架,而且说实话,个人觉得java也不太适合做桌面客户端。3、关于建模,这部分可以说是最复杂的,这里推荐使用HTML5的Canvs进行图形的建模,也可以使用一些比较好的框架。从本文开发,我会陆续记录一些关于开发OpenTCS客户端的一些文字以便给需要帮助的人。这里抛开后端不说,推荐一种做法,使用。
2022-10-29 18:04:51 2233 6
原创 OpenTCS算法改进之Router动态规划
前面章节有提到,OpenTCS是不支持动态规划的。本节记录下OpenTCS路由算法的改进。注意:这里说的动态规划仅限于Router(实际上真正意义上的动态规划是要考虑交通死锁、运行效率等一系列问题的)。问题抛出:假设有如下场景,一个网格形地图(可以考虑仓储场景下),现场有三台车,目前状态如下:此时Vehicle-0002收到了一个订单,要求前往Point-0026(Location-005),此时按照OpenTCS的默认算法,会得到这样的一条路径,如下所示:上图可以看出Vehi.
2021-11-12 17:25:53 3095 14
原创 OpenTCS拓展之Python语言交互与拓展
最近有小伙伴给我留言,问OpenTCS除了使用内核的Extention功能进行静态拓展外,还有没有更灵活的方式进行拓展呢?我推荐他使用python进行拓展。python是一门动态的语言,号称胶水语言,非常容易和宿主语言进行结合,在JAVA中可以使用Jython进行集成,非常方便。jython是python语言的JAVA实现版(以下统称Python),官网:https://www.jython.org/使用Python对OpenTCS进行拓展是不是很酷?这里来讲一下主要流程。第...
2021-02-04 18:15:22 854
原创 OpenTCS打造移动机器人交通管制系统(十)
最近实在有点忙,都有点忙昏头的感觉,没来得及更新TCS系列文章。本篇文章算是一个TCS系列博文的完结篇。(后续如果有一些新的东西有可能会继续更新,但可能会是以专题的形式发布。)这里顺便提一下,现在官网的TCS5版本也出来了,但是遗憾的是,本人没有发现有新的突破性的东西,其实挺失望的。本文其实没有什么新的东西可记录,但是后台有很多伙伴给我留言,想知道基于TCS的Web客户端怎么去实现,我想大概是TCS自带的客户端太丑了吧,哈哈,但其实PlantView个人觉得还是挺实用的。那么本文就来谈一下基于O
2020-07-14 19:43:42 2457 3
原创 OpenTCS打造移动机器人交通管制系统(九)
上一篇文章探讨了如何拓展Kernel。本文来讲下如何为OpenTCS增加WebAPI。由于OpenTCS有MES系统或别的第三方系统对接时通常都是使用WebAPI进行交互的。OpenTCS系统的WebAPI遵循RestAPI的设计,提供了一系列API接口,这些API接口通过Documente可以查看到。如何测试这些API?可以通过浏览器来测试(推荐使用Google浏览器),比如这里要获取全部的车辆信息,可以在浏览器中输入如下地址:http://localhost:55200/v1...
2020-06-23 11:18:56 2304 7
原创 OpenTCS打造移动机器人交通管制系统(八)
上一篇文章记录了下如何在OpenTCS框架下拓展数据库(点此查看上一篇),本篇来探讨下如何拓展Kernel。OpenTCS框架主要的作用是提供一个交通管制的框架,但是通常来说,一个完整的调度系统(这里指的是广义的调度系统),是不仅仅只有交通管制的,通常还会有业务层、逻辑层等相关模块一起和OpenTCS构成一个实际可用的系统。一般来说实际项目的架构至少应该是下面的样子:那么很显然,要想系统更紧凑,OpenTCS-Kernel需要拓展,其实OpenTCS在设计之初就预留了拓展的接口(...
2020-05-17 17:29:11 2189 6
原创 OpenTCS打造移动机器人交通管制系统(七)
在一个实际的项目中(非实验室),数据是至关重要的。本篇讲下OpenTCS的数据存储问题,OpenTCS的关键数据主要是Vehicle数据和TransportOrder的数据。然而这些数据OpenTCS没有做专门的持久化处理,也就是说只要Kernel一重启,之前发生的事就一无所知了。为了将数据持久化,本文提出一种基于redis数据库的存储方案来存储Transportorder数据(如果要...
2020-04-27 19:46:56 2561 5
原创 OpenTCS打造移动机器人交通管制系统(六)
上一篇谈到了OpenTCS的调度策略问题。并提出了关于自带算法的"死锁"的问题。1、错开订单的下发。2、改进调度资源分配算法,将双向路径考虑到资源分配的过程当中。 方法1显然是可以解决的前文提到的死锁问题的,但是有点别扭,也有点low,因此笔者尝试从算法层次着手改进。我们拓展上一篇文章提出的地图,将其拓展如下:(地图画的有点乱,懒得整理了,...
2020-04-16 20:16:10 2647 14
原创 OpenTCS打造移动机器人交通管制系统(五)
本文来谈一谈OpenTCS的调度问题。OpenTCS默认的算法是基于"前馈锁路"的方式进行交通管制的。所谓的“前馈锁路”,意思是当某辆车需要运动时,在运动之前会将MovementCommand转换成一种交通管制资源向系统中注册。只有当该资源被系统接受时,车辆才会运动,大致的逻辑如下所示:OpenTCS的这种默认交通管制策略其实比较简单,也容易理解,那么这种方式是否在实际项目中...
2020-04-11 18:16:53 3609
原创 OpenTCS打造移动机器人交通管制系统(四)
先分析下OpenTCS的一些策略方面的东西,这是OpenTCS的基础。首先需要先明确下OpenTCS内核中的三个概念:路由(Route) : 决定了车辆通过什么样的方式和算法来获得一段路径,未来车辆将沿着此路径运行。派遣(Dispacher): 决定了一个订单应该关联哪一辆小车,即为订单分配车辆和为车辆分配订单。调度(schedule):狭义上的调度,交通管制的核心,决定了何时分配...
2020-03-26 20:05:55 4180 13
原创 OpenTCS打造移动机器人交通管制系统(三)
本章主要介绍下如何开发一个新的VehicleAdapter模块(车辆驱动适配对象)。OpenTCS是一个开放的系统,从内核到模块组件全部是挂载式设计,这得益于Java语言的反射机制(JAVA从语言级就支持反射)。在介绍驱动开发之前有必要说明下IOC和DI。即所谓的依赖注入和控制反转,网络上有很多关于这两个技术的介绍,其实这是一种设计模式。(个人觉得IOC时DI的一种实现)。OpenTCS使...
2020-03-13 20:50:20 4456
原创 OpenTCS打造移动机器人交通管制系统(二)
OpenTCS从使用上来说主要分为三个模块(基于4.17版本的系统)。分为:openTCS-Kernel:交通管制的内核系统,主要算法均集中在此模块。openTCS-KernelControlCenter:内核配置的桌面图形化窗口系统,主要是对驱动进行设置。openTCS-PlantOverview:建模用的的图形化桌面程序。主要用于创建地图模型和做简单的监控。桌面软件均使用JAV...
2020-03-07 17:15:12 4317 9
原创 OpenTCS打造移动机器人交通管制系统(一)
OpenTCS是一个存在已经很久的开源的交通管制系统,之前一直没有认真研究,最近由于项目需要,着重研究了下此系统,发现内核设计的的确不错。本文记录本人在使用OpenTCS二次开发过程中的一些琐事,供有需要的工程师参考。首先要使用OpenTCS,首先要具备JAVA语言的开发能力,JAVA是一门非常优秀的语言,用户数量庞大.........首先我们从官网下载源码(目前的最新版本为v4.1...
2020-03-03 16:22:02 4438 3
原创 对角安装的双舵轮AGV运动学核心算法
我们在控制移动机器人时,比较核心和基础的问题是机构的运动学建模,一般常规可看到的AGV都是差速轮的机构,此种机构控制较为简单,运动学算法也很容易。但是此种结构的AGV不适合在重载的场合,抗打滑的性能也较为不理想。双舵轮的AGV能有效的弥补上述问题,这种双舵轮的AGV一般使用对角安装的方式安装,具有很高的灵活性,不仅承载能力强,而且可以全向移动,是一种非常不错的重载AGV机构方案,在...
2019-11-27 19:01:52 11408 8
转载 MatLab求解线性方程
MatLab求解线性方程 Matlab中solve函数主要是用来求解线性方程组的解析解或者精确解。对于得出的结果是符号变量,可以通过vpa()得出任意位数的数值解!solve函数的语法定义主要有以下四种:solve(eq)solve(eq, var)solve(eq1, eq2, …, eqn)g = solve(eq1, eq2, …, eqn, var1, var2
2013-06-18 15:34:27 2013
原创 opencv2.3结合MFC显示图像
2.3没有了Cvvimage类,要显示图像需要自己手动编写实现代码了。实际上就是运用了之前的代码,通过新加一些函数,手动构造CvvImage类实现图像的显示。现在贴出代码如下:#pragma once/* CvvImage class definition *//*来自xlh的技术博客 头文件*/#include"opencv.hpp"class CvvImage{
2013-06-05 10:33:35 1046
原创 flash下载网络图片
as3.0加载网络图片代码import flash.display.Loader;import flash.net.URLLoader;var loader:Loader = new Loader();loader.contentLoaderInfo.addEventListener(Event.COMPLETE,OnLoad);loader.load(new URLReque
2013-06-03 22:14:12 715
转载 opencv之求直线的角度
opencv之求直线的角度,这也是《learning opencv》中第六章的练习5 #include #include #include #include using namespace std;const CvSize size = cvSize(200,200);const int aperture[] = {3,5,9,11,13,17};int m
2013-05-23 11:19:22 8309
原创 VB与Flash交互
VB6+AS2测试环境VB调用FLASH中的函数Private Sub but1_Click(Index As Integer)MYFLASH.CallFunction ""End Sub//下面是AS2.0的function win():Void{ gotoAndPlay(2);//跳到第二帧 stop(); };flash.
2013-05-19 00:17:31 1038
原创 Opencv值傅里叶变换及逆变换
傅里叶变换,直接出Opencv代码。关于傅里叶变换可以参考下本文:http://www.docin.com/p-270840680.html#include #include #include #include #pragma comment(lib,"cv.lib")#pragma comment(lib,"highgui.lib")#pragma comment
2013-05-18 18:45:35 1388
原创 opencv之基于颜色空间的投影追踪
直接上代码。本例程是基于直方图反向投影的颜色追踪#include#include#include#pragma comment(lib,"cv.lib")#pragma comment(lib,"cxcore.lib")#pragma comment(lib,"cvaux.lib")#pragma comment(lib,"highgui.lib")
2013-05-04 23:34:24 949
原创 opencv之灰度图强角点检测
本文需要了解的库函数:void cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, CvArr* temp_image, CvPoint2D32f* corners, int* corner_count, doub
2013-05-02 16:25:26 969
原创 opencv之高斯模型分离背景
两部曲:1、创建高斯模型2、更新高斯模型#pragma comment(lib,"cv.lib")#pragma comment(lib,"cvaux.lib")#pragma comment(lib,"highgui.lib")#pragma comment(lib,"cxcore.lib")#include#include#include#include #inc
2013-05-01 10:16:34 906
原创 opencv之分水岭实现图像分割
本文需要了解的库函数有:void cvWatershed( const CvArr* image, CvArr* markers );//分水岭算法分割图像void cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta,
2013-04-30 22:40:56 1372
原创 opencv之矩形物体检测
本文需要了解的库函数有:CvSeq* cvApproxPoly( const void* src_seq, int header_size, CvMemStorage* storage, int method, double parameter, int parameter2=0 ); //用指定的精度逼近多边形曲线double cvConto
2013-04-30 18:44:34 3877
原创 opencv之金字塔实现图像分割
本文需要了解的库函数有:void cvPyrSegmentation( IplImage* src, IplImage* dst, CvMemStorage* storage, CvSeq** comp, int level, double threshold1, double threshol
2013-04-30 13:05:19 900
原创 opencv之运动目标动作分割
本文所需要了解的库函数有:void cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst );//计算两个数组差的绝对值void cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi, doubl
2013-04-29 15:25:37 1947
原创 opencv之形态学操作
本文需要了解的库函数有://创建结构元素IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y, int shape, int* values=NULL );
2013-04-28 22:44:37 527
原创 opencv之2D点集最小外包矩形和圆形
本文需要了解的库函数如下:CvBox2D cvMinAreaRect2( const CvArr* points, CvMemStorage* storage=NULL );int cvMinEnclosingCircle( const CvArr* points, CvPoint2D32f* center, float* radius );void cvBoxPoints( Cv
2013-04-28 21:41:21 2837
原创 opencv之拉普拉斯边缘锐化
opencv之拉普拉斯边缘锐化void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size=3 ); //计算图像的laplace变换算子要求所有输入和输出图像都必须是单通道的,并且具有相同的图像尺寸或者ROI尺寸。为防止溢出,当输入图像是 8 位的,要求输出图像是 16 位的。可以用函数 cvConvertScale 或
2013-04-28 16:56:43 3465
原创 opencv之聚类算法
算法介绍:k-means 算法接受参数 k ,然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高,而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间
2013-04-28 13:52:18 3854
转载 opencv之卡尔曼滤波
卡尔曼滤波器结构体typedef struct CvKalman{ int MP; /* 测量向量维数 */ int DP; /* 状态向量维数 */ int CP; /* 控制向量维数 */ /* 向后兼容字段 */#if 1
2013-04-27 22:55:44 842
原创 opencv例程之哈夫直线变换
所用库函数CvSeq* cvHoughLines2( CvArr* image, void* line_storage, int method, double rho, double theta, int threshold, double param1=0, double param2=0 );
2013-04-26 20:36:52 1590
原创 opencv例程之椭圆拟合
所用库函数如下://拷贝序列中的元素到一个连续的内存块中 void* cvCvtSeqToArray( const CvSeq* seq, void* elements, CvSlice slice=CV_WHOLE_SEQ );//对给定的一组二维点集作椭圆的最佳拟合(最小二乘意义上的)回的结构与 cvEllipse 中的意义类似,除了 size 表示椭圆轴的整
2013-04-26 15:32:46 1725
原创 opencv例程之彩色图像的分割
彩色图像的分割所用库函数如下://连通域数据结构定义typedef struct CvConnectedComp{ double area; /* area of the connected component */ CvScalar value; /* average color of the connected component */ CvR
2013-04-25 23:11:27 1383 2
原创 opencv例程之人脸检测
人脸检测所用到的库函数如下//从文件中打开对象void* cvLoad( const char* filename, CvMemStorage* memstorage=NULL, const char* name=NULL, const char** real_name=NULL );//人脸检测用于打开训练数据,用法如:cascade = (CvHa
2013-04-25 17:12:04 880
原创 opencv例程之图像的距离变换
distrans.c所用到的库函数如下:今天的主角:cvDistTransform//二值化分割图像void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type );//计算输入图像的所有非零元
2013-04-25 13:13:53 620
转载 最大类间差法求阈值(OTSU算法)
otsu算法OTSU算法也称最大类间差法,有时也称之为大津算法,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味
2013-04-25 09:57:17 3755
原创 Halcon函数总结(八)
fill_up(Region : RegionFillUp : : ) //填充region中的孔fill_up_shape(Region : RegionFillUp :Feature,Min,Max : ) //填充指定形状特征的孔例程:process_shape_model.hdev ball_seq.hdev===========
2013-04-24 23:49:02 3125
原创 Halcon函数总结(七)
fast_threshold(Image : Region :MinGray,MaxGray,MinSize : )//快速阈值select_shape_std(Regions : SelectedRegions :Shape,Percent : ) //选择指定形状的regionsmallest_rectangle2(Regions : : : Row,Colu
2013-04-22 22:56:22 2954
FLASH CS4中需要用到的toplevel.cs文件
2013-05-19
COM技术连接Access数据库
2013-04-09
COM接口访问Access数据库
2013-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人