我認為,對於ros::control的基本作用,就是把應用與實際機械人連線起來,包含一系列控制器介面、傳動裝置介面、硬體介面、控制器工具箱等等。
它的總體框架(如下圖),就是對應不同的控制器,提供不同的介面,但是這樣藉口不同,針對不同的介面寫不同的**實在太過於繁瑣,於是,它又自己建立了乙個硬體抽象層,提高**的復用率。
這裡的硬體抽象層可以理解為乙個接線員,你需要和什麼硬體取得聯絡(比如底盤,機械臂),你就跟他提(申請),他就可以讓你們之間的介面連上。這樣就避免了直接接觸硬體,提高**復用率。
上圖為ros::control 的資料流程圖,大概可以看出每一層的功能
其中controller manager和controller有些已經非常完善了,要寫的也就是robothw那一部分。
hardware_inte***ce: 作為ros_control 元件最重要的一部分,做了以下抽象
將能動的部分(類似於機械人關節)抽象為joint,joint 型別有旋轉,平動,固定等等,詳見urdf,joint有三個屬性,pose,velocity,effort,位置和速度好理解,effort 不同的joint型別有不同的含義,一般是力矩,力(語義比較混亂在各個不同派系的開源**中)。執行器模型抽象為actuator ,與joint不一樣的部分是actuator的屬性值需要一定變換才能對應到joint,可以理解為電機減速,或者機構傳動。
根據不同的控制方式或者不同的感測器暴露出相應的資料介面,一般移動機械人底盤是速度閉環,而機械臂上又是位置閉環,根據這些控制方式的不同分出了不同的控制介面,暴露給上層的controller。
作為機械人的硬體資源與上層的直接介面,可以被執行時產生與刪除,結合機械人本身的通訊元件這樣實際上實現了一種對機械人硬體資源的低層次管理。
而hardware_inte***ce 具體實現方式是儲存對應狀態變數的指標,用字串表示不同的joint與 actuator 資源。robothw 基類是 硬體通訊庫與hardware_inte***ce互動的部分。硬體通訊庫具體的讀寫過程都在read 與 write 兩個虛方法中實現,更新的資料放在robothw類的成員變數中,這些儲存著joint 與actuator 狀態與命令的空間被hardware_inte***ce索引,傳給controller_manager ,通過controller_manager的介面將資料接給controller。所以ros_control內部不存在程序間通訊。
新手對於c getchar 的重複使用
小白第一次寫部落格,勿噴。本人初學c,剛剛自學乙個月,經常努力刷題熟悉技巧 好想找個便宜師傅 刷到如下題時百思不得其解 include main 要求輸入 qwert?回車 求結果 答案為 vfsu q呢?經過一番猜測可能是c getchar 覆蓋了,但是找不到證據。最後終於在csdn裡面兩篇文章裡...
原創對於新手來說有點「蛋疼」
估計好多新人在學習seo以前,聽到的大多數人講的 seo很好做的,只要會開電腦就行。結果呢?好多人在剛學的時候,總是想在網上多學點有關seo的知識,但是花了幾天時間,認真看了幾個老師的教程,傻眼了 好多人把 zac老師的 seo實戰教學 講成神書,但是在一些新人看來,這些無非是天書。或者說,他在用他...
對於新手和熟手的一些想法
有些公司很喜歡招聘一些新手進公司,即使在與招熟手的代價相差不大的情況下。很大的乙個原因在於新手的可塑性及其服從性。在it行業,加班是很普遍的,而對於新手來說,尚在學習過程,在加班的過程中可以提高自己的技術以及相關工作能力,對加班的制度不會有太大的牴觸。這就給其他的同事起到帶頭模範作用。作為乙個熟手,...