本發明屬于傳感器應用開發,特別是涉及一種智能控制器的多傳感器接入與數據管理微架構系統。
背景技術:
1、當前,跨域異構自主機器人系統所面對的問題涉及傳感器技術的多樣性和復雜性,以及與軟硬件集成相關的挑戰。這些問題在以下幾個方面表現出來:
2、首先是傳感器的多樣性和差異性:不同機器人系統使用各種不同類型的傳感器,如攝像頭、激光雷達、超聲波傳感器、慣性測量單元等。這些傳感器不僅在類型上不同,還在數據格式和接口方面存在顯著的差異。這使得將它們集成到一個統一的控制器平臺上變得復雜,需要解決各種適配和數據處理問題。
3、其次是機器人系統的結構多樣性:機器人系統的結構和體形可能差異巨大,因此在將它們的軟硬件組件相互融合時需要解決適配問題。不同機器人可能采用不同的結構布局和動力系統,這增加了集成的復雜性。
4、最后還有傳統軟硬件集成的挑戰:傳統的軟硬件集成方式在面對這些差異性時變得困難。開發者通常需要針對不同的傳感器硬件逐個進行適配,這不僅增加了開發成本,還降低了開發效率。
5、為了應對這些挑戰,本發明提出了一種智能控制器的多傳感器接入與數據管理微架構系統的概念。
技術實現思路
1、針對以上技術問題,本發明提供一種智能控制器的多傳感器接入與數據管理微架構系統。
2、本發明解決其技術問題采用的技術方案是:
3、一種智能控制器的多傳感器接入與數據管理微架構系統,包括通用處理模塊、配置文件解析模塊、應用程序接口模塊、抽象數據封裝模塊和工廠自動注冊模塊;
4、通用處理模塊用于支持系統初始化、單例模式和多類型數據處理;
5、配置文件解析模塊用于接收用戶配置指令對使用的傳感器進行針對性配置,將配置文件中的配置信息按照不同的功能或模塊進行組織,以傳遞傳感器的相關參數或者開啟相關功能;
6、應用程序接口模塊用于通過api函數對傳感器應用接口進行抽象,實現傳感器應用的開發;
7、抽象數據封裝模塊通過一種基于軟件定義的抽象數據封裝方法實現對同類型傳感器的數據格式的統一描述和封裝;
8、工廠自動注冊模塊使用抽象類累定義工廠的基本結構,通過模板方法來封裝工廠的創建過程。
9、優選地,通用處理模塊包括系統初始化模塊、單列模板模塊以及多類型支持模塊
10、系統初始化模塊定義了一個名為system的類,用于進行系統初始化操作,包括配置核心轉儲、獲取當前執行文件的路徑和創建log目錄;
11、單列模塊定義了一個名為singleton的c++類,用以創建各種類的單例;
12、多類型支持模塊定義了一個名為value的c++類,用于在處理不同類型的數據時提供通用性和靈活性,包括配置文件解析和參數傳遞。
13、優選地,配置文件為ini格式,是一種用于存儲和管理程序的屬性和特征的消息配置文檔,int格式的文件包括多個不同的段,每個段中包含多個鍵值對,以鍵值的形式來表示配置項;配置文件中的配置信息包括:
14、針對不同的傳感器定義不同的鍵值,在配置文件中,feature?configuration節用于配置中間件的相關功能,然后用戶定義具體的傳感器型號,在每個傳感器下都有相應的參數配置,具體傳感器的參數配置取決于用戶所使用的傳感器型號以及其特性。
15、優選地,api函數包括初始化接口函數int?smwinit(std::string?pathfile)、設備句柄獲取接口函數devhandle?getdevice()、設備打開接口函數intopendevice(devhandle?dev)、數據獲取接口函數int?getframedata(devhandle?dev,)和設備關閉接口int?closedevice(devhandle?dev);
16、int?smwinit(std::string?pathfile)用于初始化smwapi,通過接受一個名為pathfile的字符串參數,該函數允許開發者指定初始化所需的配置文件的路徑,初始化的結果通過一個整數值來表示,其中返回0代表初始化成功,而其他數值則反映了可能出現的錯誤或初始化失敗情況;
17、devhandle?getdevice()用于獲取指定名稱的設備的句柄,為后續的設備操作提供了便捷的接口;它接受一個name參數,通過接收一個字符指針類型的參數name,開發者指定要獲取的設備的名稱;根據所提供的設備名稱,該函數會查找并定位到對應的設備,并返回該設備的句柄,如果無法找到指定名稱的設備或設備不存在,函數會返回特定的錯誤值,以提示開發者相關情況。
18、int?opendevice(devhandle?dev)用于打開設備;接受一個dev的設備句柄參數,該句柄標識了要打開的設備,在函數內部,它會嘗試打開指定的設備,并根據操作的結果返回一個整數值,該值用于表示設備打開的狀態,返回0表示成功,其他值表示打開設備失敗;
19、int?getframedata(devhandle?dev,?)用于獲取設備的幀數據;它接受兩個參數,第一個參數是設備句柄,用于標識要獲取數據的設備,第二個參數是一個指向類型的引用,用于存儲從設備中獲取的一幀數據;在函數內部,它會從指定的設備中獲取一幀數據,并將獲取到的數據存儲在傳入的data容器中;
20、int?closedevice(devhandle?dev)用于關閉設備,接受一個dev參數,是設備句柄,用于標識要關閉的設備,該函數會關閉設備,并返回一個整數值,表示是否成功關閉設備。
21、優選地,抽象數據封裝模塊通過一種基于軟件定義的抽象數據封裝方法實現對同類型傳感器的數據格式的統一描述和封裝,包括:
22、一種基于軟件定義的抽象數據封裝方法將所有傳感器的數據格式都繼承自一個統一的基類database,包括設備類型、數據采集頻率、幀號id、時間戳和設備名稱;
23、針對不同種類的傳感器,自定義其相應的數據格式,并繼承自database,其中,數據格式包括用于統一描述慣性測量單元的數據imudata、用于統一描述位置傳感器的數據gpsdata、用于統一描述各類圖像傳感器的數據imagedata、用于統一描述單線雷達數據lidardata、用于統一描述力/力矩傳感器的數據powerdata。
24、優選地,工廠自動注冊模塊使用抽象類來定義工廠的基本結構,通過模板方法來封裝工廠的創建過程,包括:
25、設計一個通用的傳感器抽象類?sensordevice,用于定義所有傳感器對外提供的接口,抽象類包括四個虛函數,作為傳感器的基本接口;
26、引入抽象工廠模式,模式的核心是抽象工廠類abstractclassfactory,繼承自abstractclassfactorybase,具有兩個模板參數,一個模板參數代表具體傳感器的父類,另一個模板參數代表具體傳感器的子類,在抽象工廠父類abstractclassfactorybase中,定義了兩個接口函數,用于獲取傳入的父類模板名稱和子類模板名稱,在具體的抽象工廠類abstractclassfactory中,包含了一個名為createobj()的虛函數,此虛函數在具體的傳感器工廠類中將被重寫,用于創建并返回一個指向子類傳感器的父類指針;
27、定義一個注冊宏class_loader_register_class,這個宏在預處理階段接受具體傳感器子類和父類的名稱作為字符串參數,并用這些信息來創建傳感器工廠類,這些字符串參數被傳遞給createobj()函數,使其能夠在運行時動態地創建具體傳感器子類的對象;同時這些具體的工廠類會被保存在c++中的unordered_map類型的數據結構中,通過鍵值對的方式來進行索引。
28、優選地,四個虛函數包括傳感器初始化虛函數bool?initialize(std::string&configpath)、傳感器設備打開虛函數int?opendevice()、int?傳感器數據獲取虛函數getframedata()、傳感器設備關閉虛函數int?closedevice();
29、bool?initialize(std::string?&configpath)用于從指定的配置文件路徑configpath中讀取必要的參數和設置,并使用這些信息來進行傳感器的初始化;
30、int?opendevice()用于在傳感器被成功初始化后,打開傳感器設備并進行必要的設置,以確保傳感器處于工作狀態,必要的設置包括配置數據傳輸模式和其它與傳感器設備相關的參數;
31、int?getframedata()用于從傳感器中獲取一幀數據,并將其保存到傳入的數據數組中,這個數組使用了c++的標準容器vector,其中每個元素都存儲著指向database類型的指針;
32、int?closedevice()用于在傳感器操作完成后,關閉傳感器設備并釋放相關的資源。
33、優選地,還包括日志記錄器,用于在程序運行過程中輸出不同級別的日志信息到文件和控制臺。
34、上述一種智能控制器的多傳感器接入與數據管理微架構系統大幅簡化傳感器應用開發的繁瑣性。這一微架構系統源自軟件定義傳感器(software?defined?sensor,?sds)的概念,它將各種類型的傳感器的功能、屬性、參數等抽象為一個通用的軟件模型,同時設計了通用的數據結構,用于高效傳輸傳感器數據。
35、該多傳感器接入與數據管理微架構系統通過將不同類型的傳感器進行封裝,為每一種傳感器生成相應的sds對象,并提供標準化的接口和服務,從而實現了傳感器與控制器之間的高度透明化通信。此創新架構極大地簡化了傳感器應用的開發過程,使開發人員能夠更輕松地集成、操作和管理多樣性的傳感器設備,同時保持了系統的高度靈活性和可適應性。