全向机器人开发指南.docx

上传人:b****5 文档编号:5630906 上传时间:2022-12-29 格式:DOCX 页数:23 大小:27.89KB
下载 相关 举报
全向机器人开发指南.docx_第1页
第1页 / 共23页
全向机器人开发指南.docx_第2页
第2页 / 共23页
全向机器人开发指南.docx_第3页
第3页 / 共23页
全向机器人开发指南.docx_第4页
第4页 / 共23页
全向机器人开发指南.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

全向机器人开发指南.docx

《全向机器人开发指南.docx》由会员分享,可在线阅读,更多相关《全向机器人开发指南.docx(23页珍藏版)》请在冰豆网上搜索。

全向机器人开发指南.docx

全向机器人开发指南

全向机器人开发指南

MT-ODRobot源程序采用COM接口,COM是一项功能强大的集成技术,它允许您在运行时将各种异构的软件部分混合起来。

COM使得开发人员可以编写出能够混合起来运行的软件,而不用担心诸如线程特性以及所用开发语言等问题。

COM协议将一个软件模块同另一个软件模块连接起来,然后其自身不再参与两者之间的通信过程。

当这种连接建立起来之后,两个模块之间就可以通过称为“接口”的机制来进行通信。

这些接口既不需要静态的或动态的链接入口点,也不需要硬编码的地址,而且不同于那些用于启动通信过程的一般COM函数。

下面详细介绍各种接口函数:

5.1系统函数接口描述

◆CreateDevice

Ø原型:

MT_EXPHERROR__stdcallCreateDevice(LPSTRpModule,IMTDevice*&prDevice);

Ø参数说明:

参数1为需要创建的设备名称;

如运动设备名称为:

MOTION,TCP/IP网络通讯客户端:

NETWORK_CLIENT、服务器端:

NETWORK_SERVER,UDP网络通讯客户端:

UDPVIDEO_CLIENT、服务器端:

UDPVIDEO_SERVER,超声:

MTULTRASONIC,PSD:

MTPSD,图像采集:

IMAGE_CAP_DS或IMAGE_CAP_DS_BALL,图像处理:

MT_IMAGE_PROCESS或MT_IMAGE_PROCESS_BALL,DIDO设备:

MTDIDO,码盘:

MTENCODER,语音:

MTVOICE

参数2为创建的设备接口;

Ø功能:

根据给定的设备名称创建对应设备,若创建成功,给传入的设备接口赋值。

◆AddMsgReceiver

Ø原型:

MT_EXPintAddMsgReceiver(IMTDevice*inReceiver);

Ø参数说明:

参数1为当前设备指针;

返回值为当前设备列表中的设备数;

Ø功能:

将当前设备加入用户程序的设备列表;

◆Broadcast

Ø原型:

MT_EXPboolBroadcast(MessageTinMessage,void*ioParam=0,void*ioParam2=0);

Ø参数说明:

参数1为预定消息,在此一般为NTY_MSG_DEV_PTR;

参数2为消息发送的目标设备;

参数3为用户程序的设备列表指针;

Ø功能:

将设备列表指针发送给指定目标设备,这样各设备之间可以实现互访。

◆IMTObject

接口原形:

interfaceIMTObject

{

virtualHERROR__stdcallQueryInterface(InterfaceID,LPVOID*)=0;

virtualvoid__stdcallAddRef()=0;

virtualvoid__stdcallRelease()=0;

};

所有部件基接口,客户可以使用该接口查询需要的目标接口,部件自己维护自身的生命周期,所有具体的底层部件必须实现该接口

接口描述:

ØQueryInterface

查询部件实现的接口。

参数1对应接口标识;

如运动接口标识为:

InterfaceID_MOTION,网络:

InterfaceID_NETWORK,

超声:

InterfaceID_ULTRASONIC,PSD:

InterfaceID_PSD,图像采集:

InterfaceID_IMAGECAPTURE或InterfaceID_IMAGECAPTURE_BALL,图像处理:

InterfaceID_IMAGE,DIDO设备:

InterfaceID_DIDO,码盘:

InterfaceID_ENCODER,语音:

MT_IID_Voice,云台控制:

InterfaceID_CAMERA,硬件自检:

InterfaceID_CHECK

参数2对应设备对象地址,若设备创建失败,返回NULL;

如:

定义:

IMTMotion*m_pMotion;

m_pMotion=NULL;

m_pDevMotion->QueryInterface(InterfaceID_MOTION,(LPVOID*)&m_pMotion);

ØAddRef

用户成功查询到一个,引用计数增1

ØRelease

用户不再需要使用该接口,引用计数减1

COM术语中有“类对象”(classobject)的概念,有时也被称为“类厂”(classfactory)。

精确地来讲,它实际上应该被称为“对象厂”(objectfactory)。

COM中的一个类对象代表了一个特定COM类的全局静态域。

其意义与MFC中的CRuntimeClass是等价的。

类对象之所以被称为类厂,其原因在于它实现了一个名为IClassFactory的特殊的COM接口。

因为我们无法直接调用目标类的构造函数,所以只能让组建模块来决定如何构造对象。

为此组建提供了类厂,从而将具体的创建步骤封装了起来。

◆IMTFactory

接口原形

interfaceIMTFactory

{

virtualHERROR__stdcallCreateObject(IMTObject*&)=0;

virtualvoid__stdcallRelease()=0;

};

接口描述:

ØCreateObject

工厂创建部件的标准方法

参数1为部件的接口指针的引用。

成功时指向刚创建的部件,否则返回NULL

ØRelease

用户不再需要使用该工厂接口,释放该工厂

◆IMTDEVFunc

接口原形

interfaceIMTDEVFunc

{

virtualHERROR__stdcallDevFunc(LPVOIDpParam)=0;

};

接口描述:

ØDevFunc

执行用户设定的命令,与特定的部件关联

参数1为与命令本体关联的设备

◆IMTDevice

接口原形

interfaceIMTDevice:

publicIMTObject

{

virtualHERROR__stdcallInit()=0;

virtualHERROR__stdcallPause()=0;

virtualHERROR__stdcallStart()=0;

virtualHERROR__stdcallEnd()=0;

virtualboolReceiveMessage(long,void*,void*)=0;

virtualboolBroadcast(MessageTinMessage,void*,void*)=0;

virtualHERROR__stdcallSetDevFunc(IMTDEVFunc*pDevFunc)=0;

virtualHERROR__stdcallReadSettings()=0;

virtualHERROR__stdcallWriteSettings()=0;

};

接口描述:

ØInit

初始化部件;

ØPause

将部件转换到暂时停止转态;

ØStart

启动设备;

ØEnd

将部件转换到停止转态;

ØReceiveMessage

处理接收到的消息及相应参数指针;

参数1为预定义的消息值;

参数2和参数3为需要传递的参数指针;

ØBroadcast

向当前设备列表发送消息及相应参数指针;

参数1为预定义的消息值;

参数2和参数3为需要传递的参数指针;

ØSetDevFunc

把指定命令对象绑定到当前设备;

ØReadSettings

获取设备上次的配置参数;

ØWriteSettings

保存设备上次的配置参数;

5.2设备接口参考说明

5.2.3网络模块接口

◆IMTNetwork接口

使用前,需先使用SetParam函数配置网络工作参数,然后调用Init初始化网络环境,再用Start函数启动。

可以调用Send函数,发送数据到指定的IP地址。

函数列表

ØGetParam:

获得当前该设备的工作参数

●原型:

NET_DESC__stdcallGetParam()

●返回类型:

NET_DESC

●备注:

获得当前该设备的工作参数。

这些参数包括IP地址、端口号、缓冲区大小等参数

ØSetParam

●原型

virtualvoid__stdcallSetParam(constNET_STRU&)

●参数说明

NET_STRU&:

设备工作参数,包括IP地址、端口和缓冲区长度。

●备注

设置特定的网络的参数,必须在Init前调用。

ØInit

●备注

初始化网络工作环境,并改变设备的状态为DEVICE_INIT。

在调用该函数前,必须调用SetParam来配置网络参数。

然后,可以调用Start函数来启动网络模型。

如果成功,返回0。

ØStart

●备注

设备状态切换到DEVICE_RUNNING。

在设备启动后,就可以用Send函数发送数据,同时,自动接收客户端发送的数据。

之后,调用Pause可以暂停设备运行,也可调用End终止设备运行。

ØPause

●备注

暂停网络设备运行,并将设备状态切换到DEVICE_PAUSE。

该函数必须在设备初始化或运行时调用,否则将返回错误编码。

在该函数调用后,可调用Start到启动设备继续运行,也可调用End函数终止设备运行。

ØEnd

●备注

结束网络设备,并将设备状态切换到DEVICE_RAW。

调用该函数后,终止网络设备的运行。

如果想要再次启动设备,必须先调用Init对设备初始化后,才能调用Start函数来启动设备。

ØSend

●原型

HERROR__stdcallSend(LPSTR,LPSTR,LONG)

●参数说明

a)LPSTR:

指定对方的IP地址

b)LPSTR:

用户需要传送的字符数据

c)LONG:

 用户需要传送的字符数据长度

●备注

该函数向指定的地址发送数据。

如果发送成功,返回0,否则,返回错误的编码值。

该函数只有在网络启动后,才会有效,也就是必须在Start函数后,才可调用。

ØResponseRecvEvent:

设定事件处理过程(接收到数据)

●原   型

void__stdcallResponseRecvEvent(PEVENTPROC,LONG)

 

●参数说明:

a)PEVENTPROC:

传入一个函数指针。

该函数接收到事件后,交由该指针指向的函数处理。

PEVENTPROC原型定义如下:

   typedefbool(*PEVENTPROC)(LONGnOwner,void*lpReturn)

b)LONG:

 PEVENTPROC指向的函数所需的参数,一般为一个类或者结构的指针。

●备   注:

设定事件处理过程,接收到数据后,调用指定的函数处理。

PEVENTPROC为一个函数指针,指向处理事件的函数。

LONG为指向一个结构的指针。

该类或结构为PEVENTPROC指向的函数所需的参数。

结构参数

ØNET_STRU

●原型:

typedefstruct

{

charszAddrIP[32];

intnPort;

intnBufLen;

boolbSource;

}NET_DESC;

●说明:

szAddrIP:

指定IP地址

nPort:

   指定端口号

nBufLen:

 指定缓冲区大小

ØNETVIDEODATAFORMAT

●原型:

typedefstruct

{

unsignedshortnWidth;

unsignedshortnHeight;

}NETVIDEODATAFORMAT;

●说明:

nWidth:

像素宽

nHeight:

像素高

5.2.4图像采集接口

◆IMTImageCapture

利用DirectShow来驱动WDM摄像设备,完成对视频的采集。

函数列表

ØBindCapWnd

●原型

HERROR__stdcallBindCapWnd(HWNDhWnd)

●参数说明

hWnd:

要绑定的窗口的句柄

●备注

将视频输出绑定到指定的窗口上。

ØBindStillWnd

●原型

HERROR__stdcallBindStillWnd(HWNDhWnd)

●参数说明

hWnd:

要绑定的窗口的句柄

●备注

将静态图的抓拍输出绑定到指定的窗口。

ØCapStill

●原型

HERROR__stdcallCapStill(intlWidth,intlHeight)

●参数说明

lWidth:

窗口宽

lHeight:

窗口高

●备注

抓拍当前图像帧,并在绑定窗口中显示。

ØGetDeviceName

●原型

short__stdcallGetDeviceName(char**pDevList)

●参数说明

摄像头设备名称列表指针

●备注

获取当前主机连接的摄像头设备名称列表指针

ØBindDevName

●原型

HERROR__stdcallBindDevName(char*strName,intm_nIndex)

参数说明

strName:

需要绑定的摄像头名称及通道。

m_nIndex:

通道

●备注

将当前设备绑定到指定摄像头。

ØInit

●原型

HERROR__stdcallInit()

●参数说明

●备注

ØStart

●原型

●参数说明

●备注

该函数将启动设备进行视频采集,并输出到由BindCapWnd函数指定

的窗口中,可以调用End函数终止采集。

在调用该函数前,确保设备

已经初始化,即已经调用过Init函数,否则将返回一个错误值。

ØEnd

●备注

该函数终止视频的采集。

但并不释放设备环境,之后,如果调用Start函数可以继续视频的采集。

ØSetVideoSettings

●原型

HERROR__stdcallSetVideoSettings(shortnWid,shortnHei,shortnFrameRate)

●参数说明

参数1为图像宽度象素大小;

参数2为图像高度象素大小;

参数3为图像采集帧率;

●备注

设置图像参数

结构参数

ØCAP_STRU

●原型

typedefstruct

{

WORDwWidth;

WORDwHeight;

intnFramePerSec;

}CAP_STRU;

●备注

wWidth:

图像的宽度(字节为单位)

wHeight:

图像的高度(字节为单位)

nFramePerSec:

每秒的帧数

◆IMTImageCaptureBall

利用DirectShow来驱动WDM摄像设备,完成对视频的采集,该接口主要用于比赛程序时使用,网络图像传输时需要使用IMTImageCapture。

函数列表

ØBindCapWnd

●原型

HERROR__stdcallBindCapWnd(HWNDhWnd)

●参数说明

hWnd:

要绑定的窗口的句柄

●备注

将视频输出绑定到指定的窗口上。

ØBindStillWnd

●原型

HERROR__stdcallBindStillWnd(HWNDhWnd)

●参数说明

hWnd:

要绑定的窗口的句柄

●备注

将静态图的抓拍输出绑定到指定的窗口。

ØCapStill

●原型

HERROR__stdcallCapStill(intlWidth,intlHeight)

参数说明

lWidth:

窗口宽

lHeight:

窗口高

●备注

抓拍当前图像帧,并在绑定窗口中显示。

ØGetDeviceName

●原型

short__stdcallGetDeviceName(char**pDevList)

●参数说明

摄像头设备名称列表指针

●备注

获取当前主机连接的摄像头设备名称列表指针

ØBindDevIndex

●原型

HERROR__stdcallBindDevIndex(intm_nIndex)

参数说明

m_nIndex:

通道

●备注

将当前设备绑定到指定摄像头。

ØCaptureImage

●原型

virtualvoid__stdcallCaptureImage(char*ImageBuffer)=0;

参数说明

ImageBuffer:

图像缓存

●备注

捕获一帧图像

ØInit

●原型

HERROR__stdcallInit()

●参数说明

●备注

ØStart

●原型

●参数说明

●备注

该函数将启动设备进行视频采集,并输出到由BindCapWnd函数指定

的窗口中,可以调用End函数终止采集。

在调用该函数前,确保设备

已经初始化,即已经调用过Init函数,否则将返回一个错误值。

ØEnd

●备注

该函数终止视频的采集。

但并不释放设备环境,之后,如果调用Start函数可以继续视频的采集。

ØSetVideoSettings

●原型

HERROR__stdcallSetVideoSettings(shortnWid,shortnHei,shortnFrameRate)

●参数说明

参数1为图像宽度象素大小;

参数2为图像高度象素大小;

参数3为图像采集帧率;

●备注

设置图像参数

结构参数

ØCAP_STRU

●原型

typedefstruct

{

WORDwWidth;

WORDwHeight;

intnFramePerSec;

}CAP_STRU;

●备注

wWidth:

图像的宽度(字节为单位)

wHeight:

图像的高度(字节为单位)

nFramePerSec:

每秒的帧数

5.2.5图像处理接口

◆Image接口

操作图像文件,如打开、关闭文件等操作。

函数列表

ØSetParam

●原型

HERROR __stdcall  SetParam(IMAGEPROC_DESC&)

●参数说明

IMAGEPROC_DESC&:

图像处理的参数设置

●备注

IMAGEPROC_DESC结构里,存储的是设备信息。

如设备长度、宽度。

使用该函数来格式化输出图像。

如果,设置的长、宽与原图像不相同,

则会把图像缩放。

ØBackupDIB

●原型

HERROR __stdcall BackupDIB();

●参数说明

●备注

复制当前图像数据到内存当中,在需要时,使用RestoreDIB把这些数据

还原到原图像。

一般情况下,在图像打开后,把图像备份。

图像经过

一些处理,如果处理失误,就可以把备份的图像数据还原。

ØRestoreDIB

●原型

HERRORRestoreDIB __stdcall RestoreDIB(BOOLbClear);

●参数说明

bClear:

TRUE表示清除备份的数据,FALSE表示保留备份数据

●备注

该函数将备份的图像还原,如果没有备份数据,则不做出反映。

通常,

在图像打开后,调用BackupDIB把图像备份。

图像经过一些处理,如果

处理失误,就可以把备份的图像数据还原。

ØCopyDIBObject

●原型

LPSTR__stdcall CopyDIBObject();

●参数说明

bClear:

TRUE表示清除备份的数据,FALSE表示保留备份数据

●备注

复制图像数据到一块内存区,并返回指向该内存的句柄。

该函数同

BackupDIB类似。

但比BackupDIB更加灵活。

BackupDIB复制的数据

的句柄是隐藏的,不能够对其进行操作。

而CopyDIBObject则是得到

当前图像数据的一个副本,并可对它进行处理。

ØLoadDIBFile

●原型

LPSTR __stdcall LoadDIBFile(char*lpFilePath);

●参数说明

lpFilePath:

需要处理的图像文件文件名

●备注

加载图像文件,并初始化IMTImage对像。

只有当调用了该函数后,

才可以进行后续处理,否则后续的调用将会返回错误信息。

ØSaveDIBToFile

●原型

HERROR __stdcall SaveDIBToFile(char*lpFilePath);

●参数说明

lpFilePath:

需要处理的图像文件文件名

●备注

将图像数据保存到参数中指定的文件,如果文件为空,将创建一个新文件,如果文件已经存在,将覆盖现有文件。

ØGetDIBPtr

●原型

LPSTR __stdcall    GetDIBPtr();

●参数说明

返回图像数据的指针。

●备注

得到图像的指针,该指针指向BITMAPINFOHEADER结构。

得到该指针后,就可以用它来进行自定义的操作。

如可以把它绘制在窗口上,或保存为文件。

ØGetWidth

●原型

LONG __stdcall     GetWidth();

●参数说明

返回图像的宽度。

●备注

获取图像的宽度值,该值是以实际的字节数计算的,并且必须是4的整倍数。

与图像的BITMAPINFOHEADER结构中保存的宽度值可能会不一样。

BITMAPINFOHEADER中保存的值是以像素数计算的,而一个像素可能会占用多个字节。

如8位图像,一个像素占用一个字节,24位图像,一个像素占用三个字节(B,G,R),即蓝、绿、红。

32位图像一个像素占用四个字节(B,G,R,A),即蓝、绿、红、透明度。

所以,计算图像的实际宽度时,

须用BITMAPINFOHEADER中的宽度乘以每像素的字节数,然后取其离4的整数次倍最近一个数。

并且它必须是大于或等于bi.biWidth。

ØGetHeight

●原型

LONG __stdcall     GetHeight();

●参数说明

返回图像的高度。

●备注

获取图像的高度值。

以字节数计算。

该值总是信任图像的BITMAPINFOHEADER结构中提供的高度值。

ØGetDIBSize

●原型

LONG __stdcall     GetDIBSize();

●参数说明

返回图像数据的大小。

●备注

获取图像数据部分的大小。

不包括BITMAPINFOHEADER结构和调色板数据。

采用公式:

biSize=biWidth'×biHeight。

其中biWidth'必须是4的整倍数,表示大于或等于biWidth,离4最近的整倍数。

请参见GetWidth函数。

ØPaintDib

●原型

HERROR   __stdcall PaintDib(HWNDhWnd);

●参数说明

hWnd:

窗体对像的指针。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1