一维弦EwayOS培训材料课件_第1页
一维弦EwayOS培训材料课件_第2页
一维弦EwayOS培训材料课件_第3页
一维弦EwayOS培训材料课件_第4页
一维弦EwayOS培训材料课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一维弦一维弦 EwayOS介绍1、LowLevelAI2、Sensor3、HighLevelAI4、Sensor介绍:如图所示,EwayOS基于Linux内核进行的机器人操作系统;EwayStdudio是基于EwayOS进行的部署、二次开发等接口内容。0 01 1LowLevelAI介绍LowLevelAI:1、控制算法与通信协议分离2、使用回调传输数据严格控制延迟3、OS内统一坐标系计量单位4、基于URDF的统一机器人模型描述库LowLevelAI(简称LowAI)主要是机器人各个物理硬件的控制和反馈中心,由于机器人会由不同的设备、传感器接入,需要有一个统一的接口与他们对接,LowAI就起到

2、了这个作用。LowLevelAI:1、LowAI通过以太网(TCP协议)链接下位机,控制机器人各运动电机运动,开始运动下位机向LowAI反馈运动状态2、LowAI接收Function发送的机器人运动控制,LowAI向Function反馈运动执行状态。3、LowAI将运动反馈信息以共享内存的形式提交给SensorLowLevelAI(简称LowAI )为EwayOS的运动控制模块。运动控制模块连接下位机直接控制机器人各运动电机进行运动。0 02 2Sensor介绍Sensor:Sensor用于机器人感知世界,特点是1、数据量大,大约约在600M/S;2、计算量大,针对这些数据在短时间内进行分析计

3、算;3、需要较快的替换算法库。Sensor:Sensor是EwayOS中的感知层,Sensor接受HighLevelAI连接,开启机器人感知功能,根据机器人的传感器获取的数据运行算法进行运算,将计算结果发送至Function,由Function进行处理.1、Sensor与HighAI通过命令广播相连2、LowAI将运动反馈信息以共享内存的形式提交给Sensor3、Sensor将识别/检测数据直接传送给FunctionSensor:1、采用数据仓储模式进行传输,每个Elem只传递内存指针;2、回调方式进行消息传递,只有当上一个Elem接收到数据后,才传递到下一个Elem上;3、基于引脚名称模块自

4、动组合,可以快速的替换不同的算法库;4、支持分布式部署,为将来的扩展作准备。Sensor:ElementElement机制机制Sensor将多个算法拆分成为多个Element,每一个Element负责处理一部分运算。每一个Element由多个输入引脚(InputPin)、多个输出引脚(OutputPin)及消息输出(FeatureCode)组成。一个Element至少拥有InputPin、OutPinPin及FeatureCode其中任意的一个。Sensor:ElementElement机制机制InputPin负责接收输入数据,OutPinPin负责讲计算结果输出至下级Element。Feat

5、ure负责生成发送至Function的消息数据。每一个InputPin及OutPinPin均有个子的名称。Sensor框架在加载Element时根据每个Pin的名称自主进行拼接,拼接时一个InputPin只能连接一个OutPutPin,一个OutPutPin可连接多个InputPin。对应的Pin连接成功后,OutputPin输出的数据会立刻被InputPin收到。Element定义Pin及Feature使用宏定义的方式。Sensor:Element_ExampleElement_ExampleDeclare_Element_ID(2f1f7297-438d-4674-a8b4-a9982d5

6、21134) /定义Element ID,使用GUID,各Element不可重复Declare_Feature_Code(51) /定义输出Feature 51,(具体宏定义请参见FuncSDK)Declare_Feature_None /定义此Element无Feature输出Declare_Input_Pin_Start /InputPin定义开始Declare_Input_Pin(1,Example Element Input 1,false,EwayOS:CvMatBridge) /定义1号输入引脚,1为InputPin ID(同一Element下的InputPin ID不可重复),E

7、xample Element Input 1为此InputPin 的名称,框架拼接Element的Pin完全根据Pin的名称,相同即为可连,名称大小写敏感。false说明此引脚不是必须引脚,最后声明此引脚输入的数据类名,(数据类必须继承CEwayData)。Declare_Pin_End /InputPin定义结束Declare_Output_Pin_Start /OutputPin定义开始Declare_Output_Pin(1,Example Element Output 1,EwayOS:CvMatBridge) /定义1号输出引脚,1为OutputPin ID(同一Element下的O

8、utputPin ID不可重复),Example Element Output 1为此Output Pin 的名称,最后声明此引脚输出的数据类名。Declare_Pin_End /OutputPin定义结束Declare_Feedback_Start /保留功能eclare_FeedBack_End /保留功能Declare_Element_Implement(CExampleElement) /框架代码Sensor:ElementElement连接机制连接机制Sensor框架运行后,根据-t参数传入的文件名遍历此文件夹下的所有可用Element。当Sensor收到ActiveFeature指

9、令后检测本地是否存在拥有此FeatureCode的Element,若存在则开始连接流程。连接时以一个Element开始,遍历其所有InputPin,根据名称查找本地或网络内是否存在与其名称相同的OutputPin,若存在则加载该Element并将此InputPin及OutputPin进行连接。之后继续遍历,直至所有激活的Element的InputPin均配对成功,则该Feature激活成功。对于不必须InputPin,连接是框架会检测此引脚对应的输出引脚是否已激活,若已激活,则将此对引脚连接,若未激活,则不进行连接。若待连接的Element不在本机,框架会自动使用TCP/IP远程调用Eleme

10、nt,传输数据。Sensor t Elem fc 51存放Elem文件夹FeactureCode0 03 3HighLevelAI介绍HighLevelAI:1、HighLevelAI为EwayOS中的消息分发模块。2、HighAI 进程接受 Sensor 的广播消息,等待 Function 的请求,Function 可以向 HighAI 请求某个 Feature3、Function 进程可以向 HighAI 请求所需 Feature ,之后连接所请求的 Feature,获取所需 Feature 的消息。0 04 4Function介绍Function:Function是EwayOS中的具体功

11、能层。1、Function连接HighLevelAI获取机器人检测消息。2、Function连接LowLevelAI获得机器人运动控制3、Sensor根据机器人的传感器获取的数据运行算法进行运算,将计算结果发送至FunctionFunction是为了解决某个具体的问题而进行的分析、计算、规划运动等组成部分,它的设计其实就是消息队列,在预期的时间内处理预期的消息,进行机器人控制Function:1、消息驱动框架2、多级模块调用3、模块独立消息队列,自成体系4、封装各类机器人算法库、应用库Function:Message机制机制Function内部使用MessageList机制,所有消息(包含Hi

12、ghLevelAI检测到的周边数据,LowLevelAI发送的运动数据以及Function内部的Timer数据、自定义消息数据)均按到达时间及优先级加入一个消息队列,每个Function内部均存在在一个消息处理线程,该线程读取此消息列表,串行处理各消息。对于自定义消息,首先定义消息码,FunMsg_User之后的数字均可使用。之后在cpp文件中添加消息响应函数,最后在cpp文件中BEGIN_FIFEMSG_MAP与END_FIFMSG_MAP宏之间添加消息映射。Example:在头文件中添加#define MuFunMsg FunMsg_User+1eint OnMyMessage(eint&

13、amp; nMsgCode,edouble& dTimeStamp,eint& nParam1,eint& nParam2);MSG_FIFMAP(MuFunMsg,OnMyMessage)/在.cpp文件中END_FIFMSG_MAP前添加END_FIFMSG_MAPFunction:Feature机制机制Feature为Function向HighLevelAI请求某项识别、检测功能所使用。Function欲开启某项识别或检测功能时,需在Initialize时或Function运行的任何时间内调用RequestFeature请求Feature。Example:eint

14、 TestApp:Initialize(std:vector &vFeatureList,ebool& bLimbAuthority, edouble &dTimeOut) vFeatureList.push_back (SysCom_ID_LMsg_ArmPos); return ERR_NONE;Function:Feature机制机制请求成功后Function模块即会收到对应的识别、检测消息,此时框架回调用CheckMessageCode回调询问处理方式。代表处理方式,可选如下值:MsgProcCode_Ignore (0),本模块忽略此消息。MsgProcCod

15、e_Notify (1),当收到此消息时,框架将调用对应的Pro函数通知模块处理。MsgProcCode_Record (2),当收到此消息时,框架将数据存储,模块需要获得数据时调用相应的GetMsgData函数获取数据。 若不设定返回值,统一按MsgProcCode_Ignore处理Function:Feature机制机制!注意1、所有请求成功的Feature应在不需要该功能时再次调用RequestFeature关闭。2、关闭Feature应在JobStart后,在调用Uninitialize前。在不需要该功能时随时关闭,若本Function模块可被父Function强制关闭,则应在Proc

16、CloseCmd中关闭Feature。3、若请求Feature成功后HighLevelAI掉线,Function不需重新请求Feature,框架会在HighLevelAI上线后自动重新请求。4、若在Function请求Feature成功后,由于Sensor原因造成Feature检测错误,Function会收到ProcFeatureStatus回调。Function:目前支持的FeatureCode。消息标识消息标识(FeatureCode)消息类型消息类型概述概述SysCom_ID_Vision_Marker(51)CMarkerMessageMarker识别数据SysCom_ID_Visio

17、n_Object(52)CObjectMessage物体识别数据SysCom_ID_Vision_Face(53)CFaceMessage人脸识别数据SysCom_ID_Voice_Speech(9050)CVoiceMessage语音识别数据SysCom_ID_LMsg_Sonar(10052)CSonarMsg声纳检测到障碍的数据SysCom_ID_LMsg_RobPos(10053)CBotPosMessage机器人位置变化SysCom_ID_LMsg_ArmPos(10054)CArmPosMessage机器人手臂位置变化SysCom_ID_LMsg_HeadPos(10055)CHe

18、adPosMessage机器人头部位置变化SysCom_ID_LMsg_Battery(10059)CBatteryMsg机器人电池状态SysCom_ID_LMsg_PSU(10061)CPSUMsg机器人供电模块状态SysCom_ID_LMsg_Laser(10060)CLaserScanMessage机器人激光数据SysCom_ID_LMsg_IMU(10058)CIMUMessage机器人IMU数据Function:Initialize机制机制Function在启动时必须要初始化资源,等资源初始化完成之后,系统会调入JobStart函数,开始Function真正的工作。Initializ

19、e为Function初始化函数,它有三个参数,FeatureList(需要申请的资源列表)、LimbAuthority(机器人肢体控制权)和TimeOut(Function等待框架处理申请的时间(s)。用户需要填入本Function能正常运行所需要的所有Feature和Limb请求权限,等系申请成功后会自动调入JobStart中,如果系统没有申请成功且TimeOut没有赋值,则Function会处于一直等待的状态;如果申请没有成功但TimeOut有赋值,则会在等待时间后进入JobFailed。Initialize_Example:eint TestApp:Initialize(std:vect

20、or &vFeatureList,ebool& bLimbAuthority, edouble &dTimeOut) vFeatureList.push_back (SysCom_ID_LMsg_ArmPos); bLimbAuthority = true; dTimeOut = 20;/等待JobStart的时间 return ERR_NONE;Function:Command机制机制Command为Function向LowLevelAI发送运动指令,控制机器人运动所使用。Command欲控制机器人运动时,可调用Send系列函数发送运动命令。LowLevelAI收到S

21、end系列控制函数后,首先检查权限,权限正常后及发送返回值至Function,运动函数返回,此时机器人还未开始运动,之后LowLevelAI开始规划运动轨迹,发送电机指令控制机器人运动。当指令发送完毕,等待下位机执行结束后,LowLevelAI会发送CommandDone消息至Function,通知Function该指令执行完毕。Function使用CmdSN识别CommandDone与之前发送的运动指令。eint WheelStraight:ProcMotCmdDone(edouble dTimeStamp,CCmdDoneMessage* piCmdDone)/ if(SysCom_ID_

22、LCmd_WheelStraight = piCmdDone-m_nCmdID)/判断是否是自己发送的命令 if(ERR_NONE = piCmdDone-m_nCmdStatus) /判断命令执行的结果 ewayos:Log:WriteLog (LogInfo, wheel命令执行成功。); std:coutCmdendstd:endl; else ewayos:Log:WriteLog (LogError, wheel命令执行失败); std:coutCmdfailstd:endl; Function:子子Function机制机制Function模块共有两种编写方式,一种生成独立app(e

23、make -t fapp)或编译为lib库(emake -t flib),当编译为lib库时,该Function可作为子Function被其它Function调用(app及lib均可)。调用方式为父Function调用AddChildFun函数,参数传入被调用lib库名去掉lib前缀及.so后缀。框架会自动实例化该子Function模块,将其连入HighLevelAI及LowLevelAI,子Function可获取消息数据,可发送肢体控制指令控制机器人运动。Kid_Example:EGUID gGuid;eint nLoadResult = AddChildFun (RobotMove, &a

24、mp;gGuid, );if(ERR_NONE != nLoadResult) OSG_WriteLog (LogError, 加载子Function出错,错误值:%d, nLoadResult);Function:子子Function机制机制子Function退出可选择两种方式,主动退出或被动退出。主动退出为子Function任务执行完毕,关闭Feature及肢体控制权,显式调用FunQuit函数通知父Function退出。调用FunQuit后,框架回调用子Function的Uninitialize函数,之后关闭消息处理线程,子Function退出。框架会调用父Function的ProcCh

25、ildFunQuit回调通知父Function。被动退出为父Function调用PostStopCmdToAllChildFun或PostStopCmdToChildFunByID函数通知子Function退出,框架会调用子Function的ProcCloseCmd回调通知子Function,此时子Function应立刻关闭Feature及肢体控制权,关闭timer,尽快调用FunQuit退出。调用FunQuit之后的流程与主动退出相同。Kid_Example:eint CFeedbackMove:ProcCloseCmd(edouble dTimeStamp,CCloseMessage* p

26、iCloseCmd) OSG_WriteLog(LogInfo, father close); FunQuit (); return ERR_NONE;Function:Timer机制机制Function可使用SetTimer函数开关计时器,参数为间隔ms数。当间隔时间到达后,框架会向Function消息队列中插入一条Timer事件,当消息处理线程处理此消息时,会调用ProcTimer函数进行处理。注:注:此Timer为非精准Timer,时间间隔为传递消息的最小时间间隔。若由于程序问题造成消息处理线程响应不及时,可能会造成Timer事件在队列中累计,出现一个时段无ProcTimer,另一时段ProcTimer函数频繁调用。eint WheelMotorSpeed:ProcTimer(edouble dTimeStamp) WheelMove(0.3,0.3);void WheelMotorSpeed:JobStart()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论