版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一維弦 EwayOS第1頁,共37頁。介紹1、LowLevelAI2、Sensor3、HighLevelAI4、Sensor第2頁,共37頁。介紹:如圖所示,EwayOS基于Linux內核進行的機器人操作系統(tǒng);EwayStdudio是基于EwayOS進行的部署、二次開發(fā)等接口內容。第3頁,共37頁。01LowLevelAI介紹第4頁,共37頁。LowLevelAI:1、控制算法與通信協(xié)議分離2、使用回調傳輸數(shù)據(jù)嚴格控制延遲3、OS內統(tǒng)一坐標系計量單位4、基于URDF的統(tǒng)一機器人模型描述庫LowLevelAI(簡稱LowAI)主要是機器人各個物理硬件的控制和反饋中心,由于機器人會由不同的設備、傳
2、感器接入,需要有一個統(tǒng)一的接口與他們對接,LowAI就起到了這個作用。第5頁,共37頁。LowLevelAI:1、LowAI通過以太網(wǎng)(TCP協(xié)議)鏈接下位機,控制機器人各運動電機運動,開始運動下位機向LowAI反饋運動狀態(tài)2、LowAI接收Function發(fā)送的機器人運動控制,LowAI向Function反饋運動執(zhí)行狀態(tài)。3、LowAI將運動反饋信息以共享內存的形式提交給SensorLowLevelAI(簡稱LowAI )為EwayOS的運動控制模塊。運動控制模塊連接下位機直接控制機器人各運動電機進行運動。第6頁,共37頁。02Sensor介紹第7頁,共37頁。Sensor:Sensor用于
3、機器人感知世界,特點是1、數(shù)據(jù)量大,大約約在600M/S;2、計算量大,針對這些數(shù)據(jù)在短時間內進行分析計算;3、需要較快的替換算法庫。第8頁,共37頁。Sensor:Sensor是EwayOS中的感知層,Sensor接受HighLevelAI連接,開啟機器人感知功能,根據(jù)機器人的傳感器獲取的數(shù)據(jù)運行算法進行運算,將計算結果發(fā)送至Function,由Function進行處理.1、Sensor與HighAI通過命令廣播相連2、LowAI將運動反饋信息以共享內存的形式提交給Sensor3、Sensor將識別/檢測數(shù)據(jù)直接傳送給Function第9頁,共37頁。Sensor:1、采用數(shù)據(jù)倉儲模式進行傳
4、輸,每個Elem只傳遞內存指針;2、回調方式進行消息傳遞,只有當上一個Elem接收到數(shù)據(jù)后,才傳遞到下一個Elem上;3、基于引腳名稱模塊自動組合,可以快速的替換不同的算法庫;4、支持分布式部署,為將來的擴展作準備。第10頁,共37頁。Sensor:Element機制Sensor將多個算法拆分成為多個Element,每一個Element負責處理一部分運算。每一個Element由多個輸入引腳(InputPin)、多個輸出引腳(OutputPin)及消息輸出(FeatureCode)組成。一個Element至少擁有InputPin、OutPinPin及FeatureCode其中任意的一個。第11頁
5、,共37頁。Sensor:Element機制InputPin負責接收輸入數(shù)據(jù),OutPinPin負責講計算結果輸出至下級Element。Feature負責生成發(fā)送至Function的消息數(shù)據(jù)。每一個InputPin及OutPinPin均有個子的名稱。Sensor框架在加載Element時根據(jù)每個Pin的名稱自主進行拼接,拼接時一個InputPin只能連接一個OutPutPin,一個OutPutPin可連接多個InputPin。對應的Pin連接成功后,OutputPin輸出的數(shù)據(jù)會立刻被InputPin收到。Element定義Pin及Feature使用宏定義的方式。第12頁,共37頁。Senso
6、r:Element_ExampleDeclare_Element_ID(2f1f7297-438d-4674-a8b4-a9982d521134) /定義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
7、:CvMatBridge) /定義1號輸入引腳,1為InputPin ID(同一Element下的InputPin ID不可重復),Example Element Input 1為此InputPin 的名稱,框架拼接Element的Pin完全根據(jù)Pin的名稱,相同即為可連,名稱大小寫敏感。false說明此引腳不是必須引腳,最后聲明此引腳輸入的數(shù)據(jù)類名,(數(shù)據(jù)類必須繼承CEwayData)。Declare_Pin_End /InputPin定義結束Declare_Output_Pin_Start /OutputPin定義開始Declare_Output_Pin(1,Example Element
8、 Output 1,EwayOS:CvMatBridge) /定義1號輸出引腳,1為OutputPin ID(同一Element下的OutputPin ID不可重復),Example Element Output 1為此Output Pin 的名稱,最后聲明此引腳輸出的數(shù)據(jù)類名。Declare_Pin_End /OutputPin定義結束Declare_Feedback_Start /保留功能eclare_FeedBack_End /保留功能Declare_Element_Implement(CExampleElement) /框架代碼第13頁,共37頁。Sensor:Element連接機制S
9、ensor框架運行后,根據(jù)-t參數(shù)傳入的文件名遍歷此文件夾下的所有可用Element。當Sensor收到ActiveFeature指令后檢測本地是否存在擁有此FeatureCode的Element,若存在則開始連接流程。連接時以一個Element開始,遍歷其所有InputPin,根據(jù)名稱查找本地或網(wǎng)絡內是否存在與其名稱相同的OutputPin,若存在則加載該Element并將此InputPin及OutputPin進行連接。之后繼續(xù)遍歷,直至所有激活的Element的InputPin均配對成功,則該Feature激活成功。對于不必須InputPin,連接是框架會檢測此引腳對應的輸出引腳是否已激活
10、,若已激活,則將此對引腳連接,若未激活,則不進行連接。若待連接的Element不在本機,框架會自動使用TCP/IP遠程調用Element,傳輸數(shù)據(jù)。Sensor t Elem fc 51存放Elem文件夾FeactureCode第14頁,共37頁。03HighLevelAI介紹第15頁,共37頁。HighLevelAI:1、HighLevelAI為EwayOS中的消息分發(fā)模塊。2、HighAI 進程接受 Sensor 的廣播消息,等待 Function 的請求,F(xiàn)unction 可以向 HighAI 請求某個 Feature3、Function 進程可以向 HighAI 請求所需 Featur
11、e ,之后連接所請求的 Feature,獲取所需 Feature 的消息。第16頁,共37頁。04Function介紹第17頁,共37頁。Function:Function是EwayOS中的具體功能層。1、Function連接HighLevelAI獲取機器人檢測消息。2、Function連接LowLevelAI獲得機器人運動控制3、Sensor根據(jù)機器人的傳感器獲取的數(shù)據(jù)運行算法進行運算,將計算結果發(fā)送至FunctionFunction是為了解決某個具體的問題而進行的分析、計算、規(guī)劃運動等組成部分,它的設計其實就是消息隊列,在預期的時間內處理預期的消息,進行機器人控制第18頁,共37頁。Fun
12、ction:1、消息驅動框架2、多級模塊調用3、模塊獨立消息隊列,自成體系4、封裝各類機器人算法庫、應用庫第19頁,共37頁。Function:Message機制Function內部使用MessageList機制,所有消息(包含HighLevelAI檢測到的周邊數(shù)據(jù),LowLevelAI發(fā)送的運動數(shù)據(jù)以及Function內部的Timer數(shù)據(jù)、自定義消息數(shù)據(jù))均按到達時間及優(yōu)先級加入一個消息隊列,每個Function內部均存在在一個消息處理線程,該線程讀取此消息列表,串行處理各消息。對于自定義消息,首先定義消息碼,F(xiàn)unMsg_User之后的數(shù)字均可使用。之后在cpp文件中添加消息響應函數(shù),最后
13、在cpp文件中BEGIN_FIFEMSG_MAP與END_FIFMSG_MAP宏之間添加消息映射。Example:在頭文件中添加#define MuFunMsg FunMsg_User+1eint OnMyMessage(eint& nMsgCode,edouble& dTimeStamp,eint& nParam1,eint& nParam2);MSG_FIFMAP(MuFunMsg,OnMyMessage)/在.cpp文件中END_FIFMSG_MAP前添加END_FIFMSG_MAP第20頁,共37頁。Function:Feature機制Feature為Function向HighLeve
14、lAI請求某項識別、檢測功能所使用。Function欲開啟某項識別或檢測功能時,需在Initialize時或Function運行的任何時間內調用RequestFeature請求Feature。Example:eint TestApp:Initialize(std:vector &vFeatureList,ebool& bLimbAuthority, edouble &dTimeOut) vFeatureList.push_back (SysCom_ID_LMsg_ArmPos); return ERR_NONE;第21頁,共37頁。Function:Feature機制請求成功后Function
15、模塊即會收到對應的識別、檢測消息,此時框架回調用CheckMessageCode回調詢問處理方式。代表處理方式,可選如下值:MsgProcCode_Ignore (0),本模塊忽略此消息。MsgProcCode_Notify (1),當收到此消息時,框架將調用對應的Pro函數(shù)通知模塊處理。MsgProcCode_Record (2),當收到此消息時,框架將數(shù)據(jù)存儲,模塊需要獲得數(shù)據(jù)時調用相應的GetMsgData函數(shù)獲取數(shù)據(jù)。 若不設定返回值,統(tǒng)一按MsgProcCode_Ignore處理第22頁,共37頁。Function:Feature機制!注意1、所有請求成功的Feature應在不需要該
16、功能時再次調用RequestFeature關閉。2、關閉Feature應在JobStart后,在調用Uninitialize前。在不需要該功能時隨時關閉,若本Function模塊可被父Function強制關閉,則應在ProcCloseCmd中關閉Feature。3、若請求Feature成功后HighLevelAI掉線,F(xiàn)unction不需重新請求Feature,框架會在HighLevelAI上線后自動重新請求。4、若在Function請求Feature成功后,由于Sensor原因造成Feature檢測錯誤,F(xiàn)unction會收到ProcFeatureStatus回調。第23頁,共37頁。Fun
17、ction:目前支持的FeatureCode。消息標識(FeatureCode)消息類型概述SysCom_ID_Vision_Marker(51)CMarkerMessageMarker識別數(shù)據(jù)SysCom_ID_Vision_Object(52)CObjectMessage物體識別數(shù)據(jù)SysCom_ID_Vision_Face(53)CFaceMessage人臉識別數(shù)據(jù)SysCom_ID_Voice_Speech(9050)CVoiceMessage語音識別數(shù)據(jù)SysCom_ID_LMsg_Sonar(10052)CSonarMsg聲納檢測到障礙的數(shù)據(jù)SysCom_ID_LMsg_RobPo
18、s(10053)CBotPosMessage機器人位置變化SysCom_ID_LMsg_ArmPos(10054)CArmPosMessage機器人手臂位置變化SysCom_ID_LMsg_HeadPos(10055)CHeadPosMessage機器人頭部位置變化SysCom_ID_LMsg_Battery(10059)CBatteryMsg機器人電池狀態(tài)SysCom_ID_LMsg_PSU(10061)CPSUMsg機器人供電模塊狀態(tài)SysCom_ID_LMsg_Laser(10060)CLaserScanMessage機器人激光數(shù)據(jù)SysCom_ID_LMsg_IMU(10058)CIM
19、UMessage機器人IMU數(shù)據(jù)第24頁,共37頁。Function:Initialize機制Function在啟動時必須要初始化資源,等資源初始化完成之后,系統(tǒng)會調入JobStart函數(shù),開始Function真正的工作。Initialize為Function初始化函數(shù),它有三個參數(shù),F(xiàn)eatureList(需要申請的資源列表)、LimbAuthority(機器人肢體控制權)和TimeOut(Function等待框架處理申請的時間(s)。用戶需要填入本Function能正常運行所需要的所有Feature和Limb請求權限,等系申請成功后會自動調入JobStart中,如果系統(tǒng)沒有申請成功且Tim
20、eOut沒有賦值,則Function會處于一直等待的狀態(tài);如果申請沒有成功但TimeOut有賦值,則會在等待時間后進入JobFailed。Initialize_Example:eint TestApp:Initialize(std:vector &vFeatureList,ebool& bLimbAuthority, edouble &dTimeOut) vFeatureList.push_back (SysCom_ID_LMsg_ArmPos); bLimbAuthority = true; dTimeOut = 20;/等待JobStart的時間 return ERR_NONE;第25頁,
21、共37頁。Function:Command機制Command為Function向LowLevelAI發(fā)送運動指令,控制機器人運動所使用。Command欲控制機器人運動時,可調用Send系列函數(shù)發(fā)送運動命令。LowLevelAI收到Send系列控制函數(shù)后,首先檢查權限,權限正常后及發(fā)送返回值至Function,運動函數(shù)返回,此時機器人還未開始運動,之后LowLevelAI開始規(guī)劃運動軌跡,發(fā)送電機指令控制機器人運動。當指令發(fā)送完畢,等待下位機執(zhí)行結束后,LowLevelAI會發(fā)送CommandDone消息至Function,通知Function該指令執(zhí)行完畢。Function使用CmdSN識別C
22、ommandDone與之前發(fā)送的運動指令。eint WheelStraight:ProcMotCmdDone(edouble dTimeStamp,CCmdDoneMessage* piCmdDone)/ if(SysCom_ID_LCmd_WheelStraight = piCmdDone-m_nCmdID)/判斷是否是自己發(fā)送的命令 if(ERR_NONE = piCmdDone-m_nCmdStatus) /判斷命令執(zhí)行的結果 ewayos:Log:WriteLog (LogInfo, wheel命令執(zhí)行成功。); std:coutCmdendstd:endl; else ewayos:
23、Log:WriteLog (LogError, wheel命令執(zhí)行失敗); std:coutCmdfailstd:endl; 第26頁,共37頁。Function:子Function機制Function模塊共有兩種編寫方式,一種生成獨立app(emake -t fapp)或編譯為lib庫(emake -t flib),當編譯為lib庫時,該Function可作為子Function被其它Function調用(app及l(fā)ib均可)。調用方式為父Function調用AddChildFun函數(shù),參數(shù)傳入被調用lib庫名去掉lib前綴及.so后綴??蚣軙詣訉嵗撟覨unction模塊,將其連入Hig
24、hLevelAI及LowLevelAI,子Function可獲取消息數(shù)據(jù),可發(fā)送肢體控制指令控制機器人運動。Kid_Example:EGUID gGuid;eint nLoadResult = AddChildFun (RobotMove, &gGuid, );if(ERR_NONE != nLoadResult) OSG_WriteLog (LogError, 加載子Function出錯,錯誤值:%d, nLoadResult);第27頁,共37頁。Function:子Function機制子Function退出可選擇兩種方式,主動退出或被動退出。主動退出為子Function任務執(zhí)行完畢,關閉
25、Feature及肢體控制權,顯式調用FunQuit函數(shù)通知父Function退出。調用FunQuit后,框架回調用子Function的Uninitialize函數(shù),之后關閉消息處理線程,子Function退出。框架會調用父Function的ProcChildFunQuit回調通知父Function。被動退出為父Function調用PostStopCmdToAllChildFun或PostStopCmdToChildFunByID函數(shù)通知子Function退出,框架會調用子Function的ProcCloseCmd回調通知子Function,此時子Function應立刻關閉Feature及肢體控
26、制權,關閉timer,盡快調用FunQuit退出。調用FunQuit之后的流程與主動退出相同。Kid_Example:eint CFeedbackMove:ProcCloseCmd(edouble dTimeStamp,CCloseMessage* piCloseCmd) OSG_WriteLog(LogInfo, father close); FunQuit (); return ERR_NONE;第28頁,共37頁。Function:Timer機制Function可使用SetTimer函數(shù)開關計時器,參數(shù)為間隔ms數(shù)。當間隔時間到達后,框架會向Function消息隊列中插入一條Timer事件,當消息處理線程處理此消息時,會調用ProcTimer函數(shù)進行處理。注:此Timer為非精準Timer,時間間隔為傳遞消息的最小時間間隔。若由于程序問題造成消息處理線程響應不及時,可能會造成Timer事件在隊列中累計,出現(xiàn)一個時段無ProcTimer,另一時段ProcTimer函數(shù)頻繁調用。eint WheelMotorSpeed:ProcTimer(edouble dTimeStamp) WheelMove(0.3,0.3);void WheelMotorSpeed:JobStart() SetTimer(500); return ;第29頁,共37頁。WEBUI:使用手機或帶有wi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024生鮮乳電商平臺定制購銷及品牌推廣合同3篇
- 二手店鋪過戶協(xié)議模板版B版
- 二零二五年度豪華酒店建筑工程施工總承包合同2篇
- 二零二五年度安置房項目環(huán)保驗收合同6篇
- 二零二五年海洋平臺用鋼板租賃服務協(xié)議3篇
- 二零二五年度高等教育機構教師聘期管理勞動合同范本3篇
- 二零二五年食品安全生產責任賠償合同3篇
- 武漢工貿職業(yè)學院《珠寶商務》2023-2024學年第一學期期末試卷
- 二零二五年度智能安防產品集成與調試合同3篇
- 2024銅門制安工程物流服務合同
- 小學四年級數(shù)學知識點總結(必備8篇)
- GB/T 893-2017孔用彈性擋圈
- GB/T 11072-1989銻化銦多晶、單晶及切割片
- GB 15831-2006鋼管腳手架扣件
- 醫(yī)學會自律規(guī)范
- 商務溝通第二版第4章書面溝通
- 950項機電安裝施工工藝標準合集(含管線套管、支吊架、風口安裝)
- 微生物學與免疫學-11免疫分子課件
- 《動物遺傳育種學》動物醫(yī)學全套教學課件
- 弱電工程自檢報告
- 民法案例分析教程(第五版)完整版課件全套ppt教學教程最全電子教案
評論
0/150
提交評論