机器人示教运动控制方法和系统与流程

文档序号:12810106阅读:1020来源:国知局
机器人示教运动控制方法和系统与流程

本发明涉及机器人控制技术领域,特别是涉及一种机器人示教运动控制方法和系统。



背景技术:

robotoperatingsystem(ros)是开源的机器人操作系统,可以为机器人开发者提供一个标准化的、开源的编程框架。但是ros目前不支持实时线程操作。openrobotcontrolsoftware(orocos)也是一种开源的机器人控制软件编程框架,它的特点是支持实时的线程操作,但是它的开放性,通用性没有ros好。

因此,机器人示教运动是机器人一种重要运动方式,目前在一些应用方案中,在ros上采用orocos,但现有技术方案在搭建的架构上,不能构成一个完整的机器人控制器软件,在执行示教运动时,无法充分利用ros和orocos的特性,系统开发成本高,控制效果差。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种机器人示教运动控制方法,降低系统开发成本,提高控制效果。

一种机器人示教运动控制方法,包括:

接收控制端传送的示教运动指令;其中,所述示教运动指令包括起始点和运动方向;

根据机械臂末端的起始点和移动方向计算出该方向上的工作区域边缘位置,并将该边缘位置上的点作为运动终点,根据所述示教运动指令的状态以及所述运动终点,调用相应的速度规划算法规划示教运动轨迹;

计算机械臂各个关节在所述示教运动轨迹上运行时各个位置的目标角度、目标角速度和目标角加速度,并将该目标角度、目标角速度和目标角加速度发送给设备通信软件进行记录。

一种机器人示教运动控制系统,包括:总控模块、算法模块和通信管理模块;

所述总控模块,用于接收控制端传送的示教运动指令;其中,所述示教运动指令包括起始点和运动方向;

所述算法模块,用于根据机械臂末端的起始点和移动方向计算出该方向上的工作区域边缘位置,并将该边缘位置上的点作为运动终点,根据所述示教运动指令的状态以及所述运动终点,调用相应的速度规划算法规划示教运动轨迹;计算机械臂各个关节在所述示教运动轨迹上运行时各个位置的目标角度、目标角速度和目标角加速度,并将该目标角度、目标角速度和目标角加速度;

所述通信管理模块,用于对所述目标角度、目标角速度和目标角加速度进行记录。

上述机器人示教运动控制方法和系统,接收控制端传送的示教运动指令后,根据示教运动指令计算示教的运动轨迹,并实时计算机械臂各个关节在该运动轨迹上运行的目标角度、目标角速度和目标角加速度等状态参数,通过设备通信软件将上述状态参数进行记录,实现对机器人的示教运动控制过程;该技术方案可以构成一个完整的机器人示教运动控制系统,降低机器人控制系统开发成本,提高控制效果。

附图说明

图1是本发明实施例的机器人示教运动控制方法流程图;

图2是机器人示教运动控制系统结构示意图;

图3是总控模块执行算法流程图;

图4是算法模块执行算法流程图;

图5为经典的s型速度规划的行程,速度,加速度,加速度的导数曲线图;

图6为s型速度规划的参数计算流程图;

图7为s型速度规划算法整个流程图;

图8为实时停止s型速度规划算法流程图;

图9是一应用实例的机器人控制系统的硬件结构模型;

图10是基于ros和orocos的搭建的软件架构图;

图11是控制器状态机的状态变化示意图;

图12是设备状态机的状态变化示意图。

具体实施方式

下面结合附图阐述本发明的机器人示教运动控制方法的实施例。

本发明实施例中,所述示教运动,是指用户输入起始点和移动方向,机械臂一直沿该方向一直移动,直到用户下达切换移动方向或者已经到达边工作区域缘为止,在该过程中,记录机械臂的每一时刻的运动指令。

参考图1所示,图1是本发明实施例的机器人示教运动控制方法流程图,包括:

s10,接收控制端传送的示教运动指令;其中,所述示教运动指令包括起始点和运动方向;

在上述步骤中,可以利用预设的通信协议并以异步远程过程调用的方式接收示教运动指令;例如,所述示教运动指令包括起始点θ0和运动方向;

在此过程中,可以是操作者通过人机交互界面生成示教运动指令,该指令无需传递参数;通过预设的通信协议,如基于iec(theinternetcommunicationsengine,互联网通信引擎)开发的通信协议,以异步远程过程调用的方式从人机交互界面接收示教运动指令。

s20,根据机械臂末端的起始点和移动方向计算出该方向上的工作区域边缘位置,并将该边缘位置上的点作为运动终点,根据所述示教运动指令的状态以及所述运动终点,调用相应的速度规划算法规划示教运动轨迹;

在一个实施例中,在接收到所述示教运动指令后,异步触发示教运动执行函数并通过第一接口调用示教运动规划函数;其中,所述第一接口是基于ros上创建orocos的实时输入/输出接口;

进一步的,调用示教运动规划函数前,通过示教运动执行函数判断控制器状态机是否为准备(ready)状态;若是,通过orocos的operationalcaller方法调用所述示教运动规划函数,并将控制器状态机切换为执行示教运动(active.hands)状态;若否,则拒绝执行此次指令;其中,所述控制器状态机的可被改变状态、并读取状态,设有初始化、指令等待、指令执行、中断和使能对应的状态。

进一步地执行所述示教运动规划函数,根据起始点和移动方向计算出该方向上的工作区域边缘位置,并将该边缘位置上的点作为运动终点;在调用示教运动规划函数后,根据所述示教运动规划函数执行示教运动规划流程,并检查控制器状态机是否为执行示教运动状态;若是,执行所述计算示教的运动轨迹的步骤,否则,退出执行流程。

s30,计算机械臂各个关节在所述示教运动轨迹上运行时各个位置的目标角度、目标角速度和目标角加速度,并将该目标角度、目标角速度和目标角加速度发送给设备通信软件进行记录。

具体的,根据所述示教运动指令及所述运动终点规划示教运动轨迹,并计算机械臂各个关节在所述示教运动轨迹上运行的各个位置的目标角度、目标角速度和目标角加速度,通过第二接口将所述目标角度、目标角速度和目标角加速度发送给设备通信软件进行记录;其中,所述第二接口是基于ros上创建orocos的实时输入/输出接口;

在一个实施例中,如果当前没有新指令输入,且机械臂没有运动到边界;

则调用s型速度规划算法规划示教运动轨迹;每隔设定时间τ依据分别计算一次机械臂各个关节的目标角度、目标角速度和目标角加速度;

将所述目标角度、目标角速度和目标角加速度发送给设备通信软件;

设备通信软件进行记录。

作为另一个实施例,若接收到停止指令或者机械臂已到达边界;

则调用实时停止s型速度规划算法规划示教运动轨迹;每隔设定时间τ依据分别计算一次机械臂各个关节的目标角度、目标角速度和目标角加速度;

将所述目标角度、目标角速度和目标角加速度发送给设备通信软件;

设备通信软件进行记录。

进一步地,若接收到改变方向指令;

则调用实时停止s型速度规划算法规划示教运动轨迹;每隔设定时间τ依据分别计算一次机械臂各个关节的目标角度、目标角速度和目标角加速度;直至机械臂停止;

在机械臂停止后,将当前点作为起始点,依据移动方向计算出该方向上的工作区域边缘位置,并将该点作为终点,重新计算工作区域边缘位置。

在上述规划示教运动轨迹,可以采用s型速度规划算法和实时停止s型速度规划算法,算法解析如下:

(1)所述s型速度规划算法的行程包括三个阶段:

加速阶段:加速度会从0开始,以恒定的比例线性增加到最大值,然后下降到0;

匀速阶段:保持匀速运动;

减速阶段:由所述匀速开始减速,最终速度和加速度回到0。

(2)所述实时停止s型速度规划算法过程包括:

当机械臂运行到t时刻时,0<t<t,在当前的运行状态下规划出一段机械臂平稳运行且速度最快的减速阶段;t为示教运动轨迹运动时间。

上述实施例的技术方案,利用orocos的实时输入/输出接口,通过设定通信协议以异步远程过程调用的方式接收示教运动指令,启动示教运动指令触发函数,调用机器人运动规划的示教运动执行函数,根据该函数计算示教的运动轨迹,并实时计算机械臂各个关节在该运动轨迹上运行的目标角度、目标角速度和目标角加速度等状态参数,通过设备通信软件将上述状态参数进行记录,实现对机器人的示教运动控制过程;该技术方案可以进行控制指令的接收、解析,算法调用、执行,参数实时计算和传输等功能,可以构成一个完整的机器人示教运动控制系统,降低机器人控制系统开发成本,提高控制效果。另外结合了控制器状态机和标志位的应用,实现对算法处理过程的优化控制,进一步提高了控制效果。

针对于机器人示教运动控制方法,本发明提供了该控制方法对应的机器人示教运动控制系统,

参考图2所示,图2是机器人示教运动控制系统结构示意图,包括:总控模块、算法模块和通信管理模块;

所述总控模块,用于接收控制端传送的示教运动指令;其中,所述示教运动指令包括起始点和运动方向;

所述算法模块,用于根据机械臂末端的起始点和移动方向计算出该方向上的工作区域边缘位置,并将该边缘位置上的点作为运动终点,根据所述示教运动指令的状态以及所述运动终点,调用相应的速度规划算法规划示教运动轨迹;计算机械臂各个关节在所述示教运动轨迹上运行时各个位置的目标角度、目标角速度和目标角加速度,并将该目标角度、目标角速度和目标角加速度;

所述通信管理模块,用于对所述目标角度、目标角速度和目标角加速度进行记录。

在一个实施例中,所述总控模块通过第一接口与算法模块进行通信连接,算法模块通过第二接口与通信管理模块进行通信连接,所述第一接口、第二接口是基于ros上创建orocos的实时输入/输出接口;

所述总控模块接收控制端传送的示教运动指令后;异步触发示教运动执行函数并通过第一接口调用示教运动规划函数;

所述算法模块执行所述示教运动规划函数,计算边缘位置上的点作为运动终点;并通过第二接口将所述目标角度、目标角速度和目标角加速度;

所述通信管理模块将所述目标角度、目标角速度和目标角加速度进行记录。

上述实施例的技术方案,利用orocos的实时输入/输出接口,总控模块通过设定通信协议以异步远程过程调用的方式接收示教运动指令,启动示教运动指令触发函数,调用算法模块的机器人运动规划的示教运动执行函数,根据该函数计算示教的运动轨迹,并实时计算机械臂各个关节在该运动轨迹上运行的目标角度、目标角速度和目标角加速度等状态参数,通信管理模块将上述状态参数进行记录,实现对机器人的示教运动控制过程;该技术方案可以进行控制指令的接收、解析,算法调用、执行,参数实时计算和传输等功能,可以构成一个完整的机器人示教运动控制系统,降低机器人控制系统开发成本,提高控制效果。

作为实施例,总控模块执行算法流程,可以参考图3所示,图3是总控模块执行算法流程图;具体如下:

1)操作者通过人机交互界面生成示教运动指令,指令的内容,包括起始点和移动方向。

2)示教运动指令通过通信协议,以异步远程过程调用的方式从人机交互界面发送给总控模块。

3)指令到达总控模块后,会异步触发示教运动执行函数。该函数首先判断控制器状态机是否为ready状态。若不是ready状态,则拒绝执行此次指令。

4)若控制器状态机是ready状态,则执行如下操作:

a)则通过orocos的operationalcaller方法调用算法模块的示教运动规划函数,并且传递指令参数。

b)将控制器状态机转换为active.ptp状态。

作为实施例,算法模块执行算法流程,可以参考图4所示,图4是算法模块执行算法流程图;具体如下:

1)示教运动规划函数被总控模块调用,开始执行示教运动规划流程。

2)检查控制器状态机是否为active.hands状态,若不是则退出。

3)根据起始点和移动方向计算出该方向上的工作区域边缘位置,并将该点作为终点。

4)如果已到达边界或者接收到停止指令:

a)调用实时停止s型速度规划算法轨迹规划算法,规划示教运动轨迹;

b)每隔1毫秒计算一次机械臂每个关节的目标角度,目标角速度和目标角加速度;

c)将机械臂每个关节的目标角度,目标角速度和目标角加速度,发送给通信管理模块;

d)记录当前的运动指令。

5)如果是改变方向指令:

a)调用实时停止s型速度规划算法轨迹规划算法,规划示教运动轨迹;

b)每隔1毫秒计算一次机械臂每个关节的目标角度,目标角速度和目标角加速度;

c)将机械臂每个关节的目标角度,目标角速度和目标角加速度,发送给通信管理模块;

d)记录当前的运动指令。

e)如果已停止,将当前点作为起始点,依据移动方向计算出该方向上的工作区域边缘位置,并将该点作为终点;重复上述过程。

6)如果没有新指令输入,也没有到边界:

a)调用s型速度规划算法轨迹规划算法,规划示教运动轨迹;

b)每隔1毫秒计算一次机械臂每个关节的目标角度,目标角速度和目标角加速度;

c)将机械臂每个关节的目标角度,目标角速度和目标角加速度,发送给设备通信模块;

d)记录当前的运动指令。

所述通信管理模块,可以进一步用于读取机器人电机的状态信息,根据机器人运动模型计算机器人机械臂的状态信息,将机器人的状态信息通过第三接口反馈给总控模块,将机器人的状态信息通过第二接口反馈给算法模块;其中,所述电机的状态信息包括位置、速度和力矩等;所述机械臂的状态信息包括关节角度、关节角速度、关节角加速度、末端位姿、末端线速度、末端角速度、末端线加速度和末端线加速度等。

对于s型和实时停止s型速度规划算法的原理分别如下:

1、s型速度规划算法:

图5为经典的s型速度规划的行程,速度,加速度,加速度的导数曲线图;在s型速度规划算法中,一般会有以下假设:

jmin=-jmaxamin=-amaxvmin=-vmax

min和max分别表示为最小值和最大值。

s型速度规划中整个行程的时间t可分为3个阶段:

加速阶段:t∈[0,ta],在这阶段中,加速度会从0开始,以恒定的jmax比例线性增加到最大值然后有下降回0。

匀速阶段:t∈[ta,ta+tv],此阶段保持匀速。

减速阶段:t∈[ta+tv,t],其中t=ta+tv+td,此阶段是跟加速度阶段相反的减速阶段,最终加速度回到0。

其中我们定义:

tj1:在加速阶段中,jerk保持恒定(jmax/jmin)的时间段;

tj2:在减速阶段中,jerk保持恒定(jmax/jmin)的时间段;

ta:加速阶段;

tv:匀速阶段;

td:减速阶段;

t:总用时;

加速阶段最大加速度;

减速阶段最小加速度;

vlim:最大速度;

q0:初始行程;

q1:终点行程;

v0:初始速度;

v1:终点速度;

a0:初始加速度;

a1:终点加速度;

由此可知,s型速度规划的特定是能够使得机械臂平滑加速到最大运行速度,然后又平滑地减速,而且总体用时最少。在我们实际使用中,一般会令到起点和终点的速度,加速度都为0,即v0=v1=0,v0=v1=0,下文我们都会采用这作为默认条件以简化公式。

在进行轨迹规划前,需要计算出曲线的参数,图6为s型速度规划的参数计算流程图,定义为算法.1。其中:

t=ta+td+tv

t0=0,t1=tj1,t2=ta-tj1,t3=ta

t4=ta+tv,t5=t4+tj2,t6=tv-tj2,t7=tv(7)

参考图7,图7为s型速度规划算法整个流程图,定义为算法.2,其中:

由上可知,因为s型速度规划需要给定起始点的坐标,而在示教功能中,终点并不能提前知道,所以s型速度规划并不能直接应用于示教功能的轨迹规划中。

2、实时停止s型速度规划算法:

参考图8,图8为实时停止s型速度规划算法流程图,定义为算法.3;利用上述s型速度规划算法进行机械臂轨迹规划,当运行到t时刻,0≤t≤t时,需要让机械臂停止下来。此时需要算法在当前的运行状态下马上规划出一段合适的减速阶段,令机械臂能够平稳并且迅速地停止下来,算法如下:

(1)如果t∈[t0,t1);

(2)如果t∈[t1,t2);

(3)如果t∈[t2,t3);

q1=q1-vlimtv

t4=t3,t5=t5-tv,t6=-tv+t6,t7=-tv+t7,t=t7,tv=0(11)

(4)如果t∈[t3,t4);

上述为实时停止s型速度规划算法具体流程。

为了更加清晰本发明的实施例的技术方案,下面阐述采用本发明的硬件和软件环境应用实例:

参考图8所示,图8是一应用实例的机器人控制系统的硬件结构模型,在机器人控制器的搭建软件架构,运行于linux操作系统,该linux主机可以是x86架构的pc机,或者arm芯片嵌入式架构的开发板,总控模块接入控制端的人机交互界面的控制指令。

linux主机可以安装如下软件:安装xenomai或者rtai或者rtpreempt的实时内核补丁;安装ros,orocos,rfsm等软件。

参考图9所示,图9是基于ros和orocos的搭建的软件架构图;在控制过程中,操作系统上运行总控模块、算法模块和通信管理模块。

1、对于总控模块:

(1)总控模块使用ros的orocreate-catkin-pkg方法创建ros的package,记为ec_control_system,然后在package中,通过继承orocos的rtt::taskcontext类,记为ec_control_system_component。

在ec_control_system_component类的构造函数中,设置为执行如下操作:

a)利用orocos的rtt::input与rtt::output方法,对模块的输入,输出接口进行定义。

其中输入的接口包括:

①通信管理模块传入的诊断数据;

②通信管理模块传入的状态反馈信息:包括电机运行状态等等;

③控制器状态机的状态;

输出的接口包括:

①控制器状态机事件触发,输出给控制器状态机。

b)利用orocos的operationalcaller方法设置函数调用接口。

第一,设置事件报告的回调函数:对事件报告处理请求进行响应,包括生成错误的时间戳,事件级别等信息,并将事件信息,发送给人机交互界面显示。

第二,设置警报设置的回调函数:依据诊断信息,判断是否生成警报。比如,位置,速度,加速度是否超限等等。

第三,设置各种运动规划的控制指令触发函数,这些函数将对算法模块的相应响应函数进行调用。

c)调用orocos的properties方法定义总控模块的属性,将总控模块定义一个机械臂关节个数的属性。

(2)在ec_control_system_component的starthook()成员函数中,设置执行如下操作:

a)检查日志报告是否正常,若异常直接退出,并将相关信息通过事件报告接口传递给总控模块处理;

b)通过ice开发的通信协议建立与人机交互界面的通信连接,调用通信协议提供的动态异步远程过程调用(rpc)方法,对人机交互界面发起的控制指令进行响应的回调函数进行绑定。该回调函数,首先根据ice(theinternetcommunicationsengine,互联网通信引擎)提供的远程过程异步调用方法传入的第一个参数,判断调用类型,然后依据此类型选择调用相应运动规划的运动指令触发函数。

(3)对于ec_control_system_component的cleanuphook()成员函数,为了使得该函数在总控模块结束运行时,实现自动调用,还可以设置为执行如下操作:

a)调用ice开发的通信协议接口,关闭与人机交互界面的通信连接。

(4)对于控制器状态机,参考图10所示,图10是控制器状态机的状态变化示意图;可以设置init、ready、fault、active.recovery、active.halt、active.hands、active.tozero、active.ptp、active.line、active.circle、active.stop共十一个状态,分别代表初始化、等待指令输入、恢复、暂停、手动示教、回到原点、点到点运动、直线运动、圆弧运动、急停状态。其中,active.recovery、active.halt、active.hands、active.tozero、active.ptp、active.line、active.circle、active.stop这八个状态组成一个active状态的集合,active的状态转移规则,对八个子状态均有效。例如,给八个状态中的任一个,写入“e_ready”事件,将控制器状态机的状态从当前状态转移到ready状态(即等待指令输入状态)。

另外,还可以使用lua语言,编写总控模块的启动文件,该启动文件设置为执行如下动作:

a)通过orocos的import方法,加载模块进行运行;

b)定义模块的刷新频率,线程的优先级别;

c)对模块的属性进行赋值;

d)通过orocos的connect方法,将总控模块的输入、输出接口和算法模块和通信管理模块的接口建立连接。

e)通过orocos的start方法,运行总控模块,总控模块将先调用starthook()函数,然后按预设刷新频率,实时地周期性调用updatehook()函数。

2、对于算法模块:

算法模块使用ros的orocreate-catkin-pkg方法创建ros的package,记为ec_control_loop,然后在package中,通过继承orocos的rtt::taskcontext类,记为ec_control_loop_component。

(1)在ec_control_loop_component类的构造函数中,设置为执行如下操作:

a)算法模块利用orocos的rtt::input与rtt::output方法,对输入,输出接口进行定义。

其中输入的接口包括:

①通信管理模块传入的电机运行数据;

②通信管理模块传入的诊断数据;

③设备状态机的状态;

④控制器状态机的状态;

输出的接口包括:

①电机控制指令数据,输出给设备通信模块;

②设备状态机事件触发,输出给设备状态机;

③控制器状态机事件触发,输出给控制器状态机。

b)利用orocos的operationalcaller方法设置函数调用接口,设置事件报告的接口:该接口将触发总控模块的事件报告处理函数设置各种运动规划的返回原点指令响应函数。

c)调用orocos的properties方法定义算法模块的属性,算法模块定义一个机械臂关节个数的属性。

(2)在ec_control_loop_component的starthook()成员函数中,设置为执行如下操作:

a)检查日志报告是否正常,若异常直接退出,并将相关信息通过事件报告接口传递给总控模块处理;

b)检查电机运行数据通道是否有数据,若无数据直接退出,并将相关信息通过事件报告接口传递给总控模块处理。

(3)对于ec_control_loop_component类的updatehook()成员函数,设置该函数在算法模块运行时,按照用户设定的频率实时运行(如设为100hz),可以设置为执行如下操作:

a)读取控制器状态机状态;

b)根据控制器状态机的不同状态,执行不同操作:

ⅰ、如果是点到点运动,直线运动,圆弧运动,手动示教,急停,回到原点状态。此时,执行如下操作:

如果指令缓冲区的控制指令个数小于20个,则将所有指令一起发送给通信管理模块,并将控制器状态机的状态改变为等待指令输入状态;

如果指令缓冲区的控制指令个数大于20个,则取指令队列末尾的20个,发送给通信管理模块;

ⅱ、如果是暂停状态,则什么也不做。

(4)对于ec_control_loop_component类,定义点到点运动,直线运动,圆弧运动,手动示教,急停,回到原点,暂停,恢复等函数调用接口,实现如下:

a)点到点运动,直线运动,圆弧运动,手动示教,回到原点的函数,内部实现如下:

检查控制器状态机是否处于等待指令输入状态。如果不是则退出,并将相关信息通过事件报告接口传递给总控模块处理;

读取电机的当前的状态信息;

依据电机的当前状态,分别调用点到点运动,直线运动,圆弧运动,手动示教,回到原点的运动规划,并将生成的电机控制指令保存到指令缓冲区;

将控制器状态机设为相应的状态。比如点到点运动回调函数,则将控制器状态机设为点到点运动状态。

b)暂停函数,内部实现如下:

检查控制器状态机是否是点到点运动,直线运动,圆弧运动,手动示教,回到原点等状态。如果不是则退出,并将相关信息通过事件报告接口传递给总控模块进行处理;

记录当前控制器状态机的当前状态,并将控制器状态机的状态转变为暂停状态。

c)恢复函数,内部实现如下:

检查控制器状态机是否是暂停状态。如果不是则退出,并将相关信息通过事件报告接口传递给总控模块处理;

将控制器状态机的状态转变为暂停前的状态。

d)急停函数,内部实现如下:

ⅰ、检查控制器状态机是否是点到点运动,直线运动,圆弧运动,手动示教,回到原点等状态。如果不是则退出,并将相关信息通过事件报告接口传递给总控模块处理;

ⅱ、读取电机的当前的状态信息;

ⅲ、将电机控制指令缓冲区清零;

ⅳ、调用速度规划运动规划,让电机以最短时间,速度降为0,并将生成的电机控制指令保存到指令缓冲区。

(5)使用lua语言,编写算法模块的启动文件,设置为执行如下动作:

a)通过orocos的import方法,加载算法模块;

d)定义算法模块的刷新频率,线程的优先级别;

c)对算法模块的属性进行赋值;

d)通过orocos的connect方法,将算法模块的输入,输出接口和总控模块和通信管理模块的接口建立连接。

e)通过orocos的start方法,运行算法模块,算法模块先调用starthook()函数,然后按设置的刷新频率,实时地周期性调用updatehook()函数。

3、对于通信管理模块:

通信管理模块可以通过linux主机minicom中的ttyacm0与arm开发板通信,可以在该arm开发板上运行一个canopen主站协议,该主站协议可以设置一个指令缓存区,最多可以存储25个指令。

通信管理模块可以利用orocos的rtt::input与rtt::output方法与机器人算法模块和总控模块进行通信。

利用rfsm软件建立设备状态机,对通信管理模块的业务逻辑进行控制。

通信管理模块利用orocos的rtt::input与rtt::output方法与设备状态机连接,可改变设备状态机的状态,并读取状态。

(1)通信模块使用ros的orocreate-catkin-pkg方法创建为ros的package,然后在package中,通过继承orocos的rtt::taskcontext类,创建一个orocos的实时模块,记为ec_component。

在ec_component类的构造函数中,设置为执行如下操作:

a)通信管理模块利用orocos的rtt::input与rtt::output方法,对输入,输出接口进行定义。

其中输入的接口包括:

①算法模块传入的控制指令数据;

②设备状态机的状态;

输出的接口包括:

①诊断数据,输出至算法模块和总控模块;

②电机运行数据和机械臂状态数据,输出给算法模块;

③状态机事件触发,输出给设备状态机。

b)利用orocos的operationalcaller方法定义函数调用接口,通信管理模块定义事件报告的接口,通过该接口触发总控模块的事件报告处理函数。

c)调用orocos的properties方法定义通信管理模块的属性,通信管理模块定义一个机械臂关节个数的属性。

(2)在ec_component的starthook()成员函数中,设置为执行如下操作:

a)检查日志报告是否正常,若异常直接退出,并将相关信息通过事件报告接口传递给总控模块进行处理;

b)电机驱动初始化:

ⅰ、通过ttyacm0与电机驱动器建立通信;

ⅱ、电机指令缓冲队列清空;

ⅲ、电机使能,如果使能成功,则进行下一步,否则退出;

ⅳ、读取电机的位置,计算机器人的机械臂当前状态,包括关节角度,机械臂末端位姿;

c)机械臂状态初始化:

依据电机位置,判断机械臂是否需要执行回零运动。如果机械臂任一关节角度与零度相差大于0.01度,则执行回零运动,调用点到点运动规划,对回零运动进行规划。

d)改变设备状态机的状态:

如果机器人的机械臂需要执行回零运动,则控制设备状态机保持init状态不变;否则,向设备状态机发送“e_nominal”事件,将设备状态机的状态转换为active.nominal。

(3)对于ec_component的updatehook()成员函数,设置该函数在通信管理模块运行时,以用户设定的频率实时运行(如设为1khz),设置为执行如下操作:

a)读取设备状态机状态;

b)根据设备状态机的不同状态,执行不同操作:

ⅰ、如果是init状态,执行机械臂的回零运动。此时,执行如下操作:

读取系统的时钟,依据回零运动轨迹规划结果,计算该时刻电机的运动指令,并将该单条运动指令发送给canopen主站。

如果运动已回零成功,向设备状态机发送“e_nominal”事件,将设备状态机转换为active.nominal,并将该事件报告给总控模块。

ⅱ、如果是active.nominal状态。此时,执行如下操作:

从控制指令数据的输入通道中,读取控制指令,并存储到电机指令缓冲队列中。

读取canopen主站指令缓冲区的现有指令个数,如果小于10个,则一次性从电机指令缓冲队列中取出15个运动指令发送给canopen主站。如果电机指令缓冲队列的指令个数小于15个,则一次性全部发送给canopen主站。

ⅲ、如果是active.recovery状态。此时,通信管理模块处于恢复状态。

此时,依据诊断信息,对系统状态进行恢复,若恢复成功,向设备状态机发送“e_nominal”事件,将设备状态机转换为active.nominal。并将该事件报告给总控模块。

若恢复不成功,给状态机发送“e_fault”事件,状态机转换为fault状态,将该事件报告给总控模块,并直接退出updatehook()。

ⅳ、如果是active.halt状态。此时,模块处于暂停状态,执行如下操作:检查控制指令数据的输入通道中是否有新的指令,若有新指令,则读取控制指令,并存储到电机指令缓冲队列中。

ⅴ、如果是active.hands状态。此时,模块处于手控模式,执行如下操作:

读取系统的时钟,依据运动轨迹规划结果,计算该时刻电机的运动指令,并将该单条运动指令发送给canopen主站。

ⅵ、如果是fault状态,则直接退出updatehook()。

c)读取电机状态,根据机械臂的模型计算机械臂关节以及末端运动状态信息,并通过输出数据通道,传递给算法模块与总控模块;

d)检查控制主站是否有错误报告信息,如果有错误信息,则将诊断信息传递给算法模块与总控模块。向设备状态机发送“e_recovery”事件,将设备状态机转换为active.recovery状态、并将该事件报告给总控模块。

(4)对于ec_component的cleanuphook()成员函数,该函数在模块结束运行时,自动调用,设置执行如下操作:

a)关闭电机驱动使能;

b)关闭电机驱动连接。

(5)参考图11所示,图11是设备状态机的状态变化示意图。共有init(初始化)、fault(中断),active.recovery(恢复)、active.hands(手动示教)、active.halt(暂停)、active.nominal(运转)六个状态。active.recovery、active.hands、active.halt、active.nominal四个状态组成一个active(使能)的状态集合,active的状态转移规则,对四个子状态均有效。

(6)使用lua语言,编写该模块的启动文件,该启动文件设置执行如下动作:

a)通过orocos的import方法,加载通信管理模块;

b)定义通信管理模块的刷新频率,线程的优先级别;

c)对通信管理模块的属性进行赋值;

d)通过orocos的connect方法,将通信管理模块的输入,输出接口和总控模块和算法模等的接口建立连接。

e)通过orocos的start方法,运行通信管理模块,通信管理模块先调用starthook()函数,然后按定义好的刷新频率,实时地周期性调用updatehook()函数。

对于上述总控模块、算法模块和通信管理模块,设置为当运行后,如果用户需要中途停止该模块,同时按键盘的ctrl键与d键。

综上实施例,基于ros和orocos,利用orocos的实时性特点,保证软件程序的实时性能;充分利用ros的开放性,基于ros、orocos开发的总控模块、算法模块和通信管理模块进行实时通信,共同构成一个完整的机器人控制器软件;进一步建立了控制器状态机和设备状态机,从而实现对总控模块、通信管理模块的业务逻辑进行有效管理。

通过orocos的rtt::input,rtt::output方法建立总控模块、算法模块和通信管理模块的数据输入、输出通道,通过orocos的operationalcaller方法定义函数调用接口,通过orocos的properties方法定义总控模块、算法模块和通信管理模块的属性。因此,保证了总控模块、算法模块和通信管理模块之间的独立性与解耦性。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1